Page 1 sur 2
Petit moteur de recherche
Posté : 01 août 2007, 11:01
par albatross
Bonjour,
J'ai récupéré une partie du code ci-dessous pour faire un petit moteur de recherche, mais il me semble avoir oublié quelque chose pour que cela fonctionne :
<?php
$Host="127.0.0.1";
$user = "root";
$Password="";
$Base="base";
$table = "table";
mysql_connect($Host,$user,$Password) or
die("<p align='justify' class='bodytext'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'><strong>Connexion Au Serveur Impossible : Le serveur est surchargé veuillez revenir plus tard.</strong></font></p>");
mysql_select_db($Base);
$table="table";
$Recherche = $_POST['Recherche'];
if($Recherche=="")
{
echo "Vous devez taper une recherche.";
exit;
}
$requete = mysql_query("SELECT * FROM $table WHERE 'Champ_1' LIKE '%Recherche%'");
if(mysql_num_rows($requete) == 0)
echo 'Aucun résultat ne correspond aux termes de votre recherche.';
while($val = mysql_fetch_array($requete))
//echo "<BR>".$val["Champ_1"]."<BR>"."<BR>";
echo $requete ;
// on ferme la connexion à mysql
mysql_close();
?>
Le souci c'est que quoique je tape dans le formulaire qui arrive sur cette page, ne me laisse que le message : "Aucun résultat ne correspond aux termes de votre recherche".
Si quelqu'un a une petite idée, ça serait avec plaisir,
Merci par avance
Posté : 01 août 2007, 12:41
par Truc
Salut,
Essaie de chercher "'Champ_1'" sur que tu auras 1 réponse
Il y a des apostrophes de trop dans la requête autour de 'Champ_1'.
Tu compares donc ta racherche à une chaine de caractères qui est 'Champ_1'.
Posté : 01 août 2007, 14:09
par albatross
Merci Truc,
Voilà le code un peu épuré :
22 $requete = mysql_query("SELECT * FROM $table WHERE Champ_1 LIKE %Recherche% ");
23
24 if(mysql_num_rows($requete) == 0)
25 echo 'Aucun résultat ne correspond aux termes de votre recherche.';
26
27 while($val = mysql_fetch_array($requete))
28 echo "<BR>".$val["Champ_1"]."<BR>"."<BR>";
Par contre il me donne un message d'erreur :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-7\www\expeditions\recherche.php on line 24
Aucun résultat ne correspond aux termes de votre recherche.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-7\www\expeditions\recherche.php on line 27
Cela m'arrive souvent d'avoir ce message d'erreur, surtout concernant "mysql_fetch_arrary".
Mais bon n'étant pas un pro du Php, je me doute que cela doit venir de moi et d'une mauvaise lecture du code parfois.

Posté : 01 août 2007, 14:30
par Truc
à chaque erreur tu auras ce message ou un autre... j'en conclu que tu fais beaucoup d'erreurs
tu as supprimé les quotes autour de la recherche, LIKE en a besoin lui pour délimiter ce qui sera une chaine de caractères une fois la variable remplacée.
Posté : 01 août 2007, 14:37
par Sékiltoyai
Prends l'habitude de gérer les erreurs SQL, par exemple avec un “or die('Erreur : ' . mysql_error())” après ton mysql_query().
Posté : 01 août 2007, 14:42
par Truc
et tant qu'on y est
met ça en favoris 
Posté : 01 août 2007, 15:17
par albatross
à chaque erreur tu auras ce message ou un autre... j'en conclu que
tu fais beaucoup d'erreurs
tu as supprimé les quotes autour de la recherche, LIKE en a besoin lui pour délimiter ce qui sera une chaine de caractères une fois la variable remplacée.
Tu as bien raison pour ce qui est des erreurs ; en plus j'y vais à tatons.
On m'avait expliqué à la fac, qu'il valait mieux mettre sur papier d'abord ce que l'on voulait faire et coder ensuite... ben moi je m'emballe et oublie souvent cette procédure !
Prends l'habitude de gérer les erreurs SQL, par exemple avec un “or die('Erreur : ' . mysql_error())” après ton mysql_query().
Ok je vais essayer de m'y tenir, j'ai bien mis en favoris le lien de Truc.
La suite de mon code un peu plus haut :
13 mysql_select_db($Base);
14 $table="destinataire";
15 $Recherche = $_POST['Recherche'];
16 if($Recherche=="")
17 {
18 echo "Vous devez taper une recherche.";
19 exit;
20 }
ET le message d'erreur :
Notice: Undefined index: Recherche in c:\program files\easyphp1-7\www\expeditions\recherche.php on line 15
Ce qui me gêne le plus, ici c'est que j'ai l'impression que chaque fois que je corrige une erreur, il s'amuse à m'en remettre une derrière.
Argghh, Caliméro sort de mon corps !

