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

jQuery Discussion :

Envoyer des données par mail via ajax [AJAX]


Sujet :

jQuery

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut Envoyer des données par mail via ajax
    Bonjour,

    J'essaie d'envoyer mon formulaire via ajax et j'obtiens toujours l'erreur donc data=false. Mes données apparaissent bien dans l'onglet network dans la partie headers et sans erreur php car cela fonctionne bien sur une page à part.

    Code js : 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
     
    $.ajax({
                    url: "content/mail.php",
                    type: "POST",
                    data: $('#frmDemande').serialize(),
                    cache: false
                })
     
                .done(function(data) {
                        if (data == 'true') {
                            console.log("Success: Ok !");
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-success");
                            $('#success').append("Votre demande a bien été envoyée !");
                            $('#frmDemande').trigger("reset");
                        } else {
                            console.log("Error: Ok !");
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-danger");
                            $('#success').append("Votre demande n'a pas été envoyée !");
                            $('#frmDemande').trigger("reset");
                        }
                    })
                    .fail(function(err) {
                        alert("Erreur ajax :" + err);
                    });
    Je vous remercie de votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    regardez dans l'onglet "Réseau" de la console de développement de votre navigateur pour avoir plus de détails sur la réponse de la requête.
    par exemple avec Firefox, faites Ctrl + Maj + E
    https://developer.mozilla.org/fr/doc...ur_r%C3%A9seau

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bonjour,

    Si tu parles de l'erreur à l'intérieur de done et pas fail, je pense qu'il te manque seulement un String.prototype.trim:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (data.trim() == 'true')
    jQuery.trim() est dépréciée, c'est pour ça qu'il faut utiliser celle de String.prototype.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Merci pour vos réponses alors j'ai fais comme ci-après, mais cela me renvoie toujours la même erreur:
    Code js : 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
     
    function myTrim(x) {
                    return x.replace(/^\s+|\s+$/gm, '');
                }
                var data = myTrim($('#frmDemande').serialize());
     
                $.ajax({
                    url: "content/mail.php",
                    type: "POST",
                    data: data,
                    cache: false
                })
     
                .done(function(data) {
                        if (data == 'true') {
                            console.log("Success: Ok !");
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-success");
                            $('#success').append("Votre demande a bien été envoyée !");
                            $('#frmDemande').trigger("reset");
                        } else {
                            console.log("Error: Ok !");
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-danger");
                            $('#success').append("Votre demande n'a pas été envoyée !");
                            $('#frmDemande').trigger("reset");
                        }
                    })
                    .fail(function(err) {
                        alert("Erreur ajax :" + err);
                    });

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    expliquez nous ce que vous voyez dans l'onglet "Réseau" et ce qu'affiche votre erreur sinon cela va être compliqué de vous aider.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    Dans l'onglet réseau je ne vois que du 200 pour les pages php et du 304 pour les scripts js ou images.

  7. #7
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Ce n'est pas ça ce que je disais, il faut modifier la condition à l'intérieur de done et pas ailleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .done(function(data) {
       if (data.trim() == 'true')
       else...
    }

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    Comme ça, ça donne apparemment le même résultat:
    Code js : 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
     
    $.ajax({
                    url: "content/mail.php",
                    type: "POST",
                    data: $('#frmDemande').serialize(),
                    cache: false
                })
     
     
                .done(function(data) {
                        if (data.trim() == 'true') {
                            console.log("Success: Ok !");
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-success");
                            $('#success').append("Votre demande a bien été envoyée !");
                            $('#frmDemande').trigger("reset");
                        } else {
                            console.log("Error: Ok !");
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-danger");
                            $('#success').append("Votre demande n'a pas été envoyée !");
                            $('#frmDemande').trigger("reset");
                        }
                    })
                    .fail(function(err) {
                        alert("Erreur ajax :" + err);
                    });

  9. #9
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    D'après ce que je vois le contenu de data de done n'est jamais = à "true".

    Pourquoi ne pas ajouter un console.log à l'intérieur de done pour voir son contenu ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .done(function(data){
       console.log("data est :"+data);//cette ligne affiche quoi dans la console du navigateur ?
    })
    Qu'est ce que tu as mis comme code dans le fichier mail.php ?

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    ça ne donne rien mais toujours erreur dans le else et dans mon mail.php:

    Code php : 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
     
    <?php
     
    require_once '../controller/dbConfig.php';
     
    if (isset($_POST['valider'])) {
        $erreur = null;
        if (!empty($_POST['nom']) and !empty($_POST['email']) and !empty($_POST['telephone']) and !empty($_POST['adresse']) and !empty($_POST['ville']) and !empty($_POST['cp']) and !empty($_POST['ddeConcerne']) and !empty($_POST['fonctionnalites']) and !empty($_POST['message'])) {
            extract($_POST);
            if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email)) {
                $dateActuelle = htmlspecialchars(stripslashes($dateActuelle));
                $nom = htmlspecialchars(stripslashes($nom));
                $email = htmlspecialchars(stripslashes($email));
                $telephone = htmlspecialchars(stripslashes($telephone));
                $adresse = htmlspecialchars(stripslashes($adresse));
                $ville = htmlspecialchars(stripslashes($ville));
                $cp = htmlspecialchars(stripslashes($cp));
                $ddeConcerne = htmlspecialchars(stripslashes($ddeConcerne));
                $fonctionnalites = htmlspecialchars(stripslashes($fonctionnalites));
                $message = htmlspecialchars(stripslashes($message));
                $message = str_replace(["\r\n", "\n"], '<br>', $_POST['message']);
     
                $expediteur = $email_administrateur;
                $destinataire = $email;
                $reponse = $expediteur;
     
     
                $objet = 'Courrier formulaire de demande d\'informations '.$siteTitle.'';
                $codehtml =
            '<html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            </head>
            <body>
            <h1>'.$siteTitle.'</h1>
            <P>Courrier formulaire de contact de '.$siteTitle.'</P>
            Date de la demande:'.$dateActuelle.';
            Nom complet: '.$nom.'<br>
            E-mail: '.$email.'<br>
            Téléphone: '.$telephone.'<br>
            Adresse: '.$adresse.'<br>
            Ville: '.$ville.'<br>
            Code postal: '.$cp.'<br>
            Votre demande concerne: '.$ddeConcerne.'<br>
            Fonctionnalités: '.$fonctionnalites.'<br>
            Message:<br><br> '.$message.'<br>
            </body></html>';
     
                $destinataire = $email;
                $headers = 'From:'.$siteTitle."\r\n";
                $headers .= 'Bcc:'.$email_administrateur."\r\n";
                $headers .= 'MIME-Version: 1.0'."\r\n";
                $headers .= 'Content-Type: text/html; charset="UTF-8"'."\r\n";
                $headers .= 'Content-Transfer-Encoding: 8bit';
                mail($destinataire, $objet, $codehtml, $headers);
            }
        }
    }

  11. #11
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Eh ben c'est très normal car tu n'as pas mis un echo après l'envoi du mail, ce qui fais que le fichier php ne retournait rien.

    ajoutes un echo :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mail($destinataire, $objet, $codehtml, $headers);
    echo "true";

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    ça fait pareil

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 955
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 955
    Points : 44 103
    Points
    44 103
    Par défaut
    Bonjour,
    la première des choses à faire est quand même de regarder ce qu'il y a dans $_POST.

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    J'ai fait un var_dump:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array(10) { ["dateActuelle"]=> string(19) "17/03/2021 18:57:31" ["nom"]=> string(15) "Louis de Funès" ["email"]=> string(13) "ldf@gmail.com" ["telephone"]=> string(10) "0122336655" ["adresse"]=> string(12) "10 rue du..." ["ville"]=> string(5) "Paris" ["cp"]=> string(5) "75000" ["radio"]=> string(5) "Autre" ["message"]=> string(29) "Message de Louis de Funès..." ["accepte"]=> string(2) "on" }

  15. #15
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    La variable $_POST['valider'] n'existe pas dans $_POST, tu es sûr que le bouton submit a l'attribut name="valider" ? Puis je pense que la page est rechargée après le clic sur le bouton submit.

    Il faut empêcher ceci en ajoutant un preventDefault() dans le contexte de l'appel ajax.

    Montre le code HTML, et aussi TOUTE la fonction clic du bouton submit.

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 955
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 955
    Points : 44 103
    Points
    44 103
    Par défaut
    Si il n'y avait que celui-là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    array(10) { 
      ["dateActuelle"]=> string(19) "17/03/2021 18:57:31"
      ["nom"]=> string(15) "Louis de Funès" 
      ["email"]=> string(13) "ldf@gmail.com" 
      ["telephone"]=> string(10) "0122336655" 
      ["adresse"]=> string(12) "10 rue du..." 
      ["ville"]=> string(5) "Paris" 
      ["cp"]=> string(5) "75000" 
      ["radio"]=> string(5) "Autre" 
      ["message"]=> string(29) "Message de Louis de Funès..."
      ["accepte"]=> string(2) "on"
    }
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (isset($_POST['valider'])) {
      $erreur = null;
      if (!empty($_POST['nom']) and 
          !empty($_POST['email']) and 
          !empty($_POST['telephone']) and 
          !empty($_POST['adresse']) and 
          !empty($_POST['ville']) and 
          !empty($_POST['cp']) and 
          !empty($_POST['ddeConcerne']) and 
          !empty($_POST['fonctionnalites']) and 
          !empty($_POST['message'])) {

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    "accepte" est une case qu'il faut cocher afin de pouvoir valider le formulaire et voici le code js et html:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function ChangeStatut() {
        frmDemande.valider.disabled = !frmDemande.accepte.checked;
    }

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <button type="submit" class="btn btn-primary" name="valider" id="valider" disabled>valider</button>

    Le html complet du formulaire:
    Code html : 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
     
      <section id="contact">
          <?php
                    if (session_status() == PHP_SESSION_NONE) {
                        session_start();
                    }
                    $_SESSION['test_cookies'] = 'Test des cookies';
                     if (!isset($_SESSION['test_cookies'])) {
                         echo '
                               <div class="col-lg-12 alert alert-danger position-relative" id="demandeOk" role="alert">
                                <button type="button" class="btn-close float-right" aria-label="Close" id="close"></button>
                                <div>
                                    <h5>Cookies et fonctionnalités...</h5>
                                        <p>Les cookies sont désactivés sur votre navigateur alors vous ne pourrez pas utiliser pleinement les fonctionnalités de cette page car nous utilisons cette technologie pour notamment stocker vos données si vous souhaitez faire une demande d\'informations.</p>
                                        <p>Nous précisons qu\'aucun traçage n\'est effectué et que ce sont tout simplement des cookies indispensables au bon fonctionnement.</p>
                                        <p>Si vous souhaitez donc faire une demande d\'informations, veuillez activer les cookies dans votre navigateur et rafraîchir la page.</p>
                                        <p>Merci de votre compréhension.</p>
                                </div>
                                </div>';
                     }
    ?>
          <form class="row  g-3 needs-validation" action="" name="frmDemande" id="frmDemande" enctype="multipart/form-data"
              method="POST" novalidate>
              <input type="hidden" name="dateActuelle" id="dateActuelle" value="<?php echo date('d/m/Y H:i:s'); ?>">
              <!-- LES INPUT -->
              <div class="col-lg-6">
                  <label for="nom" class="form-label">Nom complet</label><span class="rouge"> *</span>
                  <div class="input-group">
                      <span class="input-group-text" id="basic-addon1"><i class="fas fa-user"></i></span>
                      <input placeholder="Saisissez votre nom complet..." type="text" class="form-control" name="nom"
                          id="nom" require_onced>
                  </div>
                  <div class="msgSaisieNom mt">
                      Saisissez votre nom !
                  </div>
              </div>
     
              <div class="col-lg-6">
                  <label for="email" class="form-label">E-mail</label><span class="rouge"> *</span>
                  <div class="input-group">
                      <span class="input-group-text" id="inputGroupPrepend"><i class="fas fa-at"></i></span>
                      <input placeholder="Saisissez votre E-mail..." type="text" class="form-control" name="email"
                          id="email" require_onced>
                  </div>
                  <div class="msgSaisieEmail mt">
                      Saisissez votre E-mail !
                  </div>
              </div>
     
              <div class="col-lg-6">
                  <label for="telephone" class="form-label">Téléphone</label><span class="rouge"> *</span>
                  <div class="input-group">
                      <span class="input-group-text" id="inputGroupPrepend"><i class="fas fa-phone"></i></span>
                      <input placeholder="Saisissez votre téléphone..." type="text" class="form-control" name="telephone"
                          id="telephone" aria-describedby="inputGroupPrepend" require_onced>
                  </div>
                  <div class="msgSaisieTelephone mt">
                      Saisissez votre téléphone !
                  </div>
              </div>
     
              <div class="col-lg-6">
                  <label for="adresse" class="form-label">Adresse</label><span class="rouge"> *</span>
                  <div class="input-group">
                      <span class="input-group-text" id="inputGroupPrepend"><i class="fas fa-home"></i></span>
                      <input placeholder="Saisissez votre adresse..." type="text" class="form-control" name="adresse"
                          id="adresse" aria-describedby="inputGroupPrepend" require_onced>
                  </div>
                  <div class="msgSaisieAdresse mt">
                      Saisissez votre adresse !
                  </div>
              </div>
     
              <div class="col-lg-6">
                  <label for="ville" class="form-label">Ville</label><span class="rouge"> *</span>
                  <div class="input-group">
                      <span class="input-group-text" id="inputGroupPrepend"><i class="fas fa-city"></i></span>
                      <input placeholder="Saisissez votre ville..." type="text" class="form-control" name="ville" id="ville"
                          aria-describedby="inputGroupPrepend" require_onced>
                  </div>
                  <div class="msgSaisieVille mt">
                      Saisissez votre ville !
                  </div>
              </div>
     
              <div class="col-lg-6">
                  <label for="cp" class="form-label">Code postal</label><span class="rouge"> *</span>
                  <div class="input-group">
                      <span class="input-group-text" id="inputGroupPrepend"><i class="fas fa-map-marker-alt"></i></span>
                      <input placeholder="Saisissez votre code postal..." type="text" class="form-control" name="cp" id="cp"
                          aria-describedby="inputGroupPrepend" require_onced>
                  </div>
                  <div class="msgSaisieCp mt">
                      Saisissez votre code postal !
                  </div>
              </div>
              <!-- LES OPTIONS -->
              <div class="col-lg-12">
                  <label for="dde" id="dde" class="form-label">Votre demande concerne</label><span class="rouge"> *</span>
                  <!-- CODE PRESTATIONS -->
                  <?php
                    require_once 'controller/dbConfig.php';
                            $sql = 'SELECT * FROM prestations';
                            $result = $conn->query($sql);
     
                            if ($result->num_rows > 0) {
                                while ($row = $result->fetch_assoc()) {
                                    ?>
                  <div class="form-check mt-3">
                      <input class="form-check-input" type="radio" name="radio" id="<?php echo $row['libelle']; ?>"
                          value="<?php echo $row['description']; ?>">
                      <label for="<?php echo $row['libelle']; ?>"><?php echo $row['description']; ?></label>
                  </div>
                  <?php
                                }
                            } else {
                                echo 'Il n\'y a aucune prestation !';
                            }
                                        $conn->close();
                        ?>
     
                  <div class="msgSaisieDde">
                      Sélectionnez une option !
                  </div>
              </div>
              <!-- LES CHECK BOX -->
              <div class="col-lg-12 cachee" id="fonctionnalites">
                  <label for="fonctionnalites" class="form-label">Fonctionnalités</label><span class="rouge">
                      *</span>
     
                  <!-- CODE FONCTIONNALITES -->
                  <?php
                                // require_once 'controller/dbConfig.php';
                                $sql = 'SELECT * FROM fonctionnalites';
                                $result = $conn2->query($sql);
     
                                if ($result->num_rows > 0) {
                                    while ($row = $result->fetch_assoc()) {
                                        ?>
                  <div class="form-check">
                      <input class="form-check-input" type="checkbox" name="checkbox[]"
                          value="<?php echo $row['description']; ?>" id="<?php echo $row['libelle']; ?>">
                      <label for="<?php echo $row['libelle']; ?>"><?php echo $row['description']; ?></label>
                  </div>
                  <?php
                                    }
                                } else {
                                    echo 'Il n\'y a aucune prestation !';
                                }
                                        $conn2->close();
                        ?>
                  <div class="msgSaisieFonctionnalites">
                      Cochez une ou plusieurs fonctionnalité(s) !
                  </div>
              </div>
     
              <!-- MSG + UPLOAD -->
     
              <div class="col-lg-12">
                  <label for="message" class="form-label">Dites-nous tout...</label><span class="rouge"> *</span>
                  <div class="input-group">
                      <span class="input-group-text" id="inputGroupPrepend"><i class="fas fa-pen-alt"></i></span>
                      <textarea placeholder="Saisissez votre message..." class="form-control" name="message" id="message"
                          aria-describedby="inputGroupPrepend" require_onced></textarea>
                  </div>
                  <div class="msgSaisieMessage mt">
                      Saisissez votre message !
                  </div>
              </div>
     
              <div class="col-lg-12 d-none" id="helpDocuments">
                  <label for="file" class="form-label">Joignez jusqu'à 3 fichiers <a href="#" data-bs-toggle="tooltip"
                          data-bs-placement="right" class="tooltipFiles"
                          title="Vous pouvez joindre jusqu'à 3 fichiers de 1,5 MO chacun maxi. Le type doit être une image ou bien un document (Office Word, Excel, PDF etc.)">?</a>
                  </label>
                  <div id="divDropzone" class="mt-3 col-md-12">
                  </div>
              </div>
     
              <div class="col-lg-12">
                  <label for="accepte"></label>
                  <input type="checkbox" onClick="ChangeStatut(this.form)" name="accepte" id="accepte"> <span>J'ai pris
                      connaissance et j'accepte la politique de <a href="#mentions-legales">confidentialité</a> de ce site
                  </span>
              </div>
     
              <div class="col-lg-6">
                  <button type="submit" class="btn btn-primary" name="valider" id="valider" disabled>valider</button>
              </div>
     
          </form>
     
          <div id="#success" class="col-lg-6"></div>
     
          <div class="col-lg-12 d-none mt-3 position-relative" id="demandeOk" role="alert">
              <button type="submit" class="btn-close" aria-label="Close" id="close"></button>
              <div class="text-center pb-3">
                  <h6 id="success"></h6></h6>
              </div>
          </div>
     
      </section>

    Le js : (j'ai mis en commentaire la plupart des éléments pour la validation afin de ne pas être gêné pour les tests)
    Code js : 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
     
     $("#valider").click(function(e) {
     
            // if ($("#nom,#email,#telephone,#adresse,#ville,#cp,#message").val() == "" || $('input[name="radio"]').not(':checked')) {
            if ($("#nom,#email,#telephone,#adresse,#ville,#cp,#message").val() == "") {
                if ($("#nom").val() == "") {
                    $('.msgSaisieNom').addClass('erreurSaisie');
                    $('#nom').focus();
                }
                if ($("#email").val() == "") {
                    $('.msgSaisieEmail').addClass('erreurSaisie');
                    $('#email').focus();
                }
                if ($("#telephone").val() == "") {
                    $('.msgSaisieTelephone').addClass('erreurSaisie');
                    $('#telephone').focus();
                }
                if ($("#adresse").val() == "") {
                    $('.msgSaisieAdresse').addClass('erreurSaisie');
                    $('#adresse').focus();
                }
                if ($("#ville").val() == "") {
                    $('.msgSaisieVille').addClass('erreurSaisie');
                    $('#ville').focus();
                }
                if ($("#cp").val() == "") {
                    $('.msgSaisieCp').addClass('erreurSaisie');
                    $('#cp').focus();
                }
                // RADIO
                // if ($('#siteVitrine,#refonteSiteExistant').not(':checked')) {
                // if ($('input[name="radio"]').not(':checked')) {
                //     $('.msgSaisieDde').addClass('erreurSaisie');
                //     // $('html, body').animate({ scrollTop: $('#dde').offset().top }, '400');
                // }
                // $('input[name="radio"]').on('change', function() {
                //     if ($(this).is(':checked')) {
                //         $(".msgSaisieDde").removeClass('erreurSaisie');
                //         $(".msgSaisieDde").val('');
                //     }
                // })
                // if ($('input[name="radio"]').is(':checked')) {
                //     $(".msgSaisieDde").removeClass('erreurSaisie');
                //     $(".msgSaisieDde").val('');
                // }
                // CHECK BOX
                // if ($('input[name="radio"][value="Création de site internet"],input[name="radio"][value="Développement spécifique"],input[name="radio"][value="Refonte d\'un site existant"]').is(':checked')) {
                //     $('.msgSaisieFonctionnalites').addClass('erreurSaisie');
                //     $('#fonctionnalites').focus();
                // }
     
                // MESSAGE
                if ($("#message").val() == "") {
                    $('.msgSaisieMessage').addClass('erreurSaisie');
                    $('#message').focus();
                }
            }
            if ($("#divDropzone").html().length != 0) {
                // myDropzone.processQueue();
                e.preventDefault();
                e.stopPropagation();
     
                $.ajax({
                    url: "content/mail.php",
                    type: "POST",
                    data: $('#frmDemande').serialize(),
                    cache: false
                })
     
                .done(function(data) {
                        if (data.trim() == 'true') {
                            console.log("data est :" + data);
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-success");
                            $('#success').append("Votre demande a bien été envoyée !");
                            $('#frmDemande').trigger("reset");
                        } else {
                            console.log("Error: Ok !");
                            $("#demandeOk").removeClass("d-none");
                            $("#demandeOk").addClass("d-block");
                            $("#demandeOk").addClass("alert alert-danger");
                            $('#success').append("Votre demande n'a pas été envoyée !");
                            $('#frmDemande').trigger("reset");
                        }
                    })
                    .fail(function(err) {
                        alert("Erreur ajax :" + err);
                    });
            }
            myDropzone.processQueue();
     
        }); /*fin #valider*/

  18. #18
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bonjour,

    La remarque de NoSmoking est importante, il y'a 3 variables indéfinies dans $_POST : $_POST["valider"],$_POST['ddeConcerne'],$_POST['fonctionnalites'].

    1-$_POST["ddeConcerne"] est la valeur de <input ... name="radio" .../>, alors que l'attribut name="radio", donc le plus simple est de remplacer name='radio' par name="ddeConcerne";

    2-La même chose pour "fonctionnalites", <input ... name="fonctionnalites[]"/>, et pas name="checkbox[]" .

    3- $_POST["valider"] n'est pas cohérente dans ce contexte, donc à supprimer.

    En gros la condition PHP doit être modifiée comme suite :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $erreur = null;
    if (!empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['adresse']) &&  !empty($_POST['ville']) &&  !empty($_POST['cp']) &&
           !empty($_POST['ddeConcerne']) && !empty($_POST['fonctionnalites']) && !empty($_POST['message'])) {
        .....;
       mail(....);
       echo "true";
    }else{
       echo "Veuillez renseigner les champs obligatoires.";
    }

  19. #19
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 203
    Points : 82
    Points
    82
    Par défaut
    Merci apparemment il y avait bien un problème à ce niveau là alors j'ai fait comme ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            if (isset($_POST['radio'])) {
                $ddeConcerne = $_POST['radio'];
            } else {
                $ddeConcerne = '';
            }
            if (isset($_POST['checkbox'])) {
                $fonctionnalites = implode(' | ', $_POST['checkbox']);
            } else {
                $fonctionnalites = '';
            }

    de cette façon, cela fonctionne bien et cela me renvoie bien mes données des cases et du radio mais maintenant, c'est mon mail qui ne s'envoie pas à cause de cette erreur et j'ai passé l'après-midi dessus mais en vain:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: mail(): SMTP server response: 501 Error: Bad sender address syntax in D:\xampp-php-8.0.2\htdocs\WC-V4\content\mail.php on line 71

    Sachant que si je désactive la validation et que je passe une chaine de texte à la place de l'email "email" je n'ai pas cette erreur pourtant, je ne vois pas le rapport avec bad sender adress.

    Mon script mail.php fonctionne pourtant bien sur une page à part et arrive bien à destination dans maildev qui est donc configuré correctement.

  20. #20
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 405
    Points : 4 841
    Points
    4 841
    Par défaut
    Bonjour,

    Pour l'erreur du mail, tu dois configurer le smtp de ton serveur local (avec une adresse gmail par exemple) , ensuite préciser le port smtp et le chemin vers sendmail.exe en ajoutant ces lignes dans php.ini sous la section "mail function" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [mail function]
    SMTP=smtp.gmail.com
    smtp_port=587
    sendmail_from= email (gmail) que tu as configuré
    sendmail_path= "\"C:\xampp\sendmail\sendmail.exe\" -t"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Envoyer des factures par mail en masse via SAP
    Par rickblood dans le forum SAP
    Réponses: 3
    Dernier message: 05/10/2016, 12h41
  2. [MySQL] info pour envoyer des données par mail
    Par boubourse92 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/01/2008, 13h04
  3. [Mail] envoie des données par mail
    Par leclone dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2007, 10h15
  4. envoyer des données par mail
    Par zorba49 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/12/2005, 11h00
  5. envoyer des données par l'intermédiaire d'un bouton
    Par mathilde50 dans le forum Access
    Réponses: 26
    Dernier message: 28/10/2004, 16h49

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