Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité régulier
    Inscrit en
    août 2003
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : août 2003
    Messages : 68
    Points : 6
    Points
    6

    Par défaut Formulaire mail php : bouton radio se décoche

    Bonjour à tous,

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

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
      <?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
        }
    }
    ?>

  2. #2
    Membre chevronné
    Inscrit en
    juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 625
    Points : 600
    Points
    600

    Par défaut

    Bonjour,

    un truc du genre :

    Code :
    1
    2
    3
     
    <input type="radio" name="choix" value="pao" id="choix_0" <?php if ( $_POST['choix'] == 'pao' ) echo 'checked'; ?> />
    ...
    la même chose pour les autres radio
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  3. #3
    Invité régulier
    Inscrit en
    août 2003
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : août 2003
    Messages : 68
    Points : 6
    Points
    6

    Par défaut

    Génial ça marche !

    En revanche, je viens de m'apercevoir d'un autre bug que je n'avais pas avant : mon formulaire ne tient plus compte de la conformité de l'adresse mail entrée.

    Il y a encore une heure, un message d'alerte clair apparaissait lorsque le champ restait vide, ou que l'adresse était mal écrite. Maintenant seule la phrase "Un problème s'est produit lors de l'envoi du message." apparait sur une autre page

    Il ne me semble pourtant pas avoir modifié cette partie du code.

    Saurais-tu d'où vient ce bug ?

    Merci encore

  4. #4
    Membre chevronné
    Inscrit en
    juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 625
    Points : 600
    Points
    600

    Par défaut

    Tu devrais enlever le @ devant ta fonction mail().

    Fais un echo de tes variables avant le mail(...).

    Et essayes d'utiliser preg_match au lieu de eregi.
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  5. #5
    Invité régulier
    Inscrit en
    août 2003
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : août 2003
    Messages : 68
    Points : 6
    Points
    6

    Par défaut

    Tu devrais enlever le @ devant ta fonction mail()
    J'ai essayé mais rien ne change...

    Fais un echo de tes variables avant le mail(...).
    Et essayes d'utiliser preg_match au lieu de eregi.
    En fait je n'y connais rien en code et malheureusement le code que tu me conseilles d'écrire, ça ne me parle pas .
    Je fonctionne en copier/coller et j'essaie de comprendre à quoi ça correspond. Mais de là à l'écrire moi-même...

    J'ai bien aimé le code que tu m'as donné précédemment, si tu pouvais faire de même pour celui-ci ce serait super

    Merci pour ton aide

  6. #6
    Membre chevronné
    Inscrit en
    juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 625
    Points : 600
    Points
    600

    Par défaut

    en fait le preg_replace remplace le eregi car c'est une fonction dépréciée.

    Quand tu mets un @ devant une variable ou une fonction, c'est pour éviter d'afficher des erreurs éventuelles donc mieux vaut l'enlever.

    fais un echo de tes différentes variables avant le mail(...)
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  7. #7
    Invité régulier
    Inscrit en
    août 2003
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : août 2003
    Messages : 68
    Points : 6
    Points
    6

    Par défaut

    Ouf ! J'ai trouvé...
    Mon problème venait d'une erreur que j'avais faite dans le code en bidouillant

    A la fonction :
    Code :
    1
    2
    3
    elseif (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é
    		}
    J'avais mis if au lieu de elseif

    Encore merci pour ta patience

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •