8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,
Je post ici afin d'avoir un avis sur l'implémentation de mon pot de miel à mon formulaire contact. N'ayant aucune notion de développement j'ai simplement essayé d’appliquer les instructions glanées de ci de là.
coté html:

<form method="post" id="form_contact" action="">
        <?php
            if(isset($msg)){
                echo $msg;
            }
        ?>
        <div>
            <label class="label_email" for="email">E-MAIL*</label>
            <input style="" name="email" type="email" value="<?php if(isset($_POST['email'])){echo $_POST['email'];} ?>" required/>
        </div>
        <div id="phone">
            <label class="label_phone" for="phone">PHONE</label>
            <input name="phone" type="text" autocomplete="off" value="<?php if(isset($_POST['phone'])){echo $_POST['phone'];}?>"/>
        </div>
        <div>
            <label class="label_subject" for="subject">SUBJECT</label>
            <input name="subject" type="text" value="<?php if(isset($_POST['subject'])){echo $_POST['subject'];}?>"/>
        </div>
        <div>
            <textarea role="textbox" name="message" placeholder="Message*..." minlength="21" <?php if(isset($_POST['message'])){echo $_POST['message'];} ?> required></textarea>
        </div>
        <p style="text-align:left;margin-top:2pt;color:red">* required</p>
        <div id="conditions">
            <label id="main">&emsp;&emsp;By checking this box, you accept all the terms and conditions.
                <input type="checkbox" name="checkbox" value="<?php if(isset($_POST['checkbox'])){echo $_POST['checkbox'];}?>"/>
                <span class="accept"></span>
            </label>
        </div>
        <div class="button">
            <button class="button-design" name="send" type="submit">SUBMIT !</button>
        </div>
    </form>


Coté css:

#phone{
  display:none;
}


et enfin le php:

<?php
if(isset($_POST['send'])){
     if (isset($_POST["phone"])) {
            die();
        }else{
    if(empty($_POST['email'])){
        echo '<script>alert("empty field!")</script>';
    }else{
        if(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,}$#i",$_POST['email'])){
            echo '<script>alert("incorrect email address!")</script>';
        }else{
            if(empty($_POST['message'])){
                echo '<script>alert("empty field!")</script>';
            }else{
                if(isset($_POST['checkbox'])){
                    if(!empty($_POST['email']) AND !empty($_POST['subject']) AND !empty($_POST['message'])){
                        $header="MIME-Version: 1.0\r\n";
                        $header.='From:"xxx.com"<xxx@xxx.com>'."\n";
                        $header.='Content-Type:text/html; charset="uft-8"'."\n";
                        $header.='Content-Transfer-Encoding: 8bit';
                        $message='
                        <html>
                            <body>
                                <div align="left">
                                    <u style="color:#fdb5c5">SENDER EMAIL:</u>'.$_POST['email'].'<br />
                                    <u style="color:#fdb5c5">PHONE:</u>'.$_POST['phone'].'<br />
                                    <u style="color:#fdb5c5">SUBJECT:</u>'.$_POST['subject'].'<br />
                                    <u style="color:#fdb5c5">CGU:</u> ACCEPTÉES<br />
                                    <br />
                                    '.nl2br($_POST['message']).'
                                </div>
                            </body>
                        </html>
                        ';
                        mail("xxx@xxx.com", "CONTACT - xxx.com", $message, $header);
                        mail("xxx@xxx.com", "CONTACT - xxx.com", $message, $header);
                        $msg='<p id="msg-sent">Your message has been sent!</p>';
                    }else{
                        $msg='<p style="color:red;margin-top:1rem;">An error has occured, please try again.</p>';
                    }
                }else{
                    echo '<script>alert("You have to accept the conditions")</script>';
                }
            }
       }    
        }
    }
}
?>

En gros, si le champs phone (masqué) est remplit, alors l'envoi de l'e-mail ne se fait pas.

Merci d'avance Smiley smile .
Modifié par westman (22 Oct 2022 - 13:29)
Modérateur
Salut,

Le principe et la mais j'ai juste deux questions / remarques :

- Un display none fonctionne ? Il sera rempli par un bot ? Ou il faut le mettre en opacity 0 et le virer en fixed par exemple. Parfois le display none est trop violent

- Je pense que tu peux virer le
<?php if(isset($_POST['phone'])){echo $_POST['phone'];}?>
de la value du champ et aussi le
<u style="color:#fdb5c5">PHONE:</u>'.$_POST['phone'].'<br />
de l'email vu qu'il ne sera jamais rempli.

Bonne aprem
Modifié par _laurent (23 Oct 2022 - 17:44)
Bonjour, merci de votre réponse Smiley smile .

- Oui, le
display:none
fonctionne bien. Je reçois actuellement des e-mails de bots où le champs est remplit, alors qu'invisible sur le formulaire.

- J'avais indiqué le champs afin de tester sans le php
die()
que je maitrise pas. Comme ça, si je reçois un mail avec le champ remplit, c'est un bot. Et si le champs est vide alors j'ai bien affaire à un humain. Et depuis la mise en place de ce code, j'ai pu valider la détection de robots.
Si je vire
<?php if(isset($_POST['phone'])){echo $_POST['phone'];}?>
, comment appliquer la fonction die() sur le champ? Je ne vais pas pouvoir récupérer cet input dans le code php?
Modérateur
Alors en fait dans
<input name="phone" type="text" autocomplete="off" value="<?php if(isset($_POST['phone'])){echo $_POST['phone'];}?>"/>

le
<?php if(isset($_POST['phone'])){echo $_POST['phone'];}?>

ne sert qu'a préremplir le champ s'il a déjà été rempli et que lors de l'envoi la validation ne se fait pas et la page se recharge. Imagine remplir le formulaire, oublier de remplir un champs et au moment de valider la page se recharge (validation via php et non js) avec l'erreur "vous avez oublié un champ" et tout le formulaire vidé. Et bien cette ligne récupère les infos déjà entrées et envoyée (avant validation) pour les remettre dans la value du champs et ne pas la perdre.

"if isset phone then echo phone" donc traduit littéralement c'est "si j'avait rempli phone alors j'écris la valeur de phone" (dans la value du input)

Donc ici j'imagine que ca sert pas beaucoup. Ca ne change rien au fait que la valeur soit envoyée pour vérification/envoie.
Modifié par _laurent (23 Oct 2022 - 17:46)
Merci de ces explications Smiley smile .
Donc hormis ce bout de code en trop, tout est bon?
Modifié par westman (23 Oct 2022 - 18:15)
connecté
Modérateur
westman a écrit :
Merci de ces explications Smiley smile .
Donc hormis ce bout de code en trop, tout est bon?


Salut,

Ton expression régulière est incomplète et, de ce fait, rend contraignant la saisie.

<?php
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
    echo $email.'<br>';
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
}else{
    var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));   
}
?> 
Bonsoir,
Que fait ce code exactement?
je suis vraiment ignare désolé... Il est à placer dans le php du form de ma page html?
Salut,

dans ton code tu utilises une expression régulière pour vérifier que l'adresse mail est valide :

if(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,}$#i",$_POST['email'])){
            echo '<script>alert("incorrect email address!")</script>';


Déjà qu'en si connaissant un peu c'est plus ou moins pénible à lire, alors en débutant .. je te recommande pas forcement tant que ça.

Il te suggère donc d'utiliser les fonctionnalités de filtre à la place de ton expression régulière pour avoir une solution plus lisible, et qui sera automatiquement mis à jour lorsque les règles de filtrage d'un mail évolueront.