Formulaire mail php : bouton radio se décoche

Petit nouveau ! | 13 Messages

25 Oct 2010, 15:23

Bonjour à tous, :D

J'ai créé un formulaire mail php qui fonctionne, mais qui contient qqls bugs (code php sous mon message).
Le form se compose de 7 input + groupe de 3 boutons radio.
5 input sont obligatoires.

Le problème est le suivant (simulation d'erreur d'un client) :
    - un des 3 boutons radio a été correctement coché,
    - un des input est resté vide,
    - validation du formulaire,
    - un message d'alerte indique bien qu'un input est vide (interdit l'envoi du formulaire) invitant l'utilisateur a entrer les infos
    - Mais le bouton radio se retrouve décoché !

Comment faire en sorte que le bouton radio coché reste coché après un message d'erreur ?

Je signale que les autres input restent remplis après un message d'erreur.

Merci d'avance de votre aide, ;-)
Adam

[php] <?php
if (isset($_POST["envoyer"])){ // Si le formulaire a été soumis
$etat = "erreur"; // On initialise notre etat à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon il reste à erreur

// On récupère les champs du formulaire, et on arrange leur mise en forme
if (isset($_POST["son_nom"])) $_POST["son_nom"]=trim(stripslashes
($_POST["son_nom"])); // trim() enlève les espaces en début et fin de chaine

if (isset($_POST["son_email"])) $_POST["son_email"]=trim(stripslashes
($_POST["son_email"])); // stripslashes() retire les backslashes ==> \' devient '

if (isset($_POST["son_adresse"])) $_POST["son_adresse"]=trim(stripslashes(
$_POST["son_adresse"]));

if (isset($_POST["son_objet"])) $_POST["son_objet"]=trim(stripslashes
($_POST["son_objet"]));

if (isset($_POST["son_message"])) $_POST["son_message"]=trim(stripslashes
($_POST["son_message"]));

// Après la mise en forme, on vérifie la validité des champs
if (empty($_POST["son_nom"])) { // L'utilisateur n'a pas rempli le champ nom
$erreur="Vous n'avez pas entr&eacute; votre nom..."; // On met dans erreur le message qui sera affiché
}
elseif (empty($_POST["son_email"])) { // L'utilisateur n'a pas rempli le champ email
$erreur="Nous avons besoin de votre e-mail pour vous r&eacute;pondre...";
}
elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["son_email"])){
// On vérifie si l'email est bien de la forme messagerie@domaine.tld (cf cours d'expressions régulières)
$erreur="Votre adresse e-mail n'est pas valide...";
}
if (empty($_POST["choix"])) { // L'utilisateur n'a pas rempli le champ choix
$erreur="Merci de sélectionner une prestation..."; // On met dans erreur le message qui sera affiché
}
elseif (empty($_POST["son_objet"])) { // L'utilisateur n'a pas rempli le champ objet
$erreur="Vous devez entrer l'objet de votre message...";
}
elseif (empty($_POST["son_message"])) { // L'utilsateur n'a écrit aucun message
$erreur="Merci de saisir un message...";
}
else { // Si tous les champs sont valides, on change l'état à ok
$etat="ok";
}
}
else { // Sinon le formulaire n'a pas été soumis
$etat="attente"; // On passe donc dans l'état attente
}

