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
A voir également:

7 réponses

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
Dicab
 
merci pour ta réponse :)

mais pourquoi 2 champs ?
0
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
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
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
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
Dicab
 
personne peut m'aider ? :(
0
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
Dicab
 
Arf... merci beaucoup c'est vraiment sympa

Pour comprendre : Pourquoi est-ce que if ($valeur==4) doit être à cet endroit là ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11653 Statut Contributeur 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
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
fiddy Messages postés 11653 Statut Contributeur 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