Aller au contenu

Sujets conseillés

Posté (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éfinie
if ($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é par Portekoi
Posté

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).'">

Posté

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

Posté

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+

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...