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!
Configuration: Windows XP
Firefox 2.0.0.15

9 réponses

  1. 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?
    1. 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
      1. 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!
        1. 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 ?
          1. 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 ";
            
            1. merci pour ta réponse et tes explications!
              Mais ça ne marche toujours pas...
              1. 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."' ";
                } 
                1. 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

                  1. 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