Recuperation d'un select multiple
Posté : 11 juin 2008, 16:03
Yop,
Dans le cadre de mon programme, je suis amené à utilisé un <select> multiple. J ai opté pour la solution de deux balises <select>. La première contenant toute ma liste (je liste des numéros de parcelles agricoles) et une deuxième liste qui récupère les numéros choisis via un bouton "ajouter".
La deuxième liste récupère bien les numéros sélectionnés mais lorsque je les envois (formulaire), je n'arrive pas à les récupérer avec PHP.
Je penses que ceci est du que ma variable $_POST est vide, donc dans ce cas là, cela signifierai que malgré que ma deuxième liste contiennent les numéros, je n ai que des données vides dans mes <option>.
Pour comprendre un peu mieux, voila le code des deux listes :
Pour ceux que ça intéresse, voila le code JavaScript qui permet d ajouter et supprimer les numéros de parcelles
Dans le cadre de mon programme, je suis amené à utilisé un <select> multiple. J ai opté pour la solution de deux balises <select>. La première contenant toute ma liste (je liste des numéros de parcelles agricoles) et une deuxième liste qui récupère les numéros choisis via un bouton "ajouter".
La deuxième liste récupère bien les numéros sélectionnés mais lorsque je les envois (formulaire), je n'arrive pas à les récupérer avec PHP.
Je penses que ceci est du que ma variable $_POST est vide, donc dans ce cas là, cela signifierai que malgré que ma deuxième liste contiennent les numéros, je n ai que des données vides dans mes <option>.
Pour comprendre un peu mieux, voila le code des deux listes :
<?php
//Champs cachés
$sCodeInput = '<input type="hidden" name="numUser" value="'.$id_user.'" />';
$sCodeInput .= '<input type="hidden" name="numLevel" value="'.$oUser->m_aUserInfo['num_level'].'" />';
sCodeInput .= '<input type="hidden" name="nomLogin" value="'.$oUser->m_aUserInfo['login'].'" />';
//Premiere liste contenant toutes les parcelles agricoles => OK
$sCodeInput .= '<select id="LstSource" multiple="multiple" size="15"';
$sCodeInput .= ' maxlenght="70" class="marge-combo" style="max-width: 150px;" ondblclick="Ajouter();"';
if (!$oUser->m_bModeEditionAdd){
$sCodeInput .= 'disabled="disabled"';
}
$sCodeInput .= '>';
//$sCodeOption .= '<option>Selectionnez le ou les numeros de pacage vous concernant</option>';
foreach ($oUser->m_aListeExpl as $sCle => $sValeur) {
$sCodeOption = '<option';
$sCodeOption .= ' style="width: 150px;" value="'.$sCle.'"';
$sCodeOption .= '>';
$sCodeOption .= $sValeur['num_pacage'].'</option>';
$sCodeInput .= $sCodeOption;
}
$sCodeInput .= '</select>';
echo $sCodeInput;
?>
Et la deuxieme liste et les boutons
</td>
<td colspan="2" bgcolor="#E2F49B" align="center">
<input type="button" style="font-family:verdana; font-size:10;" value="» Ajouter »" onclick="Ajouter();">
<br /><br />
<input type="button" style="font-family:verdana; font-size:10;" value="« Retirer «" onclick="Supprimer();">
</td>
<td colspan="2" bgcolor="#E2F49B">
<p class="consignes-form">Numéro de pacage sélectionné(s)</p>
<?php
//Deuxieme liste recuperant les parcelles selectionnés
$sCodeInput = '<select multiple="multiple" name="add_num_paccage[]" id="LstCible" class="marge-combo" style="font-size:10; width:150;" size="15" ondblclick="Supprimer();"';
if (!$oUser->m_bModeEditionAdd){
$sCodeInput .= 'disabled="disabled"';
}
$sCodeInput .= '>';
//Code <option> -> [b]je penses que le problème bien de là, sauf que je ne sais pas quoi inserer...[/b]
$sCodeOption = '<option';
$sCodeOption .= ' style="width: 150px;"';
$sCodeOption .= '>';
$sCodeOption .= '</option>';
$sCodeInput .= $sCodeOption;
$sCodeInput .= '</select>';
echo $sCodeInput;
?>
Je récupère mes données dans ma classe comme ceci :
if ($_POST['btnUserAdd'] == 'Ajouter' and !$this->m_bModeEditionAdd){
$list_parcelle = $_POST['add_num_paccage'];//recuperation des parcelles selectionne
foreach($list_parcelle as $selectValue){
echo '<script language="javascript">alert("Rajout exploitation num '.$selectValue.' pour l user '.$_POST['nomLogin'].'");</script>';
//$this->_InsertExplByUser($selectValue); //fonction d insertion dans la BD
//echo '<p><span class="consignes-form">Rajout de la parcelle '.$selectValue.' effectuée.</span></p>';
}//fin foreach
}//fin if $_POST
Le warning de ma page est sur le foreach...j ai toujours des soucis avec les foreach...Pour ceux que ça intéresse, voila le code JavaScript qui permet d ajouter et supprimer les numéros de parcelles
Code : Tout sélectionner
<script type="text/javascript">
var NbSource;
var NbCible = 0;
function Ajouter(){
var NbEle = -1;
var TxtEle = "";
//for(j = 0; j < NbSource+1; j++){
for(i = 0; i < document.getElementById("LstSource").length; i++){
if (document.getElementById("LstSource").options[i].selected){
NbEle = i;
TxtEle = document.getElementById("LstSource").options[i].text;
}
}
if (NbSource != 0 && NbEle != -1){
document.getElementById("LstSource").options[NbEle] = null;
document.getElementById("LstCible").options[NbCible] = new Option(TxtEle);
NbCible = NbCible + 1;
NbSource = NbSource - 1;
}
}//fin fonction
//}
function Supprimer(){
var NbEle = -1;
var TxtEle = "";
for(i = 0; i < document.getElementById("LstCible").length; i++){
if (document.getElementById("LstCible").options[i].selected){
NbEle = i;
TxtEle = document.getElementById("LstCible").options[i].text;
}
}
if (NbCible != 0 && NbEle != -1){
document.getElementById("LstCible").options[NbEle] = null;
document.getElementById("LstSource").options[NbSource] = new Option(TxtEle);
NbCible = NbCible - 1;
NbSource = NbSource + 1;
}
}//fin fonction
</script>