nina_bee Posté 15 Mars 2007 Posté 15 Mars 2007 (modifié) bonjour, je suis en train de créer un moteur de recherche en php qui permettrait de trouver les produits inscrits dans une base de données. J'aimerais limiter le nombre de résultats à 5 par page. Deux boutons font le liens vers la page suivante et la page précédente. Idéalement ces boutons bouclent le résultat (par exemple si on est sur la premiere page et que lon clique sur précédent, on arrive à la dernière page). Le problème est que lorsque je clique sur ces boutons, mon script ne parvient pas à récupérer la valeur de la variable de recherche... Du coup je tombe sur la page "veuillez entrer un mot pour la recherche". J'ai essayé de récuperer la variable grace à un champ caché mais ca ne marche pas non plus.... :??: Le bout de code: require_once ('connection.inc.php');//include_once ("fonctions.inc.php");mysql_select_db($base)or die("erreur sql reception.inc.php ".mysql_error()); // définition de la variable $recherche:if(isset($_POST['recherche'])){ $recherche=$_POST['recherche'];}else{$cache = $_POST['cache'];$recherche = $cache;}echo "recherche: ".$recherche;echo "<br> cache: ".$cache;//si la variable recherche est définieif ($recherche!=''){///////////////////////////////////////////////////////////////* $nombre : Nombre d'enregistrements que l'on veut afficher par page. $num_rows : Le nombre total d'enregistrements de la table . $limite : Où en sommes-nous dans notre affichage. $page : numéro de la page sur laquelle on est*/if(!isset($_GET['page']) || $page<2){ $page=1;}else{ $page=$_GET['page'];}//fin de la condition pour la page//nombres d'entrées dans la table:$NB="SELECT id FROM produits ";$reqNB = mysql_query($NB);$num_rows=mysql_num_rows($reqNB);$nombre = 5; // on va afficher 5 résultats par page.//on veut faire boucler le résultat:if (!isset($limite)||$num_rows-1<$limite){// $limite = 0; // si on arrive sur la page pour la première fois ou si on a vu toutes les pages on met limite à 0. } //fin de la condition de la limite //////////////////////////////////////////////////////////////////////////////////requette d'affichege des produits:///////////////////// $requette="SELECT * FROM produits WHERE nom LIKE '"."%".$recherche."%"."' OR description LIKE '"."%".$recherche."%"."' OR prix LIKE '"."%".$recherche."%"."'OR taille LIKE '"."%".$recherche."%"."' ORDER BY nom ASC LIMIT ".$limite.",".$nombre; //on récupere les réponses que l'on range dans la variable résultat $resultat = mysql_query($requette);//or die("erreur sql reception.inc.php: ".mysql_error()); //echo "<br>resultat = ".$resultat."<br>requette = ".$requette."<br> nombre!!=".$nombre."<br> limite!!: ".$limite;$req = mysql_query($select);//limite next$limNext = $limite + $nombre;}//fin de condition de la var $recherche?>page:<div class="centre"> <?php //AFFICHAGE DU RESULTAT //on veut afficher la liste des résultats trouvés par le moteur de recherche $Ncur = 0; // n° de la fiche courante while ($ligne=mysql_fetch_array($resultat)){ // une de plus $Ncur++; ?><!--on créé un lien qui permettra le passage de parametres php par url et dans une autre fenetre --> <div class="lien_detailpdt"> <a href="detail_produit.php?id=<?php echo $ligne['id'] ?>" target="_blank"><?php echo $ligne['nom']?></a> </div><?php }//on sort de la boucle while ?> <!-- on créé un champ caché qui sert à récuperer la variable recherche --> <form name="cache" method="post" action="<?php $PHP_SELF ?>" > <input type="texte" id="cache" value="<?php echo $recherche ?>" /> </form> <!-- fin cu formulaire --> </div><div class="arrow"><?php if($_GET['page'] != 1){//a modifier if($page*$nombre_resultats < $num_rows){//a modifier $debut-=5; $nombre_resultats-=5; echo '<a href="reception.inc?limite='.$limPrev.'"><img src="img/fleche_up.gif.gif" alt="passer aux articles suivants" border="0px" /></a>'; } }?> </div><!--vers page précédente --> <div id="middlearrow"></div> <div class="arrow"> <?php if($_GET['page'] != 1){ if($page*$nombre_resultats < $num_rows){ $debut+=5; $nombre_resultats+=5; echo '<a href="reception.inc?limite='.$limNext.'"><img src="img/fleche_up.gif.gif" alt="passer aux articles suivants" border="0px" /></a>'; } }?> </div><!--vers page suivante --> Merci d'avance à ceux qui m'aideront. EDIT Modérateur : Merci d'utiliser CODEBOX pour les codes longs et de ne pas ré-éditer un post après modification par un modérateur. Modifié 15 Mars 2007 par Portekoi
f_trt Posté 15 Mars 2007 Posté 15 Mars 2007 Il faut en plus de la valeur d'offset que tu passes aussi la valeur recherchée par exemple la ligne ou tu as echo '<a href="reception.inc?limite='.$limPrev.'"> tu devrais mettre : echo '<a href="reception.inc?limite='.$limPrev.'&recherche='.urlencode($recherche).'">
nina_bee Posté 15 Mars 2007 Auteur Posté 15 Mars 2007 coucou ! merci ca maaaaaaaaarche! par contre j'ai essayé avec recherche='.$recherche.'"> et ca marcharche aussi... Peut tu m'expliquer la différence entre les 2? merci encore
f_trt Posté 15 Mars 2007 Posté 15 Mars 2007 Si jamais l'internaute saisi un espace dans ce qu'il recherche ou par exemple un simple guillement tu perdras une partie de la variable fais un test tu verras. De toute façon c'est une sage précaution pour les paramètres passées en URL d'utiliser urlencode au moment du passage et urldecode a la reception avec en plus une fonction de nettoyage pour la sécurité. A+
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant