Utiliser un bouton radio et une balise select

regne'
Invité n'ayant pas de compte PHPfrance

26 sept. 2006, 13:34

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>
&nbsp;</p>
<p align="center">
&nbsp;&nbsp;
<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

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 sept. 2006, 13:51

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 ?

regne
Invité n'ayant pas de compte PHPfrance

26 sept. 2006, 13:58

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...

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 sept. 2006, 14:45

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

Eléphant du PHP | 199 Messages

26 sept. 2006, 15:01

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

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 sept. 2006, 15:06

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.

Eléphant du PHP | 199 Messages

26 sept. 2006, 15:11

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 ?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 sept. 2006, 15:15

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

Eléphant du PHP | 199 Messages

26 sept. 2006, 15:25

Voila j'ai fait quelque chose qui me plait pas mal.

Dans mon formulaire:
Choisissez votre système d'exploitation<br>
&nbsp;</p>
<p align="center">
&nbsp;&nbsp;
<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...)

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 sept. 2006, 15:28

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

Eléphant du PHP | 199 Messages

26 sept. 2006, 15:39

ok je vais jeter un oeil

merci

Eléphant du PHP | 199 Messages

26 sept. 2006, 16:05

sinon personne n'a d'idée pour mon probleme de liste ou il faut rester cliker pour choisir une option ??

Mammouth du PHP | 684 Messages

26 sept. 2006, 22:50

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.
Zigz4g

Eléphant du PHP | 199 Messages

27 sept. 2006, 11:13

En faite j'ai un peu contourné le probleme.

J'ai mis dans mon formulaire :
Choisissez la version :&nbsp;
<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 :&nbsp; <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

Mammouth du PHP | 684 Messages

27 sept. 2006, 16:17

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 ???
Zigz4g