Erreur code pagination
teler
Messages postés
93
Statut
Membre
-
teler Messages postés 93 Statut Membre -
teler Messages postés 93 Statut Membre -
Bonjour,
voilà je débute en php, je fais un site immobilier dans lequel pour l'internaute, il y a un formulaire de recherche d'annonces immobiliere pour l'internaute.
Une fois remplis, l'internaute arrive sur une autre page qui traite la recherche et affiche les annonces.
jusque là tout est ok, sauf que je veux limiter mes resultats d'annonces à un certain nombre et faire un systeme de pagination pour les annonces qu'il a. j'ai adapter mon code par rapport à un code que j'ai trouvé sur un tutoriel mais ça marche partiellement. Sur la premiere page d'affichage des reponses pas de soucis, en bas il m'indique que la totalité des annonces tiens sur trois pages par exemple. Et quand je click pour aller page 2. il me met cette erreur:
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
ça correspond à mes valeurs en haut de mon code. ( si le tel champs est remplis etc)
j'en conclu donc que sur mon lien de pagination en bas de page je dois transmettre des données.
voici mon code si quelqu'un peut m'aider. merci
<?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']&&$_GET['trans']&&$_GET['choix']&&$_GET['nombre']&&$_GET['surf']&&$_GET['prix']&&$_GET['animal']);
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>';
?>
voilà je débute en php, je fais un site immobilier dans lequel pour l'internaute, il y a un formulaire de recherche d'annonces immobiliere pour l'internaute.
Une fois remplis, l'internaute arrive sur une autre page qui traite la recherche et affiche les annonces.
jusque là tout est ok, sauf que je veux limiter mes resultats d'annonces à un certain nombre et faire un systeme de pagination pour les annonces qu'il a. j'ai adapter mon code par rapport à un code que j'ai trouvé sur un tutoriel mais ça marche partiellement. Sur la premiere page d'affichage des reponses pas de soucis, en bas il m'indique que la totalité des annonces tiens sur trois pages par exemple. Et quand je click pour aller page 2. il me met cette erreur:
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
ça correspond à mes valeurs en haut de mon code. ( si le tel champs est remplis etc)
j'en conclu donc que sur mon lien de pagination en bas de page je dois transmettre des données.
voici mon code si quelqu'un peut m'aider. merci
<?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']&&$_GET['trans']&&$_GET['choix']&&$_GET['nombre']&&$_GET['surf']&&$_GET['prix']&&$_GET['animal']);
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>';
?>
A voir également:
- Erreur code pagination
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
Salut,
Bon j'ai pas tout lu ton code mais suivant ce que tu as dit tu ne recupere pas tes variables :
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
$animal = $_POST['animal'];
dans la page suivante ce qui est normal.
Les variables $_POST servent pour la recuperation de data depuis un formulaire. Donc si tu les mets comme ca dans ta page c'est pas trop top. Il faudrait plutot faire :
if (!empty($_POST)) //verification de postage de formulaire
{
//mettre les variables recuperer par post de form
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
}
else
{
//mettre l'initialisation des variables
$trans="";$choix="";
}
Apres comme tu me dis que tu n'arrive pas a passer sur la deuxieme page c'est normal car tes variable ($trans,...) sont vides. Pour regler ca tu dois lorsque tu recupere les informations en postage de formulaire les mettre dans les session :
if (!empty($_POST))
{
//mettre les variables recuperer par post de form
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
$_SESSION["trans"] = $trans;
$_SESSION["choix"] = $choix; //ainsi de suite avec toutes les variables
}
else
{
//mettre l'initialisation des variables
$trans="";$choix="";
}
Enfin tu a besoin que dans la page deux il y ait une initialisation des variables a la valeur de la session
if (!empty($_POST))
{
//mettre les variables recuperer par post de form
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
$_SESSION["trans"] = $trans;
$_SESSION["choix"] = $choix; //ainsi de suite avec toutes les variables
}
else
{
//mettre l'initialisation des variables
$trans="";$choix="";
//je verifie que les sessions ne sont pas vides
if (!empty($_SESSION))
{
$trans = $_SESSION["trans"]; //ainsi de suite.
}
}
Voila bon courage
Bon j'ai pas tout lu ton code mais suivant ce que tu as dit tu ne recupere pas tes variables :
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
$animal = $_POST['animal'];
dans la page suivante ce qui est normal.
Les variables $_POST servent pour la recuperation de data depuis un formulaire. Donc si tu les mets comme ca dans ta page c'est pas trop top. Il faudrait plutot faire :
if (!empty($_POST)) //verification de postage de formulaire
{
//mettre les variables recuperer par post de form
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
}
else
{
//mettre l'initialisation des variables
$trans="";$choix="";
}
Apres comme tu me dis que tu n'arrive pas a passer sur la deuxieme page c'est normal car tes variable ($trans,...) sont vides. Pour regler ca tu dois lorsque tu recupere les informations en postage de formulaire les mettre dans les session :
if (!empty($_POST))
{
//mettre les variables recuperer par post de form
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
$_SESSION["trans"] = $trans;
$_SESSION["choix"] = $choix; //ainsi de suite avec toutes les variables
}
else
{
//mettre l'initialisation des variables
$trans="";$choix="";
}
Enfin tu a besoin que dans la page deux il y ait une initialisation des variables a la valeur de la session
if (!empty($_POST))
{
//mettre les variables recuperer par post de form
$trans = $_POST['trans'];
$choix = $_POST['choix'];
$nombre = $_POST['nombre'];
$surfmini = $_POST['mini'];
$surfmaxi = $_POST['maxi'];
$prixmini = $_POST['mini2'];
$prixmaxi = $_POST['maxi2'];
$_SESSION["trans"] = $trans;
$_SESSION["choix"] = $choix; //ainsi de suite avec toutes les variables
}
else
{
//mettre l'initialisation des variables
$trans="";$choix="";
//je verifie que les sessions ne sont pas vides
if (!empty($_SESSION))
{
$trans = $_SESSION["trans"]; //ainsi de suite.
}
}
Voila bon courage
Merci ton code marche, seulement avant j'avais un code qui me permettait de trier ma requette sql selon la recherche spécifier sur le formulaire.
à savoir :
$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."%'";
et plus bas
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM produits '.$mareq); //
vu que je ne suis pas bon en php, avec ton code je ne sais pas comment adapter le mien pour trier la requette.
Voilà je sent que j'y suis presque mais bon je bloque.
Si t'as le temps de jeter un oeil! merci en tt cas!
à savoir :
$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."%'";
et plus bas
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM produits '.$mareq); //
vu que je ne suis pas bon en php, avec ton code je ne sais pas comment adapter le mien pour trier la requette.
Voilà je sent que j'y suis presque mais bon je bloque.
Si t'as le temps de jeter un oeil! merci en tt cas!