salut,
je suis en train de développer un script PHP où je tire au sort les entrées d'une table grâce à une requête "ORDER BY RAND()".
la particularité que j'aimerais ajouter serait d'empêcher la même IP de voir deux fois la même entrée. j'ai donc créé une table log dans laquelle je rentre les IPs et les ids des éléments vus. et à chaque fois qu'un élément est tiré au sort, je scanne la table log, et si l'ip du visiteur a déjà vu cet élément dans la table log, je relance un tirage.
mon problème c'est que lorsque l'IP a vu tous les éléments, mon script part dans une boucle infinie et tire au sort des éléments en espérant en trouver un qui n'a pas été vu.
j'avais pensé à mettre une variable $limite, qui bloquerait la recherche après 10 tours par exemple, et qui dirait "il n'existe plus aucun élément non-vu". le problème c'est que mathématiquement la fonction aléatoire peut très bien tirer au sort 10 éléments déjà vus alors qu'il reste des éléments non-vus à voir...
quelqu'un aurait une idée de réécriture ? merci d'avance !
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 <?php $found = 0; while($found != 1) { $found = 1; // requête qui tire au sort un élément (...) // l'élément aléatoire est choisi, peut-on l'utiliser ? while($data_random = mysql_fetch_assoc($req_random)) { // est-ce que l'élément tiré a déjà été vu par l'ip du visiteur ? (...) SELECT * FROM log WHERE ip='$_SERVER[REMOTE_ADDR]'"; (...) while($data_log = mysql_fetch_assoc($req_log)) { if($data_random['id'] == $data_log['element_id']) { $found = 0; } // si l'élément choisi aléatoirement correspond à une entrée du log pour l'ip du visiteur // alors on ne peut pas l'afficher } if($found == 1) { // si on arrive là c'est que l'élément peut être affiché. on sauvegarde les données de la requête dans des variables pour les utiliser plus loin dans la page } } } ?>
Partager