PHP - Récupération des valeurs choix multiple

adoziad Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
adoziad Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
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. rudak Messages postés 590 Date d'inscription   Statut Membre Dernière intervention   46
     
    qu'est ce que tu appelles une table ?!?? ... un tableau ?
    1
  2. niconovice Messages postés 1037 Statut Membre 86
     
    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
  3. adoziad Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  4. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. adoziad Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  7. niconovice Messages postés 1037 Statut Membre 86
     
    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
  8. adoziad Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    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. niconovice Messages postés 1037 Statut Membre 86
       
      je viens de t'envoyer un message privé...
      0
    2. xamurai Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   15
       
      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
  9. adoziad Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
     
    @ 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