Recherche sur une table mais sur plusieurs champs

Eléphant du PHP | 206 Messages

14 déc. 2005, 18:53

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)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 déc. 2005, 19:07

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 ?

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

Mammouth du PHP | 1776 Messages

14 déc. 2005, 19:08

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]

Eléphant du PHP | 206 Messages

14 déc. 2005, 19:16

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é ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 déc. 2005, 19:21

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 ?

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

Mammouth du PHP | 1776 Messages

14 déc. 2005, 19:26

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

Eléphant du PHP | 206 Messages

14 déc. 2005, 19:29

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 déc. 2005, 19:33

affiche la requete générée (echo $query)
et teste la dans phpmyadmin par exemple.

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

Mammouth du PHP | 1776 Messages

14 déc. 2005, 19:35

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]

Eléphant du PHP | 206 Messages

14 déc. 2005, 19:38

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

Mammouth du PHP | 1776 Messages

14 déc. 2005, 19:46

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; 
:?:

Eléphant du PHP | 206 Messages

14 déc. 2005, 19:52

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

Mammouth du PHP | 1776 Messages

14 déc. 2005, 20:00

<? 
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... )

Eléphant du PHP | 206 Messages

14 déc. 2005, 20:44

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

Mammouth du PHP | 1776 Messages

14 déc. 2005, 20:49

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
Modifié en dernier par DocType le 14 déc. 2005, 20:52, modifié 1 fois.