Bonjour,
Voila je rencontre un petit problème avec mon code. J'ai suivi les tutoriels du site concernant la création d'un formulaire en php ainsi que celui de la création et de l'intégration du recaptcha Google. Les deux fonctionnent bien indépendemment, mais j'aimerais pouvoir réunir les deux dans un même code.
Je ne m'y connais pas trop en php.
J'ai enlever les "required" du formulaire pour faire des tests.
<!-- FORMULAIRE -->
<?php if (array_key_exists('errors', $_SESSION)): ?>
<div class="alert alert-danger">
<?= implode('<br>', $_SESSION['errors']); ?>
</div>
<?php endif; ?>
<?php if (array_key_exists('success', $_SESSION)): ?>
<div class="alert alert-success">
Votre email à bien été envoyé.
</div>
<?php endif; ?>
<!-- RECAPTCHA -->
<?php
require 'recaptcha.php';
if (!empty($_POST)) {
$captcha = new Recaptcha ('ma clé');
if($captcha->checkCode($_POST['g-recaptcha-response']) == false){
?>
<div class="alert alert-danger">
Le captcha ne semble pas valide.
</div>
<?php
}
}
?>
<h2>Contactez moi</h2>
<p>N'hésitez pas à me contacter dès maintenant afin de réfléchir ensemble à votre projet.</p>
<div class="row">
<div class="8u 12u$(small)">
<form action="post_contact.php#three" method="POST">
<div class="row uniform 50%">
<div class="6u 12u$(xsmall)"><input type="text" name="name" id="inputname" placeholder="Nom" value="<?= isset($_SESSION['inputs']['name']) ? $_SESSION['inputs']['name'] : ''; ?>" ></div>
<div class="6u$ 12u$(xsmall)"><input type="email" name="email" id="inputemail" placeholder="Email" value="<?= isset($_SESSION['inputs']['email']) ? $_SESSION['inputs']['email'] : ''; ?>"></div>
<div class="12u$"><textarea name="message" id="inputmessage" rows="4"><?= isset($_SESSION['inputs']['message']) ? $_SESSION['inputs']['message'] : ''; ?></textarea></div>
</div>
<div class="g-recaptcha" data-sitekey="ma clé"></div>
<ul class="actions">
<li><input type="submit" value="Envoyer le message" /></li>
</ul>
</form>
</div>
Le script pour le recaptcha :
<?php
class Recaptcha{
private $secret;
function __construct($secret){
$this->secret = $secret;
}
public function checkCode($code){
if (empty($code)) {
return false;
}
$url = "https://www.google.com/recaptcha/api/siteverify?secret={$this->secret}&response={$code}";
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;
}
}
Le script post_contact :
<?php
$errors = [];
if (!array_key_exists('name', $_POST) || $_POST['name'] == '') {
$errors['name'] = "Vous n'avez pas renseigner votre nom.";
}
if (!array_key_exists('email', $_POST) || $_POST['email'] == '' || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email'] = "Vous n'avez pas renseigner un email valide.";
}
if (!array_key_exists('message', $_POST) || $_POST['message'] == '') {
$errors['message'] = "Vous n'avez pas renseigner votre message.";
}
session_start();
if (!empty($errors)) {
$_SESSION['errors'] = $errors;
$_SESSION['inputs'] = $_POST;
header('location: index.php');
} else {
$_SESSION['success'] = 1;
$message = $_POST['message'];
$headers = 'FROM: test@test.fr';
mail('xxx@gmail.com', 'Formulaire de contact de ' . $_POST['name'], $_POST['message'], $headers);
header('location: index.php');
}
?>
Après plusieurs tests, j'ai remarqué qu'il y à un conflit entre le recaptcha et le post_contact.php.
Comment puis-je faire pour intégrer les deux correctement sur mon site ? Vous avez des idées ?
Merci d'avance,
Julien.
$secret = "CLE SECRETE";
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
$responseData = json_decode($verifyResponse);
if($responseData->success == 1){
OK
}else{
KO
}