Se connecter avec
S'enregistrer | Connectez-vous

compteur de visite qui deconne [resolu]

Dernière réponse : dans Programmation

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

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


merci a ceux qui pourront m'aider

Autres pages sur : compteur visite deconne resolu

Lassé par la pub ? Créez un compte

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:
  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.

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

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

aravis@IDN a dit :
  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 :) 

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

  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

aravis@IDN a dit :
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...

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
  1. 1. echo $donneesDeLaBDD['timestamp'];



et
  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

aravis@IDN a dit :
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.


Lassé par la pub ? Créez un compte
Tom's guide dans le monde