Pagination d'une requête

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pagination d'une requête

par auclairp » 24 mai 2007, 07:18

ha là ca fonctionne

il manquant un petit isset
<?
$keywords = isset($_POST['recherche']) ? $_POST['recherche'] : $_GET['recherche'];?>
et de mettre dans mon lien le keywords
Merci de m'avoir orienté

par auclairp » 24 mai 2007, 06:48

Remplace cette ligne :
$keywords = $_POST["recherche"];     // CRITÈRE DE RECHERCHE 
Par celle-ci :
$keywords = $_POST['recherche'] ? $_POST['recherche'] : $_GET['recherche']; // CRITÈRE DE RECHERCHE
Et tu pense à rajouter un "&recherche='.$keywords.'" dans tes liens vers les pages suivantes et précédentes.
Désolé ca ne fonctionne pas, toujours le même résultat, une fois que je passe à la page 2 et autre je perd ma variable "keywords"

Merci quand même...

par Klomac » 24 mai 2007, 06:44

Remplace cette ligne :
$keywords = $_POST["recherche"];     // CRITÈRE DE RECHERCHE 
Par celle-ci :
$keywords = $_POST['recherche'] ? $_POST['recherche'] : $_GET['recherche']; // CRITÈRE DE RECHERCHE
Et tu pense à rajouter un "&recherche='.$keywords.'" dans tes liens vers les pages suivantes et précédentes.

par auclairp » 24 mai 2007, 05:56

OK voila ca fonctionne à 100% si ma requête des fixe, parcontre moi c'eat avec une ptite moteur de recherche très simple, mais la ca fonctionne plus.

