Systeme de pagination avec form recherche

teler Messages postés 93 Statut Membre -  
teler Messages postés 93 Statut Membre -
Bonjour,

j'ai vu sur plusieur site la technique pour faire le systeme de pagination mais je n'arrive pas à l'adapter à mon propre code! je débute et je ne sais comment faire pour la recuperation de la requete, car il y des variables et ont ma aidé un peu pour mon propre code.

je voudrais mettre un where ( quand tel champ du formualire est remplis ) voir plus haut les if. et pour le moment ya juste ecrit :


$retour_total=mysql_query('SELECT * FROM produits');


en gros au tt debut , ya une variable ($mareq) qui sert pour les conditions de remplissage du formulaire ( tout les if du debut)

puis une la recup sql : $retour_total=mysql_query('SELECT * FROM produits');

j'ai essayé comme ça :$retour_total=mysql_query('$mareq');

mais ça marche pas!

aidez moi svp j'en peux plus!



mais voici le code en entier ici :







<?php
$mareq = 'SELECT COUNT(*) AS total FROM produits WHERE 1';


$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];

$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];

$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];


$animal = $_POST['animal'];




if($trans != null) $mareq.=" AND idtrans = ".$trans;

if($choix != null) $mareq.=" AND catbat = ".$choix;
if($nombre != null) $mareq.=" AND nbre = ".$nombre;

if($surfmini != null) $mareq.=" AND surf >= ".$surfmini;
if($surfmaxi != null) $mareq.=" AND surf <= ".$surfmaxi;


if($prixmini != null) $mareq.=" AND prix >= ".$prixmini;
if($prixmaxi != null) $mareq.=" AND prix <= ".$prixmaxi;

if($animal != null) $mareq.=" AND type LIKE '%".$animal."%'";



$messagesParPage=5; //Nous allons afficher 5 messages par page.

//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT * FROM produits'); //Nous récupérons le contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.


//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);

if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);

if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}


$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query('SELECT * FROM produits ORDER BY id DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'');

while($data=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
echo
'<div class="hautmarge"></div><div class="bas2"><div style="padding-bottom:20px"></div>
<form method="post" action="traitement.php" class="formulaire">
<table width="370" height="140">
<tr>
<td>'.$data['type'].'</td>
<td></td>
</tr>
<tr>
<td>'.$data['nbre'].' pièces '.$data['surf'].' m2</td>
<td align="right">'.$data['prix'].' €</td>
</tr>


<tr>
<td><a href="annonce.php?ref='.$data['id'].' &prix='.$data['prix'].' &photo='.$data['photo'].' &type='.$data['type'].' &surf='.$data['surf'].' &nbre='.$data['nbre'].' &description='.$data['description'].'">'.$data['description'].'</a></td>
<td align="right"> <a href="photos_annonces/'.$data['photo'].'" rel="shadowbox" title="'.$data['nbre'].' pièces, '.$data['surf'].' m2" >
<img height="100px" class="no_cadre" src="photos_annonces/' .$data['photo']. '"/></a></td>
</tr>
<tr><td></td><td align="right">réf : '.$data['id'].'</td></tr>
</table></form></div><div style="padding-bottom:20px"></div>';

}




/*$mareq = "SELECT * FROM produits WHERE 1 ";

$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];

$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];

$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];


$animal = $_POST['animal'];

if($trans != null) $mareq.= " AND idtrans = ".$trans;
if($choix != null) $mareq.= " AND catbat = ".$choix;
if($nombre != null) $mareq.= " AND nbre = ".$nombre;

if($surfmini != null) $mareq.= " AND surf >= ".$surfmini;
if($surfmaxi != null) $mareq.= " AND surf <= ".$surfmaxi;


if($prixmini != null) $mareq.= " AND prix >= ".$prixmini;
if($prixmaxi != null) $mareq.= " AND prix <= ".$prixmaxi;

if($animal != null) $mareq.= " AND type LIKE '%".$animal."%'";





// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($mareq) or die('Erreur SQL !<br />'.$mareq.'<br />'.mysql_error());





while ($data = mysql_fetch_array($req))
{


$texte = $data['description'];
$nbcar = 20;
if (strlen($texte) > $nbcar)
{
$extrait_texte = ereg_replace("(.{".$nbcar."})( .*)$","\\1 ...", $texte);
echo '<div class="hautmarge"></div><div class="bas2"><div style="padding-bottom:20px"></div>
<form method="post" action="traitement.php" class="formulaire">
<table width="370" height="140">
<tr>
<td>'.$data['type'].'</td>
<td></td>
</tr>
<tr>
<td>'.$data['nbre'].' pièces '.$data['surf'].' m2</td>
<td align="right">'.$data['prix'].' €</td>
</tr>


<tr>
<td><a href="annonce.php?ref='.$data['id'].' &prix='.$data['prix'].' &photo='.$data['photo'].' &type='.$data['type'].' &surf='.$data['surf'].' &nbre='.$data['nbre'].' &description='.$data['description'].'">'.$extrait_texte.'</a></td>
<td align="right"> <a href="photos_annonces/'.$data['photo'].'" rel="shadowbox" title="'.$data['nbre'].' pièces, '.$data['surf'].' m2" >
<img height="100px" class="no_cadre" src="photos_annonces/' .$data['photo']. '"/></a></td>
</tr>
<tr><td></td><td align="right">réf : '.$data['id'].'</td></tr>
</table></form></div><div style="padding-bottom:20px"></div>';
}






else {
echo 'Aucune réponse ne correspond à votre recherche';
}


}
*/



echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="traitementBIS.php?page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';


?>
A voir également:

4 réponses

BoOst
 
Salut,

tout d'abord je n'ai pas eu le temps de tester le code, en particulier le système de page mais je vais déja t'aider un peu :)

un fois ta requete construite dans $mareq, tu peut l'executer avec "mysql_query($mareq)" sans les guillemets,
a condition que ta requete soit valide.

je te conseille de construire seulement la clause "where" de ta requete, par exemple:
$where = 'WHERE 1';
if($trans != null) $where.=" AND idtrans = ".$trans;
etc..

une fois que tu a where, tu l'utilise ensuite directement dans la requete de comptage :
$retour_total=mysql_query('SELECT * FROM produits '.$where);


Puis aussi plus loin dans le code, car il y a une autre requete qui cette fois renvoie le contenu et pas seulement le compte :
$retour_messages=mysql_query('SELECT * FROM produits '.$where.' ORDER BY id DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'');


En gros la 1ere requete sert juste a connaitre le nombre total de resultats, la seconde va chercher seulement les resultats voulus en fonction de la page en cours.


Bon courage !
0
teler Messages postés 93 Statut Membre 5
 
merci de m'avoir répondu, ça semble clair , j'ai juste fais un essai sans tout le code de pagination en changeant ma variable et j'ai ça comme erreur Erreur SQL !
WHERE 1 AND idtrans = 11 AND catbat = 24 AND nbre = 6
Erreur de syntaxe près de '1 AND idtrans = 11 AND catbat = 24 AND nbre = 6' à la ligne 1

et voici le code en question qui me semble juste pourtant.



<?php
$mareq = 'WHERE 1';

$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];

$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];

