problème sur validation et envoi d'un formulaire

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 : problème sur validation et envoi d'un formulaire

Re: problème sur validation et envoi d'un formulaire

par Megadeth » 18 nov. 2014, 13:19

Slt,

Pense à cliquer sur le bouton RESOLU.

Mega
;)

Re: problème sur validation et envoi d'un formulaire

par fannyp » 18 nov. 2014, 12:01

Merci tout est ok :)

Re: problème sur validation et envoi d'un formulaire

par fannyp » 17 nov. 2014, 12:22

Bonjour Nestecha,

merci beaucoup cela a l'air de fonctionner, mis à part ceci:

- quand je teste la page avec ton nouveau code, j'ai un array(0) { } en haut de page
- et quand j'envoie sans les conditions cochées j'ai array(8) { ["nom"]=> string(1) "f" ["email"]=> string(1) "f" ["tel"]=> string(1) "f" ["date"]=> string(1) "f" ["taille"]=> string(1) "f" ["poids"]=> string(1) "f" ["message"]=> string(1) "f" ["submit"]=> string(7) "Envoyer" }
- quand tout est coché j'ai bien bien le message envoyé mais toujours array(9) { ["nom"]=> string(1) "f" ["email"]=> string(1) "f" ["tel"]=> string(1) "f" ["date"]=> string(1) "f" ["taille"]=> string(1) "f" ["poids"]=> string(1) "f" ["message"]=> string(1) "f" ["utilisateur_accepte_condition"]=> string(5) "check" ["submit"]=> string(7) "Envoyer" }

merci pour ton aide

Re: problème sur validation et envoi d'un formulaire

par Nestecha » 14 nov. 2014, 22:28

Voilà ton code modifié pour qu'il soit "fonctionnel" pour ce dont tu as parlé. Au début tu demandais au programme si une variable qui n'existe pas ($utilisateur_accepte_condition) était vide ou non, donc bug, puis ligne 81 aussi, sur deux variables non existantes ($submit en plus) et même si ce n'est pas le propos ici, <font> est dépréciée et n'est plus utilisée. Je l'ai remplacée par <p>.

