IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Formulaire mail php : bouton radio se décoche [PHP 4]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 68
    Points : 34
    Points
    34
    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 : 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
        }
    }
    ?>

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Bonjour,

    un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 68
    Points : 34
    Points
    34
    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 éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 68
    Points : 34
    Points
    34
    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 éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 68
    Points : 34
    Points
    34
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. [PHP 4] Formulaire mail php : caractères accentués remplacés
    Par adameteve dans le forum Langage
    Réponses: 3
    Dernier message: 31/10/2010, 13h04
  2. Formulaire champs obligatoires bouton radio
    Par ju0123456789 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/04/2008, 18h11
  3. action de formulaire selon le bouton radio?
    Par anis_el_madani dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/05/2007, 10h00
  4. Formulaire dynamique et bouton radio
    Par Analfabete dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2007, 20h56
  5. Réponses: 3
    Dernier message: 09/08/2006, 08h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo