Petit moteur de recherche

Eléphant du PHP | 78 Messages

01 août 2007, 11:01

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 août 2007, 12:41

Salut,
Essaie de chercher "'Champ_1'" sur que tu auras 1 réponse :wink:

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 78 Messages

01 août 2007, 14:09

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. :oops: :lol:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 août 2007, 14:30

à chaque erreur tu auras ce message ou un autre... j'en conclu que tu fais beaucoup d'erreurs :lol:

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 5924 Messages

01 août 2007, 14:37

Prends l'habitude de gérer les erreurs SQL, par exemple avec un “or die('Erreur : ' . mysql_error())” après ton mysql_query().

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 août 2007, 14:42

et tant qu'on y est met ça en favoris :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 78 Messages

01 août 2007, 15:17

à chaque erreur tu auras ce message ou un autre... j'en conclu que tu fais beaucoup d'erreurs :lol:

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 ! :roll: :lol:
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 ! :P

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 août 2007, 15:46

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 78 Messages

24 août 2007, 10:45

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();

Eléphant du PHP | 193 Messages

24 août 2007, 12:15

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(); 
}

Eléphant du PHP | 78 Messages

24 août 2007, 12:26

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 ! :lol:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 août 2007, 12:36

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());

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 193 Messages

24 août 2007, 14:14

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 ! :lol:
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(); 
}

Eléphant du PHP | 78 Messages

24 août 2007, 15:00

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

Eléphant du PHP | 193 Messages

24 août 2007, 15:41

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.