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

[/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
EDIT : je te demande pas la requête sortie de phpmyadmin...
Apparemment la requête est bonne