Formulaire PHP : méthode simple de protection

Fermé
Dicab - 24 août 2008 à 11:04
 Christian - 17 janv. 2010 à 10:46
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 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
24 août 2008 à 11:41
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
merci pour ta réponse :)

mais pourquoi 2 champs ?
0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27 > Dicab
24 août 2008 à 15:11
a désolé j'avais pas entièrement lu ton message. En effet un champ suffit !
0
Dicab > ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013
24 août 2008 à 15:30
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
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
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
personne peut m'aider ? :(
0
ben85350 Messages postés 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
26 août 2008 à 10:06
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
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
26 août 2008 à 11:05
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
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
26 août 2008 à 11:56
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