$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];


$animal = $_POST['animal'];

if($trans != null) $mareq.= " AND idtrans = ".$trans;
if($choix != null) $mareq.= " AND catbat = ".$choix;
if($nombre != null) $mareq.= " AND nbre = ".$nombre;

if($surfmini != null) $mareq.= " AND surf >= ".$surfmini;
if($surfmaxi != null) $mareq.= " AND surf <= ".$surfmaxi;


if($prixmini != null) $mareq.= " AND prix >= ".$prixmini;
if($prixmaxi != null) $mareq.= " AND prix <= ".$prixmaxi;

if($animal != null) $mareq.= " AND type LIKE '%".$animal."%'";





// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query('SELECT * FROM produits'.$mareq) or die('Erreur SQL !<br />'.$mareq.'<br />'.mysql_error());





while ($data = mysql_fetch_array($req))
{


$texte = $data['description'];
$nbcar = 20;
if (strlen($texte) > $nbcar)
{
$extrait_texte = ereg_replace("(.{".$nbcar."})( .*)$","\\1 ...", $texte);
echo '<div class="hautmarge"></div><div class="bas2"><div style="padding-bottom:20px"></div>
<form method="post" action="traitement.php" class="formulaire">
<table width="370" height="140">
<tr>
<td>'.$data['type'].'</td>
<td></td>
</tr>
<tr>
<td>'.$data['nbre'].' pièces '.$data['surf'].' m2</td>
<td align="right">'.$data['prix'].' €</td>
</tr>


<tr>
<td><a href="annonce.php?ref='.$data['id'].' &prix='.$data['prix'].' &photo='.$data['photo'].' &type='.$data['type'].' &surf='.$data['surf'].' &nbre='.$data['nbre'].' &description='.$data['description'].'">'.$extrait_texte.'</a></td>
<td align="right"> <a href="photos_annonces/'.$data['photo'].'" rel="shadowbox" title="'.$data['nbre'].' pièces, '.$data['surf'].' m2" >
<img height="100px" class="no_cadre" src="photos_annonces/' .$data['photo']. '"/></a></td>
</tr>
<tr><td></td><td align="right">réf : '.$data['id'].'</td></tr>
</table></form></div><div style="padding-bottom:20px"></div>';
}






else {
echo 'Aucune réponse ne correspond à votre recherche';
}


}



?>

