A voir également:
- Installation d'un captcha obligatoire
- Obligatoire - Accueil - Maison
- Darkiworld inscription obligatoire - Guide
- Installation windows 10 sans compte microsoft - Guide
- Installation chromecast - Guide
- Installation clavier arabe - Télécharger - Divers Web & Internet
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