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.

Mon code html

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>

recaptcha.php

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;
    }
}

post_contact.php

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.

3 réponses


$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
    }
juju2901
Auteur

Bonjour Mehdikacim.

Bonjour :)