</html>
0
BoOst
 
attention il faut qu'il y ai un espace avant le where : mysql_query('SELECT * FROM produits '.$mareq)
(si tu a de quoi, je te conseille de tester tes requetes dans phpmyadmin ou un autre outil de gestion mysql)

sinon essaye comme ca :

$mareq = '';

$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];

$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];

$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];


$animal = $_POST['animal'];

if($trans != null) $mareq.= ($mareq==""?"":" AND ")."idtrans = ".$trans;
if($choix != null) $mareq.= ($mareq==""?"":" AND ")."catbat = ".$choix;
if($nombre != null) $mareq.= ($mareq==""?"":" AND ")."nbre = ".$nombre;

if($surfmini != null) $mareq.= ($mareq==""?"":" AND ")."surf >= ".$surfmini;
if($surfmaxi != null) $mareq.= ($mareq==""?"":" AND ")."surf <= ".$surfmaxi;


if($prixmini != null) $mareq.= ($mareq==""?"":" AND ")."prix >= ".$prixmini;
if($prixmaxi != null) $mareq.= ($mareq==""?"":" AND ")."prix <= ".$prixmaxi;

if($animal != null) $mareq.= ($mareq==""?"":" AND ")."type LIKE '%".$animal."%'";



// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
if ($mareq != "") $mareq = " WHERE ".$mareq;
$req = mysql_query('SELECT * FROM produits'.$mareq) or die('Erreur SQL !<br />'.$mareq.'<br 
0
teler Messages postés 93 Statut Membre 5
 
le code marche partiellement, je m'explique, la premiere page s'affiche normalement avec en bas les liens sur les autres pages mais quand je passe sur la page 2 , c'est la débandade!!

il me met une multitude d'erreur
qui correspondent à toutes mes variables du debut du code $trans $ prixmini etc..
et les liens vers les autres pages à changé, en page 1 j'avais un lien vers 3 page, et en page 2 j'ai un lien vers 29 pages. je crack
plus bas ya mon code


Notice: Undefined index: trans in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 73

Notice: Undefined index: choix in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 74

Notice: Undefined index: nombre in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 75

Notice: Undefined index: mini in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 77

Notice: Undefined index: maxi in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 78

Notice: Undefined index: mini2 in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 80

Notice: Undefined index: maxi2 in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 81

Notice: Undefined index: animal in C:\Users\nicolas\Desktop\apprentissage php\traitementBIS.php on line 84





<?php
$mareq = 'WHERE 1';


$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];

$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];

$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];


$animal = $_POST['animal'];



if($trans != null) $mareq.=" AND idtrans = ".$trans;

if($choix != null) $mareq.=" AND catbat = ".$choix;
if($nombre != null) $mareq.=" AND nbre = ".$nombre;

if($surfmini != null) $mareq.=" AND surf >= ".$surfmini;
if($surfmaxi != null) $mareq.=" AND surf <= ".$surfmaxi;


if($prixmini != null) $mareq.=" AND prix >= ".$prixmini;
if($prixmaxi != null) $mareq.=" AND prix <= ".$prixmaxi;

if($animal != null) $mareq.=" AND type LIKE '%".$animal."%'";



$messagesParPage=1; //Nous allons afficher 5 messages par page.

//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM produits '.$mareq); //Nous récupérons le contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.


//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);

if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);

if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}


$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire

// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query('SELECT * FROM produits '.$mareq.' ORDER BY id DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'');

while($data=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design...
//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
echo
'<div class="hautmarge"></div><div class="bas2"><div style="padding-bottom:20px"></div>
<form method="post" action="traitement.php" class="formulaire">
<table width="370" height="140">
<tr>
<td>'.$data['type'].'</td>
<td></td>
</tr>
<tr>
<td>'.$data['nbre'].' pièces '.$data['surf'].' m2</td>
<td align="right">'.$data['prix'].' €</td>
</tr>


<tr>
<td><a href="annonce.php?ref='.$data['id'].' &prix='.$data['prix'].' &photo='.$data['photo'].' &photo2='.$data['photo2'].' &photo3='.$data['photo3'].'&photo4='.$data['photo4'].' &type='.$data['type'].' &surf='.$data['surf'].' &nbre='.$data['nbre'].' &description='.$data['description'].'">'.$data['description'].'</a></td>
<td align="right"> <a href="photos_annonces/'.$data['photo'].'" rel="shadowbox" title="'.$data['nbre'].' pièces, '.$data['surf'].' m2" >
<img height="100px" class="no_cadre" src="photos_annonces/' .$data['photo']. '"/></a></td>
</tr>
<tr><td></td><td align="right">réf : '.$data['id'].'</td></tr>
</table></form></div><div style="padding-bottom:20px"></div>';

}





echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="traitementBIS.php?page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';


?>
0