Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script - Dernière connexion

Sujet résolu
Anonyme
    23 avril 2009 à 22:27:17

    Salut à tous,

    Je viens vous demander votre aide car je ne trouve pas la solution à mon problème qui est le suivant :

    Je souhaite faire un script qui met à jours les colonnes last_visit et last_ip de la table comptes X minutes après l'absence
    d'activité du membre, j'ai essayer différente méthodes comme avec les timestamp et autres, mais sans succès du faite
    que suite à l'inactivité, la page n'est pas recharger et donc les données ne peuvent être mise à jours.

    J'ai fait une recherche sur google, mais je n'ai pas trouvé ce que je voulez :/

    Concernant la recherche du SDZ, faut croire qu'il m'aime pas car à chaque fois, quelque soit les mots de recherches il me sort tous les topics ^^

    Solution :

    Pré-requis :
    Une table nommée log_connexion avec 4 colonnes ( member_id (int 4), last_ip (varchar 255), last_date (varchar 255), last_time (varchar 255) )

    Code d'insertion des valeurs ( Code à ajuster selon votre code ):
    $info = mysql_query('SELECT * FROM compte WHERE username="'.$_SESSION['username'].'"') or die (mysql_error());
    $info_s = mysql_fetch_array($info);
    		
    $date = Date("d/m/Y");
    $heure = Date("H:i:s");
    mysql_query('INSERT INTO log_connexion VALUES("'.$info_s['id'].'", "'.$_SERVER['REMOTE_ADDR'].'", "'.$date.'", "'.$heure.'")') or die (mysql_error());
    


    Code de sortie page membre :
    $compte = mysql_query('SELECT * FROM compte WHERE username="'.mysql_escape_string($_SESSION['username']).'"');
    $compte_s = mysql_fetch_object($compte);
    
    $info = mysql_query('SELECT * FROM log_connexion WHERE member_id="'.$compte_s->id.'" ORDER BY last_date DESC LIMIT 1, 1');
    $info_s = mysql_fetch_array($info);
    $info = mysql_query('SELECT * FROM log_connexion WHERE member_id="'.$compte_s->id.'" AND last_date="'.$info_s['last_date'].'" ORDER BY last_time DESC LIMIT 1, 1');
    $info_s = mysql_fetch_array($info);
    mysql_close();
    


    Et la partie HTML pour l'affichage :
    Votre dernière connexion à été effectué le : <?php if (isset($info_s['last_date'])) { echo "".$info_s['last_date']. " à " .$info_s['last_time']. "."; } else { echo "<b>Inconnu</b> à <b>Inconnu</b>."; } ?><br/>
    La dernière IP enregistré est : <?php if (isset($info_s['last_date'])) { echo "".$info_s['last_ip'].""; } else { echo "<b>Inconnu</b>."; } ?><br/>
    


    Voila ^^
    • Partager sur Facebook
    • Partager sur Twitter
      23 avril 2009 à 22:30:44

      Bin, c'est pourtant pas compliqué...

      <?php
      function connect ( $membre, $motdepasse ) {
          // Authentification de l'utilisateur, tu dois savoir comment faire
      
          mysql_query ( 'UPDATE `membres` SET `derniere_connexion`=NOW(), `derniere_ip`="' . $_SERVER['REMOTE_ADDR'] . '` WHERE `membre_id`=' . $idmembre );
      }
      ?>
      
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        23 avril 2009 à 22:34:57

        Petit conseil : regarde le tutoriel pour créer un forum de toutes pièces de General Vans, à la fin il y a un système dans ce genre de créé.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          23 avril 2009 à 22:46:30

          @ Thebidi : Ce n'est pas ce système que je recherche, ce que je veux faire c'est affiché la date de dernière connexion effectué avant.

          Par exemple :
          Connexion le 27/02/2009 à 16h30 avec l'ip 154.148.184.187

          Et nouvelle connexion à 20h40, mais celle qui doit être affiché est celle de 16h30.

          @ Max28 : j'ai déjà regardé rapidement ce tuto, mais je n'ai pas trouvé ce que je chercher
          • Partager sur Facebook
          • Partager sur Twitter
            23 avril 2009 à 22:59:54

            Huuuuuun... Alors je te conseille de plutôt utiliser un fichier texte avec l'ID du membre.

            <?php
            function connect ( $membre, $pass ) {
                // Authentification
            
                $log = fopen ( 'cache/logs/membres/' . $id . '.log', 'a+' );
                fwrite ( $log, $_SERVER['REMOTE_ADDR'] . '@' . time() . "\n" );
                fclose ( $log );
            }
            ?>
            


            Pour la lecture après :
            <?php
            function print_log ( $membre_id ) {
                echo '<h2>Log de l'utilisateur #' . $membre_id . '</h2>' . "\n";
                $log = file_get_contents ( 'cache/logs/membres/' . $membre_id . '.log' );
                $lines = explode ( "\n", $log );
                echo '<ul>' . "\n";
                foreach ( $lines as $line ) {
                    $data = explode ( '@', $line );
                    echo '<li>Connexion le <strong>' . date ( 'd/m/Y à H:i:s', $data[1] ) . '</strong> avec l\'IP <strong>' . $data[0] . '</strong>.</li>' . "\n";
                }
                echo '</ul>' . "\n";
            }
            ?>
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              23 avril 2009 à 23:52:10

              Re,

              Suite à ton post j'ai eu une idée de petit script entre guillemets bizarre, le voici :p

              <?php
              
              include('config.inc.php');
              
              $co_val = mysql_query('SELECT * FROM compte') or die (mysql_error());
              $co_val_s = mysql_fetch_array($co_val)
              
              // Le client ne c'est pas encore connecté une dexième fois depuis la dernière connexion
              // Verrouillage pour prochaine connexion pour contourner la MAJ
              if ($co_val_s['co_val'] == "0")
              {
              	$date = Date("d/m/Y");
              	$heure = Date("H:i:s");
              		
              	mysql_query('UPDATE compte SET last_ip="'.$_SERVER['REMOTE_ADDR'].'", last_date="'.$date.'", last_time="'.$heure.'", co_val="1" WHERE username="'.$_SESSION['username'].'"');
              }
              
              // Le client ce connnect une deuxième fois depuis la dernière connexion
              // Déverrouillage pour prochaine connexion pour MAJ
              if ($co_val_s['co_val'] == "1")
              {
              	mysql_query('UPDATE compte SET co_val="0" WHERE username="'.$_SESSION['username'].'"');
              }
              
              mysql_close();
              ?>
              


              Ce script à pour but d'empecher la mise à jours de la BDD lors de la connexion suivante, et donc
              permet l'affichage de la bonne date et heure + Ip de la dernière visite.

              Je ne l'ai pas encore tester, vous en penser quoi ?


              [EDIT] J'avez oublier le WHERE, sa m'a tout modifier, mais maintenant sa marche à moitier, il mes à jours les infos
              une connexion sur deux alors qu'il devrais pas ><

              EDIT 2 : Bon suite à divers test qui ont échoué à chaque fois je vais passé en log connexion par sql en attendant de trouvé la bonne méthode ;)

              Merci à vous pour votre aide
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                25 avril 2009 à 0:03:05

                J'ai trouvé une solution en testant différente méthode, le script ce trouve dans mon premier post, celui ci est fonctionnel, enfin chez moi ^^

                Merci à TheBidi pour m'avoir mis sur la voie :p
                • Partager sur Facebook
                • Partager sur Twitter

                Script - Dernière connexion

                × 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