Google reCaptcha

Par Dumortier Nathan, il y a 11 ans


Salut,
j'ai un petit souci sur mon formulaire de contact

j'ai insérer une validation Captcha mais même si on la sélectionne pas, l'envoie de mon formulaire s'envoie quand même

Page formulaire

<div class="section-formulaire-contact">

  <div class="starter-template">

    <?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 mail a bien était envoyer.
      </div>
    <?php endif; ?>

    <form action="traitement.php" method="POST">

      <div class="row">

        <div class="col-xs-6">

            <div class="form-group">

              <label for="inputname">Votre nom et prénom</label> *

              <input required type="text" name="name" class="form-control" id="inputname" value="<?= isset($_SESSION'inputs']'name']) ? $_SESSION'inputs']'name']:'' ;?>" style="width: 400px; height: 30px;">

            </div>

        </div>

        <div class="col-xs-6">

            <div class="form-group">
             <div class="champ-droite-2">

              <label for="inputemail">Votre email</label> *

              <input required type="email" style="width: 300px; height: 30px" name="mail" class="form-control" id="inputemail" value="<?= isset($_SESSION'inputs']'mail']) ? $_SESSION'inputs']'mail']:'' ;?>">
            </div>
            </div>

        </div>        

        <div class="col-xs-12">

            <div class="form-group">

              <label for="inputmessage">Votre message</label> *

              <textarea required id="inputmessage" class="form-control" name="message" style="width: 875px; height: 125px;"><?= isset($_SESSION'inputs']'name']) ? $_SESSION'inputs']'name']:'' ;?></textarea>

         </div>
            <div class="g-recaptcha" data-sitekey="ma key"></div>
            <br>
            <button type="submit" class="btn btn-primary">Envoyer</button>
            <button type="reset" class="btn btn-primary"> Recommencer</button>        
        </div>

      </div>

    </form>
  </div>

page traitement

<?php

                            $errors = ];
                            $emails = 'nathan@xxxxx.xxxx'];
                            if(!array_key_exists('name',$_POST) | $_POST'name'] ==''){
                                $errors'name'] = "Vous n'avez pas renseigné votre nom.";
                            }

                            if(!array_key_exists('mail',$_POST) | $_POST'mail'] =='' || !filter_var($_POST'mail'], FILTER_VALIDATE_EMAIL)){
                                $errors'mail'] = "Vous n'avez pas renseigné un mail valide.";
                            } 

                            if(!array_key_exists('message',$_POST) | $_POST'message'] ==''){
                                $errors'message'] = "Votre message est vide.";
                            }
                            session_start();
                            if(!empty($errors)){

                                $_SESSION'errors'] =$errors;
                                $_SESSION'inputs'] =$_POST;
                                header('Location: contact.php');
                            }
                            else{
                                $_SESSION'success'] = 1; 
                                $message= $_POST'message'];
                                $headers= 'FROM: '. $_POST'mail'];
                                mail('xxxx@xxxx.com', 'Demande de renseignements de ' . $_POST'name'], $message, $headers);
                                header('Location: contact.php');
                            }

                    ?>

Merci de votre aide

8 réponses

Carouge10, il y a 11 ans

Bonjour,

Vous dites insérer une validation captcha mais à part une div ayant ce nom, il n'y a rien. Il faudrait un input pour insérer sa valeur et un vérification de celle-ci dans le fichier de traitement.

Carouge10, il y a 11 ans

Je pense qu'il manque en test dans la partie de traitement:
Exemple Captcha

En ajoutant ceci et en testant la valeur de $rep devrait corriger le problème.

require_once "recaptchalib.php";
// Register API keys at https://www.google.com/recaptcha/admin
$siteKey = "";
$secret = "";
// reCAPTCHA supported 40+ languages listed here: https://developers.google.com/recaptcha/docs/language
$lang = "en";
// The response from reCAPTCHA
$resp = null;
// The error code from reCAPTCHA, if any
$error = null;
$reCaptcha = new ReCaptcha($secret);
// Was there a reCAPTCHA response?
if ($_POST"g-recaptcha-response"]) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER"REMOTE_ADDR"],
        $_POST"g-recaptcha-response"]
    );
}
Dumortier Nathan, il y a 11 ans

J'ai un message d'erreur qui m'indique

Notice: Undefined variable: siteKey in D:\wamp\www\sd21\contact.php on line 83 Call Stack #TimeMemoryFunctionLocation 10.0003255152{main}( )..\contact.php:0 ">

Pourtant la variable siteKey est bien renseigner dans la parti traitement

<?php
require_once "recaptchalib.php";
// Register API keys at https://www.google.com/recaptcha/admin
$siteKey = "6xxxxxxxxxxxxxxx";
$secret = "6xxxxxxxxxxxxxxxx";
// reCAPTCHA supported 40+ languages listed here: https://developers.google.com/recaptcha/docs/language
$lang = "fr";
// The response from reCAPTCHA
$resp = null;
// The error code from reCAPTCHA, if any
$error = null;

$reCaptcha = new ReCaptcha($secret);
// Was there a reCAPTCHA response?
if ($_POST"g-recaptcha-response"]) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER"REMOTE_ADDR"],
        $_POST"g-recaptcha-response"]
    );
} ?>
Carouge10, il y a 11 ans

Oui, l'erreur vous indique qu'elle est absente du fichier contact.php

Dumortier Nathan, il y a 11 ans

Quand je l'ajoute

Fatal error: Class 'ReCaptcha' not found in D:\wamp\www\sd21\contact.php on line 15

.................
$reCaptcha = new ReCaptcha($secret);
// Was there a reCAPTCHA response?
if ($_POST"g-recaptcha-response"]) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER"REMOTE_ADDR"],
        $_POST"g-recaptcha-response"]
    );
} ?>
Carouge10, il y a 11 ans

Avez-vous ajouter : require_once "recaptchalib.php"; et l'avez dans le même dossier que contact.php ?

Dumortier Nathan, il y a 11 ans

Oui.