if ($etat!="ok"){ // Le formulaire a été soumis mais il y a des erreurs etat=erreur) OU le formulaire n'a pas été soumis (etat=attente)
if ($etat=="erreur"){ // Cas où le formulaire a été soumis mais il y a des erreurs
echo "<span style=\"color:red\">".$erreur."</span><br /><br />\n";
// On affiche le message correspondant à l'erreur
}
?>

<!-- Formulaire HTML qu'on affiche dans l'état attente ou erreur -->

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<!-- Les données du formulaire seront récupérée avec la méthode POST,
et action correspond à la page contenant le formulaire -->
<table id=tab-form-contact>
<tr>
<th class=ch-oblig colspan="3">* Champs obligatoires</th>
</tr>
<tr>
<th><label for="son_nom">Nom *</label></th>
<td >&nbsp;</td>
<td><!-- Intitulé du champ nom -->

<input type="text" size="30" name="son_nom" id="son_nom" value="<?php
if (!empty($_POST["son_nom"])) {
// le nom de l'expéditeur a été saisi --> le réafficher
echo htmlspecialchars($_POST["son_nom"],ENT_QUOTES);
// htmlspecialchars() convertit les caractères spéciaux en leurs code html,exemple : & devient &amp;
}
?>" /></td>
</tr>
<tr>
<th><label for="son_nom">Prénom&nbsp;&nbsp;</label></th>
<td>&nbsp;</td>
<td><!-- Intitulé du champ nom -->

<input type="text" size="30" name="son_prenom" id="son_prenom" value="<?php
if (!empty($_POST["son_prenom"])) {
// le nom de l'expéditeur a été saisi --> le réafficher
echo htmlspecialchars($_POST["son_prenom"],ENT_QUOTES);
// htmlspecialchars() convertit les caractères spéciaux en leurs code html,exemple : & devient &amp;
}
?>" /></td>
</tr>
<tr>
<th><label for="son_nom">Courriel *</label></th>
<td>&nbsp;</td>
<td><!-- Intitulé du champ e-mail -->

<input type="text" size="40" name="son_email" id="son_email" value="<?php
if (!empty($_POST["son_email"])) {
// l'e-mail de l'expéditeur a été saisi --> le réafficher
echo htmlspecialchars($_POST["son_email"],ENT_QUOTES);
}
?>" /></td>
</tr>
<tr>
<th><label for="son_nom">Téléphone&nbsp;&nbsp;</label></th>
<td>&nbsp;</td>
<td><input name="son_tel" type="text" id="son_tel" value="<?php
if (!empty($_POST["son_tel"])) {
// le telephone de l'expéditeur a été saisi --> le réafficher
echo htmlspecialchars($_POST["son_tel"],ENT_QUOTES);
// htmlspecialchars() convertit les caractères spéciaux en leurs code html,exemple : & devient &amp;
}
?>" size="30" maxlength="10" />
&nbsp;Sans point et sans espace</td>
</tr>
<tr>
<th><label for="son_adresse">Adresse&nbsp;</label></th>
<td>&nbsp;</td>
<td><!-- Intitulé du champ adresse (facultatif) -->

<input type="text" size="40" name="son_adresse" id="son_adresse" value="<?php
if (!empty($_POST["son_adresse"])) {
// l'adresse a été saisi --> la réafficher
echo htmlspecialchars($_POST["son_adresse"],ENT_QUOTES);
}
?>" /></td>
</tr>
<tr>
<th><label for="son_nom">Prestations *</label></th>
<td>&nbsp;</td>
<td><table width="310">
<tr>
<td><label>
<input type="radio" name="choix" value="pao" id="choix_0">
PAO</label></td>
</tr>
<tr>
<td><label>
<input type="radio" name="choix" value="photo" id="choix_1">
Photo</label></td>
</tr>
<tr>
<td><label>
<input type="radio" name="choix" value="paophoto" id="choix_2">
PAO + Photo</label>
</td>
<td>Sélectionnez une prestation</td>
</tr>
</table>

</td>
</tr>
<tr>
<th><label for="son_objet">Objet *</label>
</th>
<td>&nbsp;</td>
<td><!-- Intitulé du champ objet -->

<input type="text" size="40" name="son_objet" id="son_objet" value="<?php
if (!empty($_POST["son_objet"])) {
// l'objet du message a été saisi --> le réafficher
echo htmlspecialchars($_POST["son_objet"],ENT_QUOTES);
}
?>" /></td>
</tr>
<tr>
<th><label for="son_message">Message *</label></th>
<td>&nbsp;</td>
<td><!-- Intitulé du champ message -->

<textarea name="son_message" id="son_message" cols="50" rows="3"><?php
if (isset($_POST["son_message"])) {
// le message a été saisi --> le réafficher
echo htmlspecialchars($_POST["son_message"],ENT_QUOTES);
}
?>
</textarea></td>
</tr>
<tr>
<td class=td-foot colspan="3"><input type="submit" name="envoyer" value="Envoyer" />
&nbsp;&nbsp;
<input type="reset"
name="reset" value="Effacer" /></td>
</tr>
</table>
<p style="text-align:left"> <br />
</form>
<!-- FIN du formulaire HTML -->

<?php
}
else { // Sinon l'état est ok donc on envoie le mail
$son_nom = $_POST["son_nom"]; // On stocke les variables récupérées du formulaire
$son_email = $_POST["son_email"];
$son_adresse = $_POST["son_adresse"];
$son_objet = $_POST["son_objet"];
$son_message = $_POST["son_message"];

$mon_email = "contact@paophoto89.fr"; // Mise en forme du message que vous recevrez
$mon_nom = "PaoPhoto89";
$mon_url = "http://www.paophoto89.com";
$msg_pour_moi = "
- Son nom : $son_nom \n
- Son prenom : $son_prenom \n
- Son courriel : $son_email \n
- Son telephone : $son_tel \n
- Son adresse : $son_adresse \n
- Sa prestation : $choix \n
- Objet du message : $son_objet \n
- Message : \n $son_message \n\n";

// Mise en forme de l'accusé réception qu'il recevra
$accuse_pour_lui = "Bonjour $son_nom,\n
Votre message nous a bien été envoyé et nous tâcherons de vous répondre le plus
rapidement possible.\n\n
- Votre E-mail : $son_email \n
- Votre prestation : $choix \n
- L'objet de votre message : $son_objet \n
- Votre message : \n $son_message \n\n
Merci et à bientôt sur http://www.paophoto89.com !";

// Envoie du mail
$entete = "From: " . $mon_nom . " <" . $mon_email . ">\n"; // On prépare l'entête du message
$entete .= "MIME-Version: 1.0";

if (@mail($mon_email,$son_objet,$msg_pour_moi,$entete) &&
@mail($son_email,$son_objet,$accuse_pour_lui,$entete)){ // Si le mail a été envoyé
echo "<p style=\"text-align:center\">Votre message a &eacute;t&eacute;
envoy&eacute;, vous recevrez une confirmation par mail.<br /><br />\n";
// On affiche un message de confirmation
echo "<a href=\"" . $mon_url . "\">Retour</a></p>\n";
// Avec un lien de retour vers l'accueil du site
}
else { // Sinon il y a eu une erreur lors de l'envoi
echo "<p style=\"text-align:center\">Un problème s'est produit lors de
l'envoi du message.\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a></p>\n";
// On propose un lien de retour vers le formulaire
}
}
?>[/php]
EasyPhp v1.8.0.1 - Dreamweaver MX 2004 - Manuel : "PHP/MySQL avec Dreamweaver MX 2004" de Jean-Marie Defrance (Ed. EYROLLES)

Eléphant du PHP | 632 Messages

25 Oct 2010, 15:53

Salut,

Récupère la valeur postée et si la valeur postée correspond à la valeur de ton bouton, fais un echo 'checked'

Mega
;)
Dyslexics are teople poo

Petit nouveau ! | 13 Messages

25 Oct 2010, 16:01

Merci pour ton aide. :wink:
Malheureusement je n'y connais rien en code, je découvre et je fonctionne par copier/coller.

Je n'ai donc pas saisi ta réponse :oops:
Si tu pouvais m'écrire un modèle de code que j'adapterai à ma page... :mrgreen:

Merci d'avance :pouce:
EasyPhp v1.8.0.1 - Dreamweaver MX 2004 - Manuel : "PHP/MySQL avec Dreamweaver MX 2004" de Jean-Marie Defrance (Ed. EYROLLES)

Petit nouveau ! | 13 Messages

25 Oct 2010, 16:20

Ok, j'ai trouvé.
Il suffit d'ajouter ce code pour chaque bouton :

[php]<input type="radio" name="choix" value="pao" id="choix_0" <?php if ( $_POST['choix'] == 'pao' ) echo 'checked'; ?> />
...
[/php]
EasyPhp v1.8.0.1 - Dreamweaver MX 2004 - Manuel : "PHP/MySQL avec Dreamweaver MX 2004" de Jean-Marie Defrance (Ed. EYROLLES)