Il affiche ma première page pas de trouble et (j'ai mis des ptit ECHO test pour le nombre de pages vs nb de résultat, ca aussi ca fonctionne, le problème se trouve lorsque je fait page suivente, mon caractère de recherche ne suit pas. Comment faire pour le faire suivre d'une page à l'autre car lorsque je change de page, c'est comme si je demandais une requère sans WHERE alors il affiche tout ce qu'il y a sur la Bdd à partir de la page 2 (ici la 11ème entrée).

Voici ce que j'ai fait:
<?	
// SÉLECTION RECHERCHE PAR MOTS CLEFS //

	$showimg = "oui";	// AFFICHER LES IMAGES
	$showinfo = "oui";	// AFFICHER LES INFO
		
	$keywords = $_POST["recherche"];	 // CRITÈRE DE RECHERCHE
	
	// CRITÈRE DE LA REQUÊTE SQL
	$champs    = "description.code, description.nom, description.nomfr, description.genre, description.description, description.video, loan.loanto, loan.date_out, loan.attente";	
	$nom_table =  "loan RIGHT JOIN description ON description.code=loan.code";
	$where = "WHERE description.code LIKE '%".$keywords."%' OR description.nom LIKE '%".$keywords."%' OR description.nomfr LIKE '%".$keywords."%'";
	$order_by =  "code DESC"; 
	

//Pages par Pages
$nb_results_p_page = 10; // nombre de résultats par page 
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page 
$start = ($courant - 1) * $nb_results_p_page; // start (requete mysql) 

// comptage du nombre de lignes de la base 			   					 
$result = mysql_query("SELECT count(id) FROM description ".$where."");  
$ret = mysql_fetch_array($result); 

// nombre de lignes 
$nb_results = $ret[0]; 

// requete 
$result = mysql_query("SELECT ".$champs." FROM ".$nom_table." ".$where." ORDER BY code LIMIT $start, $nb_results_p_page");  

// nombre total de pages 
$nb_pages = ceil($nb_results / $nb_results_p_page); 

echo "$where"; // TEST AFFICHAGE du WHERE (KEYWORD)
echo "<br>";
echo "$nb_results"; // TEST AFFICHAGE NB DE REQUÊTE
echo "|";
echo "$nb_pages"; // TEST AFFICHAGE NB DE PAGES
      
// page précédente 
if($courant > 1) 
     echo '<a href="search.php?page=' . ($courant - 1) . '">Précédente</a>  '; 

// page suivante 
if($courant < $nb_pages) 
     echo '<a href="search.php?page=' . ($courant + 1) . '">Suivante</a>  '; 

?>
PAR LA SUITE J'AFFICHE LES RÉSULTATS.
Merci de votre aide

par Cyrano » 23 mai 2007, 22:35

À mon avis, tu as du lire un peu vite le tuto. Il y a des étapes imortantes à suivre et comme il est également mentioné, les commentaires du code sont importants.

Suis bien les étapes :
  1. Déterminer les paramètres : nombre à afficher par page;
  2. Compter les lignes totales disponibles => déterminer le nombre de pages;
  3. Définir la requête de base (hors clause LIMIT)
  4. Vérifier si tu as un paramètre qui définit sur quelle page tu es : s'il n'y en a pas, la limite commencera à 0 (pas à chaine vide "") => ajouter la clause LIMIT à ta requête;
  5. exécuter la requête n° 2 pour afficher les ligne de la page;
  6. Afficher les liens incluant le paramètre de numéro de page : si tu es sur la page 1, tu devras indiquer le paramètre de page 2 pour le lienvers la page suivante ... si cette page suivante existe, ce que tu as déterminé au début par comptage.
Fais-toi des croquis sur papier pour visualiser le déroulement.

par auclairp » 23 mai 2007, 22:05

Ok j'ai essayer un des script... mais ca marche pas vraiment. le problème vient du comptage du nombre de résultats.

voici...
<?	
// SÉLECTION 10 DERNIER // 
if(isset($_POST['dernier']))
{
	$order = $_POST['order'];
	$showimg = "oui";
	$showinfo = "oui";
	$afficher1 = 1;	 
	
	$champs    = "description.code, description.nom, description.nomfr, description.genre, description.description, description.video, loan.loanto, loan.date_out, loan.attente";	$nom_table = "loan RIGHT JOIN description";
	$nom_table =  "loan RIGHT JOIN description ON description.code=loan.code";
	$order_by =  "code DESC"; 
	$limite =  "LIMIT 10";
	$where = " ";
	
}

// SÉLECTION RECHERCHE PAR MOTS CLEFS //
if(isset($_POST['rechercher'])) // POST RECHERCHER
{
	$afficher1 = 1;
	$showimg = "oui";
	$showinfo = "oui";
	$order = "code";
		
	$keywords = $_POST["recherche"];

	$champs    = "description.code, description.nom, description.nomfr, description.genre, description.description, description.video, loan.loanto, loan.date_out, loan.attente";	
	$nom_table =  "loan RIGHT JOIN description ON description.code=loan.code";
	$where = "description.code LIKE '%".$keywords."%' OR description.nom LIKE '%".$keywords."%' OR description.nomfr LIKE '%".$keywords."%' OR loan.loanto LIKE '%".$keywords."%'";
	$order_by =  "code DESC"; 
	$limite =  "";
	
} // IF RECHERCHER 

else {}

if($afficher1 == 1)
{ 

//Pages par Pages
$nb_results_p_page = 10; // nombre de résultats par page 
$courant = empty($_GET['page']) ? 1 : $_GET['page']; // page 
$start = ($courant - 1) * $nb_results_p_page; // start (requete mysql) 

// comptage du nombre de lignes de la base 
$result1 = mysql_query("SELECT ".$champs." FROM ".$nom_table." WHERE ".$where.""); 
$ret = mysql_fetch_array($result1); 


// nombre de lignes 
$nb_results = $ret[0]; 

// requete 
$result = mysql_query("SELECT ".$champs." FROM ".$nom_table." WHERE ".$where." ORDER BY ".$order_by." LIMIT $start, $nb_results_p_page"); 

// nombre total de pages 
$nb_pages = ceil($nb_results / $nb_results_p_page); 


      
// page précédente 
if($courant > 1) 
     echo '<a href="search.php?page=' . ($courant - 1) . '">Précédente</a>  '; 

// page suivante 
if($courant < $nb_pages) 
     echo '<a href="search.php?page=' . ($courant + 1) . '">Suivante</a>  '; 

?>
 
	<tr class="onglet">
		<td class="dvd-image"></td>
		<td class="dvd-code">CODE</td>
		<td class="dvd-titre">TITRE</td>
		<td class="dvd-genre">GENRE</td>
		<td class="dvd-loan">LOUER À</td>
	</tr>
	
<? 
}	   		

if (mysql_num_rows($resultat) >= 1)	
	echo "$result";
	while ($rows=mysql_fetch_array($result))
	{
	?>
et ma requête s'affiche pas de problème, avec le limit inclus, mais j'ai pas les "suivant" "précédant" ???

Merci de votre aide

par jojolapine » 23 mai 2007, 13:33

par Xenon_54 » 23 mai 2007, 07:09

Quelques articles sur le sujet:
http://www.phpsources.org/scripts-Affic ... ge-PHP.htm

(Bonjour Montréalais)

Pagination d'une requête

par auclairp » 23 mai 2007, 06:51

Voici j'essais tant bien que mal de fair eun système de pagination (très simple) pour ma requête. J'Y ARRIVE PAS

Quelqu'un pourrais m'orienter unpeu.
Voici le code de ma requête. !!
if(isset($_POST['rechercher'])) // POST RECHERCHER
{
	$afficher1 = 1;
	$showimg = "oui";
	$showinfo = "oui";
	$order = "code";
		
	$keywords = $_POST["recherche"];

	$sql = "SELECT description.code, description.nom, description.nomfr, description.genre, description.description, description.video, loan.loanto, loan.date_out, loan.attente 
			FROM loan RIGHT JOIN description 
			ON description.code=loan.code
			WHERE   description.code LIKE '%".$keywords."%' OR 
					description.nom LIKE '%".$keywords."%' OR 
					description.nomfr LIKE '%".$keywords."%' OR 
					loan.loanto LIKE '%".$keywords."%' 
			ORDER BY ".$order."";
	
	$resultat = mysql_query($sql);
	
} // IF RECHERCHER 

else {}

if($afficher1 == 1)
{ ?>
 
	<tr class="onglet">
		<td class="dvd-image"></td>
		<td class="dvd-code">CODE</td>
		<td class="dvd-titre">TITRE</td>
		<td class="dvd-genre">GENRE</td>
		<td class="dvd-loan">LOUER À</td>
	</tr>
	
<? 
}	   		

if (mysql_num_rows($resultat) >= 1)	
	
	while ($rows=mysql_fetch_array($resultat))
	{
	?>
		<tr class="resultat">		
			<td class="image">	<? if ($showimg=="oui")
									{			
										$image = (file_exists("thumb/".$rows['code'] ."_t.jpg")) ? "thumb/".$rows['code'] ."_t.jpg" : "thumb/defaut.jpg";
										$b_image = (file_exists("thumb_b/b_".$rows['code'] .".jpg")) ? "thumb_b/b_".$rows['code'] .".jpg" : "thumb/defaut.jpg";?>
										<A HREF="#" onClick="window.open('<? echo $b_image; ?>','_blank',' width=410, height=500');return(false)"><?echo('<img src="'.$image.'" border="0" >');?></a>
								<?	}?>
			</td>	 
			<td class="code"><? echo $rows['code']; ?></td>
			<td class="titre"><b><a href="infodvd.php?code=<? echo $rows['code']; ?>"><? echo $rows['nom']; if ($rows['video']== true){?><a href="infodvd.php?code=<? echo $rows['code']; ?>#video"><img src="images/video.jpg" border="0" height="20"></a><?}?><br><div class="description"><b><? echo $rows['nomfr']; ?></b></div></a></b>
														
							<? if ($showinfo=="oui")
									{ ?>
									<div class="description"><? echo $rows['description']; ?></div>
							<? 		} ?>
			</td>
			
			<td class="genre"><? echo $rows['genre']; ?></td>
			<td class="loan"><? if ($rows['loanto']==false)
										{ echo '<img src="images/yes.jpg" border="0" width="18" height="16"> <br>Disponible</a>'; } 
										elseif ($rows['loanto']== 'En Attente')
										{ echo '<img src="images/no.png" border="0"> <br>En attente</a>'; }
										elseif ($rows['loanto']==true)
										{ echo '<img src="images/no.png" border="0"> <br>Non Disponible</a>'; }
								?></td>
		</tr>
<?	}

if($afficher2 == 1){ ?><form action="search.php" method="post">
						<tr><td colspan="5" align="center"><input type="submit" name="prochain" value="Voir les 10 prochains"></td></tr>
						</form><?
					} 
else if (mysql_num_rows($resultat) <= 1)
        {
		if (isset($_POST['alpha']))
			{
			echo ("<tr><td colspan='5' class='aucune_donnee'>Aucun résultat <br>pour un DVD commancant<br>par la lettre <font color='#CC0000'>$alphabet</font></font></td></tr>");
			}
		else if (isset($_POST['rechercher']))
			{
			echo ("<tr><td colspan='5' class='aucune_donnee'>Aucun résultat <br>pour un DVD contenant<br>le mot <font color='#CC0000'>$keywords</font></font></td></tr>");
			}
		} 
		
?>


</table>
Sinon connessez-vous une adresse qui l'explique très bien !!!
Merci