impossible d envoyer mon formulaire avec jquery validate

Mammouth du PHP | 506 Messages

21 mai 2021, 18:55

bonjour a tous
je viens de découvrir jquery validate il est terrible pour valider les formulaires il est vraiment génial

le seul soucis que je rencontre c est que je ne parviens pas a envoyer le formulaire sur mon adresse mail

je me suis pas casse la tete j ai pris l exemple du dossier demo
et j ai ajouter la partie d envois
lorsque je clic sur envoyer il y a bien un pop up de confirmation mais je ne recois rien dans ma boite mail

quelqu un pour m aider merci

Code : Tout sélectionner

<?php //fin de la trnsmission des donnees dans la table //l'envoie du mail if(!empty($_POST["submit"])) { $family = $_POST["family"]; $gender = $_POST["gender"]; // on entre un ou Plusieurs destinataires $to = '[email protected]'; // notez la virgule $email='[email protected]'; // Sujet $subject = "une reussite" ; // message $message = ' <html> <head> <tr> <td>le prenom </td><td>'.$gender .'</td></br> </tr> <tr> </tr> <tr> <td>le textera </td><td>'.$family .'</td></br> </tr> </body> </html> '; // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini $headers[] = 'MIME-Version: 1.0'; $headers[] = 'content-type: text/html; charset=utf-8'; // En-têtes additionnels //$headers[] = "From: " . $name . "<". $_POST["email"] .">\r\n"; $headers[] = 'From: '.$email."\r\n". 'Reply-To: '.$email."\r\n" . 'X-Mailer: PHP/' . phpversion(); // Envoi //var_dump($headers); if(mail($to, $subject, $message, implode("\r\n", $headers))){ // success message echo "Success!<br />"; }else{ // error message echo "Fail<br />"; } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Test for jQuery validate() plugin</title> <link rel="stylesheet" media="screen" href="css/screen.css"> <script src="../lib/jquery.js"></script> <script src="../dist/jquery.validate.js"></script> <script> // only for demo purposes $.validator.setDefaults({ submitHandler: function() { alert("submitted!"); } }); $(document).ready(function() { $("#form1").validate(); //$("#selecttest").validate(); }); </script> <style> .block { display: block; } form.cmxform label.error { display: none; } </style> </head> <body> <h1 id="banner"><a href="https://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1> <div id="main"> <form class="cmxform" id="form1" method="get"enctype="multipart/form-data" onsubmit="return validate()"> <fieldset> <legend>Validating a form with a radio and checkbox buttons</legend> <fieldset> <legend>Gender</legend> <label for="gender_male"> <input type="radio" id="gender_male" value="m" name="gender" required>Male </label> <label for="gender_female"> <input type="radio" id="gender_female" value="f" name="gender">Female </label> <label for="gender" class="error">Please select your gender</label> </fieldset> <fieldset> <legend>Family</legend> <label for="family_single"> <input type="radio" id="family_single" value="s" name="family" required>Single </label> <label for="family_married"> <input type="radio" id="family_married" value="m" name="family">Married </label> <label for="family_other"> <input type="radio" id="family_other" value="o" name="family">Other </label> <label for="family" class="error">Please select your family status.</label> </fieldset> <p> <label for="agree">Please agree to our policy</label> <input type="checkbox" class="checkbox" id="agree" name="agree" required> <br> <label for="agree" class="error block">Please agree to our policy!</label> <input class="submit" type="submit" value="Submit"> </p> </fieldset> </form> <a href="index.html">Back to main page</a> </div> </body> </html>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mai 2021, 18:24

Hello !

Dans le code de l'exemple, lorsque l'utilisateur a passé la validation du formulaire, le message "submitted!" apparait à l'écran, mais le formulaire n'est pas envoyé. En fait, pour que le contrôle fonctionne, jquery désactive la soumission classique du formulaire (sans quoi les données sont envoyées avant même d'avoir le temps d'être contrôlées :))

Il faut donc rétablir la soumission du formulaire une fois les contrôles passés (ou gérer l'envoi des données différemment, par ajax par exemple). Le plus simple dans ton cas est de remplacer (ou de compléter) la ligne contenant alert("submitted!") avec l'instruction $('#form1').submit(); pour forcer l'envoi des données du formulaire dont l'id est "form1".

A noter : la soumission d'un formulaire via le bouton submit déclenche l'action onSubmit du formulaire (et donc le contrôle opéré par jquery), alors que la soumission d'un formulaire en ligne de code ne déclenche pas cette action. Cela te permet d'envoyer le formulaire en javascript sans relancer le contrôle encore et encore :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 506 Messages

23 mai 2021, 18:49

bonjour Ryle
merci pour ta réponse et on aide si précieuse et surtout ta merveilleuse facon d expliquer les choses
depuis le post de ce message j ai trouve une autre solution avec javascript
mais je vais laisser le post ouvert car j aimerais bien essayer ta solution avec le changement de code
cela me plait mieux que ce que j ai pour l instant

donc si j ai bien compris je n ai juste qu'a remplacer la ligne
alert("submitted!"); par $('#form1').submit();
car tu m indiques ou de compléter ..