Partage
  • Partager sur Facebook
  • Partager sur Twitter

compteur de visiteurs et de connectes

    18 mai 2007 à 21:11:49

    bonjour
    sur mon site j'aimerais mettre deux compteurs:
    un texte qui affiche le nombre de visiteurs (pour ca pas de probleme)
    un lien qui affiche le nombre de connectés et pour ca j'y arrive pas.
    J'ai essaye mais sans succes
    si vous pouviez m'indiquer la marche à suivre...
    merci a+
    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2007 à 22:54:03

      Salut eryxo :) ,
      Eh bien tout d'abord :
      • Ajoute un champ "connecte" par exemple dans table utilisateur si ce n'est déja fait.
      Il va te permettre de savoir si un membre est connecté (connecte vaudra 1) ou non (sinon 0).
      • Tu modifieras ce champ à la connexion d'un utilisateur sur le site (par COOKIE ou SESSION et vaudra 1) puis à la déconnexion (mise à 0 du champ)

      Ensuite il te suffit de te connecter à ta base SQL et de faire une simple requête :


      <?php

      /* Connexion à MySQL */
      mysql_connect( "host", "utilisateur", "mot_de_passe") or die(mysql_error());

      /* Sélection de ta base de données */
      mysql_select_db("nom_de_ta_base")or die(mysql_error());

      /* La reqûete qui sélectionne les membres */
      $requete = mysql_query("SELECT id_utilisateur FROM table_utilisateur WHERE connecte = 1") or die(mysql_error());

      /* La reqûete qui compte les membres connectés */
      $nb_connecte = mysql_num_rows($requete);

      /* Affichage du nombre de membres en ligne */
      echo '<span>Il y a '.$nb_connecte.' membres en ligne';

      ?>


      Essaies cela et redis moi. ;)
      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2007 à 0:09:12

        merci de m'aider
        toufab je galere pour les cookies et les sessions.
        J'ai cree un champ "connecte" dans ma table "forum_membres" et j'ai mis le code php sur ma page d'accueil mais je galere pour faire en sorte que connecte prenne la valeur de 1 à la connexion et 0 à la deconnexion.
        Leroi ce tuto je men suis servi pour le nombre de visiteurs mais pour le nombre de connectes il me fallait autre chose ;)
        Merci a vous deux en tous cas a+
        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2007 à 1:00:13

          Si tu galere avec les cookie et les sesion ... jai une solution qui nutilise pas cela
          Selon moi, tu dois creer une base de donnee avec le ip du visiteur ou/et le login (ou id, ou surnom) du membre. Tu met aussi la date de derniere activite.

          Ensuite tu met un include en haut de chaque page, contenant un script qui
          - Met a jour la date de derniere activite
          - Efface ceux qui n'ont pas ete actif depuis X minutes (je suggere 5 dependamment si ta des page qui prennent plus de temp a lire que ca)
          - Compte le nombre de visiteur dans ta BDD et la met dans la valeur Y

          Ensuite dans ta page tu met ton compteur de membres connecte en affichant la valeur Y
          • Partager sur Facebook
          • Partager sur Twitter
            19 mai 2007 à 13:02:32

            Citation : billedebil

            Si tu galere avec les cookie et les sesion ... jai une solution qui nutilise pas cela
            Selon moi, tu dois creer une base de donnee avec le ip du visiteur ou/et le login (ou id, ou surnom) du membre. Tu met aussi la date de derniere activite.

            Ensuite tu met un include en haut de chaque page, contenant un script qui
            - Met a jour la date de derniere activite
            - Efface ceux qui n'ont pas ete actif depuis X minutes (je suggere 5 dependamment si ta des page qui prennent plus de temp a lire que ca)
            - Compte le nombre de visiteur dans ta BDD et la met dans la valeur Y

            Ensuite dans ta page tu met ton compteur de membres connecte en affichant la valeur Y



            oui mais cette methode cest pour voir le nombre de visiteurs sur le site non?
            ca jy arrive moi ce que j'aimerais c'est egalement mettre un compteur du nombre de connectes
            Je trouais bien la methode de toufab mais la seule chose que je n'arrivaispas à faire c'état insérer 1 dans le champ "connecte" a la connexion du visiteur et inserer "0" à la deconnexion du visiteur.
            Merci d'avance
            ++

            EDIT:jai essaye plusieurs code dans ma page connexionok.php dont celui la:
            $_SESSION['connecte']=1;
                      mysql_query('UPDATE forum_membres SET connecte='.$_SESSION['connecte'].' WHERE membre_id='.$_SESSION['membre_id'].'');

            mais sans succes...
            merci d'avance ++
            • Partager sur Facebook
            • Partager sur Twitter
              19 mai 2007 à 15:09:15

              En fait, tu vas modifier ton champ "connecte" à la connexion comme ceci :


              <?php

              /* Connexion à MySQL */
              mysql_connect( "host", "utilisateur", "mot_de_passe") or die(mysql_error());

              /* Sélection de ta base de données */
              mysql_select_db("nom_de_ta_base") or die(mysql_error());

              /* La reqûete qui vérifie que l'utilisateur utilise les bons identifiants (attention ! là je ne préviens pas les injections SQL donc protège bien tes variables POST */
              $verif_login = "SELECT id_utilisateur FROM utilisateur WHERE pseudo_utilisateur=".$_POST['login']." AND pass_utilisateur=".$_POST['pass']."";

              /* On effectue cette requete */
              $requete = mysql_query($verif_login) or die(mysql_error());

              /* On vérifie si un utilisateur existe bien avec ces identifiants */
              $nb_utilisateur = mysql_num_rows($requete);

              /* Si l'utilisateur existe, alors Mise à 1 de connecte */
              if ($nb_utilisateur == 1)
              {
              mysql_query("UPDATE table_utilisateur SET connecte = 1 WHERE pseudo_utilisateur=".$_POST['login']." AND pass_utilisateur=".$_POST['pass']."");
              }

              /* Sinon, message d'erreur */
              else
              {
                 echo '<span>Mauvais identifiant</span>';
              }

              /* Déconnexion */
              mysql_close();

              ?>


              Pour la déconnexion (dans un fichier "logout.php" par exemple) :

              <?php

              if(isset($_SESSION['login']))
              {

              /* Connexion à MySQL */
              mysql_connect( "host", "utilisateur", "mot_de_passe") or die(mysql_error());

              /* Sélection de ta base de données */
              mysql_select_db("nom_de_ta_base") or die(mysql_error());

              /* Mise à 0 de la variable connecte */
              mysql_query("UPDATE table_utilisateur SET connecte = 0 WHERE pseudo_utilisateur=".$_SESSION['login']."");

              /* Déconnexion */
              mysql_close();
                     
              session_destroy();

              }

              ?>

              Voilà pour le petit script ! ;) mais là c'est juste pour mettre à jour la variable lors de la connexion/déconnexion. Il faut que tu vérifies aussi le cas où un cookie existe (si lors de la connexion précédente, l'utilisateur à cocher "Se connecter automatiquement"). :) Regarde bien les cours de PHP sur les Cookies. Il faut bien aussi que tu apprennes par toi-même, là est tout l'intérêt ^^.
              • Partager sur Facebook
              • Partager sur Twitter
                19 mai 2007 à 15:28:25

                merci a toi mais ya un bug:
                jai mis ce code
                mysql_connect("localhost","icreateprogfr", "xxxxxxxxxx");
                mysql_select_db("icreateprogfr") or die(mysql_error());

                /* La reqûete qui vérifie que l'utilisateur utilise les bons identifiants (attention ! là je ne préviens pas les injections SQL donc protège bien tes variables POST */
                $verif_login = "SELECT membre_id FROM forum_membres WHERE membre_pseudo=".$_POST['pseudo']." AND pass_utilisateur=".$_POST['password']."";

                /* On effectue cette requete */
                $requete = mysql_query($verif_login) or die(mysql_error());

                /* On vérifie si un utilisateur existe bien avec ces identifiants */
                $nb_utilisateur = mysql_num_rows($requete);

                /* Si l'utilisateur existe, alors Mise à 1 de connecte */
                if ($nb_utilisateur == 1)
                {
                mysql_query("UPDATE table_utilisateur SET connecte = 1 WHERE pseudo_utilisateur=".$_POST['login']." AND pass_utilisateur=".$_POST['pass']."");
                }

                /* Sinon, message d'erreur */
                else
                {
                   echo '<span>Mauvais identifiant</span>';
                }


                et il s'affiche cela
                Unknown column 'Nico' in 'where clause'

                Merci ++
                • Partager sur Facebook
                • Partager sur Twitter
                  19 mai 2007 à 16:30:29

                  T'as bien remplacé les noms des variables que j'ai mis par les tiens ?? (table_utilisateur, pass_utilisateur, pseudo_utilisateur, $_POST...) ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 mai 2007 à 18:01:00

                    jai rectifie mais toujours la meme erreur.Je comprend pas... :'(>_<
                    merci d'avance
                    ++
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 mai 2007 à 13:41:31

                      Je pense pas que tu devrait faire du copier/coller mais plutôt te focaliser sur cette ligne :

                      // Mise à 1 de la valleur connécté
                      mysql_query("UPDATE table_utilisateur SET connecte = 1 WHERE pseudo_utilisateur=".$_POST['login']." AND pass_utilisateur=".$_POST['pass']."");


                      Et l'intégrer à le suite de ton script.

                      Pour la déconnexion, tu intègre la ligne :

                      // Mise à 0 de la variable connecte
                      mysql_query("UPDATE table_utilisateur SET connecte = 0 WHERE pseudo_utilisateur=".$_SESSION['login']."");
                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 mai 2007 à 14:32:01

                        Citation : cat121

                        Je pense pas que tu devrait faire du copier/coller mais plutôt te focaliser sur cette ligne :


                        // Mise à 1 de la valleur connécté
                        mysql_query("UPDATE table_utilisateur SET connecte = 1 WHERE pseudo_utilisateur=".$_POST['login']." AND pass_utilisateur=".$_POST['pass']."");



                        Et l'intégrer à le suite de ton script.

                        Pour la déconnexion, tu intègre la ligne :


                        // Mise à 0 de la variable connecte
                        mysql_query("UPDATE table_utilisateur SET connecte = 0 WHERE pseudo_utilisateur=".$_SESSION['login']."");


                        j'ai mis ce code dans ma page connexionok.php
                        mysql_query("UPDATE forum_membres SET connecte = 1 WHERE membre_pseudo=".$_POST['pseudo']." ");


                        mais ca ne marche pas, la valeur "connecte" reste à 0
                        d'avance merci
                        ++
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 mai 2007 à 17:25:24

                          Ta table ou y'a les membres s'appelle bien "forum_membres" ?
                          Et le nom du champ des membres est bien "membre_pseudo" ?

                          Rajoute a la fin de ta requète :
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 mai 2007 à 17:25:24

                            Ta table ou y'a les membres s'appelle bien "forum_membres" ?
                            Et le nom du champ des membres est bien "membre_pseudo" ?

                            Rajoute a la fin de ta requète :

                            or die(mysql_error());


                            EDIT : désolé du double post, mais j'ai stoppé ma page j'avais oublié le ; :honte:
                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 mai 2007 à 18:32:22

                              jai rajoute et maintenant ca marche toujours pas mais quand je me connecte avec "Nico", il s'affiche ca

                              Unknown column 'Nico' in 'where clause'

                              :'(
                              merci
                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 mai 2007 à 0:18:22

                                screen ta bdd peut être.

                                Je me suis inscrit et la connexion marche très bien.
                                Mais il y'a bien ce

                                Unknown column 'cat121' in 'where clause'

                                Mais qu'est ce que t'as éssayé de faire ?
                                ^^
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  21 mai 2007 à 7:34:30

                                  Salut,

                                  essai ça :
                                  mysql_query("UPDATE table_utilisateur SET connecte = 1 WHERE pseudo_utilisateur='".$_POST['login']."' AND pass_utilisateur='".$_POST['pass']."'");
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    21 mai 2007 à 9:46:02

                                    ca marche :D
                                    merci beaucoup à Darkodam, cat121 et toufab
                                    :):):)
                                    ++

                                    EDIT:ce que j'aimerais et qui marche pas c'est que lorsqu'on ferme la fenetre du site, connecte se mette à 0 (comme si on se deconnecte).
                                    Sinon si quelqu'un se connecte une fois dans sa vie, il sera toujours marqué comme connecté...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      22 mai 2007 à 11:45:47

                                      Ha là, c'est les sessions.

                                      Peut être avec du javascript on.unload() mais je sais pas.
                                      Si, si tu fais ça, avec de l'ajax, ça peut le faire.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 mai 2007 à 11:50:48

                                        ok merci
                                        le probleme cest que ajax et javascript j'y connais pas grand chose... :euh:
                                        Merci
                                        ++
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          22 mai 2007 à 13:31:33

                                          Citation : toufab

                                          Salut eryxo :) ,
                                          Eh bien tout d'abord :

                                          • Ajoute un champ "connecte" par exemple dans table utilisateur si ce n'est déja fait.

                                          Il va te permettre de savoir si un membre est connecté (connecte vaudra 1) ou non (sinon 0).

                                          • Tu modifieras ce champ à la connexion d'un utilisateur sur le site (par COOKIE ou SESSION et vaudra 1) puis à la déconnexion (mise à 0 du champ)




                                          Moi, je te dis de ne pas utiliser ça te de suivre le TP de M@teo :) Cette technique est déconseillée, et si tu suis le TP, ça t'évitera de devoir rajouter un champ connecté qu irestera sur 1 si le gars ferme ça fenetre. Par rapport au TP, tu rajoutes dans la table des connectés un champ "id_membre" qui contient l'id du gars, d'où tu récupères les infos depuis la table "membres" par une jointure :)

                                          vincent1870
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            22 mai 2007 à 13:36:08

                                            le TP de mateo je men sers pour le nombre de visiteurs.
                                            Mais pour le nombre de connectes cest la que jai un probleme...Sur le sdz quand tu fermes la fenetre, tu napparais plus dans la liste des connectes alors comment faire??
                                            merci d'avance
                                            ++ :)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              22 mai 2007 à 13:39:22

                                              Voir ci-dessus :) j'ai édité...
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                22 mai 2007 à 13:44:15

                                                le php je gere pas trop donc jai pas tout compris mais je pense avoir compris le principe.
                                                Sinon je vais peut-etre laisser comme ca les membres auront qua cliquer sur deconnexion... :p
                                                merci
                                                ++
                                                :)

                                                PS: si tu avais un code a me proposer que je comprenne mieux :) . pour l'instant mon code qui affiche le nombre de connectes est
                                                $requete = mysql_query("SELECT membre_id FROM forum_membres WHERE connecte = 1") or die(mysql_error());

                                                /* La reqûete qui compte les membres connectés */
                                                $nb_connecte = mysql_num_rows($requete);

                                                /* Affichage du nombre de membres en ligne */
                                                echo ' '.$nb_connecte.' connectés';
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  22 mai 2007 à 13:51:13

                                                  Oui, mais ton code là ne marche pas avec mon truc, et bon, c'est du PHP pas très efficace... J'utilise cela, inspiré du TP de M@teo (eu la flemme de le refaire ^^ ) :


                                                  <?php
                                                  if($_SESSION['connecte']){
                                                    // ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table
                                                    $retour = mysql_query("SELECT * FROM membres_connectes WHERE id_membre='".$_SESSION['id']."'") or die(mysql_error());
                                                    $donnees = mysql_fetch_array($retour);
                                                   
                                                    // L'ip ne se trouve pas dans la table, on va l'ajouter
                                                    if (!$donnees) mysql_query('INSERT INTO membres_connectes VALUES(\'\', \''.$_SESSION['id'].'\', '.time().')') or die(mysql_error());

                                                    // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
                                                    else mysql_query('UPDATE membres_connectes SET timestamp='.time().' WHERE id_membre=\''.$_SESSION['id'].'\'') or die(mysql_error());

                                                  } // fin du test des connectés

                                                  // ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes
                                                  // On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
                                                  $timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
                                                  mysql_query('DELETE FROM membres_connectes WHERE timestamp < '.$timestamp_5min) or die(mysql_error());

                                                  // ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
                                                  $retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM membres_connectes') or die(mysql_error());
                                                  $donnees = mysql_fetch_array($retour);
                                                  /// on stocke le nombre de connectés dans une variable
                                                  $nbre_connectes = $donnees['nbre_entrees'];
                                                  ?>


                                                  Il n'est pas optimisé ce code, il est vieux. Tu l'inclue dans les pages où tu a besoin de compter le nombre d'inscrits. Une variable $nbre_connectes contient donc ce que tu cherches... Ma table contient donc en plus de celle de M@teo un champ id_membre. Ma table est membres_connectes. Lorsqu'il se connecte, le membre reçoit une variable $_SESSION['connecte'] qui vaut 1.

                                                  C'est bon ? ;)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    22 mai 2007 à 14:05:07

                                                    je vais travailler la dessus
                                                    je te tiens au courant
                                                    merci
                                                    a++
                                                    PS:dans la page connexionok.php il faudra juste mettre $_SESSION['connecte']=1?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      22 mai 2007 à 14:18:54

                                                      Oui :) , ou bien = TRUE, c'est presque pareil...
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        22 mai 2007 à 16:56:03

                                                        j'y arrive pas...
                                                        j'ai mis ce code dans ma page connexionok
                                                        $_SESSION['connecte']=TRUE;


                                                        et celui ci sur une autre page au pif (voirtopic.php) pour afficher le nombre de connectes
                                                        if($_SESSION['connecte']){
                                                          // ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table
                                                          $retour = mysql_query("SELECT * FROM membres_connectes WHERE id_membre='".$_SESSION['id']."'") or die(mysql_error());
                                                          $donnees = mysql_fetch_array($retour);
                                                         
                                                          // L'ip ne se trouve pas dans la table, on va l'ajouter
                                                          if (!$donnees) {mysql_query('INSERT INTO membres_connectes VALUES(\'\', \''.$_SESSION['id'].'\', '.time().')') or die(mysql_error());}

                                                          // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
                                                          else {mysql_query('UPDATE membres_connectes SET timestamp='.time().' WHERE id_membre=\''.$_SESSION['id'].'\'') or die(mysql_error());}

                                                        } // fin du test des connectés

                                                        // ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes
                                                        // On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
                                                        $timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
                                                        mysql_query('DELETE FROM membres_connectes WHERE timestamp < '.$timestamp_5min) or die(mysql_error());

                                                        // ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
                                                        $retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM membres_connectes') or die(mysql_error());
                                                        $donnees = mysql_fetch_array($retour);
                                                        /// on stocke le nombre de connectés dans une variable
                                                        $nbre_connectes = $donnees['nbre_entrees'];

                                                        /* Affichage du nombre de membres en ligne */
                                                        echo ' '.$nbre_connectes.' connectés';


                                                        mais meme quand je me connecte ca reste à 0 connectés...je trouve pas le bug...
                                                        Merci d'avance.
                                                        ++
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          23 mai 2007 à 17:14:10

                                                          Donne tout : tes structures de table notamment et si tu as une erreur... ainsi que le code affichant le nombre de connectés :)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          compteur de visiteurs et de connectes

                                                          × 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