8796 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai réalisé une liste déroulante avec deux requête sql.
Ma première requête me permet de remplir la valeur par défaut, la seconde la liste en elle même.

Mon soucis est que ma liste déroulante garde toujours ma valeur par défaut et quand je veut créer mon objet, il le créer avec l'ID qui est par défaut.

J'ai mis un If pour lui dire que si on reste sur la valeur par défaut il faut mettre son ID sinon qu'il mette l'ID du choix.

Voici mon code:
Première requête:

$req = "SELECT ad, ID, nom FROM fab WHERE fab='".$_SESSION['fab']."'";
$res = mysqli_query($db_link, $req);
$val=mysqli_fetch_array($res);
$nom = $val['nom'];
$ID = $val['ID'];

Ma liste déroulante (qui se trouve dans un formulaire):

<p style="margin: 0px 0 20px 0;">
<label class="labeldevis1 obligatoire" style="font-size:12px">Choix:</label>
<select class="input inputCbo" name="ID" onChange="fab.submit();">
<?php
/*Remplissage de la liste déroulante*/
$req= "SELECT ID, client FROM fab GROUP BY client";
$res = mysqli_query($db_links, $req) or die (mysqli_error($db_link));
/*Valeur afficher au début*/
echo '<option value='.$ID. ' SELECTED>'.$nom.'/'. $ID.'</option>';
$selected = ' selected="selected" ' ;
while($val=mysqli_fetch_array($res)) 
{
$sel = ($val["ID"] == $_POST['ID']) ? $selected  : '' ;
echo "<option value='". $val["ID"]. "' $sel >".$val["nom"]."/". $val["ID"]."</option>\n";
}
?>
</select>		
</p>

Création (dans un second formulaire):

<form name='Creer' method='post' action="<?php echo $_SERVER[PHP_SELF]; ?>" enctype='multipart/form-data'>
<input type="hidden" name="action" value="creer">
<div class="form_marge_content2" >
<br /><br />
<p style="margin: 0px 0 20px 0; margin-left: 35px">
<label class="obligatoire" style="font-size:15px">Etape 2: Création.</label>
</p>
<p style="margin: 0px 0 20px 0;">
<label class="labeldevis1 obligatoire <?php echo $class_modele ; ?>" style="font-size:12px">Créer :</label>
<input type="hidden" name="ID" value="<?php echo $ID; ?>" />
<input type="text" class="input inputCreateCompte" name="modele" value="" />
</p>
<center><p>
<input class="form_submit" type="submit" name="creer" value="creer" />
<!--<?php echo $bouton_creer; ?>-->
</p></center>
<br /><br />
</div>
</form>


Je voudrais que la valeur ne reste pas a défaut quand je change de choix dans ma liste déroulante, mais dés que je clique sur créer, il enregistre l'objet avec l'ID par défaut.

Merci d'avance si vous avez des idées.
Bonne appétit à tous.
Miala
Modifié par Miala (24 Nov 2009 - 15:39)
Salut,

hem... plusieurs remarques :

* pourquoi sélectionner ad dans ta première requête si tu ne l'utilises pas ?

* ce ne serait pas ORDER BY plutôt que GROUP BY dans ta seconde requête ?

* ce n'est pas SELECTED mais selected="selected" et en ne le mettant pas cette ligne serait de toute façon sélectionnée par défaut puisque c'est la première.

* ce n'est pas très propre d'écrire cette option en premier puisque je suppose que la même valeur se retrouve plus loin dans la liste. Tu aurais pu faire :
<select class="input inputCbo" name="ID"> 
<?php 
/* Remplissage de la liste déroulante */ 
$req= "SELECT ID, client FROM fab ORDER BY client, ID"; 
$res = mysqli_query($db_links, $req) or die (mysqli_error($db_link)); 
$selected = ' selected="selected" ' ; 
while($val=mysqli_fetch_array($res))  
{
	if(!empty($_POST['ID'])) {
		$sel = ($val["ID"] == $_POST['ID']) ? $selected  : '' ; 
	} else {
		$sel = ($val["ID"] == $ID) ? $selected  : '' ; 
	}
	echo "<option value='". $val["ID"]. "' $sel >".$val["client"]."/". $val["ID"]."</option>\n"; 
} 
?> 
</select>  
* il ne faut pas soumettre le formulaire sur le onchange du select car
1) si le JavaScript est désactivé il ne sera jamais soumis
2) si la valeur déjà sélectionnée est celle que je voulais sélectionner je ne vais pas la modifier (et donc pas de onchange)
(re)lire Comment bien coder en Javascript.

* l'élément CENTER est obsolète depuis déjà longtemps : il faudrait te mettre d'urgence aux CSS. Smiley cligne
Merci pour tes réponses.

Le "ad", je l'utilise dans un if, c'est un booléen, si il est à 1 il fait la liste déroulante et si c'est 0, il met une zone de texte.

Je vais essayer se que tu m'as conseiller.

Encore merci
Je vient de modifier mon code en me servant de "Comment bien coder en Javascript", quand je créer mon objet, ça me met toujours l'ID par défaut.
J'avais oublier de changer une variable dans mon code. Merci beaucoup ça fonctionne correctement maintenant.
Mon code fonctionne parfaitement quand je change le choix, par contre si je reste sur la valeur par défaut, il ne me garde pas l'ID, il me met 0 au lieu de 1.

Ma liste:

$req= "SELECT ID, nom FROM fab ORDER BY nom, ID";
$res = mysqli_query($db_link, $req) or die (mysqli_error($db_link));
$selected = ' selected="selected" ' ;
while($val=mysqli_fetch_array($res))   
{ 
if(!empty($_POST['ID'])) { 
$sel = ($val["ID"] == $_POST['ID']) ? $selected  : '' ;  
} else { 
$sel = ($val["ID"] == $ID) ? $selected  : '' ;  
} 
echo "<option value='". $val["ID"]. "' $sel >".$val["nom"]."/". $val["ID"]."</option>\n";  
}  


C'est la même liste que tu m'as donné, elle fonctionne très bien pour un autre choix.

J'ai rien changer pour la création.

Dans $_POST['ID'], j'ai 0, il ne me garde pas ma valeur quand je reste à la valeur par défaut.
Modifié par Miala (24 Nov 2009 - 15:15)
J'ai modifier une chose, ça à l'air de fonctionner comme ça:


<?php
/*Remplissage de la liste déroulante*/
$req= "SELECT ID, nom FROM fab ORDER BY nomt, ID";
$res = mysqli_query($db_link, $req) or die (mysqli_error($db_link));
$selected = ' selected="selected" ' ;
while($val=mysqli_fetch_array($res))   
{
if(!empty($_POST['ID'])) { 
$sel = ($val["ID"] == $_POST['ID']) ? $selected  : '' ;
} else { 
$sel = ($val["ID"] == $ID) ? $selected  : '' ;  
$_POST["ID"] = $ID;
} 
echo "<option value='". $val["ID"]. "' $sel >".$val["nom"]."/". $val["ID"]."</option>\n";  
}  
?>


Encore merci pour l'aide.
Bonne après-midi à tous et encore merci.