Multiples select...multiples

Résolu/Fermé
gregorlabel Messages postés 1 Date d'inscription mercredi 20 septembre 2017 Statut Membre Dernière intervention 20 septembre 2017 - Modifié le 20 sept. 2017 à 01:47
 Gregor - 23 sept. 2017 à 19:52
Bonjour,

J'ai quatre select multiples dans un même form, avec quatre listes identiques sorties d'une même table de bdd, le jeu consistant à sélectionner des sets de plats différents dans chaque select. Dans mon rêve je les vois postés dans ma page traitement en Liste_1 à 4...
Mais non ! Dans la vraie vie le permier (avec 4 options sélectionnées) est bien posté. Mais les array 2, 3 et 4 prennent les valeurs des quatre premières options des sélects 2, 3 et 4 alors que j'ai sélectionné d'autres plats !
Voici mon code, avant de le produire par une boucle et des index je voudrais déjà le voir fonctionner tel quel. Mais? déjà, est-ce possible ?
Merci de votre aide, salutations cordiales à tous et à plus...
<!DOCTYPE html>
<html lang="fr">
 <head>
  <meta charset="UTF-8">
  <title>Accueil admin du Noori's</title>
  <link rel="stylesheet" type="text/css" href="../css/saisie_donnees.css">
  <link href='http://fonts.googleapis.com/css?family=Bitter' rel='stylesheet' type='text/css'>
 </head>
 <body>
  <main>
   <div class="form-style-5">    
   <?php
    session_start();
    unset($_POST);
    unset($_GET);


    if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) 
     
    {

     $DB_connect = new mysqli('127.0.0.1', 'root', '', 'restaurant_sav');
     mysqli_set_charset($DB_connect, "utf8");
     if ($DB_connect->connect_error) {
      die('Connect Error ('.$DB_connect->connect_errno.') '.$DB_connect->connect_error);
      $msg = 'Problème de connexion';
     }
     if ($DB_connect->connect_error) {
      die('Connect Error ('.$DB_connect->connect_errno.') '.$DB_connect->connect_error);
     }
     else
     {
      $msg = 'connecté';
     }
     include "fiche_logo.html";
      ?>
     <form name="Organise_menu" action="traite_organise_menu.php" id="editForm" method="post" enctype="multipart/form-data" class="form-style-5">
      <fieldset>
       <!-- /////// PREMIER RANG - PEUT ËTRE "ANTIPASTI" ////////////////-->
       <legend><span class="number">1</span>Choix du premier rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_1">
      <!-- Remonte les données de la table PLATS -->
      <?php
      
       $reponse = $DB_connect->query("SELECT id_rang, nom_rang FROM rang WHERE id_lang = 1");
       while ($donnees = $reponse->fetch_array())
       {
        echo '<option value="'.$donnees['nom_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
       
      </fieldset>
      
      <fieldset>
       <label for="plats_rang_1">Plats du premier rang</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select name="plats_rang_1[]" multiple="multiple" style="height: 130px">
       <!-- Remonte les données de la table PLATS -->
       <?php
       
        $reponse = $DB_connect->query("SELECT id_plat, nom_plat FROM plats WHERE id_type_plat NOT IN (1, 2, 7, 9, 11) AND id_lang = 1 ORDER BY id_cat, nom_plat");
        while ($donnees = $reponse->fetch_array())
        {
         echo '<option value="'.$donnees['nom_plat'].'" >'.($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <hr>
      <!-- /////// 2EME RANG - PEUT ËTRE "PRIMO PIATTO" ////////////////-->
      <fieldset>
       <legend><span class="number">2</span>Deuxième rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_2">
      <!-- Remonte les données de la table PLATS -->
      <?php
      
       $reponse = $DB_connect->query("SELECT id_rang, nom_rang FROM rang WHERE id_lang = 1");
       while ($donnees = $reponse->fetch_array())
       {
        echo '<option value="'.$donnees['id_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
      </fieldset>
      <fieldset>
       <label for="plats_rang_2">Ses plats</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select style="height: 130px" name="plats_rang_2[]" multiple="multiple">
       <!-- Remonte les données de la table TYPE_PLATS -->
       <?php
       
        $reponse = $DB_connect->query("SELECT id_plat, nom_plat FROM plats WHERE id_type_plat NOT IN (1, 2, 7, 9, 11) AND id_lang = 1 ORDER BY id_cat, nom_plat");
        while ($donnees = $reponse->fetch_array())
        {
         echo '<option value="'.$donnees['id_plat'].'" >'.htmlspecialchars_decode($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <hr>
      <fieldset>
       <!-- /////// 2EME RANG - PEUT ËTRE "SECONDO PIATTO" ////////////////-->
       <legend><span class="number">3</span>Troisième rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_3">
      <!-- Remonte les données de la table PLATS -->
      <?php
      
       $reponse = $DB_connect->query("SELECT id_rang, nom_rang FROM rang WHERE id_lang = 1");
       while ($donnees = $reponse->fetch_array())
       {
        echo '<option value="'.$donnees['id_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
      </fieldset>
      <fieldset>
       <label for="plats_rang_3">Ses plats</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select style="height: 130px" name="plats_rang_3[]" multiple="multiple">
       <!-- Remonte les données de la table PLATS -->
       <?php
       
        $reponse = $DB_connect->query("SELECT id_plat, nom_plat FROM plats WHERE id_type_plat NOT IN (1, 2, 7, 9, 11) AND id_lang = 1 ORDER BY id_cat, nom_plat");
        while ($donnees = $reponse->fetch_array())
        {
         echo '<option value="'.$donnees['id_plat'].'" >'.htmlspecialchars_decode($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <hr>
      <fieldset>
       <!-- /////// 2EME RANG - PEUT ËTRE "DOLCI" ////////////////-->
       <legend><span class="number">4</span>Quatrième rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_4">
      <!-- Remonte les données de la table PLATS -->
      <?php
      
       $reponse = $DB_connect->query("SELECT id_rang, nom_rang FROM rang WHERE id_lang = 1");
       while ($donnees = $reponse->fetch_array())
       {
        echo '<option value="'.$donnees['id_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
      </fieldset>
      <fieldset>
       <label for="plats_rang_4">Ses plats</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select style="height: 130px" name="plats_rang_4[]" multiple="multiple">
       <!-- Remonte les données de la table PLATS -->
       <?php
       
        $reponse = $DB_connect->query("SELECT id_plat, nom_plat FROM plats WHERE id_cat = 28 ORDER BY nom_plat");
        while ($donnees = $reponse->fetch_array())
        {
         echo '<option value="'.$donnees['id_plat'].'" >'.htmlspecialchars_decode($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <br>
      <input type="submit" id="modifier" value="Formaliser le menu">
      <textarea name="msg" rows="1" value="$msg"><?php echo $msg; ?></textarea>
     </form>
      
    <?php  
    }
    ?>
    
   </div>
  </main>
 </body>
</html>

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
20 sept. 2017 à 10:17
Bonjour,

Pour commencer... essaye de placer le maximum de php AVANT le HTML
ça rendra ton code plus lisible.

Ensuite.... lorsque tu as du code qui doit se répéter plusieurs fois... pense à le transformer en "fonctions".

Evite également de mélanger du mysqli style objet avec du mysqli Style procédurale.

Voici ton code remis en forme : (codé sans tester.... faudra peut-être corrigé quelques trucs)
<?php
//------------------------------------------------//
// Affichage des erreurs PHP
//------------------------------------------------//
error_reporting(E_ALL);
ini_set('display-errors','on');

//------------------------------------------------//
//démarrage session
//------------------------------------------------//
session_start();

//------------------------------------------------//
//Connexion à la bdd
//------------------------------------------------//
 $DB_connect = new mysqli('127.0.0.1', 'root', '', 'restaurant_sav');
/* Modification du jeu de résultats en utf8 */
 if ($DB_connect->connect_error) {
   die('Connect Error ('.$DB_connect->connect_errno.') '.$DB_connect->connect_error);
 } else {
   $msg = 'connecté';
 }
 if (!$DB_connect->set_charset("utf8")) {
   printf("Erreur lors du chargement du jeu de caractères utf8 : %s\n", $DB_connect->error);
   exit();
 }
 

 
//------------------------------------------------// 
// Recupération PROPRE des variables
//------------------------------------------------// 
$login = !empty($_SESSION['login']) ? $_SESSION['login'] : NULL;
$pwd = !empty($_SESSION['pwd']) ? $_SESSION['pwd'] : NULL;


 //------ Fonction BDD ----------//
 function querySelect($sql){
   global $DB_connect;
  if (!$result = $DB_connect->query($sql)) {
    printf("Erreur dans la requete : %s\n", $mysqli->error);
  }
  return $result;
 }


//------------------------------------------------// 
// Récupération des différentes listes
//------------------------------------------------//
function getRangs(){
  return querySelect("SELECT id_rang, nom_rang FROM rang WHERE id_lang = 1");	
}

function getPlats(){
  return querySelect("SELECT id_plat, nom_plat FROM plats WHERE id_type_plat NOT IN (1, 2, 7, 9, 11) AND id_lang = 1 ORDER BY id_cat, nom_plat");	
}



?>
<!DOCTYPE html>
<html lang="fr">
 <head>
  <meta charset="UTF-8">
  <title>Accueil admin du Noori's</title>
  <link rel="stylesheet" type="text/css" href="../css/saisie_donnees.css">
  <link href='http://fonts.googleapis.com/css?family=Bitter' rel='stylesheet' type='text/css'>
 </head>
 <body>
  <main>
   <div class="form-style-5">    
   <?php
    if ($login$ && $pwd) {  
      include_once "fiche_logo.html";
    ?>
     <form name="Organise_menu" action="traite_organise_menu.php" id="editForm" method="post" enctype="multipart/form-data" class="form-style-5">
      <fieldset>
       <!-- /////// PREMIER RANG - PEUT ËTRE "ANTIPASTI" ////////////////-->
       <legend><span class="number">1</span>Choix du premier rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_1">
      <!-- Remonte les données de la table PLATS -->
      <?php
	   $rangs = getRangs();
       while ($donnees = $rangs->fetch_array()){
         echo '<option value="'.$donnees['nom_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
       
      </fieldset>
      
      <fieldset>
       <label for="plats_rang_1">Plats du premier rang</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select name="plats_rang_1[]" multiple="multiple" style="height: 130px">
       <!-- Remonte les données de la table PLATS -->
       <?php
	   $plats = getPlats();
        while ($donnees = $plats->fetch_array()){
         echo '<option value="'.$donnees['nom_plat'].'" >'.($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <hr>
      <!-- /////// 2EME RANG - PEUT ËTRE "PRIMO PIATTO" ////////////////-->
      <fieldset>
       <legend><span class="number">2</span>Deuxième rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_2">
      <!-- Remonte les données de la table PLATS -->
      <?php
      
       $rangs = getRangs();
       while ($donnees = $rangs->fetch_array())
       {
        echo '<option value="'.$donnees['id_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
      </fieldset>
      <fieldset>
       <label for="plats_rang_2">Ses plats</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select style="height: 130px" name="plats_rang_2[]" multiple="multiple">
       <!-- Remonte les données de la table TYPE_PLATS -->
       <?php
        $plats = getPlats();
        while ($donnees = $plats->fetch_array())
        {
         echo '<option value="'.$donnees['id_plat'].'" >'.htmlspecialchars_decode($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <hr>
      <fieldset>
       <!-- /////// 2EME RANG - PEUT ËTRE "SECONDO PIATTO" ////////////////-->
       <legend><span class="number">3</span>Troisième rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_3">
      <!-- Remonte les données de la table PLATS -->
      <?php
      
       $rangs = getRangs();
       while ($donnees = $rangs->fetch_array())
       {
        echo '<option value="'.$donnees['id_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
      </fieldset>
      <fieldset>
       <label for="plats_rang_3">Ses plats</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select style="height: 130px" name="plats_rang_3[]" multiple="multiple">
       <!-- Remonte les données de la table PLATS -->
       <?php
       
        $plats = getPlats();
        while ($donnees = $plats->fetch_array())
        {
         echo '<option value="'.$donnees['id_plat'].'" >'.htmlspecialchars_decode($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <hr>
      <fieldset>
       <!-- /////// 2EME RANG - PEUT ËTRE "DOLCI" ////////////////-->
       <legend><span class="number">4</span>Quatrième rang</legend>
       <!-- Select des données de la table plats -->
       <select name="choix_rang_4">
      <!-- Remonte les données de la table PLATS -->
      <?php
      
       $rangs = getRangs();
       while ($donnees = $rangs->fetch_array())
       {
        echo '<option value="'.$donnees['id_rang'].'" >'.htmlspecialchars_decode($donnees['nom_rang']).'</option>';
       }
      ?>
       </select>
      </fieldset>
      <fieldset>
       <label for="plats_rang_4">Ses plats</label>
       <!-- Select des données de la table plats réduites aux plats entrant dans les menus -->
       <select style="height: 130px" name="plats_rang_4[]" multiple="multiple">
       <!-- Remonte les données de la table PLATS -->
       <?php
       
        $plats = getPlats();
        while ($donnees = $plats->fetch_array())
        {
         echo '<option value="'.$donnees['id_plat'].'" >'.htmlspecialchars_decode($donnees['nom_plat']).'</option>';
        }
       ?>
       </select>
      </fieldset>
      <br>
      <input type="submit" id="modifier" value="Formaliser le menu">
      <textarea name="msg" rows="1" value="$msg"><?php echo $msg; ?></textarea>
     </form>
      
    <?php  
    }
    ?>
    
   </div>
  </main>
 </body>
</html>


Ensuite... pourrais tu nous réexpliquer exactement ton souci ??

Dans mon rêve je les vois postés dans ma page traitement en Liste_1 à 4...
Mais non ! Dans la vraie vie le permier (avec 4 options sélectionnées) est bien posté. Mais les array 2, 3 et 4 prennent les valeurs des quatre premières options des sélects 2, 3 et 4 alors que j'ai sélectionné d'autres plats !


Où se fait ton "traitement" ??
Il n'y a acun code prenant en compte le POST de ton formulaire ......
Aurais tu oublié de nous le montrer ??
(avant de nous le montrer.. retravaille le en tenant compte de mes précédentes remarques....)

0
Bonsoir,

Merci beaucoup Jordane pour ton message.
En fait j'ai eu du mal à comprendre pour les select multiples. Si on n'ajoute pas les [] au nom du select il ne postera jamais plus d'un résultat. Donc je suis arrivé à le caler dans ma fonction, entre les guillemets (p'tin de syntaxe avec les guillemets !) et il m'a posté les valeurs que j'attendais.
Le problème est donc résolu. Merci de ton aide.
Si tu veux je te mets le nouveau code.
Désolé du retard de ma réponse et bonne soirée
0