Tom's Guide > Forum > Programmation > compteur de visite qui deconne [resolu]

compteur de visite qui deconne [resolu]

Forum Programmation : compteur de visite qui deconne [resolu]

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

bonsoir tous le monde

j'ai un petit probleme: voila ce script si dessous fonctionne bien en local mais en ligne il ne marche pas

c'est un script visant a compté le nombre totale de visiteur depuis la creation du site

j'explique:en local pas de souci si la derniere actualisation de page date de moins d'une heure le visiteur n'est pas compté comme nouveau visiteur mais en ligne c'est pas trop ca a chaque actualistaion de page le visiteur et compté comme nouveau visiteur c'est a ne rien n'y comprendre

EDIT: j'ajouterais que le visiteur actualise son ip est ajouté deux fois et si il va sur une autre page 1 fois seulment

Code :
  1. <?php
  2. // Connexion à MySQL
  3. mysql_connect("localhost", "root", "" );
  4. mysql_select_db("test" );
  5. // -------
  6. // ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table en comptant combien de fois l'ip du visiteur apparait
  7. $retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
  8. $donnees = mysql_fetch_array($retour);
  9. if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
  10. {
  11.     ('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
  12. }
  13. else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
  14. $reponse = mysql_query("SELECT * FROM connectes" );
  15. $donneesDeLaBDD = mysql_fetch_array($reponse);
  16. {
  17. // On stocke dans une variable le timestamp qu'il était il y a 60 minutes
  18. $timestamp_60min = time() - (60*60); // 60 * 60 = nombre de secondes écoulées en 1 heure
  19.     if ($donneesDeLaBDD['timestamp'] >= $timestamp_60min)//si le timestamp de la derniere visite > que le timestamp il y 1 heure
  20.     {
  21.     //on met a jour tous les timestamps du visiteurs (faute de mieux)
  22.         mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip="'.$_SERVER['REMOTE_ADDR'].'"');
  23.     }
  24.     else//sinon si ce n'est pas le cas
  25.     {
  26.     //on crée une nouvelle entrée avec l'ip du visiteur (le visiteur peut donc avoir plusieur fois son ip dans la BDD)
  27.         mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
  28.     }
  29. }
  30. // ETAPE 2 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs qui ont vu le site
  31. $retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
  32. $donneesEtape2 = mysql_fetch_array($retour);
  33. echo '<p>Vous êtes le ' . $donneesEtape2['nbre_entrees'] . 'ème visiteur!</p>';
  34. ?>



merci a ceux qui pourront m'aider

Message cité 1 fois
Message édité par aravis@IDN le 13-11-2006 à 21:52:07
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

ca fait longtemps que j'ai pas utilisé mysql mais je crois que la valeur d'un timestamp s'affiche "annee-mois-jour heure", donc:

Code :
  1. if ($donneesDeLaBDD['timestamp'] >= $timestamp_60min)


est une comparaison entre chaîne, le résultat n'est pas celui attendu, il te faut modifier l'une des deux variables (php/mysql) et revoir ta comparaison dans le if.

Répondre à coca25

non, c'est le date-time qui est de format "Y-m-d H:i:s", le timestamp est du format "YmdHis" qui diffère sacrément de l'unixtimestamp généré par time().

------------------------------ Réseau IRC Francophone | g33k-zone
Défiez-moi donc !
Répondre à crazycat@idn

crazycat: on peut inserer un timestamp ou une datetime sous mysql avec plusieurs format dont "YmdHis" mais l'affichage (YYYY-MM-DD HH:MI:SS) est le même quelque soit le type datetime/timestamp en tout cas pour les versions > 4.1 (mais je crois que c'est le cas avant aussi)

EDIT: en tout cas si on modifie pas la config


Message édité par coca25 le 13-11-2006 à 11:49:22
Répondre à coca25

il y a 95% de chances pour que l'utilisateur lambda n'ait pas accès à la config, donc il vaut mieux utiliser les systèmes génériques.
Sinon, je ne vois pas l'intérêt d'avoir des types de champs différents.

------------------------------ Réseau IRC Francophone | g33k-zone
Défiez-moi donc !
Répondre à crazycat@idn

c'est pour ca que j'ai dit que l'affichage d'un timestamp est "YYYY-MM-DD HH:MI:SS" et non "YmdHis" et encore moins une valeur numérique correspondant au secondes

