bug PHP/mysql

marukunlibree
Invité n'ayant pas de compte PHPfrance

07 sept. 2013, 14:39

bonjour tout le monde,
bon le problème que j'ai et que, mon formulaire contient les deux champs num_intervention et demandeur ma petite application doit faire une recherche dans la base de données suivant les données entrées par l'utilisateur, or l'utilisateur peut remplir les deux champs ou bien remplir qu'un seul, donc le AND va pas me donner le résultat que j'attend lorsqu'un des champs de saisi dans le formulaire n'est pas rempli.
j'ai essayer ce code:
$sql_one="select * from intervention_logiciel";
$where_one='';
if ($num_intervention>0){$where_one=" WHERE num_intervention=$num_intervention ";}
if (strlen($demandeur)>0){$where_one="AND demandeur='$demandeur' ";}
if (substr($where_one,0,3)==='AND'){$where_one=str_replace('AND','WHERE',$where_one);}
$result=mysql_query($sql_one.$where_one) or die(mysql_error());

mais le problème que, quand je laisse le champs demandeur vide et je fait ma recherche juste avec le champs num_intervention,, ça marche. mais au contraire quand j'essaye de faire une recherche en utilisant le champs demandeur, ou bien en utilisant les deux champs, ca marche pas, et ca m'affiche:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='john'' at line 1.
merci d'avance :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 sept. 2013, 16:04

salut,

tu ne prend pas en compte correctement le fait du prédicat.
il faut
- Tester si l'un des champs n'est pas vide => ajout de "where" dans la chaine qui contient la requete pense aux espaces.
- ensuite tester les champs, lors du second n'oublie pas de tester si le premier existe pour ajouter ou pas le and.



@+
Il en faut peu pour être heureux ......

marukunlibree
Invité n'ayant pas de compte PHPfrance

08 sept. 2013, 05:37

merci

Mammouth du PHP | 2278 Messages

08 sept. 2013, 08:14

Il est facile de vérifier ainsi:
if (substr($where_one,0,3)==='AND'){$where_one=str_replace('AND','WHERE',$where_one);}
requete = $sql_one.$where_one;
print "<br />$requete";
$result=mysql_query($requete) or die(mysql_error());
Pendant qu'on y est, il faut abandonner mysql (deprecated, donc qui ne sera pas maintenu encore longtemps) pour mysqli
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD