Récupération valeur bouton radio

Petit nouveau ! | 7 Messages

09 déc. 2005, 00:20

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>

Mammouth du PHP | 19672 Messages

09 déc. 2005, 00:37

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 7 Messages

09 déc. 2005, 08:32

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

Mammouth du PHP | 19672 Messages

09 déc. 2005, 09:02

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 7 Messages

09 déc. 2005, 11:58

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]

ViPHP
pjl
ViPHP | 2119 Messages

09 déc. 2005, 12:03

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

Petit nouveau ! | 7 Messages

09 déc. 2005, 14:06

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 ?

ViPHP
ViPHP | 2144 Messages

09 déc. 2005, 14:36

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

ViPHP
pjl
ViPHP | 2119 Messages

09 déc. 2005, 15:04

vous êtes sur qu'il ne faut pas mettre le F entre quote ? :-"

Petit nouveau ! | 7 Messages

09 déc. 2005, 19:44

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

ViPHP
ViPHP | 2144 Messages

10 déc. 2005, 16:24

vous êtes sur qu'il ne faut pas mettre le F entre quote ? :-"
En effet, ce serait mieux... :D :D