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 :

Problème de création d'un compteur.


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 50
    Points : 37
    Points
    37
    Par défaut Problème de création d'un compteur.
    Bonjour...

    J'esaie de créer mon propre compteur mais je rencontre des difficultés. Merci d'avance pour ceux et celles qui pourront m'aider.

    Le script que j'essaie de réaliser comptera le nombre total de visiteurs ainsi que le nombre de visites au cours des 24 dernières heures.

    J'ai créer 3 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    compteur           : compteur     : int(6)
     
    compteur_visiteurs : total        : int(4)
                         no_ip        : char(30)
                         derniere     : int(12)
     
    compteur_24heures  : no_ip_24h    : char(30)
                         derniere_24h : int(12)
    Et voici le code créé en Php...
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    <?
     
    // Inclusion du fichier de connexion à la base de données MySql //
    include ("connect.inc.php");
     
    // Récupération du temps actuel avec la fonction time //
    $temps = time();
    $effacement = $temps - 84600;
     
    // Connexion au serveur et à la base de données MySql // 
    @mysql_connect ($serveur, $utilisateur, $motdepasse)
               or die ("Connexion au serveur impossible");
    @mysql_select_db ($base)
               or die ("Connexion à la base impossible");
     
    // Récupération de l'adresse IP du visiteur //
    $no_ip="$_SERVER[REMOTE_ADDR]";
     
    // Vérification du numéro IP dans la table des visiteurs //
    $select = "SELECT * FROM compteur_visiteurs
                        WHERE no_ip = '$no_ip'";
    $result = mysql_query ($select);
    $valeur = mysql_num_rows ($result);
    $difference = ($temps - $result['derniere']);
     
    // Test le visiteur est déjà venu //
    if ($valeur = 1) // il est déjà venu //
     { if ($difference > 3600) // il y a plus d'une heure //
        { $update = "UPDATE compteur_visiteur SET (total = total + 1), (derniere = $temps)
                                              WHERE no_ip = '$no_ip'";
          $result = mysql_query ($update);
          $insert = "INSERT INTO compteur_24heures (no_ip_24h, derniere_24h)
                                              VALUES ($no_ip, $temps)";
          $result = mysql_query ($insert);
          $update = "UPDATE compteur SET (compteur = compteur + 1)";
          $result = mysql_query ($update);
        }
     }
    else // il n'est jamais venu //
     { $insert = "INSERT INTO compteur_visiteurs (total, no_ip, derniere)
                                              VALUES (1, $no_ip, $temps)";
       $result = mysql_query ($insert);
       $insert = "INSERT INTO compteur_24heures (no_ip_24h, derniere_24h)
                                              VALUES ($no_ip, $temps)";
       $result = mysql_query ($insert);
       $update = "UPDATE compteur SET (compteur = compteur + 1)";
       $result = mysql_query ($update);
     }
     
    // On efface les enregistrements trop ancien dans la quota des 24 heures //
    $delete = "DELETE * FROM compteur_24heures
                        WHERE derniere_24h < '$effacement'";
    $result = mysql_query ($delete);
     
    // Comptage des enregistrements restants //
    $select = "SELECT * FROM compteur_24heures";
    $result = mysql_query ($select);
    $vis24h = mysql_num_rows ($result);
    $vis24h = sprintf ("%02s", $vis24h);
     
    // Relevé du compteur total //
    $select = "SELECT total FROM compteur";
    $result = mysql_query ($select);
    $compte = mysql_num_rows ($result);
    $compte = sprintf ("%06s", $compte);
     
    // Mise en  image du total des visiteurs //
    $compte=str_replace("0","<img src='compteur/img_cpt/nike0.png'>",$compte);
    $compte=str_replace("1","<img src='compteur/img_cpt/nike1.png'>",$compte);
    $compte=str_replace("2","<img src='compteur/img_cpt/nike2.png'>",$compte);
    $compte=str_replace("3","<img src='compteur/img_cpt/nike3.png'>",$compte);
    $compte=str_replace("4","<img src='compteur/img_cpt/nike4.png'>",$compte);
    $compte=str_replace("5","<img src='compteur/img_cpt/nike5.png'>",$compte);
    $compte=str_replace("6","<img src='compteur/img_cpt/nike6.png'>",$compte);
    $compte=str_replace("7","<img src='compteur/img_cpt/nike7.png'>",$compte);
    $compte=str_replace("8","<img src='compteur/img_cpt/nike8.png'>",$compte);
    $compte=str_replace("9","<img src='compteur/img_cpt/nike9.png'>",$compte);
    echo "$compte<br>";
     
    // Test si il y a plus de 1 visiteur sur les 24 dernières heures //
    if ($vis24h > 1) { $s="s"; } else { $s=""; }
     
    // Mise en  image du total des visiteurs sur les dernières 24 heures //
    $vis24h=str_replace("0","<img src='compteur/img_cpt/0.png'>",$vis24h);
    $vis24h=str_replace("1","<img src='compteur/img_cpt/1.png'>",$vis24h);
    $vis24h=str_replace("2","<img src='compteur/img_cpt/2.png'>",$vis24h);
    $vis24h=str_replace("3","<img src='compteur/img_cpt/3.png'>",$vis24h);
    $vis24h=str_replace("4","<img src='compteur/img_cpt/4.png'>",$vis24h);
    $vis24h=str_replace("5","<img src='compteur/img_cpt/5.png'>",$vis24h);
    $vis24h=str_replace("6","<img src='compteur/img_cpt/6.png'>",$vis24h);
    $vis24h=str_replace("7","<img src='compteur/img_cpt/7.png'>",$vis24h);
    $vis24h=str_replace("8","<img src='compteur/img_cpt/8.png'>",$vis24h);
    $vis24h=str_replace("9","<img src='compteur/img_cpt/9.png'>",$vis24h);
    echo "$vis24h visites en 24 heures.<br>";
     
    // Déconnexion au serveur et à la base de données MySql //
    mysql_close();
     
    ?>
    Le script se passe bien mais les tables ne sont ni "inserées" ni "updatées"...
    L'erreur vient probablement d'une bétise mais je ne la vois pas...

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    salut,

    attention avec $no_ip, la variable REMOTE_ADDR n'est pas forcément envoyé par le navigateur, donc tu risque de faire un erreur lors de la requête, il vaudrait mieux l'initialiser avec une chaine vide avant, au cas ou...

    je vois des incohérences dans ton code, tu fais un select avec comme critère dans la requête :
    WHERE no_ip = '$no_ip'
    on en déduit donc que $no_ip est une chaine de caractères (normal REMOTE_ADDR est un string)

    alors pourquoi cherches-tu à l'insérer comme un integer après ?
    INSERT INTO compteur_24heures (no_ip_24h, derniere_24h) VALUES ($no_ip, $temps)
    je pense qu'il manque les quotes...

    ensuite tu fais un test ici :
    if ($valeur = 1)
    qui sera toujours vrai... ce serait mieux si c'était :
    if ($valeur == 1)
    et encore mieux dans ton cas :
    if ($valeur > 0)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Un grand merci...

    Les tables sont mises à jour sauf que je n'ai toujours pas d'incrémentation lors de...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          $update = "UPDATE compteur SET (compteur = compteur + 1)"; 
          $result = mysql_query ($update);
    De même, lors du test suivant, ce qui suit le "if" est exécuté même si la condition n'est pas remplie...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ($difference > 3600) // il y a plus d'une heure // 
     { $update = "UPDATE compteur_visiteur SET (total = total + 1), (derniere = $temps) 
                                           WHERE no_ip = '$no_ip'"; 
       $result = mysql_query ($update); 
       $insert = "INSERT INTO compteur_24heures (no_ip_24h, derniere_24h) 
                                           VALUES ('$no_ip', $temps)"; 
       $result = mysql_query ($insert); 
       $update = "UPDATE compteur SET (compteur = compteur + 1)"; 
       $result = mysql_query ($update); 
     }
    Et de ce fait, les tables sont mises à jour alors qu'elle ne le devraient pas...

    L'erreur vient peut-être d'une mauvaisesattribution des types de variables...

    Merci d'avance...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Après le rajout de balises "echo" de contrôle, j'ai les résultats suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $temps      = 1141341005
    $effacement = 1141333805
    $no_ip      = 127.0.0.1
    $difference = 30229894
    $requete    = Resource id #7
    $donnee     = 1111111111
    $total      = 1
    $total      = 1
     
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\justrunit\fabreizhad\compteur\compteurs.php on line 67
    Avec le code modifier comme suit :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    <?
     
    // Inclusion du fichier de connexion à la base de données MySql //
    include ("connect.inc.php");
     
    // Récupération du temps actuel avec la fonction time //
    $temps = time();
    echo '$temps = '.$temps."<br>"; // juste pour vérifier la valeur //
    $effacement = $temps - 7200;
    echo '$effacement = '.$effacement."<br>"; // juste pour vérifier la valeur //
     
    // Connexion au serveur et à la base de données MySql // 
    @MYSQL_CONNECT ($serveur, $utilisateur, $motdepasse) or die ("Connexion au serveur $utilisateur impossible");
    @MYSQL_SELECT_DB ($base) or die ("Connexion à la base $base impossible");
     
    // Récupération de l'adresse IP du visiteur ////
    $no_ip ="";
    $no_ip="$_SERVER[REMOTE_ADDR]";
    echo '$no_ip = '.$no_ip."<br>"; // juste pour vérifier la valeur //
     
    // Vérification de la présente du visiteur dans la table //
    $requete = mysql_query ("SELECT * FROM compteur_visiteurs
                                      WHERE no_ip = '$no_ip'");
    $donnee = mysql_fetch_array ($requete);
    $valeur = mysql_num_rows ($requete);
    $difference = ($temps - $donnee['derniere']);
    $total = $donnee['total'];
    echo '$diff. = '.$difference."<br>";
    echo '$requete = '.$requete."<br>";
    echo '$donnee = '.$donnee['derniere']."<br>";
    echo '$total = '.$donnee['total']."<br>";
    $total = $total + 1;
    echo '$total = '.$donnee['total']."<br>";
     
    // Test le visiteur est déjà venu //
    if ($valeur > 0) // il est déjà venu //
       {  if ($difference > 3600) // il y a plus d'une heure //
             {  $requete = mysql_query ("UPDATE compteur_visiteur SET (total = $total), (derniere = $temps)
                                                                  WHERE no_ip = '$no_ip'");
                $requete = mysql_query ("INSERT INTO compteur_24heures (no_ip_24h, derniere_24h)
                                                                VALUES ('$no_ip', $temps)");
                $requete = mysql_query ("UPDATE compteur SET compteur = (compteur + 1)
                                                         WHERE key = 1");
             }
       }
    else // il n'est jamais venu //
       {  $requete = mysql_query ("INSERT INTO compteur_visiteurs (total, no_ip, derniere)
                                                           VALUES (1, '$no_ip', $temps)");
          $requete = mysql_query ("INSERT INTO compteur_24heures (no_ip_24h, derniere_24h)
                                                          VALUES ('$no_ip', $temps)");
          $requete = mysql_query ("UPDATE compteur SET compteur = (compteur + 1)
                                                   WHERE key = 1");
       }
     
    // On efface les enregistrements trop ancien dans la quota des 24 heures //
    $requete = mysql_query ("DELETE FROM compteur_24heures
                                    WHERE derniere_24h < '$effacement'");
     
    // Comptage des enregistrements restants //
    $requete = mysql_query ("SELECT * FROM compteur_24heures");
    $vis24h = mysql_num_rows ($requete);
    $vis24h = sprintf ("%02s", $vis24h);
     
    // Relevé du compteur total //
    $requete = mysql_query ("SELECT * FROM compteur
                                      WHERE key = 1");
    $donnee = mysql_fetch_array ($requete);  <=== line 67
    $compte = $donnee['compteur'];
    $compte = sprintf ("%06s", $compte);
     
    // Mise en  image du total des visiteurs //
    $compte=str_replace("0","<img src='compteur/img_cpt/nike0.png'>",$compte);
    $compte=str_replace("1","<img src='compteur/img_cpt/nike1.png'>",$compte);
    $compte=str_replace("2","<img src='compteur/img_cpt/nike2.png'>",$compte);
    $compte=str_replace("3","<img src='compteur/img_cpt/nike3.png'>",$compte);
    $compte=str_replace("4","<img src='compteur/img_cpt/nike4.png'>",$compte);
    $compte=str_replace("5","<img src='compteur/img_cpt/nike5.png'>",$compte);
    $compte=str_replace("6","<img src='compteur/img_cpt/nike6.png'>",$compte);
    $compte=str_replace("7","<img src='compteur/img_cpt/nike7.png'>",$compte);
    $compte=str_replace("8","<img src='compteur/img_cpt/nike8.png'>",$compte);
    $compte=str_replace("9","<img src='compteur/img_cpt/nike9.png'>",$compte);
    echo "$compte<br>";
     
    // Test si il y a plus de 1 visiteur sur les 24 dernières heures //
    if ($vis24h > 1)
       {  $s="s";
       }
    else
       {  $s="";
       }
     
    // Mise en  image du total des visiteurs sur les dernières 24 heures //
    $vis24h=str_replace("0","<img src='compteur/img_cpt/0.png'>",$vis24h);
    $vis24h=str_replace("1","<img src='compteur/img_cpt/1.png'>",$vis24h);
    $vis24h=str_replace("2","<img src='compteur/img_cpt/2.png'>",$vis24h);
    $vis24h=str_replace("3","<img src='compteur/img_cpt/3.png'>",$vis24h);
    $vis24h=str_replace("4","<img src='compteur/img_cpt/4.png'>",$vis24h);
    $vis24h=str_replace("5","<img src='compteur/img_cpt/5.png'>",$vis24h);
    $vis24h=str_replace("6","<img src='compteur/img_cpt/6.png'>",$vis24h);
    $vis24h=str_replace("7","<img src='compteur/img_cpt/7.png'>",$vis24h);
    $vis24h=str_replace("8","<img src='compteur/img_cpt/8.png'>",$vis24h);
    $vis24h=str_replace("9","<img src='compteur/img_cpt/9.png'>",$vis24h);
    echo "$vis24h visites en 24 heures.<br>";
     
    // Déconnexion au serveur et à la base de données MySql //
    mysql_close();
     
    ?>
    $requete donne "Resource id #7"...
    Le $total ne s'incrémente pas ???
    Que se passe-t'il ligne 67 ???

    Merci d'avance...

Discussions similaires

  1. [Ant] [Ejb] Probléme de création d'ejb avec Genic
    Par rivierem dans le forum JOnAS
    Réponses: 7
    Dernier message: 25/06/2004, 16h21
  2. Réponses: 7
    Dernier message: 16/06/2004, 15h02
  3. Problème de création de table sous MySql
    Par ducamba dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2003, 09h59
  4. Problème de création de fenêtre
    Par tomateauketchup dans le forum DirectX
    Réponses: 1
    Dernier message: 08/06/2003, 19h42
  5. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07

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