Bug affichage page par page :-(( [Résolu]

Signaler
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005
-
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005
-
Bonjour à toutes et à tous,

J'ai un problème avec un affichage page à page pour lier 2 requêtes. Seule la 2ème requête ($result) prend bien en compte un affichage limité à 10 items par par page... la 1ère ($result_bis) affiche tous les résultats sans tenir compte de ce qui va suivre! La vilaine!?

Désolé pour le codage ci-dessous, les puristes vont probablement "bondir" mais je ne fais que m'inspirer de codes déjà existants.... c'est aussi pour ça que je calle!

Merci pour votre aide pour faire en sorte que j'ai bien un affichage de 10 résultats UNIQUEMENT sur chaque page tout en tenant compte du nombre de résultats des 2 requêtes.

mon code :

<?php include("online_connexion.php");


$nb_results_p_page = 10; // nombre de résultats par page
$nb_avant = 3; // nombre de page avant la page courante
$nb_apres = 3; // nombre de page après la page courante
$premiere = 1; // aficher le lien "première page" (1 ou 0)
$derniere = 1; // afficher le lien "dernière page" (1 ou 0)
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page
$start = ($courant - 1) * $nb_results_p_page; // start (requete mysql)


$dpt_i = $HTTP_GET_VARS['dpt'];
$dpt = sprintf("%02s",$dpt_i);
$dpt_suiv_i = ($dpt + 1);
$dpt_suiv = sprintf("%02s",$dpt_suiv_i);


$type = $HTTP_GET_VARS['type'];


if(!empty($_POST['tri']))
{
$tri = $HTTP_POST_VARS['tri'];
}
else{
if(!empty($_GET['tri'])){$tri=$_GET['tri'];}else{$tri="CP";}
}


// comptage du nombre de lignes de la base
$result = mysql_query("SELECT count(ID) FROM inscrits WHERE CP>='".$dpt."000' AND CP<'".$dpt_suiv."000' AND TYPE!='".$type."' ORDER BY `CP` ASC");
if(!$result)
{
// redirection erreur
header("location: erreur.php");
mysql_close($db);
exit;
}
$ret = mysql_fetch_array($result);
// nombre de lignes
$nb_results = $ret[0];


$result = mysql_query("SELECT * FROM inscrits WHERE CP>='".$dpt."000' AND CP<'".$dpt_suiv."000' AND TYPE!='".$type."' AND PREMIUM='OUI' ORDER BY `PREMIUM` DESC,'".$tri."' ASC,`INTITULE` ASC LIMIT $start, $nb_results_p_page");
$result_bis = mysql_query("SELECT * FROM inscrits WHERE CP>='".$dpt."000' AND CP<'".$dpt_suiv."000' AND TYPE!='".$type."' AND PREMIUM!='OUI' ORDER BY `LISTE_FREE` ASC,'".$tri."' ASC,`INTITULE` ASC LIMIT $start, $nb_results_p_page");

if($nb_results) {
// debut du tableau
echo ''.$nb_results.' référencements';
echo '<form method="POST">';
echo '<select size="1" name="tri">';
echo '<option>choix de tri</option>';
echo '<option>CP</option>';
echo '<option>INTITULE</option>';
echo '<option>VILLE</option>';
echo '<option>NOM</option>';
echo '</select>&nbsp;';
echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

';
echo '</form>';
echo ''."\n";
// while($row mysql_fetch_array($result)) {
$descriptif_liste = substr($row['DESCRIPTIF_LISTE'],0,299)."...";
echo '<table bgcolor="#FFDB18" border="0" cellpadding="1" width="495">';
echo '----
';
echo ', [' . $_SERVER['SCRIPT_NAME'] . '?dpt='.$dpt.'&type='.$type.'&tri='.$tri.' Première]&nbsp;&nbsp;';

// page précédente
if($courant > 1)
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant - 1) . '&dpt='.$dpt.'&type='.$type.'&tri='.$tri.' Précédente]&nbsp;&nbsp;';


// affichage des numéros de page
for($i = $courant - $avant; $i <= $courant + $apres; $i++)
{
// page courante
if($i == $courant)
echo '' . $i . '&nbsp;&nbsp;';
else
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $i . '&dpt='.$dpt.'&type='.$type.'&tri='.$tri.' ' . $i . ']&nbsp;&nbsp;';
}


// page suivante
if($courant < $nb_pages)
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . ($courant + 1) . '&dpt='.$dpt.'&type='.$type.'&tri='.$tri.' Suivante]&nbsp;&nbsp;';

if($derniere && $courant + $apres < $nb_pages)
echo '[' . $_SERVER['SCRIPT_NAME'] . '?page=' . $nb_pages . '&dpt='.$dpt.'&type='.$type.'&tri='.$tri.' Dernière]&nbsp;&nbsp;';


mysql_close($connexion);

6 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Hum désolé pour le $dpt_suiv


Ah ok, bah dans ce cas utilise mysql_num_rows() pour retourner le nombre de lignes de la première requête, ensuite tu fais un $nb_results_p_page-$nbre_lignes et tu auras ton résultat pour mettre dans la seconde requête à la place de $nb_results_p_page



a +

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



$dpt_suiv n'est pas un chiffre (regarde, tu fais un printf avec)



Ensuite remplace tous les $HTTP_POST_VARS et $HTTP_GET_VARS par $_POST et $_GET respectivement.



a ++
<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005

OK pour les $_POST et $_GET, je vais faire les modifs.

Par contre, je n'ai pas de soucis avec $dpt_suiv dans mes requêtes.

C'est simplement que la requête $result_bis ne tient pas compte des résultats précédents de $result et qu'elle m'affiche normalement 10 autres résultats :

$result = mysql_query("SELECT * FROM bnb_inscrits WHERE CP>='".$dpt."000' AND CP<'".$dpt_suiv."000' AND TYPE!='".$type."' AND PREMIUM='OUI' ORDER BY `PREMIUM` DESC,'".$tri."' ASC,`INTITULE` ASC LIMIT $start, $nb_results_p_page");
$result_bis = mysql_query("SELECT * FROM bnb_inscrits WHERE CP>='".$dpt."000' AND CP<'".$dpt_suiv."000' AND TYPE!='".$type."' AND PREMIUM!='OUI' ORDER BY `LISTE_FREE` ASC,'".$tri."' ASC,`INTITULE` ASC LIMIT $start, $nb_results_p_page");

Je voudrais que -par exemple- s'il y a 4 résultats pour la première requête d'affichée, alors la seconde n'en affiche que 6 pour bien avoir 10 affichages sur une même page.

Merci pour l'aide.

Je sèche grâve ;-)
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005

Vraiment désolé d'abuser mais je ne trouve pas la soluce.

Pourrais-tu STP me passer le code à insérer suivant mon précédent code?

C'est là où je vois que je ne suis vraiment pas un codeur mais un simple "copier-colleur"!!!

Merci pour ta compréhension.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Bah après ça dépend de la logique de ton code, renseigne-toi sur
fr.php.net pour la fonction mysql_num_rows() tu pourras modifier
ensuite ton code tout seul.

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Messages postés
24
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
11 septembre 2005

Juste au même moment je viens de trouver la soluce en suivant tes recommandations.

Super sympa. Merci encore!

Ps : C'est beau la maîtrise :-)