Bonjour,

Je suis en train de créer un formulaire de contact. Tout marche, le seul problème que j'ai est que lorsque je m'envoie la reponse par mail mon input radio me renvoie la réponse "oui" meme si je coche non.

<form id="myForm">

        <label> Nom </label>
        <input id="name" type="text" placeholder="Nom" required>

        <label> Prénom </label>
        <input id="prenom" type="text" placeholder="Prenom" required>

        <label> Adresse Mail </label>
        <input id="email" type="email" placeholder="Adresse Email" required>

        <p> Seriez-vous présent <br> à la soirée ? </p>

                <input type="radio" id="radio" name="radio" value="Oui">
                <label for="radio"> oui </label>

                <input type="radio" id="radio" name="radio" value="Non">
                <label for="radio"> Non </label>

        <p class="textarea"> Message </p>
                <textarea id="body" rows="5" placeholder="Message" required></textarea>

        <button type="button" onclick="sendEmail()" value="Envoyer mon message"> Envoyer mon message </button>

      </form>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

  <script>
    function sendEmail(){
      var name = $("#name");
      var prenom = $("#prenom");
      var email = $("#email");
      var radio = $("#radio");
      var body = $("#body");

      if(isNotEmpty(name) && isNotEmpty(prenom) && isNotEmpty(email)  && isNotEmpty(body) && isNotEmpty(radio)){
        $.ajax({
          url: 'sendEmail.php',
          method: 'POST',
          dataType: 'json',
          data:{
            name: name.val(),
            prenom: prenom.val(),
            email: email.val(),
            radio: radio.val(),
            body: body.val()
          }, success: function(response){
            $('#myForm')[0].reset();
            $('.sent-notification').text ("Votre message à bien été envoyé.");
          }
        });
      }
    }
    function isNotEmpty(caller){
      if(caller.val() == ""){
        caller.css('border','1px solid red');
        return false;
      }
      else 
      {
        caller.css('border','');
        return true;
      }
    }
  </script>

<?php 
use PHPMailer\PHPMailer\PHPMailer;

if(isset($_POST['name']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['radio'])){
    $name = $_POST['name'];
    $prenom = $_POST['prenom'];
    $email = $_POST['email'];
    $radio = $_POST['radio'];
    $body = $_POST['body'];

    require_once "PHPMailer/PHPMailer.php";
    require_once "PHPMailer/SMTP.php";
    require_once "PHPMailer/Exception.php";

    $mail = new PHPMailer();

    //smtp settings 
    $mail->isSMTP();
    $mail->Host = "smtp.gmail.com";
    $mail->SMTPAuth = true;
    $mail->Username = "smonmaildenvoie@gmail.com";
    $mail->Password = "mdp";
    $mail->Port = 465;
    $mail->SMTPSecure = "ssl";

    // email settings 
    $mail->isHTML(true);
    $mail->setFrom ($email, $name , $prenom);
    $mail->addAddress("monmaildereception");
    $mail->Body = ("Nom : $name. <br/><br/> Prénom : $prenom. <br/><br/> Adresse Mail : $email. <br/><br/> seriez vous à la soirée ? : $radio. <br/><br/> Corps du message : $body.");

    if($mail->send()){
        $status = "success";
        $response = "Votre email a bien été envoyé";
    }
    else
    {
        $status = "failed";
        $response = "Something is wrong: <br>" . $mail->ErrorInfo;
    }

    exit(json_encode(array("status" => $status, "response" => $response)));

}

?>

Je n'arrive pas a trouver de réponse depuis hier.

Pouvez-vous m'aider svp

Merci beaucoup

Sarah

9 réponses


Bonjour, les deux bouton radio ont le même ID

Lorsque je mets 2 ID différents, et que je rajoute le 2eme ID dans mon pho ça me met quand meme la réponse oui alors que le non est coché..

Bonjour,

  • Es-tu sur de modifier le bon fichier ? Tu remplaces "non" par "toto" par exemple.
  • Tu as deux fois le même id pour ton input alors qu'un id doit être unique et c'est de la que viens le soucis car du coup ton js récupères uniquement le premier
    Je ne suis pas spécialiste en js mais je pense que du avoir une autre méthode pour récupérer la valeur du bouton sélectionner en fonction du name

