Petit moteur de recherche

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Petit moteur de recherche

par albatross » 30 août 2007, 09:03

Bon, reprenons.

Tu as bien une table qui s'appelle 'force' avec un champs 'force' qui serait alphabétique?

Tu as bien saisis "s" dans ton formulaire de recherche?
Désolé de pas avoir répondu plus tôt, mais j'étais absent.
Donc effectivement, j'ai bien une table 'force' et un champ 'force' qui a des données alphanumériques ; c'est un fichier client en fait.
Merci encore à tous pour le temps que vous prenez pour donner un coup de main.

par Vikchill » 24 août 2007, 16:14

Bon, reprenons.

Tu as bien une table qui s'appelle 'force' avec un champs 'force' qui serait alphabétique?

Tu as bien saisis "s" dans ton formulaire de recherche?

par albatross » 24 août 2007, 15:51

Je n'ai pas de ligne 42, ça s'arrête à 41.
Je viens de tester en rajoutant une dernière accolade fermante pour voir et voici un nouveau message :

Erreur de syntaxe près de 'force FROM force WHERE `force` LIKE '%s%'' à la ligne 1:
SELECT force FROM force WHERE `force` LIKE '%s%'

par Vikchill » 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.

par albatross » 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."

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

par Truc » 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());

par albatross » 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:

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

par albatross » 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();

par Truc » 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

par albatross » 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

par Truc » 01 août 2007, 14:42

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

par Sékiltoyai » 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().

par Truc » 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.