2017-06-09 1 views
0

J'essaie de mettre en œuvre google captcha v2 sur un site web qui reçoit beaucoup de spam. Le captcha est en train de montrer et de travailler, mais le formulaire peut être soumis sans appuyer sur le captcha. J'ai cherché des questions similaires mais je n'ai pas trouvé de réponse qui m'aiderait.Formulaire Soumettre sans captcha

Il est le captcha de google V2

Forme:

<form action="mailer.php" method="post" onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript" name="FrontPage_Form1" enctype="multipart/form-data"> 
<input type="text" class="col-md-13 col-xs-12 name" name='name' placeholder='Name *'/> 
<input type="text" class="col-md-13 col-xs-12 Email" name='Email' placeholder='Email *'/> 
<input type="text" class="col-md-12 col-xs-12 Subject" name='Subject' placeholder='Subject'/> 
<textarea type="text" class="col-md-12 col-xs-12 Message" name='Message' placeholder='Message *'></textarea> 
<br> 

<div class="captcha_wrapper col-md-12" style="margin-bottom: 10px;"> 

    <div class="g-recaptcha" data-sitekey="6Ld-ryQUAAAAAJSKzJubdxYjigpiTfhk11e1P7o9"> 
    </div> 

</div> 

mailer.php:

if ($_SERVER['REQUEST_METHOD'] == "POST") { 
foreach ($_POST as $key => $value) { 
    $msg .= ucfirst ($key) ." : ". $value . "\n"; 
} 
} 
else { 

foreach ($_GET as $key => $value) { 

    $msg .= ucfirst ($key) ." : ". $value . "\n"; 

} 
} 

//captcha section 

$response = $_POST["g-recaptcha-response"]; 


$url = 'https://www.google.com/recaptcha/api/siteverify'; 

$data = array(
    'secret' => '6Ld-ryQUAAAAALpIkTPN82doQhCFmiWrC14_UbYk', 
    'response' => $_POST['g-recaptcha-response']; 
); 
$options = array(
    'http' => array (
     'method' => 'POST', 
     'content' => http_build_query($data) 
    ) 
); 
$context = stream_context_create($options); 
$verify = file_get_contents($url, false, $context); 
$captcha_success=json_decode($verify); 

//end of captcha section 

mail($to, $subject, $msg, $headers); 

if ($forward == 1) { 
header ("Location:$location"); 
} 
else { 
include("index.html"); 
header('Location: ') ; 
} 

`

Merci. Toute aide est appréciée

Je sens que je dois mettre le code captcha intérieur si (isset())

+0

Vérifiez votre valeur '$ captcha_success'. –

+0

J'ai eu ce \t si (captcha_success- $> succès == false) { \t \t echo "

Vous êtes un bot Allez-vous

!"; \t} else if ($ captcha_success-> success == true) { \t \t echo "

Vous n'êtes pas un robot!

"; \t} mais il serait toujours revenir « Vous êtes un bot » puis toujours envoyer un e-mail – Sam

Répondre

0

Imprimer les valeurs captcha_success de $ afin de vérifier ce qui est à l'intérieur captcha_success de $ et comprendre comment gérer la réponse . Ensuite, vous pouvez rediriger la navigation correctement.

var_dump ($ captcha_success); // pour vider les valeurs vers la page Web error_log (print_r ($ captcha_success, true), 0); // pour vider vers le php apache error_log

+0

je commentais que le code et il est encore http erreur:/mais seulement sur /mailer.php – Sam

+0

Si vous avez une erreur 500, vous avoir à vérifier le fichier journal des erreurs PHP Apache. Si vous ne pouvez pas vérifier le journal des erreurs, annulez les dernières modifications que vous avez effectuées et videz les données $ _POST afin de vérifier ce que le formulaire envoie au serveur: try var_dump ($ _ POST); (si vous utilisez la méthode POST) avant "// captcha section" line – imthemanintheshower

+0

Avis: file_get_contents(): Type de contenu non spécifié en supposant que l'application/x-www-form-urlencode dans C: \ xxamp \ htdocs \ super \ mailer. php sur la ligne 50 objet (stdClass) # 1 (3) {["succès"] => bool (true) ["challenge_ts"] => chaîne (20) "2017-06-09T07: 21: 45Z" [" hostname "] => string (9)" localhost "} – Sam