J'ai modifié partout l'ID pour que mon php récupère les deux ID différents, mais lorsque je récupère la réponse, je récupère et le oui et le non.

Je remet le code modifé :

<label> Nom </label>
        <br/>
        <input id="name" type="text" placeholder="Nom" required>

        <br/><br/>

        <label> Prénom </label>
        <br/>
        <input id="prenom" type="text" placeholder="Prenom" required>

        <br/><br/>

        <label> Adresse Mail </label>
        <br/>
        <input id="email" type="email" placeholder="Adresse Email" required>

        <br/><br/>

        <p> Seriez-vous présent <br> à la soirée ? </p>

            <input type="radio" id="radio" name="radio" value="Oui">
                <label for="radio"> oui </label>

                <input type="radio" id="radio1" name="radio" value="Non">
                <label for="radio1"> Non </label>

         <br/><br/>
        <p class="textarea"> Message </p>
        <textarea id="body" rows="5" placeholder="Message" required></textarea>
        <br/><br/>
        <button type="button" onclick="sendEmail()" value="Envoyer mon message"> Envoyer mon message </button>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

  <script>
    function sendEmail(){
      var name = $("#name");
      var prenom = $("#prenom");
      var email = $("#email");
      var radio = $("#radio");
      var radio1 = $("#radio1");
      var body = $("#body");

      if(isNotEmpty(name) && isNotEmpty(prenom) && isNotEmpty(email)  && isNotEmpty(body) && isNotEmpty(radio) && isNotEmpty(radio1)){
        $.ajax({
          url: 'sendEmail.php',
          method: 'POST',
          dataType: 'json',
          data:{
            name: name.val(),
            prenom: prenom.val(),
            email: email.val(),
            body: body.val(),
            radio: radio.val(),
            radio1: radio1.val()
          }, success: function(response){
            $('#myForm')[0].reset();
            $('.sent-notification').text ("Votre message à bien été envoyé.");
          }
        });
      }
    }
    function isNotEmpty(caller){
      if(caller.val() == ""){
        caller.css('border','1px solid red');
        return false;
      }
      else 
      {
        caller.css('border','');
        return true;
      }
    }
  </script>
<?php 
use PHPMailer\PHPMailer\PHPMailer;

if(isset($_POST['name']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['radio']) && isset($_POST['radio1'])){
    $name = $_POST['name'];
    $prenom = $_POST['prenom'];
    $email = $_POST['email'];
    $body = $_POST['body'];
    $radio = $_POST['radio'];
    $radio1 = $_POST['radio1'];

    require_once "PHPMailer/PHPMailer.php";
    require_once "PHPMailer/SMTP.php";
    require_once "PHPMailer/Exception.php";

    $mail = new PHPMailer();

    //smtp settings 
    $mail->isSMTP();
    $mail->Host = "smtp.gmail.com";
    $mail->SMTPAuth = true;
    $mail->Username = "maildenvoie";
    $mail->Password = "mdp";
    $mail->Port = 465;
    $mail->SMTPSecure = "ssl";

    // email settings 
    $mail->isHTML(true);
    $mail->setFrom ($email, $name , $prenom);
    $mail->addAddress("maildereception");
    $mail->Body = ("Nom : $name. <br/><br/> Prénom : $prenom. <br/><br/> Adresse Mail : $email. <br/><br/> seriez vous à la soirée ? : $radio. Corps du message : $body.");

    if($mail->send()){
        $status = "success";
        $response = "Votre email a bien été envoyé";
    }
    else
    {
        $status = "failed";
        $response = "Something is wrong: <br>" . $mail->ErrorInfo;
    }

    exit(json_encode(array("status" => $status, "response" => $response)));

}

?>

c'est la où il faut vérifier s'il est choché ou non en js

Je ne vois pas ou vérifier et pour moi il est coché partout. Quelques chose m'échape surement et je ne vois pas quoi

normalement en js tu devrais vérifier qui est checké
https://www.w3schools.com/jsref/prop_radio_checked.asp

le 1er input est checké. Il n'y a que la valeur Oui qui est checker.
Mais je ne sais pas comment recevoir soit la réponse oui soit la réponse non en fonction de ce que l'utilisateur va cocher. J'arrive à tout recevoir sauf ça

normalement en js tu devrais vérifier qui est checké
https://www.w3schools.com/jsref/prop_radio_checked.asp