2 valeurs d'une liste

Eléphant du PHP | 114 Messages

02 oct. 2006, 13:07

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

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

02 oct. 2006, 13:26

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:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 114 Messages

02 oct. 2006, 18:24

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 :)