Page 1 sur 3

Recherche sur une table mais sur plusieurs champs

Posté : 14 déc. 2005, 18:53
par betman
Yop,

Voilà j'ai un peu de mal à construire ma requête...

J'ai une table agent, et je souhaite effectuer une recherche sur 2 champs :
nom et postal

voici ma requête actuelle
<?

include('connection.inc.php');
$query = "SELECT * FROM agent WHERE nom like '%".$_POST['nom']."%' AND postal LIKE '%".$_POST['postal']."%' order by nom";
$reponse = mysql_query("SELECT * FROM agent WHERE nom like '%".$_POST['nom']."%' AND postal LIKE '%".$_POST['postal']."%' order by nom");

while ($donnees = mysql_fetch_array($reponse) )
{
 // on affiche les informations de l'enregistrement en cours
  echo $donnees['nom']; 
  echo "<br />"; 
}
$result = mysql_query($query) or die ('Erreur SQL !<br>'.mysql_error());

?>
Si vous pouviez jeter un oeil 8) 8)

Posté : 14 déc. 2005, 19:07
par Truc
Salut, en effet un peu de mal :wink:
Il y a 2 fois la meme requete dont une est exécutée apres la boucle while().
petite mise en page:
<?
include('connection.inc.php');
$query = "SELECT * FROM agent WHERE nom like '%".$_POST['nom']."%' AND postal LIKE '%".$_POST['postal']."%' order by nom";
$reponse = mysql_query($query)or die ('Erreur SQL !<br>'.mysql_error());

while ($donnees = mysql_fetch_array($reponse) )
{
// on affiche les informations de l'enregistrement en cours
  echo $donnees['nom'];
  echo "<br />";
}
?>
maintenant quel est le probleme ?

Posté : 14 déc. 2005, 19:08
par DocType
Je ne comprend pas pkoi tu doubles ta requête ? :?
Sinon, je ne vois pas réellement d'erreur !
Vérifie bien que tes $_POST ne contiennent pas de caractères qui peuvent nuire à la requête, et pkoi un like ne minuscule et l'autre en maj ?

[EDIT] Truc a fait flash, une minute de moins ^^ [/EDIT]

Posté : 14 déc. 2005, 19:16
par betman
La double requête je l'ai prise un post de la semaine dernière et ça marche très bien pour une recherche sur un unique champ.

Vos modifications me rapporte ça :

Erreur SQL !
Erreur de syntaxe près de 'agent%' AND postal LIKE '%78%' order by nom' à la ligne 1


<?
include('connection.inc.php');
$query = "SELECT * FROM agent WHERE nom like '%".$_POST['nom']."%' AND postal LIKE '%".$_POST['postal']."%' order by nom";
$reponse = mysql_query($query)or die ('Erreur SQL !<br>'.mysql_error());

while ($donnees = mysql_fetch_array($reponse) )
{
// on affiche les informations de l'enregistrement en cours
echo $donnees['nom'];
echo "<br />";
echo $donnees['postal'];
echo "<br />";
}
?>

Question : Suis-je obligé de remplir les deux formulaires pour avoir une réponse ? Ou bien si je ne rempli qu'un seul , il sera ignoré ?

Posté : 14 déc. 2005, 19:21
par Truc
Question : Suis-je obligé de remplir les deux formulaires pour avoir une réponse ? Ou bien si je ne rempli qu'un seul , il sera ignoré ?
si tu as deux formulaires avec chacun un bouton de soumission tu ne va récupérer qu'une variable POST et l'autre va causer l'erreur.

Pourquoi ne pas mettre les deux champs dans le meme formulaire ?

Posté : 14 déc. 2005, 19:26
par DocType
Merci de mettre ton code entre balises PHP pour la lisibilité
<? 
include('connection.inc.php'); 
$form_nom = htmlentities($_POST['nom'],ENT_QUOTES);
$form_postal = htmlentities($_POST['postal'],ENT_QUOTES);
$query = "SELECT * FROM agent WHERE nom LIKE '%".$form_nom."%' AND postal LIKE '%".$form_postal."%' ORDER BY nom"; 
$reponse = mysql_query($query)or die ('Erreur SQL !<br>'.mysql_error()); 

while ($donnees = mysql_fetch_array($reponse) ) 
{ 
// on affiche les informations de l'enregistrement en cours 
echo $donnees['nom']; 
echo "<br />"; 
echo $donnees['postal']; 
echo "<br />"; 
} 
?> 
Voilà le code que je ferais pour ma part

Posté : 14 déc. 2005, 19:29
par betman
oups désolé pour les balises ...

Je me suis mal expliqué sinon, j'ai effectivement un seul bouton pour mes 2 champs.

Sinon ton code ne génère pas d'erreur mais il ne m'affiche rien

