Améliorer mon script de stats !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Améliorer mon script de stats !

par lacfab » 03 mai 2005, 09:18

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

par Doria » 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");
}

par Invité » 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 ...

par cerber » 29 avr. 2005, 09:35

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

par Cyrano » 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.

par lacfab » 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>";

par cerber » 28 avr. 2005, 12:00

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

par lacfab » 28 avr. 2005, 10:55

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

par cerber » 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)

Améliorer mon script de stats !

par lacfab » 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 !! :-)