PHP - Récupération des valeurs choix multiple

adoziad Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
adoziad Messages postés 7 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.
A voir également:

8 réponses

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
niconovice Messages postés 953 Date d'inscription   Statut Membre Dernière intervention   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
adoziad Messages postés 7 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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adoziad Messages postés 7 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
niconovice Messages postés 953 Date d'inscription   Statut Membre Dernière intervention   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
adoziad Messages postés 7 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
niconovice Messages postés 953 Date d'inscription   Statut Membre Dernière intervention   86
 
je viens de t'envoyer un message privé...
0
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
adoziad Messages postés 7 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