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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
    }
}
?>