Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1238 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Traitement liste choix multiples

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Traitement liste choix multiples

n°1482912
Ben-o
Posté le 28-11-2006 à 12:01:06  profilanswer
 

Bonjour, je viens de mettre en place sur mon site un formulaire de recherche avec une liste à choix multiples.
 
Je dois traiter les résultats afin de faire une requête sur une base MySQL.
 
Je transmet les données avec POST, et j'arrive à récupérer les données dans ma page de traitement, mais je ne sais pas comment transformer ça en requête.
 
Voici une partie du code de la liste à choix multiple:
 

Code :
  1. <select name="secteurs[]" size="10" multiple="multiple">
  2.         <option value="ne_carcassonnais">03 Carcassonnais</option>
  3. <option value="ne_cabardes">09 Cabardès</option>
  4. <option value="ne_minervois">10 Minervois</option>
  5. <option value="ne_corbieres">11 Corbières</option>
  6. <option value="ne_narbonnais">12 Narbonnais</option>
  7. <option value="ne_montagne_noire">25 Montagne Noire</option>
  8.         </select>


 
Et voici le code qui me permet de récupérer les choix de la liste:
 

Code :
  1. $tabsecteurs = (isset($_POST["secteurs"]))?$_POST["secteurs"]:null;
  2.  echo 'secteur choisi : ';
  3.   if (!empty ($tabsecteurs)){
  4.    foreach ($tabsecteurs as $secteurs) {
  5.     echo $secteurs;
  6.    }
  7.   }


 
Le "echo" me renvoie par exemple: ne_carcassonnaisne_minervoisne_narbonnais c'est à dire, les valeurs de la liste non séparées.
 
Je voudrais savoir comment isoler les résultats obtenus.
 
Merci par avance.

mood
Publicité
Posté le 28-11-2006 à 12:01:06  profilanswer
 

n°1482920
gooopil
pfiew
Posté le 28-11-2006 à 12:08:34  profilanswer
 

Ben-o a écrit :


     

Code :
  1. $tabsecteurs = (isset($_POST["secteurs"]))?$_POST["secteurs"]:null;
  2.  echo 'secteur choisi : ';
  3.   if (!empty ($tabsecteurs)){
  4.    foreach ($tabsecteurs as $secteurs) {
  5.     echo $secteurs;
  6.    }
  7.   }
 

Le "echo" me renvoie par exemple: ne_carcassonnaisne_minervoisne_narbonnais c'est à dire, les valeurs de la liste non séparées.

 

Je voudrais savoir comment isoler les résultats obtenus.

 

Merci par avance.

 

echo $secteurs."<br />";

 

Voila.........


Message édité par gooopil le 28-11-2006 à 12:09:24
n°1482960
rufo
Pas me confondre avec Lycos!
Posté le 28-11-2006 à 13:11:26  profilanswer
 

sinon, y'a print_r($_POST["secteurs"]); (à utiliser sans la boucle)

n°1482996
Ben-o
Posté le 28-11-2006 à 13:57:10  profilanswer
 

Merci, mais en fait je ne veux pas afficher les résultats à l'écran, c'était pour tester ce qui était renvoyé, je veux ensuite récupérer les résultats et les mettre sous forme de variables pour les exploiter dans ma requête SQL.

n°1483015
rufo
Pas me confondre avec Lycos!
Posté le 28-11-2006 à 14:15:02  profilanswer
 

$_POST["secteurs"] est vu comme un tableau avec des indices de 0 à n. Dans une requête SQL, tu peux faire un truc du genre :  

Code :
  1. $Sql = "SELECT ... FROM table t1, ... WHERE t1.Secteur IN (".implode(',', $_POST["secteurs"])." )";


 
ps : je vais encore me faire enguirlander par MaggicBuzz avec mon IN dans ma requête :whistle:


Message édité par rufo le 28-11-2006 à 14:16:08
n°1483019
Ben-o
Posté le 28-11-2006 à 14:18:42  profilanswer
 

Merci encore Rufo, je vais essayer ça.

n°1483034
Ben-o
Posté le 28-11-2006 à 14:41:14  profilanswer
 

En fait j'avais une requête de ce type grace à un petit formulaire de recherche à trois entrées: prix, secteur et type de bien.
 
