Bonjour
Dans le cadre de mon stage, je dois créer un module recherche multi-critères dans une base de données.
A l'aide d'un menu déroulant (MD), l'utilisateur sélectionne le critère de recherche désiré. Puis avec un autre MD, il sélectionne le critère de comparaison (contient, commence par, fini par, supérieur ou égal .....). Enfin, il remplit un champ texte dans lequel il indique ce qu'il souhaite recherché.
Jusque là, ça marche, je recherche tout d'abord dans la table les différents critères de recherche avec une requête MySQL, idem pour le critère de comparaison. J'assigne tout ça à ma template Smarty, laquelle les affiche sans problème.
Fichier searchbdd.php
Fichier searchbdd.tpl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 function Renvoi_Liste_Champs($id_table) { // récupération de la liste des champs $resultat = mysql_query("SHOW COLUMNS FROM BDD_$id_table"); while ($champs = mysql_fetch_object($resultat)) $liste_champs[] = array("libelle" => $champs->Field, "type" => $champs->Type); return $liste_champs; } $liste_criteres = Renvoi_Liste_Champs($id_table); $req_menu = "SELECT id, TypeRech FROM Type_Recherche"; // Récupération des comparatifs. $resultat_menu = mysql_query($req_menu); while($val2 = mysql_fetch_object($resultat_menu)) $liste[]=$val2->TypeRech; /* * blablabla ^^ */ $smarty->assign("Liste_Criteres", $liste_criteres); $smarty->assign("Liste_Comparatifs", $liste);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // Création d'un tableau, rien de bien méchant ^^ <td> <select name="Choix_Critere"> <option value="-1" style="background-color:#FFFFFF">Tous les critères</option> {foreach item=Critere from=$Liste_Criteres} <option value="{$Critere}" style="background-color:{cycle values="#EAF4F7, #FFFFFF;"}"> {$Critere.libelle}</option> {/foreach} </select> </td> <td> <select name="Choix_Comparatif"> <option value="-1" style="background-color:#FFFFFF">Tous les comparatifs</option> {foreach item=Comparatif from=$Liste_Comparatifs} <option value="{$Comparatif}" style="background-color:{cycle values="#EAF4F7, #FFFFFF;"}"> {$Comparatif}</option> {/foreach} </select> </td>
Et mon problème apparaît maintenant.
A la suite de mon tableau, j'ai un bouton tout ce qu'il y a de plus classique. Lorsque je clique dessus, je "retourne" dans mon fichier php afin de créer dynamiquement la requête qui sera lancée, en fonction de ce qu'a sélectionné l'utilisteur.
Ca marche super pour le comparatif, je le récupère sans problème, cependant je ne parviens pas à récupérer la valeur du critère de recherche
Fichier searchbdd.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 // Juste parce que j'aime pas avoir des choix qui prennent 40 caractères ^^ switch($Choix_Comparatif) { case "Contient" : $Num_Comp = 1; break; case "Commence par" : $Num_Comp = 2; break; case "Fini par" : $Num_Comp = 3; break; case "Superieur à" : $Num_Comp = 4; break; case "Inferieur à" : $Num_Comp = 5; break; case "Superieur ou egal à" : $Num_Comp = 6; break; case "Inferieur ou egal à" : $Num_Comp = 7; break; case "Entre" : $Num_Comp = 8; break; } if(isset($_REQUEST['Valider'])) { if(($critere != "") && ($Choix_Critere != "-1") && ($Choix_Comparatif != "-1")) { switch($Num_Comp) { case 1 : // Critère ---> "Contient" case 2 : // Critère ---> "Commence par" $requete = 'SELECT * FROM BDD_'.$id_table.' WHERE '.$Choix_Critere["libelle"].' LIKE "'.$critere.'%" '; // Tests print_r($Choix_Critere["libelle"] .'<br>'); print_r($requete); break; case 3 : // Critère ---> "Fini par" case 4 : // Critère ---> "Supérieur à" case 5 : // Critère ---> "Inférieur à" case 6 : // Critère ---> "Supérieur ou égal à" case 7 : // Critère ---> "Inférieur ou égal à" case 8: // Critère ---> "Entre" } } }
Vouala.
J'ai essayé :
1/ $Choix_Critere --> affiche "Array"
2/ $Choix_Critere.libelle --> affiche "Arraylibelle"
3/ $Choix_Critere->libelle --> affiche rien du tout ^^
4/ $Choix_Critere["libelle"] --> affiche "A", et je sais pas pourquoi xD
Je débute en php, et mon entreprise m'a fait découvrir smarty, donc je débute encore plus là dedans ^^ donc soyez indulgents
Merci d'avance si quelqu'un trouve la solution à mon problème![]()
Partager