Posté : 14 déc. 2005, 19:33
par Truc
affiche la requete générée (echo $query)
et teste la dans phpmyadmin par exemple.

Posté : 14 déc. 2005, 19:35
par DocType
Sinon ton code ne génère pas d'erreur mais il ne m'affiche rien
Normal je pense...il y a des protections d'activées (htmlentities). Pour contourner le soucis, essaie une recherche avec du texte non accentué :wink:
Au moins on verra si ça recupère quelque chose !

ensuite je t'invite à reprendre ton code de départ et dy rajouter ca en fin:
echo $query;
[EDIT] Truc a fait flash (bis), deux minutes de moins ^^
Chapeau l'artiste. Tu te dopes ? :P [/EDIT]

Posté : 14 déc. 2005, 19:38
par betman
je viens de la faire et je n'ai pas d'erreur mais ca ne retourne aucun enregistrement.

Ma base est rempli à raz bord pourtant

Posté : 14 déc. 2005, 19:46
par DocType
je viens de la faire et je n'ai pas d'erreur mais ca ne retourne aucun enregistrement.

Ma base est rempli à raz bord pourtant
echo $query; 
:?:

Posté : 14 déc. 2005, 19:52
par betman
c'est bien comme ça ?
<?
include('connection.inc.php');
$form_nom = htmlentities($_POST['nom'],ENT_QUOTES);
$form_postal = htmlentities($_POST['postal'],ENT_QUOTES);
$query = "SELECT * FROM agent WHERE nom LIKE '%".$form_nom."%' AND postal LIKE '%".$form_postal."%' ORDER BY nom"; 
$reponse = mysql_query($query)or die ('Erreur SQL !<br>'.mysql_error());

while ($donnees = mysql_fetch_array($reponse) )
{
// on affiche les informations de l'enregistrement en cours
echo $query;
echo $donnees['nom'];
echo "<br />";
echo $donnees['postal'];
echo "<br />";
}
?>
SI c'est le cas ca ne m'affiche rien du tout

Posté : 14 déc. 2005, 20:00
par DocType
<? 
include('connection.inc.php'); 
$form_nom = htmlentities($_POST['nom'],ENT_QUOTES); 
$form_postal = htmlentities($_POST['postal'],ENT_QUOTES); 
$query = "SELECT * FROM agent WHERE nom LIKE '%".$form_nom."%' AND postal LIKE '%".$form_postal."%' ORDER BY nom"; 
$reponse = mysql_query($query)or die ('Erreur SQL !<br>'.mysql_error()); 

while ($donnees = mysql_fetch_array($reponse) ) 
{ 
// on affiche les informations de l'enregistrement en cours 
echo $donnees['nom']; 
echo "<br />"; 
echo $donnees['postal']; 
echo "<br />"; 
} 
echo $query."<br>".mysql_num_rows($reponse);
?> 
Essaie plutôt ça...
Et mets en recherche un seul caractère non accentué (pas de :
é&'#"[(à etc... )

Posté : 14 déc. 2005, 20:44
par betman
ca me donne ça

requête SQL :

SELECT *
FROM agent
WHERE nom
LIKE '%guendon%' AND postal
LIKE '%33200%'
ORDER BY nom0
LIMIT 0 , 30

MySQL a répondu:

#1054 - Champ 'nom0' inconnu dans order clause

Posté : 14 déc. 2005, 20:49
par DocType

Code : Tout sélectionner

SELECT * FROM agent WHERE nom LIKE '%guendon%' AND postal LIKE '%33200%' ORDER BY nom0 LIMIT 0 , 30
Pas bon du tout !
ORDER BY nom0
LIMIT 0 , 30
Dans le code que je t'ai donné y'avait pas de limit...
<? 
include('connection.inc.php'); 
$form_nom = htmlentities($_POST['nom'],ENT_QUOTES); 
$form_postal = htmlentities($_POST['postal'],ENT_QUOTES); 
$query = "SELECT * FROM agent WHERE nom LIKE '%".$form_nom."%' AND postal LIKE '%".$form_postal."%' ORDER BY nom"; 
$reponse = mysql_query($query)or die ('Erreur SQL !<br>'.mysql_error()); 

while ($donnees = mysql_fetch_array($reponse) ) 
{ 
// on affiche les informations de l'enregistrement en cours 
echo $donnees['nom']; 
echo "<br />"; 
echo $donnees['postal']; 
echo "<br />"; 
} 
echo "requête: ".$query."<br>nombre: ".mysql_num_rows($reponse); 
?> 
Essaie ça le plus simplement du monde sans y toucher et apporte la réponse :wink:

EDIT : je te demande pas la requête sortie de phpmyadmin...
Apparemment la requête est bonne