PHP - Récupération des valeurs choix multiple

Bonjour,

Tout d'abord, merci pour l'attention que vous portez à mon post.

J'ai un petit problème de récupération des valeurs d'une liste à choix multiple dans une table.

Tout d'abord, j'ai une table avec une seule ligne. A l'aide d'un bouton, cela me permet d'ajouter une autre ligne sur ma table. Au « submit », je récupère les valeurs de la table avec PHP :

<html>
...
<TD><INPUT type="text" name="nom[]"/></TD>
...
</html>

<?php
$txtbox = $_POST['nom'];

foreach($txtbox as $a => $b)

echo "Nom: $txtbox[$a] <br />";
?>

Jusqu'à présent ça fonctionne sans problème.

J'ai ajouté une colonne sur ma table « Col1 » avec choix multiple:

<td>
<select name="Col1[]" size="4" multiple>
<option value="Valeur 1">Valeur 1</option>
<option value="Valeur 2">Valeur 2</option>
<option value="Valeur 3">Valeur 3</option>
<option value="Valeur 4">Valeur 4</option>
<option value="Valeur 5">Valeur 5</option>
</select>
</td>
j'ai ajouté dans le code PHP

$Col1 = $_POST['Col1'];

Comment puis-je récupérer la ou les valeurs de Col1 de la façon suivante :

Nom : Didier, Valeur 1, Valeur 2
Nom : Jean-Claude, Valeur 2, Valeur 4

D'avance merci pour votre aide.

