Défaut dans (moteur de recherche avec affichage par page)!

Petit nouveau ! | 2 Messages

12 déc. 2013, 19:54

bonjour à tous,
voilà, j'ai un petit moteur de recherche (fonctionnel) auquel j'ai greffé un affichage par page (fonctionnel si utilisé seul)...alors mon moteur cherche et trouve (heureusement) mais quand je clique sur la seconde page du (par page) rien ne s'affiche et j'ai une page blanche!!!
question: d'où vient cet erreur? merci.
voici le code...rassurez-vous il n'est pas long :-/
<?PHP

if(isset($_POST['mots']) && $_POST['mots'] != NULL){ // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.

	mysql_connect('host','root','pass');
  mysql_select_db('base'); // on se connecte à MySQL. Je vous laisse remplacer les différentes informations pour adapter ce code à votre site.

$mots = htmlspecialchars($_POST['mots']); // on crée une variable $mots pour faciliter l'écriture de la requête SQL, mais aussi pour empêcher les éventuels malins qui utiliseraient du PHP ou du JS, avec la fonction htmlspecialchars().

$req = mysql_query("SELECT * FROM moteur WHERE nom LIKE '%$mots%' ORDER BY code DESC") or die (mysql_error()); // la requête, que vous devez maintenant comprendre ;)
$nbArt = mysql_num_rows($req); // on utilise la fonction mysql_num_rows pour compter les résultats pour vérifier par après

if($nbArt != 0) // si le nombre de résultats est supérieur à 0, on continue
{
// maintenant, on va afficher les résultats et la page qui les donne ainsi que leur nombre, avec un peu de code HTML pour faciliter la tâche.
?>
<h3>Résultats de votre recherche.</h3>
<p>Nous avons trouvé <? echo $nbArt; // on affiche le nombre de résultats 
if($nbArt > 1) { 
	echo ' résultats '; 
	} 
	else { 
		echo ' résultat'; 
		} // on vérifie le nombre de résultats pour orthographier correctement. 
?>
dans notre base de données. Voici les résultats que nous avons trouvées :<br/>
<br/>
<?

affiche($nbArt,$mots);

echo "<br><a href=\"rechercher.php\"><b>Faire une nouvelle recherche</b></a></p>";

} // Fini d'afficher les résultats ! Maintenant, nous allons afficher l'éventuelle erreur en cas d'échec de recherche et le formulaire.
else { // de nouveau, un peu de HTML
?>
<h3>Pas de résultats</h3>
<p>Nous n'avons trouvé aucun résultat pour votre requête "<? echo $_POST['mots']; ?>". <a href="rechercher.php">Réessayez</a> avec autre chose.</p>
<?
}// Fini d'afficher l'erreur ^^
mysql_close(); // on ferme mysql, on n'en a plus besoin
}
?>

<p>Tapez une requête pour réaliser une recherche.</p>
 <form action="rechercher.php" method="Post">
<input type="text" name="mots" size="10">
<input type="submit" value="Ok">
</form>

<?
function affiche($nombrearticle,$motClef){        
  $perPage=10;//nombre de pages
  $nbPage=ceil($nombrearticle/$perPage);//arrondir à la valeur supérieure  
  
  //vérifier si la variable 'p' existe ou non!
  if(isset($_GET['p'])&& $_GET['p'] > 0 && $_GET['p'] <= $nbPage){
  $cPage=$_GET['p'];
  }
  else {
  	$cPage=1;
  }
    
  $req=mysql_query ("SELECT * FROM moteur WHERE nom LIKE '%$motClef%' ORDER BY code DESC LIMIT ".(($cPage-1)*$perPage).",$perPage") or die (mysql_error());
  
  while($data=mysql_fetch_array($req)){
  echo "{$data['nom']}";
  echo $data['email']."<br>";
  echo $data['commentaire'];
  echo	"<hr>";
  } 
  
  //afficher les liens de page
  for($i=1;$i<=$nbPage;$i++){
  	if($i==$cPage){
  		echo " $i /";//lien inactif
  	}
  	else{
  	echo " <a href=\"rechercher.php?p=$i&mots=$motClef\">$i</a> / " ;
  	//c'est un lien actif
  }
  }
}//fin function
?>

ViPHP
xTG
ViPHP | 7331 Messages

12 déc. 2013, 20:23

Parce quand tu changes de pages tu perds ta variable $_POST. ;)
Passes le mot clé dans l'url ou bien dans une variable de session.

Petit nouveau ! | 2 Messages

12 déc. 2013, 20:38

[Parce quand tu changes de pages tu perds ta variable $_POST. ;)
Passes le mot clé dans l'url ou bien dans une variable de session.]

->je passe bien la variable $_POST dans l'url da cette façon:
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$precedent.'&mots='.$mots.'">Page précédent</a>';


la variable "page" crée par $_GET['page'] n'est pas perdue car j'ai bien la barre de navigation qui s'affiche, mais la variable $mots=$_POST['mots'] est perdue!!!
ça c'est d'une, par contre comment utiliser une variable de session, et merci pour ton aide ;-)

ViPHP
xTG
ViPHP | 7331 Messages

13 déc. 2013, 14:21

Ah oui, donc ok pour le passage de paramètre.
Cependant le souci est que ton code d'affichage est sous la condition suivante :
if(isset($_POST['mots']) && $_POST['mots'] != NULL){
Elle ne prend donc en compte que $_POST. ;)

Du coup la migration la plus simple est de modifier ton formulaire pour qu'il envoie en GET, et de modifier tes conditions pour utiliser $_GET.
Ainsi tu t'évites d'avoir à traiter à la fois $_POST et $_GET.