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. 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
    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
        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. Arf... merci beaucoup c'est vraiment sympa

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