Posté : 01 août 2007, 15:46
par Truc
Le message dit que l'index "Recherche" n'existe pas
soit tu n'as pas ce champ dans le formulaire (même orthographe)
soit à cause du 1er chargement de la page ou les données POST n'existent pas :
pour s'en assurer :
$Recherche = (isset($_POST['Recherche'])) ? $_POST['Recherche'] : "";
pour la syntaxe regarde
la FAQ
Posté : 24 août 2007, 10:45
par albatross
Je pense être pas loin maintenant, d'autant plus que la valeur (
valeur) que je tape dans le champ du formulaire apparaît bien... dans le nouveau message d'erreur :
Erreur de syntaxe près de 'force WHERE `force` LIKE '%
valeur%'' à la ligne 1
$host = "127.0.0.1"; // hébergeur '%$Recherche%'
$user = "root";
$pass = "";
$bdd = "expeditions";
$table = "force";
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter");
$Recherche = (isset($_POST['Recherche'])) ? $_POST['Recherche'] : "";
$Recherche = $_POST['Recherche'];
if($Recherche=="")
{
echo "Vous devez taper une recherche.";
exit;
}
$requete = mysql_query("SELECT * FROM $table WHERE `force` LIKE '%". $Recherche ."%' ")or die (mysql_error());
if(mysql_num_rows($requete) == 0)
echo 'Aucun résultat ne correspond aux termes de votre recherche.';
while($val = mysql_fetch_array($requete))
echo "<BR>".$val["force"]."<BR>"."<BR>";
//echo $requete ;
// on ferme la connexion à mysql
mysql_close();
Posté : 24 août 2007, 12:15
par Vikchill
Pourquoi tu écrases le résultat de ton opérateur ternaire pour $Recherche
$host = "127.0.0.1"; // hébergeur '%$Recherche%'
$user = "root";
$pass = "";
$bdd = "expeditions";
$table = "force";
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter");
$Recherche = (isset($_POST['Recherche'])) ? $_POST['Recherche'] : "";
if($Recherche=="")
{
echo "Vous devez taper une recherche.";
}
else
{
$requete = mysql_query("SELECT * FROM $table WHERE `force` LIKE '%". $Recherche ."%' ")or die (mysql_error());
if(mysql_num_rows($requete) == 0)
echo 'Aucun résultat ne correspond aux termes de votre recherche.';
while($val = mysql_fetch_array($requete))
echo "<BR>".$val["force"]."<BR>"."<BR>";
//echo $requete ;
// on ferme la connexion à mysql
mysql_close();
}
Posté : 24 août 2007, 12:26
par albatross
Je comprends pas trop ta réponse.
Tu pourrais étayer, please, Merci.
Je suis sûr que c'est pas grand chose pour obtenir un résultat, mais bon, faudrait que je me greffe une puce avec tout le code possible et inimaginable dans le cerveau !

Posté : 24 août 2007, 12:36
par Truc
Le message d'erreur dit que tu as une erreur juste avant "force" (nom de table)
affiche aussi la requete en plus du message en cas d'erreur :
or die ($sql."<br />".mysql_error());
Posté : 24 août 2007, 14:14
par Vikchill
Je comprends pas trop ta réponse.
Tu pourrais étayer, please, Merci.
Je suis sûr que c'est pas grand chose pour obtenir un résultat, mais bon, faudrait que je me greffe une puce avec tout le code possible et inimaginable dans le cerveau !

Bah tu as ça dans ton code:
$Recherche = (isset($_POST['Recherche'])) ? $_POST['Recherche'] : "";
$Recherche = $_POST['Recherche'];
La deuxième ligne est de trop. Ensuite j'ai juste un peu modifier la suite de ton code pour virer le "exit", histoire que le code soit plus proche de l'algo: "si la variable est vide on envoie un message d'erreur, sinon on continue le traitement".
Comme le suggère justement truc, tu ferais mieux de passer la requête en variable pour l'afficher dans le "or die":
$host = "127.0.0.1"; // hébergeur '%$Recherche%'
$user = "root";
$pass = "";
$bdd = "expeditions";
$table = "force";
// connexion
@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se connecter");
$Recherche = (isset($_POST['Recherche'])) ? $_POST['Recherche'] : "";
if($Recherche=="")
{
echo "Vous devez taper une recherche.";
}
else
{
$requete = "SELECT force FROM $table WHERE `force` LIKE '%". $Recherche ."%' ";
$rs = mysql_query($requete) or die (mysql_error(). ": <br :>".$requete);
if(mysql_num_rows($rs) == 0)
{
echo 'Aucun résultat ne correspond aux termes de votre recherche.';
}
else
{
while($val = mysql_fetch_array($rs)) {echo "<BR>".$val["force"]."<BR>"."<BR>";}
//echo $requete ;
// on ferme la connexion à mysql
mysql_close();
}
Posté : 24 août 2007, 15:00
par albatross
Merci à vous deux.
Vikchill, j'ai essayé avec ton code et il me mets ce message :
Parse error: parse error, unexpected $end in c:\easyphp1-7\www\recherche.php on line 42
Ce qui est étrange aussi, c'est que si je lance le formulaire, même sans rien écrire dedans, il me retourne ce message et pas : "Vous devez taper une recherche."
Posté : 24 août 2007, 15:41
par Vikchill
Euh... ce serait sympa de donner la ligne 42 tu sais...
Sinon je sais psa, je cris qu'il manque une accolade fermantes à mon code:
$host = "127.0.0.1"; // hébergeur '%$Recherche%'
$user = "root";
$pass = "";
$bdd = "expeditions";
$table = "force";
// connexion
@mysql_connect($host,$user,$pass) or die("Impossible de se connecter");
@mysql_select_db("$bdd") or die("Impossible de se connecter");
$Recherche = (isset($_POST['Recherche'])) ? $_POST['Recherche'] : "";
if($Recherche=="")
{
echo "Vous devez taper une recherche.";
}
else
{
$requete = "SELECT force FROM $table WHERE `force` LIKE '%". $Recherche ."%' ";
$rs = mysql_query($requete) or die (mysql_error(). ": <br />".$requete);
if(mysql_num_rows($rs) == 0)
{
echo 'Aucun résultat ne correspond aux termes de votre recherche.';
}
else
{
while($val = mysql_fetch_array($rs))
{
echo "<BR>".$val["force"]."<BR>"."<BR>";
}
// on ferme la connexion à mysql
mysql_close();
}
}
Je sais plus, mais il faut peut-être aussi tester si $_POST['Recherche'] est pas vide dans l'opérateur ternaire.