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. qu'est ce que tu appelles une table ?!?? ... un tableau ?
    1
    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 []
      0
      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.
        0
        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
          0
          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 :-)
            0
            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 !
              0
              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.
                0
                1. je viens de t'envoyer un message privé...
                  0
                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
                  0
              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.
                0