Améliorer mon script de stats !

lacfab
Invité n'ayant pas de compte PHPfrance

27 avr. 2005, 20:02

Salut !

J'ai ma page de stats qui affiche jour par jour la fréquentation de mon site :
http://www.aucirque.com/1_stats.php

Maintenant, je voudrais qu'en cliquant sur une date, qu'une autre page s'affiche avec un tableau du même genre, mais heure par heure du jour que j'ai cliqué.
J'utilise un timestamp pour ma base.

J'ai essayé plusieurs trucs mais rien ne marche.

Merci de vos conseils

PS : si y a des portions de scripts là dessus je suis preneur !! :-)

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

28 avr. 2005, 10:19

J'ai peut être completement raté le probleme, mais j' vois pas où il est :oops:
Si tu a réuissi à groupper par jours, rien ne t'empeche de grouper par heure WHERE jours = j (ou pour un timestamp un interval plutot)

lacfab
Invité n'ayant pas de compte PHPfrance

28 avr. 2005, 10:55

oui mais pour séparer les heures ?? je fais comment ??

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

28 avr. 2005, 12:00

ben comment t'as fait pour séparer les jours ?

lacfab
Invité n'ayant pas de compte PHPfrance

29 avr. 2005, 06:18

$date =date("d/m/y");
$i = 1;
$req1 = mysql_query("SELECT `jourdate`,COUNT(jourdate) FROM `jour` GROUP BY `jourdate` DESC")  
        or die ('ERREUR B<br>'. mysql_error());
echo("<table border=0 class=texte cellspacing=1 cellpadding=1><tr>");
while ( $resultat = mysql_fetch_array($req1)){
        $req2 = mysql_query("SELECT count(id) FROM `jour` WHERE jourdate='$date' GROUP BY `id`")
                or die ('ERREUR C<br>'. mysql_error());
        $jour1 = mysql_num_rows($req2);
        $aaa = $jour1*1;
        echo "<td valign=top><table border=0 class=texte valign=center cellspacing=0 cellpadding=0>";
        echo "<tr><td><center><font size=1>".$resultat['jourdate'];
        echo "</font></td></tr><tr><td><center><b>".$jour1." </b></td></tr>\n";
        echo "<tr><td valign=top><center><img src='graphs/stats1.gif' width='35' ";
        echo "height='".$aaa."'></td></tr></table></td>";
        $date =(date("d")-$i).(date("/m/y"));
        $i++;
}
echo "</tr></table>";

Mammouth du PHP | 19672 Messages

29 avr. 2005, 08:07

Salut,
je dirais que tu as un gros problème sur les bras: dans ta base, on dirait que tu as mis un champ DATE au lieu d'un DATETIME, tu n'as donc que les jours mais pas les heures. Donc pour récupérer aussi par tranche horaire, au lieu de changer le type de champ, rajoutes-en un de type TIME et fais le même processus que tu utilises pour les jours. N'oublie pas de modifier toutes tes requêtes pour tenir compte de ce nouveau champ.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

29 avr. 2005, 09:35

Donne voir la structure de ta base : certaines de tes requêtes me semblent étranges ...

Invité
Invité n'ayant pas de compte PHPfrance

02 mai 2005, 06:23

CREATE TABLE `jour` (
`id` int(11) NOT NULL auto_increment,
`jourdate` text NOT NULL,
`jourhor` text,
`jourip` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;

INSERT INTO `jour` VALUES (3242, '02/05/05', '1115007291', '83.194.0.69');


J'avais mis timestamp à jourdate mais ilme foutait 000000000 alors j'ai remis text
Par contre si ttu vas voir ma page de stats, tout est parti en couille avec le changement de mois ... l'ordre des dates ... et tout est à 0 alors que la base à pas bronchée !

SNif ...

Eléphanteau du PHP | 14 Messages

02 mai 2005, 22:04

Bon je ne sais pas si ça peut réellement t'aider dans le futur mais je ne sais pas si tu as tenu ça en compte:

DATE est enregistré dans la bdd sous la forme AAAA-MM-JJ

Donc quand tu insères la date d'aujourd'hui tu dois faire mettre comme valeur now() dans ta requete, parce que si tu mets par exemple 02/05/2005, ça passera jamais, il va te mettre 0000-00-00

Bon maintenant pour récupérer ta date sous le format classic jj/mm/aaaa tu fais ça :
date("d/m/Y",strtotime($champ_date_dans_bdd))
Ensuite, quand tu fais un group by id, ben il va jamais te grouper, à moins que tes id ne soient pas pareil mais généralement c'est un autoincrement.

moi perso, premièrement je mettrais un champ "date" en datetime pour avoir les la date et le temps dans un même champ.Pour récupérer des stat, je ferais plutot un truc du genre :

Pour faire un compte des enregistrements sur la date :
SELECT count( id ) , date
FROM jour
GROUP BY date
 
Bon alors il va te renvoyer la date au format aaaa-mm-jj hh:mm:ss
Pour la transformer au format jj/mm/aaaa, tu fais
date("d/m/Y",strtotime($champ_date))
Alors tu veux aussi qu'il te fasse le groupement sur la date sur laquelle on click, donc un groupement sur un certain jour, un certain mois et une certaine année :
SELECT count( id ) ,  hour(date)
FROM  jour 
where dayofmonth(date)=ton_jour
and month(date)=ton_mois
and year(date)=ton_annee
group by hour(date)
order by order(date)
Voilà, j'espère que ça t'aidera ^^
Sinon voici trois fonctions dont je me sert souvent qd je code :
//jj/mm/aaaa --> aaaa-mm-jj : sert à insérer dans la base
function datein($d){
$j=substr($d,0,2);
$m=substr($d,3,2);
$a=substr($d,6,4);
$datesql=$a.'-'.$m.'-'.$j;
return $datesql;
}
//aaaa-mm-jj --> jj/mm/aaaa : transforme la format de la base
function dateout($d){
return date("d/m/Y",strtotime($d));
}
//date actuelle au format jj/mm/aaaa
function today(){
return date("d/m/Y");
}
Modifié en dernier par Doria le 03 mai 2005, 16:18, modifié 1 fois.
Doria

lacfab
Invité n'ayant pas de compte PHPfrance

03 mai 2005, 09:18

Merci je vais essayer de bricoler avec ça :-)