Récuperer valeur d'une table à une heure précise ?

Eléphanteau du PHP | 13 Messages

06 août 2007, 13:16

Salut,

J'ai un compteur de visite : http://persol.free.fr/compteur_visite/
Et j'aimerais ajouter les visiteurs de la veille à ce compteur.

Ainsi je me demandais s'il était possible de récupérer la valeur des "visiteurs d'aujourd'hui" à 0h00, et ensuite, d'introduire cette valeur dans une autre colonne de ma table : "visiteurs d'hier".

Auriez vous des suggestions sur ma requête ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 août 2007, 13:54

Si tu as un champ datetime ou timestamp dans ta table, c'est tout à fait possible. Il suffit de spécifier dans la clause WHERE de ta requête les dates et heures sur lesquelles tu souhaites filtrer les résultats :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 13 Messages

06 août 2007, 16:23

merci pour cette info =)

j'ai donc comme tu me l'as indiqué utilisé le timestamp etc. Mon code donne cela
$date_d_hier = strtotime("day -1"); 
$query2 = mysql_query ("SELECT COUNT(*) AS total FROM dp_utilisater WHERE timestamp='$date_d_hier' ")

$yesterday =  mysql_num_rows($query2);
[EDIT] petite erreur, la colonne timestamp n'existait pas, je l'avais renommé en lastquerytime. Erreur corrigée en $query2 = mysql_query ("SELECT COUNT(*) AS total FROM dp_utilisater WHERE lastquerytime='$date_d_hier' ")
Modifié en dernier par Tyrese le 06 août 2007, 16:32, modifié 2 fois.

d0m
Mammouth du PHP | 1141 Messages

06 août 2007, 16:28

es tu sur que ta requete SQL abouti?
rajoute voir le message d'erreur :
$query2 = mysql_query ("SELECT COUNT(*) AS total FROM dp_utilisater WHERE timestamp='$date_d_hier' ") or die('erreur de requete : ' . mysql_error()); 

Eléphanteau du PHP | 13 Messages

06 août 2007, 16:29

justement j'ai fait une erreur dans ma colonne, j'ai rectifié le probleme mais je souhaiterais qu'lon m'éclaire sur le résultat de mon code, est il bon en sachant que mon lastquerytime est l'heure à laquelle la personne se connecte et non une date.

d0m
Mammouth du PHP | 1141 Messages

06 août 2007, 16:32

c'est c'est la date au format timestamp ton code n'est pas bon car chaque date dans ce format est précise à la seconde près.
En faisant une vérification sur l'égalité de la date de hier, tu seulement prendre les résultats de la date de hier à 0:00:00.
Il faut prendre les dates comprises entre hier 0:00:00 et hier 23:59:59

Eléphanteau du PHP | 13 Messages

06 août 2007, 16:50

Ok je vois.

Alors dans ce cas là voilà mon interrogation. Je poste le code et j'argumente ensuite =)

Le code actuel pour récupérer les visiteurs de la veille (erroné) + les connectés de moins de 5 minutes :
$date_d_hier = strtotime("day -1"); 
$query2 = mysql_query ("SELECT COUNT(*) AS total FROM dp_utilisater WHERE lastquerytime='$date_d_hier' "); or die('erreur de requete : ' . mysql_error()); 

$yesterday =  mysql_num_rows($query2);

$fiveminago = time() - 5 * 60;
$query1="SELECT pseudo FROM dp_utilisater WHERE lastquerytime>'$fiveminago'"; //Tous ceux qui ont fait un truc y a moins de 5min
$result = mysql_query($query1);
while ($row = mysql_fetch_array($result)) //Tant qu'on a des noms
{
 echo $row[0]."<br>"; //On les affiche
}
et voici le code qui m'enregistre l'heure des utilisateurs qui se log
  $lastquerytime = time(); //Il a exécuté ce code MAINTENANT
  $query1 = "UPDATE dp_utilisater SET lastquerytime='$lastquerytime' WHERE pseudo='$pseudo'"; //On l'écrit dans la table
  mysql_query($query1);
Par rapport à ce que tu m'as, dois je modifier $lastquerytime = time(); par $lastquerytime = strftime() ?
Cependant si ça marche, il ne me restera qu'à modifier la ligne:
- $fiveminago = time() - 5 * 60;
- $date_d_hier = strtotime("day -1");

(je vois pas comment mais je chercherais si mon premier raisonnement est bon :p)

Désolé pour toutes ces interrogations mais il est sur que je débute et j'apprends sur le tas les différentes fonctions, et à chaque erreur j'en apprends un peu plus

Eléphanteau du PHP | 13 Messages

08 août 2007, 13:24

J'ai réfléchis à tout ce code et il y a un probleme :)

En effet, ce code :

Code : Tout sélectionner

$query2 = mysql_query ("SELECT COUNT(*) FROM dp_utilisater WHERE lastquerytime='$date_d_hier' ") or die('Erreur SQL : ' . mysql_error());
récupère les utilisateurs s'étant connectés la veille afin d'obtenir leur nombre.
Donc quand l'utilisateur se reconnectera, son "lastquerytime" sera de nouveau mis à jour et ainsi la valeur des "connectés d'hier" sera faussée.

N'y-a-t'il pas possiblité de récupérer le nombre de connectés d'aujourd'hui (à 23h59), de le stocker quelque part, et en faire la valeur des connectés d'hier à 0h00 ?

d0m
Mammouth du PHP | 1141 Messages

08 août 2007, 13:33

pourquoi pas une table des connections avec comme champs :
- le pseudo
- la date (timestamp) de connection

cette table contiendrait toutes les connections (pas seulement la dernière).

et si tu ne veux pas quelle prenne trop de place tu crée un script qui efface tous les jours à minuit les lignes qui sont antérieur à hier.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 août 2007, 13:37

Tant qu'à faire une nouvelle table, si tout ce qu'il souhaite c'est de connaitre le nombre de visiteurs, autant en faire une juste avec la date et le nombre de connexion du jour, que tu incrémentes à chaque fois que quelqu'un se connecte... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...