8 réponses

  1. Salut, enlève le [] la balise select n'est pas un tableau puisqu'il n'y a qu'un choix possible pas comme les cases à cocher et c'est là qu'on utilise []
    1. Bonsoir,

      Voici mon code un plus au complet afin de vous permettre de comprendre mieux:

      <HTML>
      <HEAD>
      <TITLE> Add/Remove dynamic rows in HTML table </TITLE>
      <SCRIPT language="javascript">
      function addRow(tableID) {

      var table = document.getElementById(tableID);

      var rowCount = table.rows.length;
      var row = table.insertRow(rowCount);

      var colCount = table.rows[0].cells.length;

      for(var i=0; i<colCount; i++) {

      var newcell = row.insertCell(i);

      newcell.innerHTML = table.rows[0].cells[i].innerHTML;
      //alert(newcell.childNodes);
      switch(newcell.childNodes[0].type) {
      case "text":
      newcell.childNodes[0].value = "";
      break;
      case "checkbox":
      newcell.childNodes[0].checked = false;
      break;
      case "select-one":
      newcell.childNodes[0].selectedIndex = 0;
      break;
      }
      }
      }

      function deleteRow(tableID) {
      try {
      var table = document.getElementById(tableID);
      var rowCount = table.rows.length;

      for(var i=0; i<rowCount; i++) {
      var row = table.rows[i];
      var chkbox = row.cells[0].childNodes[0];
      if(null != chkbox && true == chkbox.checked) {
      if(rowCount <= 1) {
      alert("Cannot delete all the rows.");
      break;
      }
      table.deleteRow(i);
      rowCount--;
      i--;
      }

      }
      }catch(e) {
      alert(e);
      }
      }

      function addtxt(input) {
      var obj=document.getElementById(input)
      obj.value+="blah test 123"
      }

      function addtext() {
      var newtext = "Cornichon";
      document.myform.outputtext.value += newtext;
      }

      function PostSelect(myform)
      {
      // On compte le nombre d'item de la liste select
      NbCol1 = document.forms[myform].elements.Col1.length;

      // On lance une boucle pour selectionner tous les items
      for (a = 0; a < NbCol1; a++)
      {
      document.forms[myform].elements.Col1.options[a].selected = TRUE;
      }

      // On modifie l'ID du champ select pour que PHP traite cette
      // dernière comme un array
      document.forms[myform].elements.Col1.name = "Col1[]";

      // On soumet le formulaire
      document.forms[myform].submit();
      }

      </SCRIPT>
      </HEAD>
      <BODY>

      <table id="tableheader" width="750px" border="1">
      <tr>
      <td width="2.9%"></td>
      <td width="18%">Nom</td>
      <td width="31.1%">Type commande</td>
      <td width="14.7%">Pain</td>
      <td width="20.3%">Boisson</td>
      <td width="20%">Crudité</td>
      </tr>
      </table>

      <form name="myform" method="post" action="bon_commande.php">

      <TABLE id="dataTable" width="750px" border="1">
      <TR>
      <TD><INPUT type="checkbox" name="chk[]"/></TD>
      <TD><INPUT type="text" name="nom[]"/></TD>
      <TD>
      <TD>
      <SELECT name="boisson[]">
      <OPTION value=""> </OPTION>
      <OPTION value="Coca">Coca</OPTION>
      <OPTION value="Coca light">Coca light </OPTION>
      <OPTION value="Coca zero">Coca zero</OPTION>
      <OPTION value="Fanta">Fanta</OPTION>
      <OPTION value="Fanta light">Fanta light</OPTION>
      </SELECT>
      </TD>
      <td width="28%">
      <select name="Col1[]" size="4" multiple>
      <option value="Valeur 1">Valeur 1</option>
      <option value="Valeur 2">Valeur 2</option>
      <option value="Valeur 3">Valeur 3</option>
      <option value="Valeur 4">Valeur 4</option>
      <option value="Valeur 5">Valeur 5</option>
      </select>
      </td>

      </TR>
      </TABLE>
      ...

      Voilà comme ça vous avez un grande partie du code.

      @rudak
      voir code ci-dessus.

      @niconovice
      Il y a d'autre liste déroulante mais avec seulemet une valeur et cela marche plutot bien mais pas sur la multi selection.

      Encore merci a vous les gars.
      1. Select n'envoit que la valeur selectionner:
        il te faut modifier ton code par exemple en mettant par exemple dans les value des options:

        <option value="valeur1_valeur2_valeur3">nom valeur 1</option>
        ...
        <option value="valeur3_valeur1_valeur2">nom valeur 3</option>


        tout en sachant par exemple que _ est un diviseur des valeurs possibles
        et que la premiere valeur es la valeur selectionner
        1. Bonjour,

          @xamurai
          Malheureusement, votre solution ne me convienne pas. Le but est de sélectionner une ou plusieurs valeurs et il n'y a pas d'ordre. C'est à dire, ce n'est pas par ce qu'on choisi la valeur 3 qu'on souhaite avoir le 1 et le 2 ...

          Merci quand même :-)
          1. Salut Adoziad,

            ton PHP ne se limite qu'à un foreach ? pourquoi ne pas faire un vrai script de formulaire en testant les cases ?

            Et puis autre chose aussi tu comptes récupérer 2 valeurs à partir d'un select ??

            Si tu cherches un bon casse tête, mets toi à l'informatique !
            1. Salut niconovice,

              En effet, mon PHP se limite à un foreach. La question, est-il possible d'inclure un foreach dans un autre ?
              Je m'explique, pour la 1er partie, j'ajoute autant de lignes que je veux et je récupère les valeur avec "foreach".
              Peut-on limiter le 2ieme "foreach" dans une seul ligne et faire "reset value" pour refaire la boucle à nouveau sur la ligne suivante ?
              Théoriquement, c'est le moyen le plus "facile" non ? Voici le lien sur mon site de test :
              http://lebreak.3e-consultancy-solutions.be/commande/index.html
              Tu peux faire "Envoyer" dans la "Commande 2" sans problème, il envoit sur une autre page c'est tout.
              Encore merci pour ton aide.
              1. je viens de t'envoyer un message privé...
              2. moi je te conseignerai d'utiliser du javascript pour realiser ce que tu veux faire:
                utilise eventuellment du ajax à l'aide de JQUERY pour les interaction avec ton php
            2. @ niconovice
              Je n'ai rien reçu...

              @ xamurai
              Je ne m'y connais pas en ajax et JQUERY. Je pense être prêt du but, en tout cas je pense, dans mon code ci-dessus.