Liste déroulante avec choix par défaut

SICarmy
Invité n'ayant pas de compte PHPfrance

17 nov. 2012, 01:41

Bonjour, j'ai besoin d'afficher une liste déroulante avec choix, mais j'aimerais bien que la valeur "selected" soit affichée de base. j'ai fait ce morceau de code mais mon if ne semble pas marcher correctement. Auriez vous une idée?


$sql = "SELECT DISTINCT login,id_type_ad FROM adherent";
$donnees = mysql_query($sql);
echo "<select>";  

	while ($row = mysql_fetch_array($donnees, MYSQL_ASSOC)) {
	$data = " SELECT DISTINCT login,id_type_ad FROM adherent WHERE login  = '" . $row['login'] . "' ";
	$data = mysql_query($data);  
	$data = mysql_fetch_array($data);
	echo "<option ";
	if ( $row["id_type_ad"] == $data["id_type_ad"] ) 
	{
	echo " selected=\"selected\" ";
	}
	echo " value='" .$row['id_type_ad']. "' >" . $row['id_type_ad'] . "</option>"; 

	} 
echo "</select>";  

?>

Petit nouveau ! | 9 Messages

17 nov. 2012, 12:57

sa devrait fonctionner comme ceci:
$sql = "SELECT DISTINCT login,id_type_ad FROM adherent";
$donnees = mysql_query($sql);
echo "<select>";  

        while ($row = mysql_fetch_array($donnees, MYSQL_ASSOC)) {
       $data = " SELECT DISTINCT login,id_type_ad FROM adherent WHERE login  = " . $row['login'];
        $data = mysql_query($data);  
        $data = mysql_fetch_array($data);
        echo "<option value=".$row['id_type_ad'];
        if ( $row["id_type_ad"] == $data["id_type_ad"] ) 
        {
        echo " selected=\"selected\">";
        }
        echo $row['id_type_ad']. "</option>"; 

        } 
echo "</select>";

SICarmy
Invité n'ayant pas de compte PHPfrance

17 nov. 2012, 15:39

Même en inversant value et selected, ca ne marche pas, je ne vois pas ou pourrais être le problème
$sql = "SELECT DISTINCT login,id_type_ad FROM adherent"; // je selectionne ma liste d'adhérents et leurs types
$donnees = mysql_query($sql); // j’exécute la requete
echo "<select>";  //j'ouvre ma balise select

        while ($row = mysql_fetch_array($donnees, MYSQL_ASSOC)) { 
        $data = " SELECT DISTINCT login,id_type_ad FROM adherent WHERE login  = '" . $row['login'] . "'"; // je recupere les données temporaires et la ligne ou le login de la bdd est égale au login du while
        $data = mysql_query($data);   // j’exécute la requete
        $data = mysql_fetch_array($data); //je formate mes données pour pouvoir les utiliser
        echo "<option value=".$row['id_type_ad']. " ";  //j'ouvre ma balise option 
        if ( $row["id_type_ad"] == $data["id_type_ad"] )  //je compare si le type du while = au type du login
        {
        echo " selected=\"selected\" ";  //je le selectionne
        }
        echo ">" . $row['id_type_ad']. "</option>";  //je ferme ma balise option

        } 
echo "</select>";

ViPHP
AB
ViPHP | 5818 Messages

17 nov. 2012, 20:46

Faut revoir la logique de ton script. A quoi sert la deuxième requête imbriquée ?
Tu mets comme commentaire :
// je recupere les données temporaires et la ligne ou le login de la bdd est égale au login du while
Mais comme le login du while est donné par la bdd, la phrase devient
je recupere les données temporaires et la ligne ou le login de la bdd est égale au login de la bdd
A part ça pour ajouter des options dans une ligne tu peux faire :
$selected = $a == $b? 'selected="selected"' : null;
echo '<option value="'.$row['id_type_ad'].'" '.$selected.'>'.$row['id_type_ad'].'</option>';
Notes que dans quasiment tous les cas, et notamment quand il s'agit d'écrire des champs de formulaires, il est plus facile et plus lisible d'utiliser les simples quotes pour entourer une ligne qui contient des variables concaténées.

Eléphanteau du PHP | 25 Messages

14 déc. 2012, 16:30

salut

aurais tu trouvé la solution ?
je cherche à faire la même chose que toi ?

A+

Mammouth du PHP | 702 Messages

14 déc. 2012, 16:42

le problème je crois que dans ton code l'attribut selected est dans le value, je me trompe ?