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é
    }
    ?>
    0
    1. merci pour ta réponse :)

      mais pourquoi 2 champs ?
      0
    2. @Dicaba désolé j'avais pas entièrement lu ton message. En effet un champ suffit !
      0
    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 ?
      0
    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
      0
  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
    0
    1. personne peut m'aider ? :(
      0
      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';
        }
        ?> 
        0
    2. Arf... merci beaucoup c'est vraiment sympa

      Pour comprendre : Pourquoi est-ce que if ($valeur==4) doit être à cet endroit là ?
      0
      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
        0
        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 ?
          0
          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
            0