IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Conditions pour un compteur [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut Conditions pour un compteur
    bonjour,
    je récupère l'adresse ip, le timestamp et l'addresse url que j'enregistre dans une table pour pouvoir faire un compteur du nombre de visite de chaque fiche article, voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    $retour = mysql_query('SELECT COUNT(_ip) AS nbre_entrees, _ip, _url FROM tmp_connectes WHERE _ip=\'' . $_SERVER['REMOTE_ADDR'] . '\' GROUP BY _ip') or die (mysql_error());
    $donnees = mysql_fetch_array($retour);
     
    if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
    {
        mysql_query('INSERT INTO tmp_connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ', \''.$_SERVER['REQUEST_URI'].'\')')or die(mysql_error());
     
    		$i=$nb_visite+1;
    		$sql_maj = "UPDATE tb_shirt SET nbvisite_shirt=".$i." WHERE id_shirt=$ids";
    		mysql_query($sql_maj) or die(mysql_error());
     
    }
    elseif($donnees['_ip']==$_SERVER['REMOTE_ADDR'] && $donnees['_url']==$_SERVER['REQUEST_URI']) // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
    {	
     
        mysql_query('UPDATE connectes SET _timestamp=' . time() . ', _url=\''.$_SERVER['REQUEST_URI'].'\' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
    }elseif($donnees['_ip']==$_SERVER['REMOTE_ADDR'] && $donnees['_url']!=$_SERVER['REQUEST_URI']){
     
    		$i=$nb_visite+1;
    		$sql_maj = "UPDATE tb_shirt SET nbvisite_shirt=".$i." WHERE id_shirt=$ids";
    		mysql_query($sql_maj) or die(mysql_error());
    }
    rééditer :
    le problème c'est qu' avec cette condition,si l'utilisateur revient sur la même page,le compteur sera incrémenté quand même, ... quelle doit être la bonne condition ?

  2. #2
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
    {
        //on ajoute l'ip dans la table, le timestamp  et l'url de la page
        // puis on incrémente le compteur (nombre de visite sur la page de l'article)
     	
    }
    elseif($donnees['_ip']==$_SERVER['REMOTE_ADDR'] && $donnees['_url']==$_SERVER['REQUEST_URI']) // L'ip se trouve déjà dans la table & l'url aussi
    {	
    	//je mets à jour seulement le timestamp
            // dans mon cas, sa ne sert à rien mais bon ...
    }elseif($donnees['_ip']==$_SERVER['REMOTE_ADDR'] && $donnees['_url']!=$_SERVER['REQUEST_URI'])//l'ip se trouve déjà  dans la table mais l'url est différent
    {
        //on ajoute l'ip dans la table, le timestamp  et l'url de la page
        // puis on incrémente le compteur (nombre de visite sur la page de l'article)
     
    }
    quoi qu'il en soit il incrémente toujours ... (il mais qui est 'il' ?lol php ? la condition ?)
    enfin bref ne devenons pas schizophrène -_-'
    quel doit être exactement la condition ?

  3. #3
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut
    à force d'enregistrer les adresses ip , l'url et le timestamp c'est pas génant ??
    mais bon d'un coté je m'enfou car c'est pour la soutenance que je passe le 20 septembre , mais pour info perso , j'aimerai savoir quel serai le meilleur moyen....
    ,
    _ip _timestamp _url

    127.0.0.1 1188813156 /akstore/fiche_shirt.php?id=0000001
    127.0.0.1 1188821356 /akstore/fiche_shirt.php?id=0000001
    127.0.0.1 1188821383 /akstore/fiche_shirt.php?id=0000001
    127.0.0.1 1188983533 /akstore/fiche_shirt.php?id=0000004
    127.0.0.1 1188983536 /akstore/fiche_shirt.php?id=0000004
    127.0.0.1 1188983561 /akstore/fiche_shirt.php?id=0000004
    127.0.0.1 1188983564 /akstore/fiche_shirt.php?id=0000004
    alors que j'ai fait la condition que si _ip & _url existe pas d'incrémentation & pas ajout dans la table mais il le fait quand même

  4. #4
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Affiches la requete que tu fais pour savoir si l'adresse est deja dans la base. Ensuite teste la dans phpmyadmin, il y a de fortes chances pour qu'il y ait un espace en trop par exemple ou une betiste de ce genre

  5. #5
    Membre éclairé Avatar de akara
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 299
    Par défaut
    Merci,
    je ne pensais pas que c'était un problème de requête !
    je me suis pris la tête avec le count(*) et le group by

    alors que cette simple reqête aurait suffit largement...

    'SELECT _ip, _url FROM tmp_connectes WHERE _ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'';

    merci


    //éditer, petite question :
    comment font en général les webmaster pour le compteur ?
    il faut effacer ce qu'il y a dans la tabe ? mais quand exactement

  6. #6
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 201
    Par défaut
    essaie d'utiliser un seul elseif... parce que tu te répètes ... dedans

    essaie ceci voir après le premier if:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if($donnees['_ip']==$_SERVER['REMOTE_ADDR'] && $donnees['_url']!=$_SERVER['REQUEST_URI']){
     
    		$i=$nb_visite+1;
    		$sql_maj = "UPDATE tb_shirt SET nbvisite_shirt=".$i." WHERE id_shirt=$ids";
    		mysql_query($sql_maj) or die(mysql_error());
    }else{
    mysql_query('UPDATE connectes SET _timestamp=' . time() . ', _url=\''.$_SERVER['REQUEST_URI'].'\' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2000] compteur et condition pour sélectionner les cases d'un tableau
    Par Rrrroh dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/08/2010, 20h04
  2. Conditions pour remplissage d'un Formulaire
    Par budiste dans le forum Langage
    Réponses: 6
    Dernier message: 15/12/2005, 15h36
  3. [VBA-A] Condition pour boucle if
    Par ptitegrenouille dans le forum Access
    Réponses: 6
    Dernier message: 23/11/2005, 09h33
  4. Condition pour l'affichage d'une boite de message
    Par Virgile59 dans le forum Access
    Réponses: 19
    Dernier message: 05/10/2005, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo