|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre actif
![]() Inscription : septembre 2004 Messages : 555 ![]() |
Bonjour.
J'aimerai avoir un petit eclaircissement. Je possède un formulaire possédant 9 champs possibles. AU minimum un champs doit être rempli et après le reste est optionnel. Quel est le meilleur moyen de s'y prendre? J'avais penser à faire comme ceci Citation:
Seul hic c'est lorsque il y a des champs non remplis dans la BDD et qu'ils valent donc NULL ben l'histoire du % ne marche plus. Au final quel est la meilleure solution pour faire une recherche mutli critère sachant que 8 champs sur 9 sont optionnels. Cordialement |
|
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
Il y a pas mal d'exemples de ce genre de problemes dans le forum.
Le mieux déjà est de constuire ta requete au fur et a mesure pour chaque critère indépendemment les uns des autres, exemple : Code :
tu notes que $cond permet de savoir quelle condition utiliser (par défaut WHERE et ensuite AND) sinon il me semble que Asmodean (mais je confonds peut etre) utilise un WHERE 1 = 1 comme première condition, du coup tu sais que tu as toujours des AND et tu n'as pas de probleme de conditions. |
||
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() guillaume defrainInscription : avril 2006 Messages : 1 667 ![]() |
ce que je fais dans ce cas la c'est que si le champs n'est pas rempli je ne le met pas dans la requete SQL. Je te fais un exemple avec 2 champs optionnel et un obligatoire
Code :
__________________
autant l'hiver éclate que l'hétéroclite le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre |
||
|
|
00
|
|
|
#4 | ||
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 658 ![]() |
Ouais et si ton deuxieme critiere y a rien il me semble que la requete finissant par AND plante non?
Donc pas tres malin Pour reprendre l'exemple precedent : Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : septembre 2004 Messages : 555 ![]() |
Merci à vous deux, voila qui m'éclaire bien sur la facon de m'y prendre?
EN cas de besoin je reviendrai. Merci |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() guillaume defrainInscription : avril 2006 Messages : 1 667 ![]() |
Avec le code de koopajah ça ne marchera pas si un champs est vide. Si tu met des 1 quand le champs est vide ça marche à tous les couts puisuqe 1 est interprété comme le boolean vrai (et n'a donc pas d'effet sur les AND)
EDIT : ça ne marchera pas si le dernier champs et vide pardon
__________________
autant l'hiver éclate que l'hétéroclite le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() guillaume defrainInscription : avril 2006 Messages : 1 667 ![]() |
Je viens de faire un EDIT mais il me semble que si le dernier de tes paramètres est vide tu vas te retrouver avec un AND puis rien après.
Mais je me trompe peut être
__________________
autant l'hiver éclate que l'hétéroclite le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre |
|
|
00
|
|
|
#8 | |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 658 ![]() |
Citation:
|
|
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
Citation:
Dans chaque if on a deux lignes, la première ajoute a notre requete courante la condition courante (where si c'est le premier critère non vide, and sinon) et ensuite le critère lui meme. La seconde ligne sert a dire "la condition courante de vient AND vu qu'on a mis un WHERE avant" donc ce code marche très bien. |
|
|
|
00
|
|
|
#10 | |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 658 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() guillaume defrainInscription : avril 2006 Messages : 1 667 ![]() |
J'ai été un poil vite, désolé
__________________
autant l'hiver éclate que l'hétéroclite le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre |
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Inscription : janvier 2005 Messages : 2 288 ![]() |
Citation:
Ca ne prouve en rien que mon code est faux surtout que c'était expliqué dans le message donc franchement je vois pas l'intéret de rabaisser ma solution juste parce que vous l'avez à peine lue. Maintenant il a l'embarras du choix, il suffit qu'il utilise la plus pratique pour lui c'est tout. |
|
|
|
00
|
|
|
#13 |
|
Membre actif
![]() Inscription : septembre 2004 Messages : 555 ![]() |
J'ai utilisé la méthode de koopajah plus ou moins qui me convenait mieux et ca marche nickeL
Merci |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() guillaume defrainInscription : avril 2006 Messages : 1 667 ![]() |
Je ne suis pas d'accord avec toi zulot je pense que son code est le meilleur qui a été donné sur ce thread. Il est plus concit et clair (si on le lit plus de 10 seconde
).Mais on va pas se battre
__________________
autant l'hiver éclate que l'hétéroclite le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com