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. @ 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.
    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. 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. 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. 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. 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. 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 []