Conditions, php et formulaire

Fermé
cooook - 18 mai 2009 à 16:24
 cooook - 19 mai 2009 à 12:31
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!
A voir également:

9 réponses

Archeus01 Messages postés 1567 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 447
18 mai 2009 à 16:48
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

0
Archeus01 Messages postés 1567 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 447
19 mai 2009 à 10:41
Correction :

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 false
!empty(!empty (arg))renvoie true
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mai 2009 à 17:05
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."' ";
} 
0
merci pour ta réponse et tes explications!
Mais ça ne marche toujours pas...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mai 2009 à 18:00
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 ";
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Quand ça ne marche pas, j'ai "0 résultats"
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mai 2009 à 18:16
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 ?
0
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!
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 mai 2009 à 11:41
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
0
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?
0