Maintenant, fais attention aux required. Je n'ai pas safari, mais j'ai Chrome, et en appuyant sur F12 on peut simplement supprimer le required de l'input qu'on veut laisser vide (ou non coché comme j'ai dû le faire ici). Donc tu dois absolument faire des vérifications en PHP sur tes inputs texts aussi. Ici, après la ligne 5 tu dois émettre une autre condition : si $_POST['nom'] n'est pas vide, et qu'il n'est constitué que de lettres, et si $_POST['email'] n'est pas vide et est bien un email etc... alors on va envoyer le mail.
<?php
// S'il y des données de postées
var_dump($_POST);

if(isset($_POST['utilisateur_accepte_condition']) && ($_SERVER['REQUEST_METHOD']=='POST')) {

// (1) Code PHP pour traiter l'envoi de l'email

// Récupération des variables et sécurisation des données
    $nom = htmlentities($_POST['nom']); // htmlentities() convertit des caractères "spéciaux" en équivalent HTML
    $email = htmlentities($_POST['email']);
    $tel = htmlentities($_POST['tel']);
    $date = htmlentities($_POST['date']);
    $taille = htmlentities($_POST['taille']);
    $poids = htmlentities($_POST['poids']);
    $message = htmlentities($_POST['message']);
    $utilisateur_accepte_condition = htmlentities($_POST['utilisateur_accepte_condition']);


// Variables concernant l'email

    $destinataire = '[email protected]'; // Adresse email du webmaster (à personnaliser)
    $sujet = 'Message depuis le site web'; // Titre de l'email
    $contenu = '<html><head><title>Titre du message</title></head><body>';
    $contenu .= '<p>Bonjour, vous avez reçu un message à partir de votre site web.</p>';
    $contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
    $contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
    $contenu .= '<p><strong>Tel</strong>: '.$tel.'</p>';
    $contenu .= '<p><strong>date</strong>: '.$date.'</p>';
    $contenu .= '<p><strong>taille</strong>: '.$taille.'</p>';
    $contenu .= '<p><strong>poids</strong>: '.$poids.'</p>';
    $contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
    $contenu .= '<p><strong>utilisateur_accepte_condition</strong>: '.$utilisateur_accepte_condition.'</p>';
    $contenu .= '</body></html>'; // Contenu du message de l'email (en XHTML)

// Pour envoyer un email HTML, l'en-tête Content-type doit être défini
    $headers = 'MIME-Version: 1.0'."\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";

// Envoyer l'email
    mail($destinataire, $sujet, $contenu, $headers); // Fonction principale qui envoi l'email
    echo '<h2>Message envoyé!</h2>'; // Afficher un message pour indiquer que le message a été envoyé
// (2) Fin du code pour traiter l'envoi de l'email
}
?>

<!DOCTYPE html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width" />
    <title>test</title>


</head>

<h1>Réservation</h1>


<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

    <p>Votre nom et prénom <span style="color:#ff0000;">*</span>: <br>
        <input type="text" name="nom" size="30" required/></p>
    <p>Votre email <span style="color:#ff0000;">*</span>: <br>
        <input type="text" name="email" size="30" required/></p>
    <p>Votre numéro de téléphone <span style="color:#ff0000;">*</span>: <br>
        <input type="text" name="tel" size="30" required/></p>
    <p>Votre date de naissance au format jj/mm/année<span style="color:#ff0000;">*</span>: <br>
        <input type="text" name="date" size="30"required/></p>
    <p>Votre taille au format 1,70m<span style="color:#ff0000;">*</span>: <br>
        <input type="text" name="taille" size="30" required/></p>
    <p>Votre poids en kg<span style="color:#ff0000;">*</span>: <br>
        <input type="text" name="poids" size="30" required/></p>


    <p>Message et prestation commandée <span style="color:#ff0000;">*</span>:<br>
        <textarea name="message" cols="30" rows="10" required></textarea></p><br>


    <?php
    if (isset($_POST['submit']))
    {
        if (!isset($_POST['utilisateur_accepte_condition'])) {
            echo "<p color='#FF0000'>";
            echo "Vous devez accepter les CGV";
            echo "</p>";
            echo "<BR>";
        }
    }
    ?>
    <p>J'ai lu et j'accepte les <a href="conditions-generales.php" style="color:#0066FF;" target="_blank">conditions générales de vente</a><span id="span_utilisateur_accepte_condition" style="color:#ff0000;">*</span><input type="checkbox" name="utilisateur_accepte_condition" id="form_exercice_javascript_utilisateur_accepte_condition" value="check" required/>
    </p><br>

    <p><input type="submit" name="submit" value="Envoyer" /></p>
</form>


</body>
</html>

Re: problème sur validation et envoi d'un formulaire

par Megadeth » 14 nov. 2014, 17:56

Perso je teste plus de cette façon :

si le bouton a été cliqué
si la valeur existe

if(isset($_POST["utilisateur_accepte_condition"]) && isset($_POST["nomdetonboutonquideclenchelesubmit"])) { //je vois submit comme name y'a p'tet un conflit c'est peut être un terme réservé, essaie de lui mettre un id, un name du style = "toto"

Mega
;)

Re: problème sur validation et envoi d'un formulaire

par fannyp » 14 nov. 2014, 17:44

Hello Mega

Merci pour ta réponse, mais je ne suis pas sûre de saisir.

Pour moi "utilisateur_accepte_condition" existe puisque quand je vire le ($utilisateur_accepte_condition <> "") cela me renvoie bien l'info par mail, coché ou non.

Ou alors je suis une b*$!% et je capte plus rien, ce qui est possible aussi... ;)

merci

Re: problème sur validation et envoi d'un formulaire

par Megadeth » 14 nov. 2014, 17:22

Salut,

Teste si $_POST["utilisateur_accepte_condition"] existe.

Mega
;)

problème sur validation et envoi d'un formulaire

par fannyp » 14 nov. 2014, 15:34

Bonjour,

J'ai fait un formulaire de réservation, qui m'envoie bien les infos récupérées.
or je dois rendre obligatoire la validation des CGV et bloquer l'envoi du mail si ces CGV ne sont pas cochées.
Avec l'attribut "required" aucun pb sur la plupart des mobiles et navigateurs, mais sur safari et ios safari, cela ne fonctionne pas.

