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

Langage PHP Discussion :

[Sécurité] comment créer un historique de navigation à l'aide des sessions ?


Sujet :

Langage PHP

  1. #21
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557

  2. #22
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    non, non, non ...

    tu fais une table avec un id (clé primaire autoincrement), url, et id_membre
    apres a chaque page, tu ajoute une url avec l'id_membre, l'id s'incrémente tout seul.

    apres quand tu veux les 10 derniers url,
    tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT url FROM TABLE ORDER BY id DESC, LIMIT 10.
    un truc comme ca, et du coup ca marche !!

    apres tu peux aussi récupérer l'id en meme temps, et le dernier id, dans ta boucle de while sera le 10 historique.

    apres tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM TABLE WHERE id < dernier_id
    et voila le tour est joué !!!

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ok ça parait évident. Cela étant, j'ai fais ceci et j'ai une erreur : de requête sql pour le cas précis (ça semble venir du MIN(id)) et puis sinon j'ai remarqué que le tuple le plus ancien (donc avec le MIN(id) n'était pas updaté

    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
    <?php //on va chercher les tuples correspondant au membre $historique=" SELECT id, MIN(id) AS idMin, url FROM historique WHERE idMembre='".$numeroConnexion."' ORDER BY id LIMIT 0,20 "; $resultat = mysql_query("$historique") ; //on récupère le nombre d'enregistrement pour la condition d'update après le while $row = mysql_fetch_row($resultat); $total = $row[0]; //on affiche les 20 résultats while ($R = mysql_fetch_array($resultat)) { $idMin=$R[idMin]; echo"$R[url]<br>" ;} //si on a compté plus ou moins 20 enregistrements, on update le plus ancien, celui avec le plus petit id. if($total>=20) { $update="UPDATE `historique` SET url='".$retour."', idMembre ='".$numeroConnexion."', WHERE idMembre='".$idDef."' AND id='".$idMin."'"; mysql_query($update); } //si il y en a moins que 20 ou 20, on insère le nouvel enregistrement. if($total<=20) { $insert="INSERT INTO `historique` (`idMembre`,`url`) VALUES ('$numeroConnexion','$retour')"; mysql_query($insert); } ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com
    Et donc ça, ça foire
    C'est pas parce que j'ai tort que vous avez raison.

  4. #24
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Salut,

    Pourquoi ne décomposes tu pas ton problèmes ? Cela simplifieras le schmilblik que tu sembles avoir du mal à mettre en place.

    En bref il y a deux actions qui nous interessent :
    - Ajouter
    - Lire

    Pour ce qui est de la bdd on à besoin d'une table à trois champs :
    - IdMembre
    - Url
    - Numéro (de 1 à 10 pour dix url en mémoire)

    Donc je te proposes de faire deux fonctions :
    Code ajouterALHistorique : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function ajouterALHistorique( $IdMembre, $url )
    {
          $sql = 
                      "INSERT INTO historique 
                      ( idmembre , url , numero )
                      VALUES
                      ('".$idMembre."','".$url."','1')";
          mysql_query($sql);
    }
    Code lire : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function lireLHistorique( $IdMembre )
    {
          $TabReturn = array();
          $sql = 
                      "SELECT * 
                      FROM historique
                      WHERE idmembre = '".intval($IdMembre)."'   ORDER BY numero";
          $query = mysql_query($sql);
          while( $res = mysql_fetch_array($query) )
                $TabReturn[] = $res;
          return $TabReturn;
    }

    Voila une chose de faites, maintenant il faut mettre à jour le numéro pour que les urls se déplacent de la position 1 à 10.

    Code mettreAJourNumero : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function mettreAjourNumeroDeLHistorique( $IdMembre )
    {
          $sql = "UPDATE historique SET numero=numero+1 WHERE idmembre= '".intval($IdMembre)."' ";
          mysql_query($sql);
    }

    Désormais on à de quoi faire un historique qui sauvegarde dans l'ordre les url visitées de la dernière à la première.

    Il n'y à plus qu'à supprimer le trop d'url à chaque ajout.

    Code supprimerUrlEnTropDeLHistorique : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function supprimerUrlEnTropDeLHistorique( $IdMembre )
    {
          $sql = "DELETE FROM historique WHERE numero > 10 AND idmembre = '".intval($IdMembre)."' ";
          mysql_query($sql);
    }

    Au final sa donne cela :
    Code Les fonctions : 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
     
    //////////////////////////////////////////////////////////////////
    //
    //////////////////////////////////////////////////////////////////
    function ajouterALHistorique( $IdMembre, $url )
    {
          //Déplaces les urls existantes (la 1 passe à 2 ect)
          MettreAjourNumeroDeLHistorique( $IdMembre );
          //Ajoute une url à la première position
          $sql = 
                      "INSERT INTO historique 
                      ( idmembre , url , numero )
                      VALUES
                      ('".$idMembre."','".$url."','1')";
          mysql_query($sql);
          // Supprime la onzieme URL
          SupprimerUrlEnTropDeLHistorique( $IdMembre );
    }
    //////////////////////////////////////////////////////////////////
    //
    //////////////////////////////////////////////////////////////////
     
    function mettreAjourNumeroDeLHistorique( $IdMembre )
    {
          $sql = "UPDATE historique SET numero=numero+1 WHERE idmembre= '".intval($IdMembre)."' ";
          mysql_query($sql);
    }
    //////////////////////////////////////////////////////////////////
    //
    //////////////////////////////////////////////////////////////////
    function supprimerUrlEnTropDeLHistorique( $IdMembre )
    {
          $sql = "DELETE FROM historique WHERE numero > 10 AND idmembre = '".intval($IdMembre)."' ";
          mysql_query($sql);
    }
    //////////////////////////////////////////////////////////////////
    //
    //////////////////////////////////////////////////////////////////
    function lireLHistorique( $IdMembre )
    {
          $TabReturn = array();
          $sql = 
                      "SELECT * 
                      FROM historique
                      WHERE idmembre = '".intval($IdMembre)."'   ORDER BY numero";
          $query = mysql_query($sql);
          while( $res = mysql_fetch_array($query) )
                $TabReturn[] = $res;
          return $TabReturn;
    }
    Code usage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Ajoute une ul au membre en cours
    ajouterALHistorique( $IdMembre, $url );
    //Lecture
    $urls = lireLHistorique( $IdMembre );
    foreach ( $urls as $url )
          echo $url["numero"]." -- > ".$url["url"]."<br/>";

    Code exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mysql_connect("localhost","root","");
    mysql_select_db("test");
     
    //Ajoute une ul au membre en cours
    for($i=0;$i<20;$i++)
    	ajouterALHistorique( 1 , "boucle".$i );
    //Lecture
    $urls = lireLHistorique( 1 );
    foreach ( $urls as $url )
          echo $url["numero"]." -- > ".$url["url"]."<br/>";

    Et c'est fini.

    bye

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon alors, PsychoBob au rapport :

    Mission accomplie :

    affirmatif.

    Pourcentage de réussite
    :
    100%

    Bugs survivants :
    aucun

    Facteur de réussite :
    L'idée d'Epox sur l'incrémentation des nombres.
    Les conseils de tous pour développer l'historique par session (dont par ailleurs il ne reste rien).
    Un pot d'Haggen Dazz.

    Résultat final:
    Historique de 100 pages visibles dans le tableau de bord, avec lien direct, date, et cases de couleurs selon les rubriques du site.

    Conclusion :
    C'est une tâche en programmation PsychoBob, mais il en a des bonnes idées.

    remerciements
    C'est pas parce que j'ai tort que vous avez raison.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Créer un historique de navigation à partir d'une listview
    Par Rohan21 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 08/09/2014, 15h17
  2. Réponses: 6
    Dernier message: 18/07/2014, 13h21
  3. Réponses: 1
    Dernier message: 18/02/2007, 11h07
  4. créer une barre de navigation déroulante aide
    Par max45 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/11/2005, 20h57

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