Installation d'un captcha obligatoire
depaninf
Messages postés
154
Statut
Membre
-
jordane45 Messages postés 40050 Statut Modérateur -
jordane45 Messages postés 40050 Statut Modérateur -
Bonjour,
J'ai depuis quelques temps pas mal de spam provenant de la page contact de mon site. J'ai donc installé un captcha mais je n'ai pas réussi à le rendre obligatoire...
J'ai bien lu les instructions mais je n'y arrive pas...il me faudrait de l'aide pas à pas.
Entre les 2 balises head j'ai mis l'intégration côté client:
Et à l'endroit où je souhaite le captcha j'ai mis
L'intégration côté serveur manque mais je ne sais pas faire....
Quelqu'un peut il m'aider ? :)
Merci
J'ai depuis quelques temps pas mal de spam provenant de la page contact de mon site. J'ai donc installé un captcha mais je n'ai pas réussi à le rendre obligatoire...
J'ai bien lu les instructions mais je n'y arrive pas...il me faudrait de l'aide pas à pas.
Entre les 2 balises head j'ai mis l'intégration côté client:
<script src='https://www.google.com/recaptcha/api.js' async defer></script>
Et à l'endroit où je souhaite le captcha j'ai mis
<div class="g-recaptcha" data-sitekey="ma_clé_du_site"></div>
L'intégration côté serveur manque mais je ne sais pas faire....
Quelqu'un peut il m'aider ? :)
Merci
A voir également:
- Installation d'un captcha obligatoire
- Obligatoire - Accueil - Maison
- Installation windows 10 sans compte microsoft - Guide
- Installation clavier arabe - Télécharger - Divers Web & Internet
- Installation chromecast - Guide
- Tinder photo obligatoire - Accueil - Utilitaires
4 réponses
Bonjour,
Pour commencer, il faudrait nous montrer le code complet de ton formulaire.
Ensuite, le code PHP qui traite les données de ce formulaire.
Tu peux, au passage, faire un
au début de ton code PHP pour voir ce que recaptcha te retourne en cas de bonne ou mauvaise réponse.
Tu devrais avoir une variable du genre g-recaptcha-response.. c'est elle qui te permettra de savoir si l'utilisateur a validé ou non le captcha.
Pour commencer, il faudrait nous montrer le code complet de ton formulaire.
Ensuite, le code PHP qui traite les données de ce formulaire.
Tu peux, au passage, faire un
print_r($_POST);
au début de ton code PHP pour voir ce que recaptcha te retourne en cas de bonne ou mauvaise réponse.
Tu devrais avoir une variable du genre g-recaptcha-response.. c'est elle qui te permettra de savoir si l'utilisateur a validé ou non le captcha.
Alors le voilà :)
EDIT: Ajout de la coloration syntaxique
<?php $recipients = 'depaninf@sosdepaninformatique.com'; //$recipients = '#'; try { require './phpmailer/PHPMailerAutoload.php'; preg_match_all("/([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)/", $recipients, $addresses, PREG_OFFSET_CAPTURE); if (!count($addresses[0])) { die('MF001'); } if (preg_match('/^(127\.|192\.168\.)/', $_SERVER['REMOTE_ADDR'])) { die('MF002'); } $template = file_get_contents('rd-mailform.tpl'); if (isset($_POST['form-type'])) { switch ($_POST['form-type']){ case 'contact': $subject = 'Vous avez un message visiteur'; break; case 'subscribe': $subject = 'Subscribe request'; break; case 'order': $subject = 'Order request'; break; default: $subject = 'Vous avez un message visiteur'; break; } }else{ die('MF004'); } if (isset($_POST['email'])) { $template = str_replace( ["<!-- #{FromState} -->", "<!-- #{FromEmail} -->"], ["Email:", $_POST['email']], $template); }else{ die('MF003'); } if (isset($_POST['message'])) { $template = str_replace( ["<!-- #{MessageState} -->", "<!-- #{MessageDescription} -->"], ["Message:", $_POST['message']], $template); } preg_match("/(<!-- #{BeginInfo} -->)(.|\n)+(<!-- #{EndInfo} -->)/", $template, $tmp, PREG_OFFSET_CAPTURE); foreach ($_POST as $key => $value) { if ($key != "email" && $key != "message" && $key != "form-type" && !empty($value)){ $info = str_replace( ["<!-- #{BeginInfo} -->", "<!-- #{InfoState} -->", "<!-- #{InfoDescription} -->"], ["", ucfirst($key) . ':', $value], $tmp[0][0]); $template = str_replace("<!-- #{EndInfo} -->", $info, $template); } } $template = str_replace( ["<!-- #{Subject} -->", "<!-- #{SiteName} -->"], [$subject, $_SERVER['SERVER_NAME']], $template); $mail = new PHPMailer(); $mail->From = $_SERVER['SERVER_ADDR']; $mail->FromName = $_SERVER['SERVER_NAME']; foreach ($addresses[0] as $key => $value) { $mail->addAddress($value[0]); } $mail->CharSet = 'utf-8'; $mail->Subject = $subject; $mail->MsgHTML($template); if (isset($_FILES['attachment'])) { foreach ($_FILES['attachment']['error'] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $mail->AddAttachment($_FILES['attachment']['tmp_name'][$key], $_FILES['Attachment']['name'][$key]); } } } $mail->send(); die('MF000'); } catch (phpmailerException $e) { die('MF254'); } catch (Exception $e) { die('MF255'); } ?>
EDIT: Ajout de la coloration syntaxique
NB: Pour poster ton code sur le forum, pense à indiquer le LANGAGE dans les balises de code afin d'avoir la coloration syntaxique.
Explications données ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Explications données ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
L'erreur est liée au fait que ton formulaire est appelé en Ajax et que le print_r affiche des infos qui ne sont pas encodées en JSON
En regardant dans la CONSOLE du navigateur on voit bien que le print_r retourne les informations attendues.. à savoir
Comme tu peux le voir, il existe bien une variable g-recaptcha-response
et lorsqu'on ne coche pas le captcha on obtient :
Donc.. comme je te le disais.. il suffit, dans ton code PHP de vérifier que la variable
$_POST['g-recaptcha-response'] n'est pas vide via un if !empty
et en fonction... traiter la demande ou non.
En regardant dans la CONSOLE du navigateur on voit bien que le print_r retourne les informations attendues.. à savoir
Array ( [form-type] => contact [name] => aa [email] => test@gg.com [phone] => 0123456789 [message] => azaz [g-recaptcha-response] => 03AMGVjXg4dKjinxK16Hi2MEhi-NfDiMQNdq8E4ZCFcey5ZlS_WeibJj0QgSH0W5evzZ1Me4xaAhPmVN1tH1UzNIQ5aLb_7etUOR8anqimg3fdMX83okoQKjQUKAlxyykZdfUh0oc-I-jYkNmkZSrOKmUsbpvugYEf7ERW7K2-YbtK9hfG9y7rSENukCrsD3nBUYLmIVJwwwMwNcQEYBSDB1EvqM9UJCYVh5lVNYJkn3AZ8T7RNdPHzTgw8iAeergJ7f5seoes3WR-b0cPswch7_hqmurVNdFxbajgNV68Xi7SbI5ApvKBErc ) MF000
Comme tu peux le voir, il existe bien une variable g-recaptcha-response
et lorsqu'on ne coche pas le captcha on obtient :
Array ( [form-type] => contact [name] => aaa [email] => gg@test.com [phone] => 0123456789 [message] => test [g-recaptcha-response] => )
Donc.. comme je te le disais.. il suffit, dans ton code PHP de vérifier que la variable
$_POST['g-recaptcha-response'] n'est pas vide via un if !empty
et en fonction... traiter la demande ou non.
Tu sais chercher sur internet ? car bon... je t'ai donné toutes les indications !
Faire un IF
utiliser !empty ..
Bref :
Faire un IF
utiliser !empty ..
Bref :
if (!empty($_POST['g-recaptcha-response'])) { die('MF001'); // ou n'importe quel autre code... je n'ai pas regardé à quoi ils servent dans ton cas. } if (!count($addresses[0])) { die('MF001'); }
Je n'ai pas compris comment faire le alors je te poste le code complet de la page.
Côté PHP je n'ai aucune ligne avec une variable du genre g-recaptcha-response. J'ai un dossier bat avec dedans rd-mailform.php et un dossier phpmailer, dans le dossier phpmailer j'ai 4 fichiers php: class.phpmailer ; class.pop3 ; class.smtp et PHPMailerAutoload.
Lequel dois-je te poster ?
Merci encore pour ton aide !
Voici le code de la page HTML:
Quel est le code de ton formulaire html ?
As tu codé le site toi même ou passes tu par un cms genre wordpress ? (car si c'est un cms...il est utile de le préciser ! )
Donc le code php se trouve dans le fichier
bat/rd-mailform.php