j'essaie donc d'ajouter une condition en php des le début mais cela bloque tout // ou envoie le message meme sans les CGV cochées.

merci pour votre aide.

Voici mon code, tout est sur la meme page :

<?php
// S'il y des données de postées


if(($utilisateur_accepte_condition <> "") && ($_SERVER['REQUEST_METHOD']=='POST')){


// (1) Code PHP pour traiter l'envoi de l'email

// Récupération des variables et sécurisation des données
$nom = htmlentities($_POST['nom']); // htmlentities() convertit des caractères "spéciaux" en équivalent HTML
$email = htmlentities($_POST['email']);
$tel = htmlentities($_POST['tel']);
$date = htmlentities($_POST['date']);
$taille = htmlentities($_POST['taille']);
$poids = htmlentities($_POST['poids']);
$message = htmlentities($_POST['message']);
$utilisateur_accepte_condition = htmlentities($_POST['utilisateur_accepte_condition']);


// Variables concernant l'email

$destinataire = '[email protected]'; // Adresse email du webmaster (à personnaliser)
$sujet = 'Message depuis le site web'; // Titre de l'email
$contenu = '<html><head><title>Titre du message</title></head><body>';
$contenu .= '<p>Bonjour, vous avez reçu un message à partir de votre site web.</p>';
$contenu .= '<p><strong>Nom</strong>: '.$nom.'</p>';
$contenu .= '<p><strong>Email</strong>: '.$email.'</p>';
$contenu .= '<p><strong>Tel</strong>: '.$tel.'</p>';
$contenu .= '<p><strong>date</strong>: '.$date.'</p>';
$contenu .= '<p><strong>taille</strong>: '.$taille.'</p>';
$contenu .= '<p><strong>poids</strong>: '.$poids.'</p>';
$contenu .= '<p><strong>Message</strong>: '.$message.'</p>';
$contenu .= '<p><strong>utilisateur_accepte_condition</strong>: '.$utilisateur_accepte_condition.'</p>';
$contenu .= '</body></html>'; // Contenu du message de l'email (en XHTML)

// Pour envoyer un email HTML, l'en-tête Content-type doit être défini
$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";

// Envoyer l'email
mail($destinataire, $sujet, $contenu, $headers); // Fonction principale qui envoi l'email
echo '<h2>Message envoyé!</h2>'; // Afficher un message pour indiquer que le message a été envoyé
// (2) Fin du code pour traiter l'envoi de l'email
}
?>

<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width" />
<title>test</title>


</head>

<h1>Réservation</h1>


<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

<p>Votre nom et prénom <span style="color:#ff0000;">*</span>: <br>
<input type="text" name="nom" size="30" required/></p>
<p>Votre email <span style="color:#ff0000;">*</span>: <br>
<input type="text" name="email" size="30" required/></p>
<p>Votre numéro de téléphone <span style="color:#ff0000;">*</span>: <br>
<input type="text" name="tel" size="30" required/></p>
<p>Votre date de naissance au format jj/mm/année<span style="color:#ff0000;">*</span>: <br>
<input type="text" name="date" size="30"required/></p>
<p>Votre taille au format 1,70m<span style="color:#ff0000;">*</span>: <br>
<input type="text" name="taille" size="30" required/></p>
<p>Votre poids en kg<span style="color:#ff0000;">*</span>: <br>
<input type="text" name="poids" size="30" required/></p>


<p>Message et prestation commandée <span style="color:#ff0000;">*</span>:<br>
<textarea name="message" cols="30" rows="10" required></textarea></p><br>


<?
if (($utilisateur_accepte_condition == "") && ($submit == ""))
{
echo "<font color='#FF0000'>";
echo "Vous devez accepter les CGV";
echo "</font>";
echo "<BR>";
}
?>
<p>J'ai lu et j'accepte les <a href="conditions-generales.php" style="color:#0066FF;" target="_blank">conditions générales de vente</a><span id="span_utilisateur_accepte_condition" style="color:#ff0000;">*</span><input type="checkbox" name="utilisateur_accepte_condition" id="form_exercice_javascript_utilisateur_accepte_condition" value="check" required/>
</p><br>

<p><input type="submit" name="submit" value="Envoyer" /></p>
</form>


</body>
</html>