|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
Bonsoir,
J'ai un formulaire de recherche multicritères contenant des boutons radio et des cases à cocher, il va piocher dans plusieurs tables pour afficher les résultats selon le choix des critères. J'ai une table "appartements", une table "maisons", une table "transactions" (Acheter ou Louer), une table "themes" (appartement, maison) et une table "pieces" (T1, T2, T3, T4, T5). Les tables "appartements" et "maisons" contiennent toutes les deux des clès étrangères pour faire le lien avec les autres table, à savoir, "transactionID", "rubriqueID" et "piecesID" Ce que je veut, c'est l'orsqu'on coche par exemple le bouton Acheter, la case Appartement et la case T1, il va questionner la table appartement pour sortir les critères demandés, la même chose si on coche la case maison. Voilà le code que j'ai écrit et qui ne marche pas encore: Code SQL :
colbien=$_GET['transactionID'] coltheme=$_GET['rubriqueID'] colpieces[$_GET['piecesID'] Merci |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
C'est sûr que comme ça, ça ne peut pas fonctionner ! Il ne faut qu'un seul WHERE par requête !
![]() Ça devrait déjà être mieux comme ça : Code SQL :
Il eut été plus simple de faire la liaison directement dans la table des transactions.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
Merci pour ta réponse, je vais tester et je reviens pour te dire ce que ca donne...
|
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
Ton code marche bien, J'obtiens exactement le même résultat qu'avec le code suivant que j'ai modifier il y a peu
Code SQL :
Par contre, sur le tien et sur le mien, je n'obtiens pas les appartements et les maisons dans le même tableau si l'utilisateur coche appartements et maisons en même temps!!! |
||
|
|
00
|
|
|
#5 |
![]() ![]() |
Je vois un petit problème sur ta requête qui devrait à mon avis provoquer une erreur : tu sélectionnes 5 colonnes dans la première requête et 6 dans la seconde.
Comment récupères-tu le résultat de la case à cocher maison et appartement ? Si c'est coltheme, comme tu utilises la même variable dans les deux sous-requêtes, c'est peut-être normal que tu n'aies que les appartements ou les maisons? En tout cas, je pense que ça viendrais plutôt du code applicatif que de la requête. Et je continue de penser que tu devrais corriger ton modèle de données.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
Tout à fait, je viens de supprimer m.Surface qui été en plus.
Par contre pour la variable coltheme, dois-je utiliser une autre variable pour maisons? Merci. |
|
|
00
|
|
|
#7 | |
![]() ![]() |
Citation:
Mais là ça ne tient plus de MySQL mais de l'application.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
En faite la variable coltheme= $_GET['rubriqueID'] j'ai mis rubriqueID comme colonne dans les deux tables, rubriqueID=1 dans appartements et =2 dans la table maisons, peut être qu'il fallait que je change le nom de la variable et mettre coltheme=$_GET['VARtheme'] pour la différencier du nom de la colonne!
|
|
|
00
|
|
|
#9 |
![]() ![]() |
$_GET contient les données provenant de ton formulaire. Rien à voir avec les colonnes de la table !
Il faut que tu affectes à la variable utilisée dans la requête la valeur du champ de sélection appartement ou maison. Si tu as 2 cases à cocher dans le formulaire, tu récupéreras deux paramètres dans $_GET et c'est la valeur de ces deux paramètres qu'il faut affecter à deux variables. Déjà que ton modèle de données n'est pas top mais j'ai l'impression que le processus de traitement du formualire n'est pas top non plus !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
Justement j'essaye d'améliorer mes connaissances à travers ce blog.
Peut tu s'il te plait me donner plus d'explications pour que je puisse comprendre, avec un exemple si c'est possible. Merci pour ton aide. |
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
$_GET est censé chercher les données de la table exemple
est liée aux deux boutons radio vendre ou louer pareil pour qui est liée aux cases à cocher appartements et maisons Code :
Quelques soient les critères que je sélectionne, ca m'affiche tout le contenu de la table. Merci |
||
|
|
00
|
|
|
#12 | |||||
|
Membre du Club
![]() Webmaster Inscription : septembre 2008 Messages : 113 ![]() |
Salut,
j'ai fais à peu prêt la même chose mais avec des offres d'emploi : Je vais d'abord tester mes checkbox en AJAX si elles sont coché je les mets dans un tableau et je passe mes valeurs en post: Code :
Code :
Citation:
je sais pas si cela peut t'aider, mais fait un echo de ta requête pour voir ce qu'elle t'affiche ...des fois c'est juste un espace, une parenthèse qui peut faire foirer ta requête. perso : j'avais laisser un <br /> car pour mon affichage plus visible et ça ma plombé mes résultats et j'ai tourner en rond pendant 2h. LoooL ![]() tiens au courant |
|||||
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
Merci beaucoup, je vais tester ça.
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 875 ![]() |
salut,
coté requête cinephil t'as bien dégrossi le problème... coté php maintenant... déjà ne jamais faire confiance à ce que tu récupères dans $_POST ou $_GET limite au maximum la récupération de texte... et teste toujours avec des regexp si c'est du texte libre si tu peux... tout ce qui as un équivalent sous forme d'index dans ta bd dois être récupéré sous sa forme numérique (bien plus compact pour la quantité de données passée en GET ou POST et facile à sécuriser contre les attaques par injections) un entier ce récupère toujours via un: là tu es sur que quoi qu'il arrive que tu as un entier (0 si pas de valeur numérique dans la variable) donc pas d'injection pour ta requête de recherche, selon l'organisation de ton formulaire tu vas peut-être devoir découpé celle-ci et faire des unions éventuelles... tu vas construire ta requete de manière modulaire en fonction des paramètre choisi... tu peux le faire dynamiquement coté mysql avec une procédure stockée (requête préparée, table temporaire et/ou utilisation d'union) ou coté php selon l'isolation php/mysql que tu veux avoir... mais le principe sera le même... identifier la ou les requêtes qui sont en jeu en fonction des paramètres... construire la ou les chaines de caractère en fonction puis finaliser la chaine contenant la requête finale avec des unions (coté php pas trop le choix niveau performances) si besoin... là, ta structure de bd est importante et va t'imposer les critères, les requêtes et les performances aussi... d'où cinephil te disant de bien penser ton modèle de données vu qu'il est au centre de tout...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 24 ![]() |
Ok, merci beaucoup
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com