Page 1 sur 2
Utiliser un bouton radio et une balise select
Posté : 26 sept. 2006, 13:34
par regne'
Bonjour,
Je suis actuellement en train de creer un formulaire, et j'ai besoin de faire choisir au visiteur l'os qu'il utilise.
Pour ca j'utilise une balise select, et j'apel depuis ma BDD la liste des os, mais j'aimerais aussi que le visiteur puisse mettre lui meme le nom de son dans le cas ou l'os ne serai pas dans ma base.
Voila mon code pour la balise select :
Choisissez votre système d'exploitation<br>
</p>
<p align="center">
<select size="1" name="os">
<option selected>choisissez...</option>
<?php
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array ($reponse) )
{
?>
<option><?php echo $donnees['os']; ?></option>
<?php
}
?>
</select>
Ma question est comment mettre un bouton radio devant ce code afin de permettre au visiteurs de choisir d'utiliser cette balise select, ou une autre balise avec un texte libre ?
J'espere avoir été claire...
Lerci par avance
Posté : 26 sept. 2006, 13:51
par charabia
Tu désires afficher un champ TEXT lorsque la personne clique dans le bouton checkbox ? (mieux que radio)
Ce n'est pas plus simple de mettre en dessous quelque chose du genre : indiquez l'os s'il ne se trouve pas dans le champ ? Donc liste + champ text visible ?
Posté : 26 sept. 2006, 13:58
par regne
Oui c'est exactement ca que je voudrais.
je voudrais avoir le champ texte visible, mais je voudrais que quand le visiteur envoi le formulaire, moi je recupere qu'une seul variable post, ou celle de ma liste, ou alors celle du champ texte...
Mais je ne sais pas comment faire pour ca...
Posté : 26 sept. 2006, 14:45
par charabia
Ah oui en effet avec un seul champ en base de données ça peut poser quelques soucis...
J'étais parti sur le fait de te baser sur le javascript pour désactiver le champ TEXT si tu choisis dans la liste et vise versa, mais là on doit avoir 2 noms différents pour les champs...du coup ça tombe à l'eau.
Pareil si on veut faire disparaître ou apparaître un des champs.
Pour le moment je ne vois pas trop, attendons les experts

Posté : 26 sept. 2006, 15:01
par regne
merci quand meme...
je suis en train d'essayer de faire avec un if else, c'est surement pas la meilleur facon ni meme la plus simple mais ca peut peut etre marcher...
je suis quand meme ouvert d'autres proposition
Merci d'avance
Posté : 26 sept. 2006, 15:06
par charabia
Une autre idée me vient à l'esprit. En attendant d'autres propositions, tu peux faire une concaténation des deux champs.
Si quelqu'un choisit dans la liste tu concatènes le résultat de la liste + le champ TEXT (qui est vide dans ce cas).
Idem pour le champ TEXT, l'option choisis dans la liste sera "vide".
Du coup le résultat à insérer dans le champ devrait être ok.
Posté : 26 sept. 2006, 15:11
par regne
Pas bete, mais dans ce cas la si le visiteur rempli le champ text et choisi en meme temps une option dans la liste je vais me retrouver avec une valeur du genre : option_liste+text
A moins que je ne me trompe ?
Posté : 26 sept. 2006, 15:15
par charabia
tu ne te trompes pas

C'est justement là que tu peux utiliser l'option de rendre inactif soit l'un soit l'autre.
Tant que le choix de la liste est différent que "veuiller choisir" alors le champ text est "disabled". Idem dans l'autre sens. --> c'est du javascript
Posté : 26 sept. 2006, 15:25
par regne
Voila j'ai fait quelque chose qui me plait pas mal.
Dans mon formulaire:
Choisissez votre système d'exploitation<br>
</p>
<p align="center">
<label><input type="radio" name="option" value="liste" checked><select size="1" name="os">
<option selected>choisissez...</option>
<?php
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array ($reponse) )
{
?>
<option><?php echo $donnees['os']; ?></option>
<?php
}
?>
</select></label><br>
<br><br><label><input type="radio" name="option" value="autre">
Autre : <input type="text" name="autre_os" size="18" />
Dans ma page cible:
//recuperation de l'os
if ($_POST['option'] == "liste")
{
$os=$_POST['os'];
}
else
{
$os=$_POST['autre_os'];
}
mais la, c'est le drame !
Quand on clik sur ma liste deroulante elle se referme aussitot, il faut rester cliker pour choisir une option... et pour le TEXT il faut rester cliker pour ecrire !
Ce n'est pas trés pratique, quelqu'un a une idée de ce qui ne va pas dans mon code ?
(merci charabia, mais le java ce n'est pas du tout mon fort...)
Posté : 26 sept. 2006, 15:28
par charabia
mais le java ce n'est pas du tout mon fort...

java != javascript
Fais des recherches tu verras que ce n'est pas compliqué et que tu pourras l'adapter à ton besoin sans problème

Posté : 26 sept. 2006, 15:39
par regne
ok je vais jeter un oeil
merci
Posté : 26 sept. 2006, 16:05
par regne
sinon personne n'a d'idée pour mon probleme de liste ou il faut rester cliker pour choisir une option ??
Posté : 26 sept. 2006, 22:50
par zigz4g
Salut.
Je viens de lire en diagonale le post mais je peux proposer une petite solution.
Pourquoi ne pas faire au plus simple. Tu propose un champ avec un tag pour la liste des os
et tu met ton champs libre os avec un autre tag.
Dans ton code php tu fais la verification des champs de ton formulaire.
Apres tu peux faire un test avec un priorite pour le champ ou l'utilisateur saisie son os.
C'est a priori son intention de t'informer de son type d'os. Si tu as une valeur dans ton
select et dans ton champ de text, tu peux afficher un message d'erreur.
Il y a une autre solution qui est de mettre dans la liste une information avec une valeur specifique
qui te donne l'information que ton os se trouve dans la zone de saisie.
Code : Tout sélectionner
exemple :
<select>
<option>OS 1</option>
<option>OS 2</option>
<opton>Saisissez votre os dans la zone dessous</option>
</select>
Tu peux apres ajouter du javascript pour activer ou desactiver le champ de saisie text si tu
choisi "Saisissez votre os dans la zone dessous".
Voila quelques points de depart supplementaires.
Bon dev.
Posté : 27 sept. 2006, 11:13
par regne
En faite j'ai un peu contourné le probleme.
J'ai mis dans mon formulaire :
Choisissez la version :
<select size="1" name="version_os">
<option selected>choisissez...</option>
<?php
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array ($reponse) )
{
?>
<option><?php echo $donnees['version_os']; ?></option>
<?php
}
?>
</select><br>
<br>Autres : <input type="text" name="autre_version_os" size="25" /><br>
et dans ma page cible:
$nb_autre_version_os=strlen($_POST['autre_version_os']);
if ($nb_autre_version_os >= 1)
{
$version_os=$_POST['autre_version_os'];
}
else
{
$version_os=$_POST['version_os'];
}
en gros si j'ai des infos dans mon champ text je les prend en compte et si j'en ai pas ca prend en compte ma liste...
le resultat marche bien
merci
Posté : 27 sept. 2006, 16:17
par zigz4g
Tu as donc fait la methode de priorite du champ de saisie par rapport
a ta liste select. C'etait ma premiere idee.
Est-ce que ton probleme est resolu ???