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 :

[PHP - AJAX] Message Ajax qui refuse de s'afficher après vérification PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2021
    Messages : 4
    Par défaut [PHP - AJAX] Message Ajax qui refuse de s'afficher après vérification PHP
    Bonjour à toutes et à tous;

    Je suis en train de tester un petit formulaire de contact Ajax-PHP et je suis confronté à une petite erreur: Les messages de réussite ou d'échec générés par Ajax quand le formulaire est soumis.

    Pour le contexte, pour limiter le spam j'ai intégré un HoneyPot (un input caché en css qui ne peut donc pas être rempli par l'utilisateur mais qui sera rempli par le robot). Et avant d'envoyer le mail le programme PHP vérifie si la valeur de cet input (country ici) est vide ou pas. Si il est vide le mail est envoyé, sinon, non.

    Le soucis est qu'avec la vérification empty() en PHP, le mail est bien renvoyé mais le message de succès ne s'affiche plus.

    Par contre quand la fonction empty() n'est pas utilisée tout fonctionne, les messages s'affichent.

    J'utilise Swiftmailer pour envoyer le mail PHP. Fonctionne avec Mailtrap pour le moment.

    Voici les différentes parties de mon code:

    Formulaire HTML (la balise aside doit contenir les messages Ajax:
    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
    <main class="container">
              <form id="contact-form" action="contact3.php" method="post">
                  <aside class="alert d-none">   <!-- Contient les erreurs Ajax -->
                  </aside>
                  <ul class="list-unstyled">
                      <li class="form-group">
                          <label for="name">Nom</label>
                          <input type="text" class="form-control" id="name" name="name">
                      </li>
                      <li class="form-group">
                          <label for="email">Email</label>
                          <input type="email" class="form-control" id="email" name="email">
                      </li>
                      <li class="form-group">
                          <label for="subject">Sujet</label>
                          <input type="text" class="form-control" id="subject" name="subject">
                      </li>
                      <li class="form-group">
                          <label for="message">Message</label>
                          <textarea name="message" id="message" cols="30" rows="10" class="form-control"></textarea>
                      </li>
                      <li class="form-group-cache">
                            <label for="country">country</label>
                            <input type="text" class="form-control" id="country" name="country">  <!-- champ caché en css (HoneyPot) -->
                      </li>
                      <li class="form-group">
                          <button class="btn btn-primary">Envoyer</button>
                      </li>
                  </ul>
              </form>
          </main>

    Partie JS (j'utilise Jquery):

    Code javascript : 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
    'use strict';
    $(function () {
        $('#contact-form').submit(function (event) {
            // Annule l'action par défaut (on ne veut pas que la page se recharge)
            event.preventDefault();
            // Envoi de la requête XHR
            $.post($(this).attr('action'), $(this).serializeArray(), function (data) {
                let $aside = $('#contact-form aside');
     
                // Notifications
                if (data.result) {
                    $aside.addClass('alert-success').text('Le message a bien été envoyé !').removeClass('d-none');
     
                } else {
                    $aside.addClass('alert-danger').text('Erreur lors de l\'envoi du message !').removeClass('d-none');
     
                }
            });
     
        });
     
    });

    Partie PHP. Ne vous inquiétez pas si tout n'est pas encore sécurisé, pour l'instant c'est juste pour tester mon HoneyPot. Les données SMTP de Swiftmailer ont été anonymisées:

    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
     
    <?php
     
     
    if(isset($_POST['name']) AND isset($_POST['email']) AND isset($_POST['subject'])AND isset($_POST['message']) AND isset($_POST['country'])) {
     
        if(empty($_POST['country'])) {    /*on vérifie si le champ country est bien vide, et donc que c'est bien un humain qui a rempli le formulaire*/
     
            $name = strip_tags($_POST['name']);
            $email = strip_tags($_POST['email']);
            $subject = strip_tags($_POST['subject']);
            $message = strip_tags($_POST['message']);
     
            header('Content-Type: application/json');
            // On inclut le fichier autoload du dossier vendor
            require __DIR__ . '/vendor/autoload.php';
            // Create the Transport
            $transport = (new Swift_SmtpTransport('smtp.mailtrap.io', 2525))
                ->setUsername('xxxxxxxxxxxxxxx')
                ->setPassword('xxxxxxxxxxxxxxxxxxxx);
            // Create the Mailer using your created Transport
            $mailer = new Swift_Mailer($transport);
            // Create a message
            $message = (new Swift_Message("Nouveau message de {$name}[{$email}] : {$subject}"))
                ->setFrom(['xxxxxxxxxxxxxxxx])
                ->setTo(['destinataire@adresse.fr'])
                ->setReplyTo($email)
                ->setBody($message);
            // Send the message
            $result = $mailer->send($message);
            echo json_encode([
                'result' => $result
            ]);
     
         }
     
     }


    J'ai beau relire mon code dans tout les sens, je ne comprend pas pourquoi l'utilisation de la fonction empty() en PHP empêche d'afficher les messages Ajax, alors que le mail est bien envoyé...


    Je vous remercie par avance pour vos réponses, en espérant avoir pu donner des informations claires.

    Bien cordialement.

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    regardez la réponse HTTP dans l'onglet "Réseau" de la console de développement de votre navigateur. comme ça vous verrez si le souci vient de javascript ou de php.
    par exemple avec Firefox, faites Ctrl + Maj + E
    https://developer.mozilla.org/fr/doc...ur_r%C3%A9seau

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2021
    Messages : 4
    Par défaut
    Bonjour et merci pour merci pour votre réponse

    J'ai bien un code 200, donc l'envoi des données du formulaire par Ajax fonctionne bien (je peux d’ailleurs visualiser les données envoyée dans l'onglet réseau) .



    Par contre le retour par le PHP permettant de signaler que tout c'est bien passé n'est pas envoyé au script JS. J'avoue être un peu perdu. Je ne vois pas ce qui peut bien gloquer.

    Merci pour vos réponses.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2021
    Messages : 4
    Par défaut
    Réglé!

    Finalement c'était mon code JS qui n'était pas bon:
    data.result ne vaut pas true, mais 1 . Donc il fallait vérifier si data.result valait 1.

    Et là ça marche.

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

Discussions similaires

  1. [GRAPH] [SGPLOT] Ticks qui refusent de s'afficher
    Par alers dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 13/08/2014, 08h28
  2. Réponses: 6
    Dernier message: 02/06/2009, 13h20
  3. Des fenêtre qui refusent de s'afficher
    Par iDanz dans le forum Débuter
    Réponses: 5
    Dernier message: 31/08/2008, 20h43
  4. [AJAX] deux appels ajax qui refusent de cohabiter
    Par chelguera dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/11/2007, 15h47
  5. [AJAX] deux appels ajax qui refusent de cohabiter
    Par chelguera dans le forum AJAX
    Réponses: 2
    Dernier message: 27/11/2007, 15h47

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