Partage
  • Partager sur Facebook
  • Partager sur Twitter

compteur visites

    17 janvier 2017 à 20:22:02

    Bonsoir,

    J'ai un problème puisque la date et l'ip ne se mettent pas à jour... avez vous des idées?

    <?php
    
    $bdd = new PDO('mysql:host=localhost;dbname=vues', 'root', 'root');
    
    $user_ip = $_SERVER['REMOTE_ADDR'];
    
    $req = $bdd->prepare('UPDATE visites SET visiteurs = visiteurs + 1');
    $req->execute();
    $req->closeCursor();	
    
     
    $req_ip_exist = $bdd->prepare('SELECT * FROM visites WHERE ip = ?');
    $req_ip_exist->execute(array($user_ip));
    $ip_existe = $req_ip_exist->rowCount();
     
    if($ip_existe == 0)
    {
        $add_ip = $bdd->prepare('INSERT INTO visites(ip, date_visite) VALUES(?, NOW())');
        $add_ip->execute(array($user_ip));
    }
    else
    {
        $update_ip = $bdd->prepare('UPDATE visites SET date_visite = NOW() WHERE ip = ?');
        $update_ip->execute(array($_SERVER['REMOTE_ADDR']));
    } 
    
    
    ?>
    
    
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    
    <body>
    <h1>TEST COMPTEUR</h1>
    
    <?php
    
    $req = $bdd->prepare('SELECT * FROM visites');
    $req->execute();
    $data = $req->fetch(PDO::FETCH_OBJ);
    $req->closeCursor();
    
    
    ?>
    <?php echo $data->visiteurs;?> personnes ont vu cette page.
    
    </body>
    </html>



    -
    Edité par StéphaneBallester 23 janvier 2017 à 21:13:05

    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2017 à 21:22:33

      Psychotik a écrit:

      Des messages d'erreur?



      -
      Edité par StéphaneBallester 23 janvier 2017 à 23:27:56

      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2017 à 22:09:44

        Psychotik a écrit:

        Euh .... QUOI? :D



        -
        Edité par StéphaneBallester 23 janvier 2017 à 23:28:06

        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2017 à 22:12:06

          Euh, alors la je ne comprend rien. de quelle region tu parles? c'est quoi le rapport avec ton insertion en base de donnee?
          • Partager sur Facebook
          • Partager sur Twitter
            23 janvier 2017 à 23:30:09

            Psychotik a écrit:

            Euh, alors la je ne comprend rien. de quelle region tu parles? c'est quoi le rapport avec ton insertion en base de donnee?


            Oulah j'étais pas bien reveillé ! Oublie mes derniers messages ! ^^

            Pour la partie ip et datetime, quand je les ai isolé sur un autre doc, cela fonctionnait mais quand je l'assemble à la partie id et compteur, cela ne fonctionne plus.. Surement car il y a trop de requetes mélangées.. pas moyen de rassembler le tout ?

            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2017 à 0:39:04

              Hello, 

              Peut-être une bêtise, mais j'enlèverais le $req=close_cursor(); ligne 9 ...

              De plus, il me semble que tu ne peux pas utiliser rowCount() sur un SELECT. Voici comment moi je gère le comptage d'entrées :

              $sql=$pdo->query('SELECT COUNT(id) AS entries FROM table_articles');
              $data = $sql->fetch();
              $articleCount = $data['entries'];

              Libre à toi d'adapter ;)

              • Partager sur Facebook
              • Partager sur Twitter
              Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
                24 janvier 2017 à 19:55:30

                 Ealon a écrit:

                Hello, 

                Peut-être une bêtise, mais j'enlèverais le $req=close_cursor(); ligne 9 ...

                De plus, il me semble que tu ne peux pas utiliser rowCount() sur un SELECT. Voici comment moi je gère le comptage d'entrées :

                $sql=$pdo->query('SELECT COUNT(id) AS entries FROM table_articles');
                $data = $sql->fetch();
                $articleCount = $data['entries'];

                Libre à toi d'adapter ;)

                <?php
                 
                $bdd = new PDO('mysql:host=localhost;dbname=vues', 'root', 'root');
                 
                $user_ip = $_SERVER['REMOTE_ADDR'];
                 
                $req = $bdd->prepare('UPDATE visites SET visiteurs = visiteurs + 1');
                $req->execute();
                
                
                $sql=$bdd->query('SELECT COUNT(ip) AS entries FROM visites');
                $data = $sql->fetch();
                $articleCount = $data['entries']; 
                  
                  
                if($ip_existe == 0)
                {
                    $add_ip = $bdd->prepare('INSERT INTO visites(ip, date_visite) VALUES(?, NOW())');
                    $add_ip->execute(array($user_ip));
                }
                else
                {
                    $update_ip = $bdd->prepare('UPDATE visites SET date_visite = NOW() WHERE ip = ?');
                    $update_ip->execute(array($_SERVER['REMOTE_ADDR']));
                }
                 
                 
                ?>
                 
                 
                <html>
                <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                </head>
                 
                <body>
                <h1>TEST COMPTEUR</h1>
                 
                <?php
                 
                $req = $bdd->prepare('SELECT * FROM visites');
                $req->execute();
                $data = $req->fetch(PDO::FETCH_OBJ);
                $req->closeCursor();
                 
                 
                ?>
                <?php echo $data->visiteurs;?> personnes ont vu cette page.
                 
                </body>
                </html>

                Cela ne fonctionne toujours pas. Pas d'erreur affichée, mais la date et l'ip ne s'affiche pas dans ma table

                -
                Edité par StéphaneBallester 24 janvier 2017 à 19:56:17

                • Partager sur Facebook
                • Partager sur Twitter
                  24 janvier 2017 à 20:10:44

                  Tu ne vois vraiment pas ce qui cloche ?

                  Ca saute aux yeux  :

                  $sql=$bdd->query('SELECT COUNT(ip) AS entries FROM visites');
                  $data = $sql->fetch();
                  $articleCount = $data['entries'];

                  et dans ta condition :

                  if($ip_existe == 0)

                  $ip_existe sort de nulle part ...

                  Jamais bon de copier coller sans faire un minimum de recherche pour adapter un bout de code ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
                    24 janvier 2017 à 20:24:35

                    Ealon a écrit:

                    Tu ne vois vraiment pas ce qui cloche ?

                    Ca saute aux yeux  :

                    $sql=$bdd->query('SELECT COUNT(ip) AS entries FROM visites');
                    $data = $sql->fetch();
                    $articleCount = $data['entries'];

                    je comprends pas à quoi correspond entries après AS.. Tu peux m'expliquer?

                    <?php
                     
                    $bdd = new PDO('mysql:host=localhost;dbname=vues', 'root', 'root');
                     
                    $user_ip = $_SERVER['REMOTE_ADDR'];
                     
                    $req = $bdd->prepare('UPDATE visites SET visiteurs = visiteurs + 1');
                    $req->execute();
                    
                    
                    $sql=$bdd->query('SELECT COUNT(ip) AS entries FROM visites');
                    $data = $sql->fetch();
                    $articleCount = $data['entries']; 
                      
                      
                    if($sql == 0)
                    {
                        $add_ip = $bdd->prepare('INSERT INTO visites(ip, date_visite) VALUES(?, NOW())');
                        $add_ip->execute(array($user_ip));
                    }
                    else
                    {
                        $update_ip = $bdd->prepare('UPDATE visites SET date_visite = NOW() WHERE ip = ?');
                        $update_ip->execute(array($_SERVER['REMOTE_ADDR']));
                    }
                     
                     
                    ?>
                     
                     
                    <html>
                    <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                    </head>
                     
                    <body>
                    <h1>TEST COMPTEUR</h1>
                     
                    <?php
                     
                    $req = $bdd->prepare('SELECT * FROM visites');
                    $req->execute();
                    $data = $req->fetch(PDO::FETCH_OBJ);
                    $req->closeCursor();
                     
                     
                    ?>
                    <?php echo $data->visiteurs;?> personnes ont vu cette page.
                     
                    </body>
                    </html>




                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 janvier 2017 à 7:25:34

                      Je t'invite à suivre le cours sur le PHP de Mathieu car à la vue de ton code, et de comment tu conçois une base de données, il y a des choses à revoir.

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
                        25 janvier 2017 à 16:14:16

                        Ealon a écrit:

                        Je t'invite à suivre le cours sur le PHP de Mathieu car à la vue de ton code, et de comment tu conçois une base de données, il y a des choses à revoir.


                        je dois remplacer SQL par REQ n'est ce pas? ^^

                        EDIT : j'ai peur que là, le compteur compte les vues pour tous les articles que j'ai et non séparé comme je le souhaite...

                        De plus, j'apprecierais vraiment que tu m'expliques, que tu me fasses un petit cours personnalisé pour que je comprenne ce qui ne va pas dans ce que je fais. Si tu en as envie, je t'en serai reconnaissant :) j'apprends par mes erreurs et sur mes exemples, les cours je les ai compris, mais j'integre mieux en faisant

                        <?php
                          
                        $bdd = new PDO('mysql:host=localhost;dbname=vues', 'root', 'root');
                          
                        $user_ip = $_SERVER['REMOTE_ADDR'];
                          
                        $req = $bdd->prepare('UPDATE visites SET visiteurs = visiteurs + 1');
                        $req->execute();
                        $req->CloseCursor(); // car derrière j'ouvre une autre requete 
                         
                        $req=$bdd->query('SELECT COUNT(ip) AS $user_ip FROM visites');
                        $data = $req->fetch();
                        $articleCount = $data['$user_ip'];
                           
                           
                        if($sql == 0)
                        {
                            $add_ip = $bdd->prepare('INSERT INTO visites(ip, date_visite) VALUES(?, NOW())');
                            $add_ip->execute(array($user_ip));
                        }
                        else
                        {
                            $update_ip = $bdd->prepare('UPDATE visites SET date_visite = NOW() WHERE ip = ?');
                            $update_ip->execute(array($_SERVER['REMOTE_ADDR']));
                        }
                          
                          
                        ?>
                          
                          
                        <html>
                        <head>
                        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                        </head>
                          
                        <body>
                        <h1>TEST COMPTEUR</h1>
                          
                        <?php
                          
                        $req = $bdd->prepare('SELECT * FROM visites');
                        $req->execute();
                        $data = $req->fetch(PDO::FETCH_OBJ);
                        $req->closeCursor();
                          
                          
                        ?>
                        <?php echo $data->visiteurs;?> personnes ont vu cette page.
                          
                        </body>
                        </html>



                        -
                        Edité par StéphaneBallester 28 janvier 2017 à 20:40:52

                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 janvier 2017 à 20:41:18

                          Ealon a écrit:

                          Je t'invite à suivre le cours sur le PHP de Mathieu car à la vue de ton code, et de comment tu conçois une base de données, il y a des choses à revoir.


                          Est-ce que tu peux répondre à mon dernier post s'il te plait?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 janvier 2017 à 13:01:11

                            StéphaneBallester a écrit:

                            je dois remplacer SQL par REQ n'est ce pas? ^^

                            EDIT : j'ai peur que là, le compteur compte les vues pour tous les articles que j'ai et non séparé comme je le souhaite...

                            De plus, j'apprecierais vraiment que tu m'expliques, que tu me fasses un petit cours personnalisé pour que je comprenne ce qui ne va pas dans ce que je fais. Si tu en as envie, je t'en serai reconnaissant :) j'apprends par mes erreurs et sur mes exemples, les cours je les ai compris, mais j'integre mieux en faisant

                            Alors non, tu ne dois rien remplacer par rien du tout, c'est pourtant pas bien compliqué de comprendre que ta variable $sql ne correspond à rien, au néant ! Elle n'a même jamais été déclarée dans ton code, et toi tu demande à ton script de vérifier qu'elle soit égale à 0, bah figures toi que ça sera toujours le cas ... C'est le pourquoi du comment je suis clairement opposé au fait de pomper des scripts sur Internet, surtout quand on ne maîtrise pas le code. 

                            Pour la piste, le code que je t'ai fourni EST A MODIFIER POUR CORRESPONDRE A TON BESOIN.

                            Inutile de proposer des modifications foireuses et venir ici demander de l'aide. C'est comme ton AS $user_ip FORM ...

                            Pas la peine de préciser non plus que tu te sers mal de ta table SQL, en t'en servant à la fois comme compteur incrémental (UPDATE visites SET visiteurs = visiteurs + 1) mais aussi comme source d'enregistrement de données (INSERT INTO visites(ip, date_visite) VALUES(?, NOW())

                            Ça ne marchera pas.

                             Avant de te lancer tête baissée dans du code, relis le cours, fais des exemples, commences petit et améliore par la suite. Représente toi la logique de ton code, représente toi les données que tu veux traiter, les tables que tu dois créer, réfléchis les bases mêmes et les objectifs de ton code. Par exemple, si tu veux mettre en place un compteur de visites, et un compteur de vues, ce sont deux choses différentes : le compteur de visites va te retourner le nombre de visiteurs uniques sur ton site, le compteur de vue va te retourner le nombre total de fois qu'une page a été affichée.

                            Pour ton script, il te faut donc deux tables. L'une pour les vues, contenant le nom de la page et le compteur de vues, incrémenté sur chaque page. L'autre pour les visites, contenant l'ip et la date, dans laquelle tu insères tes données uniquement si la dernière visite depuis telle IP date de plus de X temps par exemple.

                            Avec ça en base, tu peux déjà avoir une idée de comment organiser ton code. Je te laisse tout revoir, et surtout relire les cours, reprendre les points que tu n'as clairement pas assimilé, et essayer de reproduire un code fonctionnel. C'est uniquement à partir de ce moment là que je serais volontaire pour t'aider à nouveau.

                            Ealon

                            PS : J'ai longuement hésité à te répondre, vu le peu d'importance que tu sembles donner à une personne voulant t'aider en te disant de reprendre le cours PHP, mais dont tu considère qu'il est nécessaire qu'elle te corrige ton code ... J'ai même pris sur moi pour te détailler un bout de code et reprendre tes erreurs, sachant que j'ai autre chose à faire sur mon projet, mais je n'arrivais pas à accepter de te laisser planté là sans un coup de main.

                            -
                            Edité par Ealon 29 janvier 2017 à 13:03:28

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Kwo:re / topic OC | Aidez les autres, indiquez un sujet résolu ! | Vous êtes bloqué ? Suivez le guide ! | N'aide pas par MP
                              1 février 2017 à 18:00:28

                              Ealon a écrit:

                              ...
                              Edité par Ealon 29 janvier 2017 à 13:03:28

                              Voilà, après quelques jours de travail et de révision de cours, mon compteur fonctionne. Mais l'IP n'apparait pas dans la seconde table créée... Peux tu me dire pourquoi?
                              <?php
                              $bdd = new PDO('mysql:host=localhost;dbname=recettes', 'root', 'root');
                              
                              include("C:/wamp64/www/doc/ip_visiteurs.php");
                              
                              
                              $req = $bdd->prepare('UPDATE cuisine SET visiteurs = visiteurs + 1 WHERE id_recette="1"');
                              $req->execute();
                              $req->closeCursor();
                              
                              $req = $bdd->prepare('SELECT id_recette, visiteurs FROM cuisine');
                              $req->execute();
                              $data = $req->fetch(PDO::FETCH_OBJ);
                              $req->closeCursor();
                              ?><div style="color:#FFF">
                              <?php echo $data->visiteurs;?> personnes ont vu cette recette.</div>

                              Et le doc qui est include :

                              <html>
                              <head>
                              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                              </head>
                              
                              <body>
                              
                              <?php
                              
                              $bdd = new PDO('mysql:host=localhost;dbname=recettes', 'root', 'root');
                              
                              
                              $ip_user = $_SERVER['REMOTE_ADDR'];
                              
                              $ins = $bdd->query('INSERT INTO info_visiteurs(id_recette, titre_recette, ip) VALUES(\',?,?,' . $ip_user .'\')');
                              
                              
                              
                              ?>
                              
                              
                              </body>
                              </html>




                              -
                              Edité par StéphaneBallester 1 février 2017 à 18:01:33

                              • Partager sur Facebook
                              • Partager sur Twitter

                              compteur visites

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown