Formulaire PHP : méthode simple de protection

Bonjour,

J'ai un petit formulaire en bas des pages de mon site qui permet d'attribuer une note et un commentaire à un article, dont les données partent dans une base SQL (en grosse partie grâce aux aides reçues sur ce site :)

Je suis néanmoins complètement spammé par des robots.

Je voudrai créer un champ de contrôle très simple, comme par exemple "Combien font 2 et 2"
Si la réponse inscrite dans le champ est 4, les données partent dans la base, et sinon, l'envoi est annulé...

Cela doit être tout bête à faire mais je ne vois pas trop la syntaxe qu'il faut...

Merci (encore) pour votre aide :)

Greg

7 réponses

  1. Salut dicab !
    Prenons en compte deux fichiers :
    - le premier formulaire.php
    - le deuxième : verif.php

    Dans ton premier fichier tu aura donc ton formulaire (soit un truc de ce genre) :
    <form action=verif.php method=POST>
       <input type=text name=valeur1>
       <input type=text name=valeur2>
       <input type=submit>
    <form>
    

    Dans ton deuxieme fichier, tu récupère tout d'abord tes variables, tu vérifie tes critères et ton insère dans ta bdd. Soit :

    <?php
    $valeur1= $_POST['valeur1'];
    $valeur2 = $_POST['valeur2'];
    
    if($valeur1+$valeur2 ==4) //dans ton exemple
    {
    //enregistrement dans la base de données
    }
    else
    {
    //envoi annulé
    }
    ?>
    1. merci pour ta réponse :)

      mais pourquoi 2 champs ?
    2. @Dicaba désolé j'avais pas entièrement lu ton message. En effet un champ suffit !
    3. @ben85350Mais.....

      même avec un champ euh ben ca marche pas :(

      je dois faire une erreur quelque part... c'est normal les deux signes = avant le 4 ?
    4. Bonjour Dicab
      Ton petit script correspond à ce que je cherche . Mais que dois je mettre à la place de " Envoi annulé " sachant que c'est un simple envoi de mail contenant les valeurs saisies
      D'avance merci
      Christian
  2. en fait pour le formulaire, pas de souci...

    Mais pour la page "vrif.php" par exemple, je ne sais pas trop où insérer le code que tu m'as indiqué...

    La voici :

    <?php
    define('DB_SERVER', 'localhost');
    define('DB_SERVER_USERNAME', '*****');
    define('DB_SERVER_PASSWORD', '*****');
    define('DB_DATABASE', '*****');

    $DATE = Date("d/m/Y H:i:s");

    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
    DB_SERVER_PASSWORD)
    or die('Impossible de se connecter : ' . mysql_error());

    mysql_select_db(DB_DATABASE, $connect);
    $sql = "INSERT INTO notations(ID, DATE, ARTICLE, NOTE, COMMENTAIRE) VALUES ('','$DATE','$ARTICLE','$NOTE','$COMMENTAIRE')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    mysql_close();
    ?>

    Ceux qui disent que le PHP est facile sont fous :) lol
    1. personne peut m'aider ? :(
      1. désolé pour le retard !
        <?php
        $valeur=$_POST['valeur'];
        define('DB_SERVER', 'localhost');
        define('DB_SERVER_USERNAME', '*****');
        define('DB_SERVER_PASSWORD', '*****');
        define('DB_DATABASE', '*****');
        
        $DATE = Date("d/m/Y H:i:s");
        if ($valeur==4)
        {
            $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
            DB_SERVER_PASSWORD)
            or die('Impossible de se connecter : ' . mysql_error());
        
            mysql_select_db(DB_DATABASE, $connect);
            $sql = "INSERT INTO notations(ID, DATE, ARTICLE, NOTE, COMMENTAIRE) VALUES       ('','$DATE','$ARTICLE','$NOTE','$COMMENTAIRE')";
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
            mysql_close();
        }
        else
        {
          echo ' Envoi annulé : réponse incorrecte';
        }
        ?> 
    2. Arf... merci beaucoup c'est vraiment sympa

      Pour comprendre : Pourquoi est-ce que if ($valeur==4) doit être à cet endroit là ?
      1. Contributeur
        Salut,
        Attention quand même à bien utiliser la fonction mysql_real_escape_string() dans le script de ben85350 pour éviter les injections SQL.
        Cdt
        1. Décidemment, je résoud un pb un autre arrive lol

          Où est ce que je dois mettre cette fonction et sous quelle syntaxe ?
          1. Contributeur
            Non ne t'inquiète pas ;). Promis, c'est pas compliqué.
            Tu remplaces :
            $valeur=$_POST['valeur'];
            par :
            if($_POST['valeur']){
            $valeur=mysql_real_escape_string($_POST['valeur']);
            }
            C'est tout ;)
            Cdt