Formulaire PHP : méthode simple de protection
Dicab
-
Christian -
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
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
-
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é } ?> -
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 -
-
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'; } ?>
-
-
Arf... merci beaucoup c'est vraiment sympa
Pour comprendre : Pourquoi est-ce que if ($valeur==4) doit être à cet endroit là ? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
Attention quand même à bien utiliser la fonction mysql_real_escape_string() dans le script de ben85350 pour éviter les injections SQL.
Cdt -
Décidemment, je résoud un pb un autre arrive lol
Où est ce que je dois mettre cette fonction et sous quelle syntaxe ? -
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