Page 1 sur 1

2 valeurs d'une liste

Posté : 02 oct. 2006, 13:07
par Florent
Bonjour
J'ai un formulaire, liste et bouton de validation (submit).
J'alimente une liste depuis une table d'une bdd, le tout en php.
J'aimerais savoir si il est possible de récupérer 2 valeurs ?
<td style=" width: 60%;text-align: center;"><br />
					<select name="champion" style="width: 200px;">
					<option value="aucun">Choisissez un champion</option>
					<option value="aucun">- - - - - - - - - - - - - - - - - - - - -</option>
					<?
					// faire liste des champions
					$sql = "SELECT nom,son_chef FROM tournoi where son_chef not in ('$login')";
					$r_l = mysql_query($sql);
					
					while ($r_liste = mysql_fetch_array($r_l)) {
					echo '<option value="', $r_liste['nom'],'">', $r_liste['nom']. ' --> ', $r_liste['son_chef'].  '</option>';
					}
					?>
					</select>
					<br /><br />
					<input type="text" name="mise" value="1" /><br />Max. : 10 000 000 <br /><br />
					<input class="bouton" type="submit" name="miser" value="Miser" /><br />
				</td>
Ce que j'aimerais, c'est que quand on choisi un élément de la liste et qu'on valide, soit envoyé par POST :
$r_liste['nom'] et $r_liste['son_chef']
Pour éviter de faire une nouvelle requette dans le fichier qui reçoit les variables afin de ressortir la vleur correspndant à nom c'est à dire"son_chef".
Si c'est faisable....
Merci

Posté : 02 oct. 2006, 13:26
par sadeq
Oui, il faut savoir que tout ce que tu mets dans VALUE='' d'une option sera envoyé au submit sous le nom du SELECT.

Ainsi dans ton exemple, puisque le SELECT est nommé "champion" php reçoit par un submit une variable $_GET["champion"] ou $_POST["champion"] qui contient le nom du champion.
Pour recevoir aussi le nom de son chef il suffit d'inclure ce dernier dans la clause VALUE avec le nom en les séparant par un point-virgule comme :
  • VALUE = 'toto;le chef de toto'
Une fois récupérée, la valeur sélectionnée est donc composée de 2 parties séparées par ;
Il suffit d'utiliser un explode() pour couper cette valeur en 2 chaînes exploitable.

Voici le comportement de php à la reception du submit pour traiter la liste "champion":
list($nom_champion, $son_chef) = explode(";", $_GET["champion"]); //ou $_POST au lieu de $_GET
A toi de jouer :wink:

Posté : 02 oct. 2006, 18:24
par Florent
J'ai lu, puis je suis allé voir le lien de explode et j'ai tout compris :)
J'ai changé un peu ta suggestion, preuve que c'est du "pigé".
Voilà ce que donne donc mon code qui reçoit le formulaire :
if (isset($_POST['miser']) && $_POST['miser'] == 'Miser') {
	if (isset($_POST['mise']) && !empty($_POST['mise']) && isset($_POST['champion']) && !empty($_POST['champion'])){
	
		$envoi = explode(";", $_POST["champion"]);
		$champion = $envoi [0];
		$son_chef = $envoi [1];

		$champion = htmlentities(addslashes($champion));
		$son_chef = htmlentities(addslashes($son_chef));
		$mise = intval($_POST['mise']);
// vérifications
// sauvegarde dans la table
// confirmation
Donc je te remercie, ça m'arrange beaucoup :)