impossible de faire fonctionner mon captcha de façon correcte
Posté : 30 déc. 2021, 09:31
bonjour a tous
je pensais avoir fini mon site
Mais je suis ennuyé par de petits malins robots qui m envoie des spams dans mon formulaire de contact
je dois donc intervenir et y placer un captcha
je viens de trouver un tuto a cette page qui me plais bien
https://palmi.smileandjoke.fr/php-captc ... eponses-29
Mais le soucis que je rencontre est que je rentre un bon ou un mauvais captcha le formulaire est envoyé
Lorsque je rentre la bonne réponse pour le capcha mes var_dump donne ceci
array(2) { ["msg"]=> NULL ["answer"]=> string(5) "lundi" } array(6) { ["name"]=> string(3) "aqw" ["email"]=> string(10) "[email protected]" ["subject"]=> string(2) "dx" ["messager"]=> string(2) "dx" ["captcha"]=> string(5) "lundi" ["send"]=> string(8) "Envoyer " }
Lorsque je rentre la mauvaise réponse pour le capcha mes var_dump donne ceci
array(2) { ["msg"]=> string(21) "Captcha non valide..." ["answer"]=> string(5) "mardi" } array(0) { }
voici mon du formulaire
et pour le traitement
je pensais avoir fini mon site
Mais je suis ennuyé par de petits malins robots qui m envoie des spams dans mon formulaire de contact
je dois donc intervenir et y placer un captcha
je viens de trouver un tuto a cette page qui me plais bien
https://palmi.smileandjoke.fr/php-captc ... eponses-29
Mais le soucis que je rencontre est que je rentre un bon ou un mauvais captcha le formulaire est envoyé
Lorsque je rentre la bonne réponse pour le capcha mes var_dump donne ceci
array(2) { ["msg"]=> NULL ["answer"]=> string(5) "lundi" } array(6) { ["name"]=> string(3) "aqw" ["email"]=> string(10) "[email protected]" ["subject"]=> string(2) "dx" ["messager"]=> string(2) "dx" ["captcha"]=> string(5) "lundi" ["send"]=> string(8) "Envoyer " }
Lorsque je rentre la mauvaise réponse pour le capcha mes var_dump donne ceci
array(2) { ["msg"]=> string(21) "Captcha non valide..." ["answer"]=> string(5) "mardi" } array(0) { }
voici mon du formulaire
Code : Tout sélectionner
<?php
// Démarrage de session
session_start();
//on affiche les erreurs
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
var_dump($_SESSION);
var_dump($_POST);
//ou avec !EMPTY()
//Si la variable $_POST['truc'] existe et n'est pas vide, alors $truc = $_POST['truc'] sinon elle vaut NULL
$_SESSION['msg']= !empty($_SESSION['msg']) ? $_SESSION['msg'] : NULL;
// Tableau avec les différentes questions/réponses pour notre captcha
$quiz = [
0 => [
'question' => 'Quel est le premier jour de la semaine?',
'answer' => 'lundi'
],
1 => [
'question' => 'Quel est le deuxième jour de la semaine?',
'answer' => 'mardi'
],
2 => [
'question' => 'Quel est le troisième jour de la semaine?',
'answer' => 'mercredi'
],
];
// On utilise array_rand pour avoir un id aléatoire de notre tableau
$id = array_rand($quiz);
// On utilise l'id donné par array_rand pour pouvoir stocker la bonne réponse dans $_SESSION['reponse']
$_SESSION['answer'] = $quiz[$id]['answer'];
//Var_dump ($_SESSION['answer']);
//Var_dump ($_SESSION['msg']);
// On stock la question dans une variable toujours via l'id donné par array_rand
$question = $quiz[$id]['question'];
?>
<!doctype html>
<html lang="fr">
<!-- debut head -->
<head>
<?php include("./include/head.php"); ?>
<!-- deux scripts tarteaucitron le deuxiem est celui qui devrait etres mis en dur dans chque page-->
<script src="/tarteaucitron/tarteaucitron.js"></script>
<script src="/js/tartecitron-peche-perle2.js"></script>
<title>Formulaire de contat pour la pêche à la perle</title>
<link rel="shortcut icon" href="https://phil.pecheperle.be/image/la-peche-a-la-perle.ico" type="image/x-icon"/>
<meta name="description" content="Une question ,un renseignement sur la pêche a la perle du gardon?utilises le formulaire de contact ">
<link rel="stylesheet" type="text/css" href="/css/banniere-menu-peche-perle.css"/>
<link rel="stylesheet" type="text/css" href="/css/contact-peche-perle.css"/>
</head>
<!-- fin head -->
<!-- debut body -->
<body style="background-color:#cec1c1;" onLoad="document.getElementById('attente').style.display='none'">
<div class="container" style="background-color:#87CEEB;">
<!-- debut container entete-->
<div class="container" style=" max-width: 100%;margin:auto;">
<?php include("./include/baniere-peche-perle.php"); ?>
<?php include("./include/menu3.php"); ?>
</div>
<!-- id attende chargement page -->
<div id='attente'>
<p style="text-align: center;font-size: 24px;">Veuillez patienter svp la page est en cours de chargement ...</p>
</div>
<!-- debut body -->
<body>
<!-- debut container page -->
<div class="container1 border border-dark" style="padding: 15px;background: #ECE9E7;">
<!-- debut formulaire-->
<form id="form" enctype="multipart/form-data" action="traitement-formulaire-test.php" onsubmit="return validate()" method="post" style="background: #ECE9E7;">
<h1>Formulaire de contact</h1>
<div class="form-group">
<label for="name">Nom:<span>*</span></label>
<input type="text" id="name" name="name" class="form-control" placeholder="Nom" required>
</div>
<div class="form-group">
<label for="email">Email:<span>*</span></label>
<input type="email" class="form-control" id="email" name="email" placeholder="Email">
<label for="email">Email</label>
</div>
<div class="form-group">
<label for="subject">Sujet:</label>
<input type="text" id="subject" name="subject" class="form-control" placeholder="Demande de renseignement">
</div>
<div class="form-group">
<label for="messager">Le message</label>
<textarea name="messager" class="form-control" id="messager" rows="3" placeholder="Message..." required></textarea>
</div>
<!-- debut traitemnt captcha -->
<h3>Captcha</h3>
<!-- la question récupérée -->
<div><?= $question ?></div>
<!-- retour éventuel renvoyé par la page de traitement -->
<div><?= $_SESSION['msg'] ?></div>
<div>
<label for="">captcha</label>
<input type="text" name="captcha">
</div>
<input type="submit" name="send" value="Envoyer "/>
</form>
</div>
<div class="container" style=" max-width: 100%;margin:auto;">
<!-- debut pied de page-->
<?php include("./include/pied-de-page.php"); ?>
<?php include("./include/footer.php"); ?>
</div>
</div>
</body>
<!-- fin du body-->
</html>Code : Tout sélectionner
<?php
<?php
// Démarrage de session
session_start();
//on affiche les erreurs
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
var_dump($_SESSION);
var_dump($_POST);
// phase du captcha
// Si la reponse de l'input captcha n'est pas vide
//var_dump($_POST['captcha']);
if(!empty($_POST['captcha'])){
// On stock la reponse dans une variable en faisant une éventuelle conversion des majuscules en minuscule
$userAnswer = strtolower($_POST['captcha']);
// Si on envoi le formulaire
if(isset($_POST['send'])){
//var_dump($_POST['send']);
// On compare la réponse stocké dans la session avec la réponse de l'utilisateur
if($_SESSION['answer'] == $userAnswer){
var_dump($_SESSION['answer']);
// Ici on stock dans session le message ok, mais on peut par exemple lancer le traitement d'un message en bdd ou d'un email.
$_SESSION['msg'] = 'ok';
// Si la réponse n'est pas bonne
}else{
// On envoi ici un message si la réponse n'est pas identique
$_SESSION['msg'] = 'Captcha non valide...';
// Qu'on soit dans le if ou le else, on renvoit l'utilisateur sur le formulaire
header('Location: https://phil.pecheperle.be/testcontact.php');
}
}
// else pour pour le premier if, si $_POST['captcha'] est vide (à l'arrivée sur la page par exemple), on ne passe aucun message a l'utilisateur et on redirige sur index
}else{
$_SESSION['msg'] = '';
header('Location: https://phil.pecheperle.be/testcontact.php');
}
//on continue le reste du traitement enregistrement base de donnee +envois par mail
if (!empty($_POST["send"]))
{
//Si les variable $_POST existent et ne sont pas vide, on récupère la valeur, sinon je mets la variable $nom à NULL
$name = !empty($_POST['name']) ? $_POST['name'] : NULL;
$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
$subject = !empty($_POST['subject']) ? $_POST['subject'] : NULL;
$messager = !empty($_POST['messager']) ? $_POST['messager'] : NULL;
// les variables sont pretes a etres utilisees
$name = $_POST["name"];
$email = $_POST["email"];
$subject = $_POST["subject"];
$messager = $_POST["messager"];
// connexion base de donnee
include ('base.php');
//préparation de la requête et des variables
$sql = "INSERT INTO contact (name, email,subject, message) VALUES(?, ?, ?, ?)";
$datas = array($name,$email,$subject,$messager );
//Execution de la requete
try
{
$requete = $bdd->prepare($sql);
$requete->execute($datas);
}
catch(Exception $e)
{
// en cas d'erreur :
echo " Erreur ! " . $e->getMessage();
echo " Les datas : ";
print_r($datas);
}
//on teste pour voir si tout est ok
if ($requete)
{
$db_msg = "Vos informations de contact sont enregistrées avec succés.";
$type_db_msg = "success";
//header("location:reponses-formulaire.php");je laisse en suspend le temps des tests
}
else
{
$db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
$type_db_msg = "error";
}
}
//fin de la transmission des donnees dans la table
//l'envoie du mail
if (!empty($_POST["send"]))
{
$messager = $_POST["messager"];
$name = $_POST["name"];
$subject = $_POST["subject"];
$email = $_POST["email"];
// on entre un ou Plusieurs destinataires
$to = '[email protected]'; // notez la virgule
// Sujet
//$subject= "une reussite";
// message
$message = '
<html>
<head>
<title>Voici les reponses au sondage</title>
</head>
<body>
<p>Voici le formulaire de contact</p>
<tr>
<td>le prenom </td><td>' . $name . '</td></br>
</tr>
<tr>
<td>l adresse mail </td><td>' . $email . '</td></br>
</tr>
<tr>
<td>le prenom </td><td>' . $subject . '</td></br>
</tr>
<tr>
<td>le textera </td><td>' . $messager . '</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: ' . $name . "\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 />";
}
}