Affichage aléatoire avec pagination
Bonjour
Je suis en train de développer un affichage avec pagination. Imaginons que j'ai par exemple 3 pages. En bas de chaque page il y a des liens pour passer d'une page à l'autre (1,2,3).
Actuellement quand j'arrive sur la page 1, pas de souci mes enregistrements sont bien afficher aléatoirement. Mais quand je vais sur la page 2, je retrouve des enregistrements que j'avais en page 1. Et si je réaffiche la page 1, elle est différente du premier affichage de la page 1 que j'avais effectué précédemment.
Je souhaiterais obtenir un affichage aléatoire des 3 pages sans doublon, et en quelque sorte "mémoriser" les pages de façon à ce que si je vais de page en page je me retrouve toujours avec la même page 1, la même page 2, etc...
Voici le code:
Code:
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
| // Numéro de la page à afficher
//on verifie si la variable $pg est definie, sinon on l'initialise a 1
if(!isset($_GET['page'])){$page = 0;}
else{$page = $_GET['page'];}
//on verifie si la variable qui est censée être un numero de page
// est bien un chiffre pour éviter une injection mysql
if(!is_numeric($page)){$page = 0;}
// Nombre de résultats par page
$nb = 12;
// Assure au moins $nb résultats par page
if(isset($_GET['nb'])) {
$nb = max(intval($_GET['nb']), $nb);
}
// Nombre total d'enregistrements
$sql = 'SELECT COUNT(*) FROM identification WHERE actif = 1;';
$query = mysql_query($sql, $connexion)
or die('Erreur MySQL : '.mysql_error());
$row = mysql_fetch_row($query);
$total = $row[0];
// Nombre maximum de pages (ceil arrondit au nombre supérieur)
$max_pg = ceil($total / $nb);
// Selection des enregistrements pour la page considérée
$sql = 'SELECT id_membre, date_naissance, pseudo, id_pays, id_ville,
actif FROM identification
WHERE actif = 1 ORDER BY RAND() LIMIT '.($page * $nb).','.$nb.''
or die('Erreur MySQL : '.mysql_error());
$query = mysql_query($sql, $connexion)
or die('Erreur MySQL : '.mysql_error());
while($list = mysql_fetch_assoc($query)) {
// affichage des enregistrements
} // Fin du while
mysql_close();
// Les liens de pagination (1,2,3, etc)
for($i = 0 ; $i < $max_pg ; $i++) {echo ' <a href="?page='.$i.'&nb='.$nb.'">'.($i+1).'</a>';}
?> |
Le problème vient du fait que je fais l'ORDER BY RAND() à chaque fois,
mais je suis débutant je ne sais pas comment faire...
Merci pour votre aide
Affichage aléatoire avec pagination
Bonjour julp,
Je le même probleme que Pasc06, Je souhaiterais obtenir un affichage aléatoire des 3 pages sans doublon, et en quelque sorte "mémoriser" les pages de façon à ce que si je vais de page en page je me retrouve toujours avec la même page 1, la même page 2, etc...
Voici le script pour faire la pagination :
Code:
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| function buildNavigation($pageNum_Recordset1,$totalPages_Recordset1,$prev_Recordset1,$next_Recordset1,$separator=" | ",$max_links=10, $show_page=true)
{
GLOBAL $maxRows_rsSiteMarchand,$totalRows_rsSiteMarchand;
$pagesArray = ""; $firstArray = ""; $lastArray = "";
if($max_links<2)$max_links=2;
if($pageNum_Recordset1<=$totalPages_Recordset1 && $pageNum_Recordset1>=0)
{
if ($pageNum_Recordset1 > ceil($max_links/2))
{
$fgp = $pageNum_Recordset1 - ceil($max_links/2) > 0 ? $pageNum_Recordset1 - ceil($max_links/2) : 1;
$egp = $pageNum_Recordset1 + ceil($max_links/2);
if ($egp >= $totalPages_Recordset1)
{
$egp = $totalPages_Recordset1+1;
$fgp = $totalPages_Recordset1 - ($max_links-1) > 0 ? $totalPages_Recordset1 - ($max_links-1) : 1;
}
}
else {
$fgp = 0;
$egp = $totalPages_Recordset1 >= $max_links ? $max_links : $totalPages_Recordset1+1;
}
if($totalPages_Recordset1 >= 1) {
# ------------------------
# Searching for $_GET vars
# ------------------------
$_get_vars = '';
if(!empty($_GET) || !empty($HTTP_GET_VARS)){
$_GET = empty($_GET) ? $HTTP_GET_VARS : $_GET;
foreach ($_GET as $_get_name => $_get_value) {
if ($_get_name != "pageNum_rsSiteMarchand") {
$_get_vars .= "&$_get_name=$_get_value";
}
}
}
$successivo = $pageNum_Recordset1+1;
$precedente = $pageNum_Recordset1-1;
$firstArray = ($pageNum_Recordset1 > 0) ? "<a href=\"$_SERVER[PHP_SELF]?pageNum_rsSiteMarchand=$precedente$_get_vars\">$prev_Recordset1</a>" : "$prev_Recordset1";
# ----------------------
# page numbers
# ----------------------
for($a = $fgp+1; $a <= $egp; $a++){
$theNext = $a-1;
if($show_page)
{
$textLink = $a;
} else {
$min_l = (($a-1)*$maxRows_rsSiteMarchand) + 1;
$max_l = ($a*$maxRows_rsSiteMarchand >= $totalRows_rsSiteMarchand) ? $totalRows_rsSiteMarchand : ($a*$maxRows_rsSiteMarchand);
$textLink = "$min_l - $max_l";
}
$_ss_k = floor($theNext/26);
if ($theNext != $pageNum_Recordset1)
{
$pagesArray .= "<a href=\"$_SERVER[PHP_SELF]?pageNum_rsSiteMarchand=$theNext$_get_vars\">";
$pagesArray .= "$textLink</a>" . ($theNext < $egp-1 ? $separator : "");
} else {
$pagesArray .= "$textLink" . ($theNext < $egp-1 ? $separator : "");
}
}
$theNext = $pageNum_Recordset1+1;
$offset_end = $totalPages_Recordset1;
$lastArray = ($pageNum_Recordset1 < $totalPages_Recordset1) ? "<a href=\"$_SERVER[PHP_SELF]?pageNum_rsSiteMarchand=$successivo$_get_vars\">$next_Recordset1</a>" : "$next_Recordset1";
}
}
return array($firstArray,$pagesArray,$lastArray);
} |
_____________________________________________________
Ma requette SQL :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $maxRows_rsSiteMarchand = 3;
$pageNum_rsSiteMarchand = 0;
if (isset($_GET['pageNum_rsSiteMarchand'])) {
$pageNum_rsSiteMarchand = $_GET['pageNum_rsSiteMarchand'];
}
$startRow_rsSiteMarchand = $pageNum_rsSiteMarchand * $maxRows_rsSiteMarchand;
$colname_rsSiteMarchand = "-1";
if (isset($_GET['cid'])) {
$colname_rsSiteMarchand = (get_magic_quotes_gpc()) ? $_GET['cid'] : addslashes($_GET['cid']);
}
mysql_select_db($database_ohconnexion, $ohconnexion);
$query_rsSiteMarchand = sprintf("SELECT * FROM ohmarchant WHERE MarchantCategorieID = %s ORDER BY RAND ()", GetSQLValueString($colname_rsSiteMarchand, "int"));
$query_limit_rsSiteMarchand = sprintf("%s LIMIT %d, %d", $query_rsSiteMarchand, $startRow_rsSiteMarchand, $maxRows_rsSiteMarchand);
$rsSiteMarchand = mysql_query($query_limit_rsSiteMarchand, $ohconnexion) or die(mysql_error());
$row_rsSiteMarchand = mysql_fetch_assoc($rsSiteMarchand); |
_______________________________________
Merci de m'aider a appliquer votre méthode deja cité, merci bcp