Recuperation d'un select multiple

Eléphant du PHP | 398 Messages

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 :
<?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&eacute;ro de pacage s&eacute;lectionn&eacute;(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&eacute;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>
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Mammouth du PHP | 1668 Messages

11 juin 2008, 16:23

Essay avec ça :
$_POST['add_num_paccage[]']
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 398 Messages

11 juin 2008, 16:35

Justement non :)
D'une ça ne marche pas, et de deux, c est un tableau de données que j envois avec le name="add_num_pacage[]", mais avec le PHP, ça se récupère avec
$_POST['add_num_pacage']
, qui est un tableau, que l'on parcours par exemple un foreach. Apparement, ma variable $_POST est completement vide quand je l'envoie, donc le soucis viens de mon deuxieme select je penses. Comme si il n'y avait rien dans les balises <option>...hors je ne sais pas comment faire pour les "remplir", nottamment au niveau du <option value="X">...quoi que je peux ptete m'affranchir de l'attribut value.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Mammouth du PHP | 1668 Messages

11 juin 2008, 20:07

Ah, tu as essayé ? Je croyais que ça marchait comme ça :roll:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 4674 Messages

12 juin 2008, 00:02

Hey :),

Commence par vérifier les données de ton tableau $_POST :
print_r($_POST);
Est-ce que tu vois toutes tes données ? Est-ce que le formulaire est bien construit (pas d'erreur HTML) ? Tu peux essayer d'isoler le select et faire un test à part, etc.
Je rappelle à toutes fins utiles que seuls les options sélectionnées seront envoyés. Si tu veux envoyer plusieurs valeurs dans une sélection, utilise l'attribut multiple.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 398 Messages

12 juin 2008, 09:42

Les données sont bien envoyées, exceptée celle du select (verification avec le print_r), comme si elle n existait pas.
Je rappelle à toutes fins utiles que seuls les options sélectionnées seront envoyés. Si tu veux envoyer plusieurs valeurs dans une sélection, utilise l'attribut multiple.
Je te rassure, mon deuxième select à l'attribut multiple :). Mais, le problème vient peut-être du fait qu'il considère que le deuxième select est vide.
J ai cherché sans trop de succès, ce genre de double <select>.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

ViPHP
ViPHP | 4674 Messages

12 juin 2008, 09:49

Tu pourrais donner le code HTML final s'il te plaît, qu'on y voit plus clair ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 398 Messages

12 juin 2008, 10:11

Le code est en haut ;). Je n'y ai pas touché mais le revoila :
<?php									 
	$sCodeInput = '<select id="LstSource" multiple="multiple" size="15" maxlenght="70" class="marge-combo" style="max-width: 150px;" ondblclick="Ajouter();"';

	$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;								
?>
</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&eacute;ro de pacage s&eacute;lectionn&eacute;(s)</p>
	<?php
		$sCodeInput = '<select multiple="multiple" name="add_num_paccage[]" id="LstCible" class="marge-combo" style="font-size:10; width:150;" size="15" ondblclick="Supprimer();"';
		$sCodeInput .= '>';									
		$sCodeInput .= '</select>';
		echo $sCodeInput;
	?>
J ai fais une page pour le tester à part, c est beaucoup plus parlant :
http://start5g.ovh.net/~fonfonla/untitled.php

Sinon, j ai résolu un problème, je n avais pas pensé qu'il fallait sélectionner les parcelles dans le deuxième select. Or je voudrais pouvoir m'affranchir de ça car elles sont déja sélectionnées vis à vis de la liste du premier select.[/url]
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

ViPHP
ViPHP | 4674 Messages

12 juin 2008, 10:33

Voilà ce que j'ai essayé :

Code : Tout sélectionner

<form action="#" method="POST"> <p><select multiple name="mySelect[]"> <option value="a">aaa</option> <option value="b">bbb</option> <option value="c">ccc</option> <option value="d">ddd</option> <option value="e">eee</option> </select></p> <p><input type="submit" /></p> </form>
Voici ce que j'obtiens en faisant print_r($_POST) quand je sélectionne a, c, et d :

Code : Tout sélectionner

Array ( [mySelect] => Array ( [0] => a [1] => c [2] => d ) )
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 398 Messages

12 juin 2008, 11:10

C est bon je te rassure je récupère, mais par contre, est-ce possible de pouvoir tout envoyer le contenu d'un select sans les sélectionner ? Un attribut dans le value ?
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

ViPHP
ViPHP | 4674 Messages

12 juin 2008, 11:17

est-ce possible de pouvoir tout envoyer le contenu d'un select sans les sélectionner ?
Non. Sinon passe par Javascript.
Un attribut dans le value ?
Comme le value est un attribut, je ne vois pas comment avoir des attributs d'attribut …
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 398 Messages

12 juin 2008, 14:07

est-ce possible de pouvoir tout envoyer le contenu d'un select sans les sélectionner ?
Non. Sinon passe par Javascript.
Un attribut dans le value ?
Comme le value est un attribut, je ne vois pas comment avoir des attributs d'attribut …
Oké je vais essayer de chercher un ti peu pour le JS.
Je me suis trompé ^^, je voulais dire un attribut dans le <option>, au temps pour moi ^^.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe