Liste déroulante avec possibilité saisie
Résolu
t671
Messages postés
1476
Date d'inscription
Statut
Membre
Dernière intervention
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je veux créer une liste déroulante qui permettra de choisir une des ligne désirée
Si aucun choix de la liste ne convient, je veux avoir la possibilité de saisir une nouvelle entrée dans la liste (première ligne de la liste déroulante VALUE="X") qui sera ensuite enregistré dans la base.
Mais comme c'est écrit, je n'arrive pas à saisir ...... !
Comment faire ?
Merci.
Je veux créer une liste déroulante qui permettra de choisir une des ligne désirée
$select = 'SELECT * FROM lieux ORDER BY lieu ASC'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); while($row = mysql_fetch_array($result)) { echo '<SELECT name="lieu_naissance">'; echo '<OPTION VALUE="X"></OPTION>'; echo '<OPTION VALUE="naissance">'.$row['lieu'].'</OPTION>'; echo '</SELECT>'; }
Si aucun choix de la liste ne convient, je veux avoir la possibilité de saisir une nouvelle entrée dans la liste (première ligne de la liste déroulante VALUE="X") qui sera ensuite enregistré dans la base.
Mais comme c'est écrit, je n'arrive pas à saisir ...... !
Comment faire ?
Merci.
A voir également:
- Html liste déroulante avec saisie
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Saisie gestuelle iphone - Guide
- Liste déroulante google sheet - Accueil - Guide bureautique
- Editeur html - Télécharger - HTML
13 réponses
voir commentaires et solution:
<?php $select = 'SELECT * FROM lieux ORDER BY lieu ASC'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); while($row = mysql_fetch_array($result)) { echo '<SELECT name="lieu_naissance">'; echo '<OPTION VALUE="X"></OPTION>'; echo '<OPTION VALUE="naissance">'.$row['lieu'].'</OPTION>'; echo '</SELECT>'; } /* REMARQUES: tel que ton code est fait avec les balise <select de la liste dans la boucle while tu va avoir autant de listes que de résultast de ta requette et toutes avec le même name donc pb lors de la recupération dan $_POST */ ?> //une solution avec du javascript qui va rajouter l'input seulement si tu choisit "autre" dans la liste <html> <head> <script type="text/javascript"> function ajout_input(){ //lecture du choix dans la liste suite au onchange (liste atteinte par son id ) var choix_naissance=document.getElementById('lieu_naissance').value; if(choix_naissance =='autre'){ //on rajoute l'input dans le div par un innerHTML document.getElementById('div_input_autre').innerHTML='Precisez:<input type="texte" name="lieu_naissance_autre" id="lieu_naissance_autre" value="" />'; document.getElementById('lieu_naissance_autre').focus(); //et on lui donne le focus }else{ document.getElementById('div_input_autre').innerHTML=''; //sinon on efface l'input eventuellement affiché } } </script> </head> <body> <form name="form1" method="post" action=""> <?php $select = 'SELECT * FROM lieux ORDER BY lieu ASC'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); //balise en minuscule et rajout de l'id et du onchange pour appel de la fonction javascript //et balise <select en dehors de la noucle while echo '<select name="lieu_naissance" id="lieu_naissance" onchange="ajout_input();">'; echo '<option value="autre">--choisissez--</option>'; // ligne obligatoire pour avoir un changement a tous les coups while($row = mysql_fetch_array($result)) { echo '<option value="'.$row['lieu'].'">'.$row['lieu'].'</option>'; } echo '</select>'; echo '<div id="div_input_autre"></div>'; //div ou sera rajouté l'input par javascript ?> //et dans le script de récupération: <?php if($_POST['lieu_naissance']== "autre"){ $lieu_naissance=$_POST['lieu_naissance_autre']; }else{ $lieu_naissance=$_POST['lieu_naissance']; }
ok j'ai fait une petite erreur:
echo '<select name="lieu_naissance" id="lieu_naissance" onchange="ajout_input();">'; echo '<option value="">--choisissez--</option>'; // ligne obligatoire pour avoir un changement a tous les coups while($row = mysql_fetch_array($result)) { echo '<option value="'.$row['lieu'].'">'.$row['lieu'].'</option>'; } echo '<option value="autre">Autre</option>'; echo '</select>';
Bonjour,
Avec SELECT et OPTION seul c'est pas possible.
la solution est de rajouter après </select>
un champ <input.............../>
dont vous testerez le contenu au moment de traiter le formulaire:
- si input vide, prendre en compte la valeur sélectionnée
- si input pas vide, prendre en compte valeur de input
A+
Avec SELECT et OPTION seul c'est pas possible.
la solution est de rajouter après </select>
un champ <input.............../>
dont vous testerez le contenu au moment de traiter le formulaire:
- si input vide, prendre en compte la valeur sélectionnée
- si input pas vide, prendre en compte valeur de input
A+
l'idéal avec un
mais c'est seulement supporté par FF :/
sinon tu fais tout en javascript comme sur google.com
<datalist>
mais c'est seulement supporté par FF :/
sinon tu fais tout en javascript comme sur google.com
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je vais faire comme mpmp93 le dit. Mais c'est dommage, car cela me fait une zone de saisie + une liste déroulante. J'aurais préféré tout mettre ensemble. Dommage que "datalist" n'est pas compatible avec IE. Et le faire en javascript, je ne sais pas .....
Merci Alain_42 ...... ;o)
Pour ta première remarque, j'avais effectivement vu que je devais sortir le SELECT de la boucle WHILE.
Pour ta solution en javascript, il faut d'abord sélectionner un lieu, puis sélectionner "choisissez" pour que le cadre "Précisez" apparaisse.
Y a t'il possibilité de faire la nouvelle saisie qui écraserait le mot "choisissez" ?
Pour ta première remarque, j'avais effectivement vu que je devais sortir le SELECT de la boucle WHILE.
Pour ta solution en javascript, il faut d'abord sélectionner un lieu, puis sélectionner "choisissez" pour que le cadre "Précisez" apparaisse.
Y a t'il possibilité de faire la nouvelle saisie qui écraserait le mot "choisissez" ?
Bonjour Alain_42,
Effectivement, ça fonctionne génial !!!!!!! ;o)
Par contre, encore une question :
Là, je peux choisir ou saisir un lieu de naissance.
Si sur la même page je veux pouvoir choisir ou saisir un lieu de décès ?
J'ai essayé plusieurs façons pour modifier le javascript, mais je n'y arrive pas ......
Effectivement, ça fonctionne génial !!!!!!! ;o)
Par contre, encore une question :
Là, je peux choisir ou saisir un lieu de naissance.
Si sur la même page je veux pouvoir choisir ou saisir un lieu de décès ?
J'ai essayé plusieurs façons pour modifier le javascript, mais je n'y arrive pas ......
J'ai ajouté une 2° function :
Mais c'est toujours la première qui est prise en compte.
Pourquoi ?
function ajoutdc_input(){ var choix_dc=document.getElementById('lieu_dc').value; if(choix_dc =='autre'){ //on rajoute l'input dans le div par un innerHTML document.getElementById('div_inputdc_autre').innerHTML='<font size="2" color="red">Précisez : Ville, cp, Département, PAYS</font> <input type="texte" name="lieu_dc_autre" id="lieu_dc_autre" value="" size="55"/>'; document.getElementById('lieu_dc_autre').focus(); //et on lui donne le focus }else{ document.getElementById('div_inputdc_autre').innerHTML=''; //sinon on efface l'input eventuellement affiché } }
Mais c'est toujours la première qui est prise en compte.
Pourquoi ?
tu veux dire c'est toujours la première fonction qui est prise en compte ?
as tu bien mis pour la deuxième liste déroulante:
et attention type="text"
as tu bien mis pour la deuxième liste déroulante:
echo '<select name="lieu_dc" id="lieu_dc" onchange="ajoutdc_input();">';
et attention type="text"
//on rajoute l'input dans le div par un innerHTML document.getElementById('div_inputdc_autre').innerHTML='<font size="2" color="red">Précisez : Ville, cp, Département, PAYS</font> <input type="text" name="lieu_dc_autre" id="lieu_dc_autre" value="" size="55"/>';
Merci de m'avoir répondu Alain_42.
J'ai vérifié par rapport à ce que tu me dis : j'ai corrigé pour "onchange="ajoutdc_input();">" et le type="text" et non "texte".
Mais la deuxième function ne fonctionne toujours pas. Si je veux saisir un autre lieu pour dc, je n'ai pas la ligne "Précisez : ....." qui s'affiche.
et dans mon code php :
plus bas, après du code html
J'ai vérifié par rapport à ce que tu me dis : j'ai corrigé pour "onchange="ajoutdc_input();">" et le type="text" et non "texte".
Mais la deuxième function ne fonctionne toujours pas. Si je veux saisir un autre lieu pour dc, je n'ai pas la ligne "Précisez : ....." qui s'affiche.
<script type="text/javascript"> function ajout_input(){ //lecture du choix dans la liste suite au onchange (liste atteinte par son id ) var choix_naissance=document.getElementById('lieu_naissance').value; if(choix_naissance =='autre'){ //on rajoute l'input dans le div par un innerHTML document.getElementById('div_input_autre').innerHTML='<font size="2" color="red">Précisez : Ville, cp, Département, PAYS</font> <input type="texte" name="lieu_naissance_autre" id="lieu_naissance_autre" value="" size="55"/>'; document.getElementById('lieu_naissance_autre').focus(); //et on lui donne le focus }else{ document.getElementById('div_input_autre').innerHTML=''; //sinon on efface l'input eventuellement affiché } } function ajout2_input(){ var choix_dc=document.getElementById('lieu_dc').value; if(choix_dc =='autre'){ document.getElementById('div_inputdc_autre').innerHTML='<font size="2" color="red">Précisez : Ville, cp, Département, PAYS</font> <input type="text" name="lieu_dc_autre" id="lieu_dc_autre" value="" size="55"/>'; document.getElementById('lieu_dc_autre').focus(); }else{ document.getElementById('div_inputdc_autre').innerHTML=''; } } </script>
et dans mon code php :
$select = 'SELECT * FROM lieux ORDER BY lieu ASC'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); echo '<tr align="left"><td>Lieu de naissance : </td>'; echo '<td>'; echo '<select name="lieu_naissance" id="lieu_naissance" onchange="ajout_input();">'; echo '<option value="autre">--choisissez--</option>'; // ligne obligatoire pour avoir un changement a tous les coups echo '<option style="color:red;" value="autre">Saisie d\'un autre lieu</option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row['lieu'].'">'.$row['lieu'].'</option>'; } echo '</select>'; echo '</td></tr>'; echo '<tr><td width="350"></td><td>'; echo '<div id="div_input_autre"></div>'; //div ou sera rajouté l'input par javascript echo '</td></tr>'; ?>
plus bas, après du code html
$select = 'SELECT * FROM lieux ORDER BY lieu ASC'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); echo '<tr align="left"><td>Lieu de décès : </td>'; echo '<td>'; echo '<select name="lieu_dc" id="lieu_dc" onchange="ajoutdc_input();">'; echo '<option value="autre">--choisissez--</option>'; echo '<option style="color:red;" value="autre">Saisie d\'un autre lieu</option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row['lieu'].'">'.$row['lieu'].'</option>'; } echo '</select>'; echo '</td></tr>'; echo '<tr><td width="350"></td><td>'; echo '<div id="div_inputdc_autre"></div>'; echo '</td></tr>'; ?>
un petit manque d'attention:
tu nomme ta fonction dans javascript:
function ajouter2_input()
et dans ta liste dc tu appelles la fonction ajouterdc_input () !!!!!
tu nomme ta fonction dans javascript:
function ajouter2_input()
et dans ta liste dc tu appelles la fonction ajouterdc_input () !!!!!
J'ai actuellement réaliser votre exemple adapter pour mon code et le soucis et lorsque je selectionne "Autre" rien ne se passe...
<head>
<script type="texte/javascript">
function ajout_input()
{
var choix_taille =document.getElementById('TAILLE').value;
if(choix_taille =='autre')
{
document.getElementById('div_input_autre').innerHTML ='<input type="text" name="taille_autre" id="taille_autre" value="'.stripslashes($TAILLE).'" size="10" class="texte_formulaire"/>';
document.getElementById('taille_autre').focus();
}
else
{
document.getElementById('div_input_autre').innerHTML ='';
}
}
</script>
</head>
/*=========================================
==========================================
<body>
$TAILLE=("SELECT TAILLE FROM TAILLE");
$result=mysql_query($TAILLE) or die ("Requete pas compris");
echo '<p><label for="nom"><span class="texte_formulaire">Taille demandée (Go)</span></br></label>
<SELECT name="TAILLE" id="TAILLE" onchange="ajout_input();">';
echo '<option value="" selected>--Choisissez--</option>';
while($row=mysql_fetch_array($result))
{
echo"<option>$row[0]</option>";
}
echo'<option value="autre">Autre</option>';
echo '</SELECT>';
echo'<div id="div_input_autre"></div>';
</body>
<head>
<script type="texte/javascript">
function ajout_input()
{
var choix_taille =document.getElementById('TAILLE').value;
if(choix_taille =='autre')
{
document.getElementById('div_input_autre').innerHTML ='<input type="text" name="taille_autre" id="taille_autre" value="'.stripslashes($TAILLE).'" size="10" class="texte_formulaire"/>';
document.getElementById('taille_autre').focus();
}
else
{
document.getElementById('div_input_autre').innerHTML ='';
}
}
</script>
</head>
/*=========================================
==========================================
<body>
$TAILLE=("SELECT TAILLE FROM TAILLE");
$result=mysql_query($TAILLE) or die ("Requete pas compris");
echo '<p><label for="nom"><span class="texte_formulaire">Taille demandée (Go)</span></br></label>
<SELECT name="TAILLE" id="TAILLE" onchange="ajout_input();">';
echo '<option value="" selected>--Choisissez--</option>';
while($row=mysql_fetch_array($result))
{
echo"<option>$row[0]</option>";
}
echo'<option value="autre">Autre</option>';
echo '</SELECT>';
echo'<div id="div_input_autre"></div>';
</body>