[RESOLU] Formulaire avec validation en HTML5

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Formulaire avec validation en HTML5

Re: Formulaire avec validation en HTML5

par RebootGG » 25 nov. 2015, 19:35

Je vais donc creuser de ce côté là,

Merci pour tout,

Je mets en résolu

Re: Formulaire avec validation en HTML5

par ynx » 25 nov. 2015, 18:15

Salut,

Pour pallier à ceci, il faut effectuer une redirection (via la fonction php header) à la fin du traitement de ton formulaire (principe POST Redirect GET).

Edit : en effectuant une redirection à la fin du traitement, la variable $mail_sent ne sera donc pas définie sur la page redirigée.
Il faudra alors transmettre cette variable à la page redirigée, soit via un paramètre GET, soit via une variable de session.

Bonne journée

Re: Formulaire avec validation en HTML5

par RebootGG » 25 nov. 2015, 17:26

Y a-t-il un moyen de pallier à cela?

Merci

Re: Formulaire avec validation en HTML5

par or 1 » 25 nov. 2015, 17:22

oui, ce message apparait quand la page que l'on rafraichit a été appelé en méthode post.

Re: Formulaire avec validation en HTML5

par RebootGG » 25 nov. 2015, 17:13

Super, ça marche impeccable, je te remercie...

Petit problème cependant, une fois le formulaire validé, quand je rafraichis la page, cette petite fenêtre apparaît : https://gyazo.com/fee9591cf1b31d5d31a01a74afbf987a

C'est normal?

Re: Formulaire avec validation en HTML5

par Saian » 25 nov. 2015, 16:48

<?php

$mail_sent = false;
if ($_POST['submit'])
{
    $to = "[email protected]";
    $date = date ("l, F jS, Y");
    $time = date ("h:i A");

    $from = 'De: $_REQUEST["email"]';
   
    $nom = $_POST['nom'];
    $email= $_POST['email'];
    $objet = $_POST['objet'];
    $texte = $_POST['texte'];

    if (mail($to, $objet, $email, $texte)) { 
        echo 'Message envoyé';
        $mail_sent = true;
    } else { 
        echo 'BUG';
    }
}

?>
<ul class="actions">
    <li><input id="submit" name="submit" type="submit" value="Envoyer"/></li>
    <li><input type="reset" value="Tout effacer" class="alt" /></li>
    <?php if($mail_sent): ?>
        <li>le mesage</li>
    <?php endif ?>
</ul>
EDIT : oui tu peux laisser l'attribut action vide.

Re: Formulaire avec validation en HTML5

par RebootGG » 25 nov. 2015, 16:44

Salut, il semble y avoir un petit problème d'accolade sur le if else (l'accolade fermante du if avant le else).
Merci pour ta réponse. Dois-je inverser ou rajouter une accolade ? J'ai testé plusieurs modifications, sans succès.

N'hésitez pas à être explicite, je suis totalement ignare en PHP

+ C'est noté pour l'affichage du message.


Question con : mon attribut action est égal à "" car le script est situé sur la même page, est-ce la bonne méthode?

Re: Formulaire avec validation en HTML5

par Saian » 25 nov. 2015, 16:38

Salut, il semble y avoir un petit problème d'accolade sur le if else (l'accolade fermante du if avant le else).

Sinon pour que ce soit un peu plus propre tu devrais déplacer le code $to, $date, $time, etc dans le bloc if post submit. Ainsi il ne s'exécutera que s'il y a soumission du formulaire.

Et pour le message tu peux faire un truc du style :
$mail_sent = false; // avant le if post submit
$mail_sent = true; // si le mail est bien envoyé
Et dans le code html :
<?php if($mail_sent): ?>
  <li>le mesage</li>
<?php endif ?>

Formulaire avec validation en HTML5

par RebootGG » 25 nov. 2015, 16:35

Bonjour, j'ai sur mon site un formulaire contact, validé par le navigateur en HTML5, dont voici le code :

Code : Tout sélectionner

<form method="post" action="index.php"> <!-- Nom + mail --> <div class="row uniform 50%"> <div class="6u 12u(mobilep)"> <input type="text" required placeholder="Nom" name="nom" /> </div> <div class="6u 12u(mobilep)"> <input type="email" required placeholder="Email valide" name="email" id="email" value=""/> </div> </div> <!-- Objet --> <div class="row uniform 50%"> <div class="12u"> <div class="select-wrapper"> <select name="objet" id="category"> <option value="">- Objet -</option> <option value="1">Demande de devis</option> <option value="1">Recrutement</option> <option value="1">Question</option> <option value="1">Autre</option> </select> </div> </div> </div> <div class="row uniform 50%"> <div class="6u 12u(narrower)"> <div class="g-recaptcha" data-sitekey="6Lcs7goTAAAAAJL9r-jkzVbN8_i1RJ8wqIhZXOla"></div> </div> <!-- Texte du message --> </div> <div class="row uniform 50%"> <div class="12u"> <textarea required placeholder="Entrez votre message" name="texte" id="message" rows="6"/></textarea> </div> </div> <div class="row uniform"> <div class="12u"> <ul class="actions"> <li><input id="submit" name="submit" type="submit" value="Envoyer"/></li> <li><input type="reset" value="Tout effacer" class="alt" /></li> </ul> </div> </div> </form>
Je bloque depuis ce matin 9h pour coder l'autre partie du problème, à savoir l'exécution en PHP . J'aimerais envoyer le mail sur mon adresse perso et afficher un message de validation à côté du bouton "Envoyer" et "Tout effacer". Sur une 3ème <li> par exemple

Voici mon fichier PHP, assez léger après une cinquantaine de tentatives différentes :

Code : Tout sélectionner

<?php $to = "[email protected]"; $date = date ("l, F jS, Y"); $time = date ("h:i A"); $from = 'De: $_REQUEST["email"]'; $nom = $_POST['nom']; $email= $_POST['email']; $objet = $_POST['objet']; $texte = $_POST['texte']; if ($_POST['submit']) { if (mail ($to, $objet, $email, $texte)) { echo 'Message envoyé'; else { echo 'BUG'; } } ?>
Quand j'insère ce code juste avant le <form>, la page renvoie une erreur 500.


Je suis à l'écoute de toute aide disponible,

En vous remerciant