php recherche bdd

nolan3009
Invité n'ayant pas de compte PHPfrance

23 nov. 2014, 13:28

bonjour,

Je réalise un formulaire de recherche renvoyant vers une bdd. Lorsque dans le champs recherche rien n'est saisie, la liste de tout les livres de la base s'affiche (ça c'est ok dans mon code).
Lorsque l'on saisi un mot, mon code doit rechercher si il y a des livres correspondants et les classer par ordre alphabétique. J'ai bien compris qu'il faut une requete de type LIKE %% mais il y a des erreurs et mon code ne marche pas. Comment insérer le POST dans la requete pour que le mot saisie fasse partie de la requete? D'ailleurs je ne suis meme pas sure que ce soit la bonne méthode à adopter.

Merci d'avance pour votre aide, voici mon code:
<!doctype html>
<html lang="fr">
<head>
<title>Formulaires - Exemple 2</title>
<meta charset="utf-8">
</head>
<body>
<?php

$Connexion = mysql_connect("localhost", "root", "root");
$connexionbase = mysql_select_db("exercices_php");


?>
<form method="post">
<p>
<label><strong>Recherche de livres </strong></label>

<p><label>Titre </label>
<input type="text" name="titre" value="" />
</p>
<p>
<input type="submit" name="rechercher" value="rechercher" />
</p>
</form>
<?php


if (isset($_POST['rechercher'])) {
// à l'aide de la fonction "empty", on vérifie que quelque chose a bien été saisi
if (!empty($_POST['titre']))
{ $requetea="SELECT titre FROM livre WHERE titre LIKE %'.$_POST['rechercher'].'%";


$reqa = mysql_query($requetea);

// on va scanner tous les tuples un par un
while ($dataa = mysql_fetch_array($reqa)) {
// on affiche les résultats
echo ''.$dataa['titre'].'<br />';
}
mysql_free_result ($reqa);
}






else

{ $requete="SELECT titre FROM livre";


$req = mysql_query($requete);

// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req)) {
// on affiche les résultats
echo ''.$data['titre'].'<br />';
}
mysql_free_result ($req);

}



mysql_close ();
}
?>
</body>
</html>

Mammouth du PHP | 737 Messages

23 nov. 2014, 13:59

Salut nolan3009,

Ton like doit normalement être entouré de double ou simple quotes comme ceci :

'%".$_POST["rechercher"]."%'
ou suivant comment tu as ouvert ta requête
"%'.$_POST["rechercher"].'%"

après je vois que tu testes la variable titre mais que tu "like" sur rechercher...

donc ce serait plus '%".$_POST["titre"]."%' ou "%'.$_POST["titre"].'%"

Mega
;)
Dyslexics are teople poo

nolan3009
Invité n'ayant pas de compte PHPfrance

29 nov. 2014, 16:48

Bonjour,

Merci pour l'info. mais malgré ces corrections cela ne fonctionne toujours pas. Je ne vois pas du tout d'ou cela peut venir étant donné que le

else
{ $requete="SELECT titre FROM livre";

fonctionne. Les resultats de la base s'affichent tous lorsqu'on ne rempli pas le champs. Et lorsqu'on met un mot clé cela ne marche pas...
Si vous avez une solution?

Merci d'avance

Nestecha
Invité n'ayant pas de compte PHPfrance

29 nov. 2014, 17:54

Sûrement un problème de syntaxe.

Essaie de mettre $_POST['titre'] dans une variable :
$sTitle = $_POST['titre']
Puis de l'utiliser dans la requête :
if (!empty($_POST['titre']))
$sTitle = $_POST['titre']
{ $requetea="SELECT titre FROM livre WHERE titre LIKE '%$sTitle%'";

Nestecha
Invité n'ayant pas de compte PHPfrance

29 nov. 2014, 17:54

Plutôt ça pardon :
if (!empty($_POST['titre'])) { 
$sTitle = $_POST['titre']
$requetea="SELECT titre FROM livre WHERE titre LIKE '%$sTitle%'";