Installation d'un captcha obligatoire
Fermé
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
-
Modifié le 5 nov. 2018 à 22:36
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 5 nov. 2018 à 22:16
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 5 nov. 2018 à 22:16
A voir également:
- Installation d'un captcha obligatoire
- Installation chromecast - Guide
- Installation windows 10 sans compte microsoft - Guide
- Captcha invalide ✓ - Forum Mozilla Firefox
- Installation clavier arabe - Télécharger - Divers Web & Internet
- Comment saisir un code captcha ✓ - Forum Matériel & Système
4 réponses
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
5 nov. 2018 à 17:21
5 nov. 2018 à 17:21
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.
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
13
Modifié le 5 nov. 2018 à 20:40
Modifié le 5 nov. 2018 à 20:40
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
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
5 nov. 2018 à 20:43
5 nov. 2018 à 20:43
Donc... dans ce fichier, tu places au début du script
Puis, après avoir rempli ton formulaire tu regardes ce que ça t'affiche.
Là tu devrais y trouver le contenu de $_POST['g-recaptcha-response']
Et tu n'auras qu'à t'en servir dans un IF pour décider d'envoyer ou non le mail
print_r($_POST);
Puis, après avoir rempli ton formulaire tu regardes ce que ça t'affiche.
Là tu devrais y trouver le contenu de $_POST['g-recaptcha-response']
Et tu n'auras qu'à t'en servir dans un IF pour décider d'envoyer ou non le mail
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
5 nov. 2018 à 20:43
5 nov. 2018 à 20:43
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
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
13
Modifié le 5 nov. 2018 à 21:12
Modifié le 5 nov. 2018 à 21:12
Alors là c'est du chinois....
Je mets ça comme ça ?
Je mets ça comme ça ?
<?php print_r($_POST); $recipients = 'depaninf@sosdepaninformatique.com'; //$recipients = '#'; try {
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
13
>
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
5 nov. 2018 à 21:03
5 nov. 2018 à 21:03
Désolé je n'avais pas cliqué sur la flèche... Tu es toujours là ?
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
>
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
5 nov. 2018 à 21:12
5 nov. 2018 à 21:12
Oui
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
5 nov. 2018 à 21:39
5 nov. 2018 à 21:39
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.
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
5 nov. 2018 à 21:41
5 nov. 2018 à 21:41
Par contre, (petit pique méchant et gratuit au passage.... désolé....).. mais quand je vois que sur ton site tu proposes "Création de Sites Internet" ... rassures moi.. ce n'est pas toi qui t'en occupe hein ?
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
13
5 nov. 2018 à 21:44
5 nov. 2018 à 21:44
"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. "
D'accord mais je ne sais pas faire ça... pauvre de moi ;)
$_POST['g-recaptcha-response'] n'est pas vide via un if !empty
et en fonction... traiter la demande ou non. "
D'accord mais je ne sais pas faire ça... pauvre de moi ;)
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
13
>
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
5 nov. 2018 à 21:46
5 nov. 2018 à 21:46
Sisi c'est moi qui m'en occupe lol...j'achète un Template et je modifie mais je ne suis pas développeur. Mes clients ne s'en plaignent pas en tous cas. Pour celui-là c'est le mien il n'est pas si mal ;)
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
5 nov. 2018 à 21:47
5 nov. 2018 à 21:47
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'); }
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
13
5 nov. 2018 à 21:49
5 nov. 2018 à 21:49
Ne t'inquiète pas je ne suis pas susceptible.... mais je trouve que je me débrouille pas si mal pour un non-développeur hihi
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
5 nov. 2018 à 21:58
5 nov. 2018 à 21:58
Pardon.. c'est un empty qu'il faut utiliser et pas un !empty
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. }
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
13
5 nov. 2018 à 22:14
5 nov. 2018 à 22:14
Merci ça fonctionne !
Est il possible de supprimer le code que j'ai posté ? Il y a ma clé dedans entre autre...
Est il possible de supprimer le code que j'ai posté ? Il y a ma clé dedans entre autre...
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
>
depaninf
Messages postés
124
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
6 mars 2019
5 nov. 2018 à 22:16
5 nov. 2018 à 22:16
vérifie.. mais normalement il n'y a plus les infos critiques...
Modifié le 5 nov. 2018 à 22:16
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:
5 nov. 2018 à 19:48
5 nov. 2018 à 19:56
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 ! )
Modifié le 5 nov. 2018 à 20:23
5 nov. 2018 à 20:26
Donc le code php se trouve dans le fichier
bat/rd-mailform.php