Records de connectés

Petit nouveau ! | 5 Messages

28 juin 2006, 19:50

Salut a tous!
je suis en train de faire une sorte de page "statistiques" sur mon site.
J'aimerais y mettre le nombre record de connecté sur le site.
J'ai déja un script de visiteurs en ligne:
<?php
// Connexion à MySQL
mysql_connect("localhost", "root", "");
mysql_select_db("scripts");

// -------
// ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse ip du visiteur
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$donnees = mysql_fetch_array($retour);

if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
    mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
{
    mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}

// -------
// ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes

// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);

// -------
// ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
$donnees = mysql_fetch_array($retour);

if($donnees['nbre_entrees'] <= 1)
print "<b>" .$donnees['nbre_entrees']."</b> personne connectée";

// si il y a plus d'une personne connectées
else
print "<b>" .$donnees['nbre_entrees']."</b> personnes connectées";
?>

Merci d'avance.

Eléphanteau du PHP | 22 Messages

28 juin 2006, 20:24

Faut te le faire à ta place? :P


Allez cherche un peux stp :)

Pose nous tes questions quand tu butte sur ce que tu as fait et mets nous tes essais de codes :)

Petit nouveau ! | 5 Messages

28 juin 2006, 20:25

bah j'y connais vraiment vraiment rien :D

Eléphant du PHP | 95 Messages

29 juin 2006, 10:02

tu peux toujours regarder du coté des scripts a dispositions sur le net, style www.phpscripts-fr.net par exemple, ou d'autres, sur google...

Eléphanteau du PHP | 22 Messages

29 juin 2006, 11:03

Pour t'aider quand même un peux,
Quand tu auras etudié un peux sans te mettre de code :P

Tu peux directement travailler avec ta variable
$donnees['nbre_entrees']
Donc, tu peux initialisé une variable count à "0"
et dire dans une boucle que si variable
$donnees['nbre_entrees']
est plus grande que count alors
donné a count la valeur de
$donnees['nbre_entrees']
Puis afficher count
Comme tout en bas de ton script

Donc tu sais déjà que tu peux bosser direct sur ton script :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

29 juin 2006, 13:06

puisque dans la table des connectés t'as un timestamp tu peux te baser dessus pour calculer le nombre max de connectés par jour ou par mois ...

La requête qui calcule un max selon un critère de regroupement est la suivante:
Exemple:
Calculer le nombre par mois et par jour des commandes
enregistrées dans la table : commande (numéro, date, client)

Code : Tout sélectionner

SELECT Month(date) as mois, Day(date) as jour, count(numero) as nb_commandes FROM commande GROUP BY Month(date), Day(date)
Après on pourra utiliser le résultat pour représenter des statistiques (determiner un max, un min, une moyenne, un comparatif, une variation ...)
Exemple : calculer le max des nombres par mois trouvés par la première requête :

Code : Tout sélectionner

SELECT sr1.mois, max( sr1.nb_commandes ) AS max_commandes FROM ( SELECT Month( date ) AS mois, Day( date ) AS jour, count( numero ) AS nb_commandes FROM commande GROUP BY Month( date ) , Day( date ) ) AS sr1 GROUP BY sr1.mois
C'est une requête qui contient une sous-requête (sr1) imbriquée (supportée par mysql 4.1 et +)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène