PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 25-10-2010 14:55:57

adameteve
Membre
Inscription : 25-10-2010
Messages : 1

Formulaire mail php : bouton radio se décoche

Bonjour à tous, smile

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, wink
Adam


[code=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é 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é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 > </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 &
        }
        ?>" /></td>
          </tr>
          <tr>
            <th><label for="son_nom">Prénom  </label></th>
            <td> </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 &
        }
        ?>" /></td>
          </tr>
          <tr>
            <th><label for="son_nom">Courriel *</label></th>
            <td> </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  </label></th>
            <td> </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 &
        }
        ?>" size="30" maxlength="10" />
               Sans point et sans espace</td>
          </tr>
          <tr>
            <th><label for="son_adresse">Adresse </label></th>
            <td> </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> </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> </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> </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" />
                
              <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 été
envoyé, 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
    }
}
?>[/code]

Dernière modification par adameteve (25-10-2010 14:57:00)


Hors ligne

#2 28-10-2010 08:09:44

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 540
Site Web

Re : Formulaire mail php : bouton radio se décoche

bonjour,
Même si tu n'as pas respecté la régle du Wall, je vais t'aiguiller wink
Il te suffit, avant de faire ton traitement d'erreur, d'initialiser des variables en session... Ainsi, lorsque tu ré-affiches ton form, tu peux récupérer les infos précédemment entrées...


PDO engaged

MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 28-10-2010 10:09:29

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Formulaire mail php : bouton radio se décoche

ou alors tu fait comme pour les autres en vérifiant la valeur dans le tableaux avant d'ajouter checked="checked" pour l'élément choché.

pour info un très bon site sur html (entre autre) http://fr.selfhtml.org

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

Pied de page des forums