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