Conditions, php et formulaire
Bonjour,
je suis en train de créer un formulaire de recherche avancée. Il y a 2 listes déroulantes: je voudrais qu'il soit possible de choisir dans une des deux listes ou dans les deux listes. Le problème, c'est qu'avec le code que j'ai écrit ci dessous, il faut que les 2 champs soient validés pour qu'il y ait un résultat. Si je choisis dans une seule des deux listes, il n'y a pas de résultats.
ex:
$requete = SELECT * FROM mestables
WHERE table1.id1 = liaison.id1
AND table2.id2 = liaison.id2
AND table3.id3 = liaison2.id3
AND table4.id4 = liaison2.id4
if (!empty ($_POST ['var1']) && !empty (!empty ($_POST ['var1'])
{
$requete.="AND (liaison.id1 = '$var1') AND liaison2.id3 = '$var2'";
}
else
{
if (! empty $_POST ['var1'])
{
$requete.="AND (liaison.id1 = '$var1')'";
}
if (! empty $_POST ['var2'])
{
$requete.="AND (liaison2.id3 = '$var2')'";
}
}
Merci d'avance!
je suis en train de créer un formulaire de recherche avancée. Il y a 2 listes déroulantes: je voudrais qu'il soit possible de choisir dans une des deux listes ou dans les deux listes. Le problème, c'est qu'avec le code que j'ai écrit ci dessous, il faut que les 2 champs soient validés pour qu'il y ait un résultat. Si je choisis dans une seule des deux listes, il n'y a pas de résultats.
ex:
$requete = SELECT * FROM mestables
WHERE table1.id1 = liaison.id1
AND table2.id2 = liaison.id2
AND table3.id3 = liaison2.id3
AND table4.id4 = liaison2.id4
if (!empty ($_POST ['var1']) && !empty (!empty ($_POST ['var1'])
{
$requete.="AND (liaison.id1 = '$var1') AND liaison2.id3 = '$var2'";
}
else
{
if (! empty $_POST ['var1'])
{
$requete.="AND (liaison.id1 = '$var1')'";
}
if (! empty $_POST ['var2'])
{
$requete.="AND (liaison2.id3 = '$var2')'";
}
}
Merci d'avance!
Configuration: Windows XP Firefox 2.0.0.15
9 réponses
-
Mais oui! ça venait de la liste! Une erreur si bête que j'ai honte de la dire...Mais maintenant ça fonctionne!
En tout cas merci, car même sans cette erreur débile, je n'y serais pas arrivée toute seule!
Le problème, c'est maintenant qu'il y a des tas de résultats en double (voire plus!)...c'est ce qu'on appelle les fameux doublons sql? -
alors on va avancer progressivement
essayes:
$requete = "SELECT * FROM table1,table2,table3,table4,liaison,liaison2 WHERE table1.id1 = liaison.id1 AND table2.id2 = liaison.id2 AND table3.id3 = liaison2.id3 AND table4.id4 = liaison2.id4 "; if (! empty ($_POST ['var1'])) { echo "var1 recue: ".$_POST ['var1']; //Visualisation $requete.=" AND liaison.id1 = '".$var1."' "; //ne pas oublier l'espace avant AND }
est ce que ta liste 1 porte bien le name="var1" ?
donnes nous un bout de code de ta liste -
Oui, j'ai des résultats: mais tous les résultats: c'est à dire 2000 images!
Tu as raison, le problème doit venir de la requête... Merci pour toute ton aide! -
et si tu fais seulement avec cette partie de la requette:
$requete = "SELECT * FROM table1,table2,table3,table4,liaison,liaison2 WHERE table1.id1 = liaison.id1 AND table2.id2 = liaison.id2 AND table3.id3 = liaison2.id3 AND table4.id4 = liaison2.id4 ";
sans les conditions rajoutées par les if
as tu des résultats ? -
Quand ça ne marche pas, j'ai "0 résultats"
-
quand tu dis ça ne marche pas tu as quoi ?
sinon:
$requete = "SELECT * FROM table1,table2,table3,table4,liaison,liaison2 WHERE table1.id1 = liaison.id1 AND table2.id2 = liaison.id2 AND table3.id3 = liaison2.id3 AND table4.id4 = liaison2.id4 ";
-
merci pour ta réponse et tes explications!
Mais ça ne marche toujours pas... -
petite erreur de frappe je suppose:
if (!empty ($_POST ['var1']) && (!empty ($_POST ['var1'])))
serait plutot:if (!empty ($_POST ['var1']) && (!empty ($_POST ['var2'])))
mais on peut faire plus simple:
$requete = SELECT * FROM mestables WHERE table1.id1 = liaison.id1 AND table2.id2 = liaison.id2 AND table3.id3 = liaison2.id3 AND table4.id4 = liaison2.id4 ; if (! empty ($_POST ['var1'])) { $requete.=" AND liaison.id1 = '".$var1."' "; //ne pas oublier l'espace avant AND } if (! empty ($_POST ['var2'])) { $requete.=" AND liaison2.id3 = '".$var2."' "; } -
Voila ce que tu veux
if (!empty ($_POST ['var1']) && (!empty ($_POST ['var1'])))
{
$requete.="AND (liaison.id1 = '$var1') AND liaison2.id3 = '$var2'";
} else if (! empty ($_POST ['var1'])) {
$requete.="AND (liaison.id1 = '$var1')'";
} else if (! empty ($_POST ['var2'])) {
$requete.="AND (liaison2.id3 = '$var2')'";
}
Deux petites choses
Empty est une fonction donc forcément empty(arg)
ensuite, si tu fais !empty(!empty(arg)) (ligne 1 deuxième partie), renverra toujours false...
En effet si
si arg=null
empty (arg) renvoie true
!empty (arg) renvoie false
empty(!empty (arg))renvoie true
!empty(!empty (arg))renvoie false
si arg= 5
empty (arg) renvoie false
!empty (arg) renvoie true
empty(!empty (arg))renvoie true
!empty(!empty (arg))renvoie false