Dans mon fichier de traitement php, j'avais ça:
 
tout d'abord le choix du prix:
 

Code :
  1. ... if ($_POST["prix"] == 'prix_1') {
  2.  $result_requete_prix = " AND t_maison.prix <= 75000";
  3. }
  4. elseif ($_POST["prix"] == 'prix_2') {
  5.  $result_requete_prix = " AND t_maison.prix > 75000 AND t_maison.prix < 150000";
  6. }...


 
ensuite le choix du secteur:
 

Code :
  1. ...if ($_POST["secteurs"] == 'cne') {
  2.  $result_requete_secteurs = " AND (t_maison.idx_secteur = '1' OR t_maison.idx_secteur = '2')";
  3. }
  4. elseif ($_POST["secteurs"] == 'ne') {
  5.  $result_requete_secteurs = " AND (t_maison.idx_secteur = '8' OR t_maison.idx_secteur = '9')";
  6. }...


 
et finalement le choix du type de bien:
 

Code :
  1. ...if ($_POST["categorie"] == 'bastide') {
  2.  $result_requete_categorie = " AND t_maison.idx_categorie = '1'";
  3. }
  4. elseif ($_POST["categorie"] == 'bergerie') {
  5.  $result_requete_categorie = " AND t_maison.idx_categorie = '2'";
  6. }
  7. elseif ($_POST["categorie"] == 'cave') {
  8.  $result_requete_categorie = " AND t_maison.idx_categorie = '3'";
  9. }...


 
Ensuite, j'assemble le tout pour construire la requête:
 

Code :
  1. $query_final = $query.$result_requete_prix.$result_requete_secteurs.$result_requete_categorie.$tri;
  2. $reponse = mysql_query($query_final);


 
Voila un peu le topo, ça fonctionne très bien comme ça.
 
C'était facile à gérer puisque les secteurs étaient regroupés (par exemple "cne" regroupe les secteurs 1 et 2)
 
Maintenant, tous les secteurs sont disponibles dans la liste déroulante à choix multiple, du coup le traitement côté PHP est plus délicat pour moi.
 
J'espère avoir été assez clair dans mes explications  :sweat:  d'avance merci  :)

n°1483082
rufo
Pas me confondre avec Lycos!
Posté le 28-11-2006 à 15:39:10  profilanswer
 

t'aurais peut-être intérêt à mettre dans le "value" de la balise <option> l'ID du secteur et non son nom.
 
par ailleurs, le IN est "équivalent" à un OR mais en plus rapide. Cela dit, faut préférer le EXISTS ;)

n°1483085
Ben-o
Posté le 28-11-2006 à 15:54:31  profilanswer
 

C'est vrai que mettre l'ID du secteur au lieu du nom dans le "value" de la balise <option> est beaucoup mieux, je n'y avais pas pensé... Pour ce qui est de EXISTS, je ne connais pas, je vais regarder ce que je peux trouver là dessus.

n°1483319
Ben-o
Posté le 28-11-2006 à 18:59:55  profilanswer
 

J'ai beau chercher, je ne trouve pas de solution... j'aurai encore besoin de votre aide!

mood
Publicité
Posté le 28-11-2006 à 18:59:55  profilanswer
 

n°1483582
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2006 à 11:07:46  profilanswer
 

où tu bloques? Parce qu'il n'y a rien de bien compliquer. Dans le value de chaque <option>, tu mets l'ID de chaque secteur et dans ta requête sql, tu fais un implode($_POST['secteurs']) après la condition "IN"...
 
(cf l'un de mes précédents messages)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Traitement liste choix multiples

 

Sujets relatifs
Récupere sur une meme page une variable PHP ou un moyen de m'en sortr[PHP] Gestion de contenu - Site dynamique
Problème de fonctionnement de script PHP apres migrationPHP / MYSQL ajout de % dans un champs BDD
pb liste déroulantBLACKLIST - LISTE NOIR d'adresse IP à mettre sur vos site internet
Requete PHP MYSQLJavascript + Liste déroulante <select>
changer focus d'un select en fonction choix autre selectUtiliser SET mais avec une liste (SET IN etc...)
Plus de sujets relatifs à : [PHP] Traitement liste choix multiples


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR