Formulaire PHP : méthode simple de protection

Dicab -  
 Christian -
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. ben85350 Messages postés 622 Statut Membre 27
     
    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. Dicab
       
      merci pour ta réponse :)

      mais pourquoi 2 champs ?
      0
      1. ben85350 Messages postés 622 Statut Membre 27 > Dicab
         
        a désolé j'avais pas entièrement lu ton message. En effet un champ suffit !
        0
      2. Dicab > ben85350 Messages postés 622 Statut Membre
         
        Mais.....

        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
    2. Christian
       
      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. Dicab
     
    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
  3. Dicab
     
    personne peut m'aider ? :(
    0
    1. ben85350 Messages postés 622 Statut Membre 27
       
      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
  4. Dicab
     
    Arf... merci beaucoup c'est vraiment sympa

    Pour comprendre : Pourquoi est-ce que if ($valeur==4) doit être à cet endroit là ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  7. Dicab
     
    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
  8. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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