Conditions, php et formulaire

cooook -  
 cooook -
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. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
     
    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
    1. Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   455
       
      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
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  3. cooook
     
    merci pour ta réponse et tes explications!
    Mais ça ne marche toujours pas...
    0
  4. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cooook
     
    Quand ça ne marche pas, j'ai "0 résultats"
    0
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  8. cooook
     
    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
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  10. cooook
     
    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