Page 1 sur 1

Récupération valeur bouton radio

Posté : 09 déc. 2005, 00:20
par speedy67
Voici un formulaire avec deux boutons radio et une liste déroulante. Je récupère bien la donnée choisie dans la liste déroulante. En revanche, quelque soit le bouton radio sélectionné j'obtiens comme résultat "une femme " alors que les valeurs possibles sont "H" et "F". Où est-ce que j'ai faux ?
<html>
<body>
<center>
<form method=post action="question.php">
Vous &ecirc;tes : 
<input type="radio" name="sexe" value="H" checked> un homme 
<input type="radio" name="sexe" value="F"> une femme 
<Br>
<br>
Votre &acirc;ge : <select name="age" size=1>
<?php 
for ($i=16; $i<=90 ; $i++)
{echo '<option value='.$i.' >'.$i.' ans</option>';
}
?>
</select>
<br>
<br>
<input type="submit" name="submit" value="Envoyer"></input>
</form>
</center>
</body>
</html>

Récupération des données :
<html>
<body>
<?php 
$sexe=$_POST['sexe'];
$age=$_POST['age'];
echo 'Vous &ecirc;tes';
echo $age ;
echo $sexe;
?>
</body>
</html>

Posté : 09 déc. 2005, 00:37
par Cyrano
Avec quelques modification pour tout mettre sur le même fichier, voilà ce que je propose qui fonctionne:
<html>
<body>
<?php
if(isset($_POST['submit']))
{
    $sexe = $_POST['sexe'];
    $age  = $_POST['age'];
    echo "Vous êtes : <br />\n";
    echo $age ."<br />\n";
    echo $sexe ."<br />\n";
}
else
{
?>
<center>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
Vous êtes :
<input type="radio" name="sexe" value="H" checked> un homme
<input type="radio" name="sexe" value="F"> une femme
<br>
<br>
Votre âge : <select name="age" size="1">
<?php
for ($i=16; $i<=90 ; $i++)
{
    echo "  <option value=\"". $i ."\">". $i ." ans</option>";
}
?>
</select>
<br>
<br>
<input type="submit" name="submit" value="Envoyer"></input>
</form>
</center>
<?php
}
?>
</body>
</html>

Posté : 09 déc. 2005, 08:32
par speedy67
Merci mais :

Les données recueillies doivent être traitées sur une autre page, pour l'instant je ne fais que les afficher pour contrôler le bon fonctionnement de la page de saisie. Si ta proposition fonctionne, je ne sais toujours pas pourquoi la mienne ne marche pas et il y a en plus des choses qui m'intriguent dans ton code comme les <br /> (je ne connais pas cette synthaxe html, qu'ont-il de différent par rapport aux <br> ?) et les \n que j'ai déjà pu voir mais que je ne connais pas non plus...

Posté : 09 déc. 2005, 09:02
par Cyrano
Que tu traites sur la même page ou sur une autre page n'as qu'une importance très relative, ça me facilite la vie lors de la validation.

La différence entre <br> et <br />, c'est que le premier est en HTML 4 et le second en XHTML.

Quant au "\n", c'est un retour chariot qui fait que le code généré ne se retrouve pas sur une seule et même ligne, ça n'apparait pas à l'affichage, mais si tu affiches la source, chaque ligne terminée par \n s'arrête là et la suite du code reprend à la ligne suivante Ça a l'avantage de permettre de vérifier si le code html généré est correct en le rendant lisible plus facilement.

Comment fonctionne le code proposé :
- 1 je vérifie que le bouton submit a été cliqué ;
- S'il l'a été, je passe à la phase traitement, sinon, j'affiche le formulaire;
- Si je rentre dans la phase traitement, je récupère les valeurs du formulaire et j'affiche les résultats;

Quelle différence alors : dans le code du formulaire, j'ai modifié très peu de chose si ce n'est que j'ai mis les valeurs d'attributs de certaines balises entre guillemets s'ils ne l'étaient pas. J'ai aussi modifié la valeur de l'attribut action pour permettre un rechargement de la page sur elle même. Si tu veux traiter sur une autre page, pas de problème, tu remets ce que tu avais mis.

Je préfère personnellement le traitement sur la même page pour la raison suivante: lors de la validation, je fais afficher à nouveau le formulaire en cas de valeurs invalides de façon à ce que l'internaute corrige. Je n'ai ainsi pas besoin de revenir sur la page précédente. Je t'invite à télécharger un formulaire modèle que j'avais conçu il y a quelques temps déjà pour voir la phase de validation d'un formulaire complet. Suis bien les commentaires du code, ils ont leur importance pour la compréhension.

Posté : 09 déc. 2005, 11:58
par speedy67
Les tests directs sur les formulaires sont un peu prématurés pour moi. Je débute donc pour l'instant je voudrais réussir à faire marcher des choses simples et surtout comprendre pourquoi ça marche et pourquoi ça marche pas.

J'ai attentivement comparé entre nos deux scripts les lignes qui traitent les données et qui posent problème :
saisie :
<html>
<body>
<center>
<form method=post action="question.php">
<input type="radio" name="sexe" value="H" checked> un homme
<input type="radio" name="sexe" value="F"> une femme
<input type="submit" name="submit" value="Envoyer"></input>
</form>
</center>
</body>
</html>

Récupération des données :

<html>
<body>
<?php
$sexe=$_POST['sexe'];
$age=$_POST['age'];
echo $age ;
echo $sexe;
?>
</body>
</html>
Ces lignes sont identiques, j'ai vérifier les quotes, les point virgule, la cass, etc... je ne vois aucune différence. Il y a donc quelque chose qui m'échappe...[/quote]

Posté : 09 déc. 2005, 12:03
par pjl
A part l'absence de contrôle, effectivement, je ne vois pas ce qui cloche dans ton code originel qui marche bien sur ma machine.
Vous êtes34H

Posté : 09 déc. 2005, 14:06
par speedy67
J'ai trouvé.

Une condition dans le script original que je n'ai pas cité ici pour gain de place qui était mal formulée

echo ($sexe=F?' une femme': 'un homme') ;

à la place de :

echo ($sexe==F?' une femme":' un homme') ;

C'est pour ça que $sexe prenait la valeur ' une femme' , ce qui est pourtant étrange, j'aurais cru que dans ce cas, la variable aurait pris la valeur F.

Le ? a-t-il une signification particulière lors d'une assignation de valeur ?

Posté : 09 déc. 2005, 14:36
par iclo
Lors de l'utilisation de l'opérateur ternaire: "condition?instruction1:instruction2
Il vaut mieux encadrer la condition de parenthèses, même si certains langages (dont le php visiblement) ne l'impose pas. C'est plus lisible, et donc plus simple à débugger...
echo (($sexe==F)?'une femme':' un homme');

Posté : 09 déc. 2005, 15:04
par pjl
vous êtes sur qu'il ne faut pas mettre le F entre quote ? :-"

Posté : 09 déc. 2005, 19:44
par speedy67
Je ne savais pas s'il fallait des simple ou double quote, dans le doute j'ai essayé sans... et ça marche !

sinon c'est quoi la règle ne la matière ? (au cas où un jour ça ne marche plus...)

Posté : 10 déc. 2005, 16:24
par iclo
vous êtes sur qu'il ne faut pas mettre le F entre quote ? :-"
En effet, ce serait mieux... :D :D