Récupérer valeur d'un bouton radio non coché

Eléphanteau du PHP | 28 Messages

07 oct. 2005, 17:52

Bonjour,

Comment faire pour repérer la valeur d'un bouton radio non coché ?
En fait dans mon formulaire, il n'y a qu'un choix possible pour 2 propositions du type :

<input type="radio" name="id1" value="15">Joueur 1<br>
<input type="radio" name="id1" value="321">Joueur 2

Prenons l'exemple que je coche le bouton 'Joueur 1'.
Concraitement, je voudrai faire une mise à jour sur mon enregistrement dont l'id est 321 dans ma table, et effectuer une autre action sur celui coché.

Voyez-vous comment effectuer cette vérification ?

--------------------
Merci d'avance
----------------------
Domi

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 oct. 2005, 17:56

Après validation de ton formulaire, tu peut récupérer sa valeur dans la superglobale choisie

Par exemple, si tu as fait un formulaire en post, $_POST["id1"] va contenir l'attribut "value" du bouton coché

Ensuite, tu peut récupérer cette valeur et l'insérer dans une requete SQL
$id = $_POST["id1"];
$str_requete = "SELECT * FROM joueurs WHERE identifiant=".$id;
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2005, 18:10

Il me semble qu'il veut la valeur du bouton NON séléctionné !!

Pour ce faire il faut ajouter un type caché:
<input type="hidden" name="id" value=321>
et la tu peut récupèrer avec $_POST['id'].

La valeur d'un bouton radio n'est retournée que si celui-ci est séléctionné.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 oct. 2005, 20:43

Il me semble qu'il veut la valeur du bouton NON séléctionné !!
:oops: euuuuuuh, comment dire .....
Je m'a tout tromper de la lecture parce moi pas bien parlé la france :roll:

Non, franchement, j'ai mal lu, désolé
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 oct. 2005, 21:15

Non, franchement, j'ai mal lu, désolé
retrait d'un quota de 300 messages :langue:

je vais vite me retrouver à 0 messages moi dans ce cas :lol:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 19 Messages

08 oct. 2005, 05:54

Bonjour.
Je me permets de rentrer dans ce post pas pour proposer une solution mais pour poser une question .
Je n'ai pas compris ou etait l'interet de recuperer la valeur d'un bouton non coché.

Mammouth du PHP | 1776 Messages

08 oct. 2005, 06:01

Bonjour.
Je me permets de rentrer dans ce post pas pour proposer une solution mais pour poser une question .
Je n'ai pas compris ou etait l'interet de recuperer la valeur d'un bouton non coché.
+1...
Mais bon, pour son appli ca doit valoir son pesant de cacahuetes :P

Eléphant du PHP | 100 Messages

08 oct. 2005, 07:05

Ben tu peu pas en fait parce que la valeur envoyé sera celle du radio sélectionné et non le contraire de toute facon tu connais la valeur du radio qui n'est pas sélectionné vu que c toi qui lui attribue cette valeur

donc tu fais comme ceci :
if($_POST['id1']==15)
{
  $lautre_valeur = 321 ;
}

else
{
  $lautre_valeur = 15 ;
}
Mais par contre je pense aussi qu'il est inutile de récupérer cette valeur vu que le visiteur ne l'a pas choisie :lol:

Mammouth du PHP | 19672 Messages

08 oct. 2005, 07:49

Si je peux me permettre une intervention... :langue:

La question est peut-être bien incomplète : Comment son initialisées les valeurs des deux boutons radios ? J'ai des raisons de croire que ces valeurs proviennent d'une base de donnée. Nous avons deux joueurs et on doit par exemple cocher celui qui a gagné un match. Il faut donc mettre à jour les deux joueurs. Mais nous avons obtenus les identifiants des deux joueurs dans une requête. Donc nous connaissons au moment de l'affichage les deux identifiants. Il faut donc comme l'a suggéré Truc utiliser des champs cachés : on récupère alors le boutons radio qui a été coché pour le joueur gagnant et le champ caché correspondant au joueur perdant.

Là, il y a deux méthodes :
- SANS JavaScript avec deux champs cachés et AVEC JavaScript avec un seul :
SANS JavaScript, il conviendra de créer une alternative dans le traitement du formulaire pour récupérer le bon champ caché puisque nous en aurons également deux.
- AVEC Javascript, on met un évènement onchange sur les boutons radio de sorte que si je coche le bouton 1, la valeur du bouton 2 alimente la valeur d'un unique champ caché et inversement si je coche le bouton 2 :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

08 oct. 2005, 09:56

Mais si on doit mettre a jour les 2 joueurs ou est l'interet de mettre des bouton radio? type text ou hidden pour les 2 auraient été tres bien non? ou je comprends vraiment pas

Mammouth du PHP | 19672 Messages

08 oct. 2005, 10:04

Si tu veux n'enregistrer qu'une victoire ou une défaite, tu n'as que deux valeurs possibles : gagné ou perdu, voire trois en cas de match nul: de toutes façon, c'est un booléen. Donc un type text n'est pas approprié et une case à cocher non plus;

Comme en outre un joueur peu avoir plusieurs matches dont il faut enregistrer les résultats, il faut savoir de quel match il s'agit quand on met à jour. Donc, contre quel joueur il a disputé une partie: on va donc dans le cas proposé afficher les deux joueurs en présence.

Le problème du bouton radio, c'est qu'on ne peut récupérer que les boutons qui sont cochés. Il faut donc pour avoir l'identifiant de l'autre une manière de transmettre la donnée. Un champ de type text risquant de pouboir être modifié à la main n'est pas une bonne idée, et en fait, on a pas besoin d'afficher cette information. Donc le champ caché est le plus adéquat.

Alors en écrivant ça, il me vient aussi une autre option : un champ caché dans lequel en générant le formulaire on indique l'identifiant du match. Donc en récupérant les valeurs du formulaire pour la mise à jour, on peut automatiquement par une requête appropriée faire la mise à jour du joueur non coché grâce à l'identifiant du match disputé. Et dans ce cas, la méthode du champ caché pour mettre l'identifiant non coché devient inutile.

Mais dans tous les cas, on fera appel au champ caché.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

08 oct. 2005, 11:56

re/ autre façon de faire sans champ caché:
<?
$id_joueur1=15;
$id_joueur2=321;
?>

<input type="radio" name="id1" value="<? echo $id_joueur1.','.$id_joueur2 ?>">Joueur 1<br>
<input type="radio" name="id1" value="<? echo $id_joueur2.','.$id_joueur1 ?>">Joueur 2 
Ensuite tu récupère avec un explode().
$valeur=$_POST['id1'];  // si le 1er bouton est séléctionné alors $valeur="15,321" sinon $valeur="321,15"
$valeur=explode(",",$valeur);
echo $valeur[0];  //si le 1er bouton est séléctionné alors $valeur[0]=15 
echo $valeur[1];  //et $valeur[0]=321  ... et inversement
tu sait donc que la valeur de $valeur[0] est l'id du joueur séléctionné et $valeur[1] l'id du joueur non séléctionné

a toi de choisir quelle méthode tu préféres :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

08 oct. 2005, 12:04

Astucieux =D>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

08 oct. 2005, 15:14

Ok .
Merci comme ca c'est un plus comprehensible

Eléphanteau du PHP | 28 Messages

09 oct. 2005, 21:21

Merci beaucoup truc.
C'est pile poil ce qu'il me faut !
:wink:
----------------------
Domi