Répondre à coca25

heu -_-" un timestamps c'est un nombre tout con de 11 chiffres (a l'heure actuelle ) et le probleme n'est pas de savoir dans quelle format ecrire la date

tous ceci ne m'aide guere et puis ce script fonctionne en local danc a prioris pas de souci au niveau timestamp mais ligne voila...ca deconne sec

Répondre à aravis@IDN

mets un

Code :
  1. echo $donneesDeLaBDD['timestamp'];


et

Code :
  1. echo $timestamp_60min;


et tu verras pourquoi ca marche pas, et je serais curieux de voir le résultat des echos

Répondre à coca25

aravis@IDN a écrit :

Code :
  1. <?php
  2. }
  3. else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
  4. $reponse = mysql_query("SELECT * FROM connectes" );
  5. $donneesDeLaBDD = mysql_fetch_array($reponse);
  6. {

merci a ceux qui pourront m'aider


ton else ne fait que le mysql_query()... ton accolade s'ouvre n'importe ou...
Quand on recopie, on fait attention :)

------------------------------ Réseau IRC Francophone | g33k-zone
Défiez-moi donc !
Répondre à crazycat@idn

je suis vexé c'est moi qui l'ai fait tous seul ce truc (en m'inspirant d'ailleurs c'est vrai mais tous seul quand meme )

bon j'ai changé en

Code :
  1. else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
  2. {
  3. $reponse = mysql_query("SELECT * FROM connectes" );
  4. $donneesDeLaBDD = mysql_fetch_array($reponse);



mais ca ne change strictement rien au probleme ou alors j'ai mal compris ce que tu m'as dit ce qui est possible

Message cité 1 fois
Message édité par aravis@IDN le 13-11-2006 à 18:17:17
Répondre à aravis@IDN

$reponse = mysql_query("SELECT * FROM connectes" );

il faut rajouter la condition where ip=...

Répondre à coca25

aravis@IDN a écrit :

heu -_-" un timestamps c'est un nombre tout con de 11 chiffres (a l'heure actuelle ) et le probleme n'est pas de savoir dans quelle format ecrire la date



je viens de relire ce post, appeler une colonne avec le nom d'un type, je savais pas que c'etait possible mais bon...

Répondre à coca25

Citation :

$reponse = mysql_query("SELECT * FROM connectes" );

il faut rajouter la condition where ip=...



là ca a l'air de marcher je ne m'avance pas trop mais au moins ca n'ajoute pas de visiteur a chaque actualistation et ca met a jour le timestamps

Citation :

mets un

Code :
  1. 1. echo $donneesDeLaBDD['timestamp'];




et

Code :
  1. 1. echo $timestamp_60min;




1163436474
1163440073

donc a priori mes variable sont bonne ^^

Citation :

je viens de relire ce post, appeler une colonne avec le nom d'un type, je savais pas que c'etait possible mais bon...


heu je croi pas avoir dit que je voulais faire ca ?!? enfin bon... c'est pas grave


Message édité par aravis@IDN le 13-11-2006 à 19:01:17
Répondre à aravis@IDN

oui mais j'étais parti sur une autre voie, le nom timestamp m'avait induit en erreur, mais si ca marche tant mieux pour toi :)

Répondre à coca25

aravis@IDN a écrit :

je suis vexé c'est moi qui l'ai fait tous seul ce truc (en m'inspirant d'ailleurs c'est vrai mais tous seul quand meme )


Lol, je ne voulais pas dire que tu avais copié le script sur un autre, juste que tu t'es planté en faisant une modif sur ton code (collé une partie au mauvais endroit).

Sinon, je t'avoues que je ne vois pas ce qui foire, je te conseille de faire un affichage de debug après chaque if() { et chaque else { histoire que l'on sache où tu passes exactement.

Et aussi un echo de tes requètes SQL, il y en a peut-être une de faussée.


------------------------------ Réseau IRC Francophone | g33k-zone
Défiez-moi donc !
Répondre à crazycat@idn

c'est bon crazy cat coca25 a trouvé le probleme merci quand merci et merci aux autres

Citation :


$reponse = mysql_query("SELECT * FROM connectes" );

il faut rajouter la condition where ip=...



ca marche maintenant

Répondre à aravis@IDN
Tom's Guide > Forum > Programmation > compteur de visite qui deconne [resolu]
Aller à :

Il y a 3187 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens