problème insertion captcha formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème insertion captcha formulaire

Re: problème insertion captcha formulaire

par kevin254kl » 28 oct. 2016, 12:14

Bonjour,

In array prend un tableau à une dimension en paramètre ton tableau est en 2 dimensions http://php.net/manual/fr/function.in-array.php

problème insertion captcha formulaire

par flolegueu » 28 oct. 2016, 09:15

Bonsoir, j'ai un formulaire de contact dans lequel j'ai ajouté un captcha, le problème est que j'ai les erreurs suivantes:

Notice: Undefined index: captcha on line 28

Undefined index: captcha_reponse on line 31

Undefined index: on line 34

Warning: in_array() expects parameter 2 to be array, null given on line 34


Voici le php
<?php

# Liste des questions avec leurs différentes réponses possibles

$liste_questions = array(

    'question1' => array(

        'question' => "Quelle est la couleur du cheval blanc ?",

        'reponse' => array('blanc', 'blanche', 'neige', 'clair')

    ),

    'question2' => array(

        'question' => "Combien font deux + quatre ?",

        'reponse' => array('6', 'six')

    )

);

# Activation des sessions (pour que PHP charge la session de l'utilisateur, via le cookie PHPSESSID)

# à placer impérativement avant tout affichage, car cette fonction a besoin d'envoyer des headers HTTP

# Sélection d'une question à poser au hasard

$id_question_posee = array_rand($liste_questions);

# Mémorisation de la question posée à l'utilisateur dans la session

$_SESSION['captcha']['id_question_posee'] = $id_question_posee;

# Activation des sessions (pour que PHP charge la session de l'utilisateur, via le cookie PHPSESSID)

# à placer impérativement avant tout affichage, car cette fonction a besoin d'envoyer des headers HTTP

session_start();

# On récupère l'identifiant (clé) de la question posée dans la session

$id_question_posee = $_SESSION['captcha']['id_question_posee'];

# On récupère la réponse de l'utlisateur

$reponse_utilisateur = $_POST['captcha_reponse'];

# Vérification de la réponse : si la réponse de l'utilisateur n'est pas dans la liste des réponses exactes, on affiche un message d'erreur

if( !in_array($reponse_utilisateur, $liste_questions[$id_question_posee]['reponse']) ){

    echo "Vous avez répondu $reponse_utilisateur à la question captcha, ce n'est pas une bonne réponse. Traitement annulé";

    die();

}

$selectedcall = 'None';

// On parcours notre tableaux pour récupérer la valeur des checkbox

foreach ($_POST['call'] as $call) {

$selectedcall = $call;

}

if (isset($_POST['call'])) {

$selectedcall = implode(', ', $_POST['call']);

}

if(isset($_POST['mailform']))

{

if(!empty($_POST['name']) AND !empty($_POST['email']) AND !empty($_POST['phone']) AND !empty($_POST['ville']) AND !empty($_POST['b']) AND !empty($_POST['message']))

{

$header="MIME-Version: 1.0\r\n";

$header.='From:""<>'."\n";

$header.='Content-Type:text/html; charset="uft-8"'."\n";

$header.='Content-Transfer-Encoding: 8bit';

$message='

</div>

</body>

</html>

s

", $message, $header);

$msg="Votre message a bien été envoyé !";

}

else

{

$msg="Tous les champs doivent être complétés !";

}

}

?>

Exemple d'input de mon formulaire

<input type="text" class="form-control" name="name" placeholder="Votre Nom ou celui de votre entreprise"value="<?php if(isset($_POST['name'])) { echo $_POST['name']; } ?>"/>

                                    </div>

et la partie HTML qui affiche la captcha
Question : <?php echo $liste_questions[$id_question_posee]['question']; ?>

    Réponse  : <input type="text" name="captcha_reponse" value="" />

                                <div class="col-xs-12" style="margin-top: 10px; text-align: center"><button type="submit" class="btn btn-primary" name="mailform">Envoyez</button></div>

                            </form>


Merci de votre aide ;)