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 unun truc comme ca, et du coup ca marche !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT url FROM TABLE ORDER BY id DESC, LIMIT 10.
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 faiset voila le tour est joué !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part DELETE FROM TABLE WHERE id < dernier_id
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é
Et donc ça, ça foire
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 Colorez votre code PHP sur les forums grâce à Developpez.com<?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); } ?>
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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager