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


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.

La page en question

http://www.sang-dorthos.com/contact.php

Cordialement

edit : pardon j'avais oublier de poster le script

<script src='https://www.google.com/recaptcha/api.js'></script>

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"]
    );
}

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"]
    );
} ?>

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

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"]
    );
} ?>

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

Oui.