Bonjour,
Voila je galère...
J'ai suivi le tuto de Grafikart sur recaptcha, tous fonctionne sauf que je peux envoyer mon formulaire sans valider mon captcha.
Je sais pourquoi:
Je n'ai pas de code php concernant le captcha dans mon fichier formulaire...
et comme je suis une bille en php, je ne trouve pas la solution, quelqu'un pourrait m'aider ?
Me donner des pistes?
merci.
voici mes deux pages:
la page index.php ou le fomulaire est:
<?php
require 'recaptcha.php';
$captcha = new Recaptcha('***,'*****');
?>
<!DOCTYPE html>
<html lang=fr>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="css/animate.css">
<link rel="stylesheet" type="text/css" href="css/style.css">
<link rel="shortcut icon" href="img/favicon.ico">
<script src="https://www.google.com/recaptcha/api.js"></script>
</head>
<body>
<section id="contact" class="row well wow">
<h2 class="text-center">CONTACT</h2>
<div class="row">
<div class="container">
<?php
require 'recaptcha.php';
$captcha = new Recaptcha('****','****');
if(!empty($_POST))
{
if($captcha->isValid($_POST['g-recaptcha-response']) ===false)
{
?>
<div class="alert alert-danger">Le code captcha ne semble pas valide</div>
<?php
}
else
{
?>
<div class="alert alert-success">Merci pour votre email</div>
<?php
}
}
?>
<form action="#" method="POST">
<div>
<p>message :</p>
<textarea id="txtarea" name="msg"></textarea>
</div>
<?=
$captcha->html();
?>
<button id="btn_form" class="btn pull-right" type="submit">Envoyer</button>
</form>
</div>
</div>
</section>
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Javascript de Bootstrap -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
</body>
</html>
le code de la page recaptcha.php (issu du tuto)
<?php
class recaptcha
{
private $api_secret;
private $api_site;
function __construct($api_site, $api_secret)
{
$this->$api_secret =$api_secret;
$this->$api_site =$api_site;
}
/* Permet de générer le code HTML du Captcha */
public function html()
{
return '<div class="g-recaptcha" data-sitekey="*****"></div>';
}
/* Permet de générer la balise script pour recaptcha */
public function script()
{
return '<script src="https://www.google.com/recaptcha/api.js"></script>';
}
/* Permet de vérifier la réponse donné par le Captcha
@param string $code
@return bool
*/
public function isValid($code, $ip = null)
{
if (empty($code))
{
return false;
}
$params = array ('secret' => $this->api_secret,'response' => $code);
if ($ip)
{
$params['remoteip'] = $ip;
}
$url="https://www.google.com/recaptcha/api/siteverify?" . http_build_query($params);
if(function_exists('curl_version'))
{
$curl = curl_init($url);
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_TIMEOUT,1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
$response = curl_exec($curl);
}
else
{
$response = file_get_contents($url);
}
if(empty($response) || is_null($response))
{
return false;
}
$json = json_decode($response);
return $json->success;
}
}
?>
et finalement la page appelé pour l'envoi du formulaire par mail
<?php
$mail_destination='XXXX@XXX.com';
$nom=stripslashes($_POST['nom']);
$mail=stripslashes($_POST['mail']);
$msg_formulaire=stripslashes($_POST['msg']);
$sujet="Contact via le formulaire";
$msg_formulaire = "Nom: ".$nom."\n". "Adresse: " . $mail."\n". "Message:" . $msg_formulaire;
mail($mail_destination,$sujet,$msg_formulaire /* ,$header */);
header("Location: index.php");
?>
rien ne me chagrine, la vérification du recaptcha se fait aprés envoie du formulaire, en post traitement
merci d'avoir pris le temps de me repondre.
Alors de mon coté, j'ai continué à chercher. et j'ai trouvé çà (le check recaptcha fonctionne et le mail n'est pas envoyé si pas de saisi de captcha). cela fonctionne mais l'envoi du mail ne fonctionne pas tout le temps quand je fais un header(). alors en attendant j'ai un echo pourri .
Il y a t il un moyen pour faire un genre d'echo d'une page web? include ne fonctionne pas et le header() fait son boulot mais comme dit plus haut, l'envoi du mail délire.
$email;$comment;$captcha;
if(isset($_POST['email'])){
$email=$_POST['email'];
}if(isset($_POST['comment'])){
$email=$_POST['comment'];
}if(isset($_POST['g-recaptcha-response'])){
$captcha=$_POST['g-recaptcha-response'];
}
if(!$captcha){
echo '<h2>Veuillez renseigner le captcha</h2><a href="http://XXX.fr">Retour</a>';
exit;
}
$url="https://www.google.com/recaptcha/api/siteverify?secret=XXX&response=".$captcha;
if(function_exists('curl_version'))
{
$curl = curl_init($url);
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_TIMEOUT,1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
$response = curl_exec($curl);
}
else
{
$response=file_get_contents($url);
}
if($response.success==false)
{
echo '<h2>You are spammer ! Get the @$%K out</h2>';
}
else
{
$mail_destination='XXX@XXXl.com';
$nom=stripslashes($_POST['nom']);
$mail=stripslashes($_POST['mail']);
$msg_formulaire=stripslashes($_POST['msg']);
$sujet="Contact via le formulaire";
$msg_formulaire = "Nom: ".$nom."\n". "Adresse: " . $mail."\n". "Message:" . $msg_formulaire;
mail($mail_destination,$sujet,$msg_formulaire);
echo '<h2>Merci pour votre message</h2><a href="http://XXX.fr">Retour</a>';
}
?>