formulaire, php et conditions

Rechercher

formulaire, php et conditions

Par cooook  -  3 reponses  -  Le 18/05/2009 17:56  -  Editer  - 

Bonjour,

Je bidouille depuis des heures et ça ne veut pas fonctionner! 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 ($_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')'"; }

C'est un peu lourd, je sais, et j'ai tenté plus simple avant...Mais toujours rien? Quelqu'un pourrait-il me dire d'où peut venir l'erreur?

Merci d'avance!

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 18/05/2009 19:14  -  Haut de page  - 

Salut,

je crois qu'il faudrait commencer par correctement définir les différentes requêtes SQL possibles simplement en SQL. Ensuite, lorsqu'on a établi les différentes variantes, on intègre ça dans du PHP pour une construction dynamique.

Ensuite, je te recommande vivement de faire des jointures normalisées. Ça fonctionne tout aussi bien et en plus c'est beaucoup plus facile à lire.

Enfin, il faudrait avoir une idée assez précise des données que tu reçois dans $_POST : tes listes déroulantes par exemple : lorsqu'on a pas effectué de choix, quelle la valeur reçue ? As-tu dans le une première option avec un attribut value qui aurait pour valeur quelque chose comme «-1» par exemple ?

Et pour terminer, quelle est au jsute la structure de tes tables : avec ton exemple, je devine un truc bizarre.

À partir des bonnes informations, il sera beaucoup plus facile de te mettre sur le chemin de la solution :)

 
Par cooook  -  Le 19/05/2009 09:49  -  Haut de page  - 

Salut! Merci pour ta réponse.

Les jointures normalisées sont bien celles que l'on fait avec JOIN ON?

Ma base est constituée de 7 tables: 3 d'entre elles sont des tables de liaison contenant un id spécifique, et l'id des 2 tables que je souhaite mettre en relation. J'étais obligée de faire ça afin de pouvoir établir plusieurs relations entre ces id (ex: id1 = ida ; id1 = idb etc...)

Quant aux $_POST, ils transmettent bien les valeurs quand un choix a été fait dans les 2 listes. Mais si on ne sélectionne qu'une valeur dans une liste, le premier $_POST transmet la valeur, mais le second affiche la variable ' var2 ' (selon debug.txt), alors, je crois, qu'il faudrait que la variable soit vide...

J'espère que c'est compréhensible!

 
Par Cyrano  -  Le 19/05/2009 18:51  -  Haut de page  - 

Plus ou moins.

Pour les jointures normalisées, c'et exactement ça : tu mets les conditions de jointure dans le FROM avec des JOIN...ON et les conditions de tri dans le WHERE.

En ce qui concerne tes listes déroulantes, tu peux utiliser une première balise avec comme value «-1» et comme valeur affichée «Sélectionnez un item...» par exemple : donc en récupérant tes valeurs dans $_POST, tu vérifies que la valeur soit différente de «-1».

Partant de là, tu devrais arriver à reconstruire la bonne requête SQL.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |