Ajouter juste un captcha

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Ajouter juste un captcha

Re: Ajouter juste un captcha

par arthur77 » 19 déc. 2011, 23:18

Je garde ton site dans mes favoris, désolé de ne pas t'avoir été utile jusqu'au bout !

Re: Ajouter juste un captcha

par ZePhYmA » 19 déc. 2011, 18:55

Juste pour dire que j'ai réussi.

J'ai été voir un programmeur qui m'a montré comment installer la re-captcha.

Merci quand même Arthur pour ton aide, j'ai appris pas mal de chose. Au plaisir !

Re: Ajouter juste un captcha

par arthur77 » 18 déc. 2011, 21:10

Oui pour la balise fermante je me suis trompé, c'est bien :
<a > .. </a>
Pour alt/title, la personne qui m'a apris le HTML m'a dit qu'il y avait pas d'importance et les pages que j'ai faites avec alt dans le lien sont valides W3C ...
Alors entre temps j'ai vérifié : effictivement l'attribut "alt" dans les balises de lien n'existent pas --' mais l'attrabut "title" n'est pas obligatoire, c'est un texte qui s'affiche au survol du lien. (Si quelqu'un passe par là et qu'il est mieux renseigner sur les normes W3C qu'il me corrige ^^ )


Pour revenir au problème, ce n'est ni le "alt" dans le lien qui pose problème (il y a un alt dans chacun des liens de mon site et les liens fonctionnent sans er500) ni le <a> </a> car ça c'est le W3C qui te bloquerait pas le serveur ... je comprends pas

Re: Ajouter juste un captcha

par ZePhYmA » 18 déc. 2011, 16:02

Oui, le fichier est bien placé sinon ce serait une erreur 404. Cela me fait ça que sur le traitement.

Erreur 500 veut dire erreur dans le script. Une petite chose que je ne comprends pas :
<a href="javascript&#058;history.go(-1)" alt="retour" /> Retour. </a>
Cela ne devrait pas être :
<a href="javascript&#058;history.go(-1)" title="Retour"> Retour </a>
Par ce que tu ferme la balise lien comme si elle était seule alors qu'elles sont doubles <a> </a> ! Je veux savoir pour pas faire de betîses. Et ALT c'est pour les images normalement, non ? :?

Re: Ajouter juste un captcha

par arthur77 » 18 déc. 2011, 11:35

Wow c'est du lourd. Est-ce que traitement.php est bien dans le même dossier que les autres pages ? Est-ce que ça te fait ça seulement sur traitement.php ?
Là c'est le serveur qui plante sur cette page et je suis complétement incompetent pour ça désolé :x

Re: Ajouter juste un captcha

par ZePhYmA » 18 déc. 2011, 11:12

Erreur serveur
Le site Web a rencontré une erreur lors de l'extraction de http://www.heberg-pics.com/traitement. Cela peut être dû à une opération de maintenance ou à une configuration incorrecte.
Voici quelques suggestions :
Actualisez cette page Web ultérieurement.
Erreur HTTP 500 (Internal Server Error) : Une situation inattendue s'est produite tandis que le serveur tentait de traiter la demande.

Re: Ajouter juste un captcha

par arthur77 » 17 déc. 2011, 23:46

Erreur 500
L'erreur 500, est une erreur de configuration d'un script cgi que vous avez déposé par ftp dans le répertoire cgi-bin. Cette erreur survient lorsque vous avez donné de mauvaise fonction dans le script. En fait le serveur va le lire et lorsqu'il trouve une erreur renvoie a la page INTERNAL SERVER ERROR
Tu vois qqch qui ressemblerai à ça ?

Re: Ajouter juste un captcha

par ZePhYmA » 17 déc. 2011, 21:50

Ben écoute, j'ai pris ton code là et j'ai remplis avec mes valeurs. Voici le fichier traitement.php que j'ai actuellement :
<?php include('header.php'); 

// 1 : connexion BDD

$PARAM_hote='Chemin'; // le chemin vers le serveur
$PARAM_port='3306';
$PARAM_nom_bd='Nom'; // le nom de votre base de données
$PARAM_utilisateur='User'; // nom d'utilisateur pour se connecter
$PARAM_mot_passe='Mot de passe'; // mot de passe de l'utilisateur pour se connecter
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
   try
{
           $connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
}
    
   catch(Exception $e)
{
           echo 'Erreur : '.$e->getMessage().'<br />';
           echo 'N° : '.$e->getCode();
}


// 2 : recuperation de ce qu'a dit l'utilisateur sur le captcha

if ((isset($_POST['id'])) AND (!empty($_POST['id'])))
{
$id_captcha = $_POST['id'];
if ((isset($_POST['captcha'])) AND (!empty($_POST['captcha'])))
{
$reponse_captcha = $_POST['captcha'];
}
else  //si l'utilisateur na pas répondu au captcha
{
die('Veuillez remplir le captcha. <a href="javascript&#058;history.go(-1)" alt="retour" /> Retour. </a>');
}
}
else  //si on a pas reçu l'id via hidden
{
die('Erreur lors du chargement de la page. <a href="javascript&#058;history.go(-1)" alt="retour" /> Retour. </a>');
}
//si on arrive ici c'est qu'on possède l'id du captcha et la solution entrée par l'user
   


//3 : recuperation de la vrai solution du captcha

   $sql = 'SELECT solution FROM captcha WHERE id ='.$id_captcha;
   $req = $connexion->query($sql);
   $req->setFetchMode(PDO::FETCH_OBJ);
   $data = $req->fetch();
   $solution= $data->solution;
   $req->closeCursor();

          
//4 : comparaison solution/reponse user

//rappel  : $reponse_captcha contient la reponse de l'user
// et $solution contient la vrai solution (de la BDD)
if ($reponse_captcha != $solution)
{
die('Erreur dans la recopie du captcha ! <a href="javascript&#058;history.go(-1)" alt="retour"> Retour. </a>');
}

     
// 5 : envoi de l'e-mail
                           
                   if ((isset($_POST['name'])) AND (!empty($_POST['name'])) AND (isset($_POST['email'])) AND (!empty($_POST['email'])) AND (isset($_POST['message'])) AND (!empty($_POST['message'])))
                                   {
$result  = true;
$name    = $_POST['name'];
$email   = trim($_POST['email']);
$message = $_POST['message'];

$to = '[email protected]';
$subject = 'Formulaire de contact';
                           
$mailbody .= "Name: ".$name."\n";
$mailbody .= "E-mail: ".$email."\n\n";
                                   
$mailbody .= "Message: ".$message."\n\n";
                                                   
$mailbody .= "IP: ".getenv("REMOTE_ADDR")."\n";
$mailbody .= "Browser: ".getenv("HTTP_USER_AGENT")."\n\n";
                                   
$use_phpmailer = true; // Activer/Désactiver l'utilisation de la fonction ()mail
                                   
// We are going to check the fields...
if(check_email_address($email) and check_value($name) and check_value($message)) {

// Paramètres SMTP
if($use_smtp) {
                                                   // Hail PHPMailer!
$mail = new phpmailer();
$mail->Mailer = "smtp";
$mail->Host = "smtp.gmail.com"; // SMTP host
$mail->SMTPAuth = true;
$mail->Username = "[email protected]";
$mail->Password = "mot_de_passe";
$mail->Timeout = 30;
$mail->From = $email; 
$mail->FromName = $name;
$mail->AddAddress($to);
$mail->Subject = $subject;
$mail->Body = $mailbody;
$success = $mail->Send();
} else {
$success = mail($to, $subject, $mailbody); // $to, $subject, $mailbody
}
                                           
// Succès / Erreur

if($success) {
$output = 'Message envoyé, nous traiterons votre demande dans les plus bref délais.';
$contact_class = 'contact-ok';
} else { // Ho non ! Erreur
$output = 'Il y a eu une erreur à l\'envoie de votre message, réessayez plus-tard.';
$contact_class = 'contact-error';
}
} else { // Valeurs invalides !
$output = 'Merci de remplir les champs du formulaire correctement.';
$contact_class = 'contact-error';
                                   }
                   }
                                   else
                                        {
                                        echo 'Veuillez remplir correctement le formulaire svp. <a href="javascript&#058;history.go(-1)" alt="retour" > Retour. </a>';
                                        include('footer.php')
                                        die();
                                        }

include('footer.php'); 
?>

Re: Ajouter juste un captcha

par arthur77 » 17 déc. 2011, 21:08

erreur 500 ?! WTF ... Je n'ai jamais ue ça ... Comment il t'affiche ça ?

Re: Ajouter juste un captcha

par ZePhYmA » 17 déc. 2011, 19:00

J'ai simplement une erreur 500 sur le traitement.php :|

Re: Ajouter juste un captcha

par arthur77 » 17 déc. 2011, 15:59

Bon j'ai rien trouvé d'intéressant sur ton CMS alors on va tester à ma manière. J'ai fait un nouveau traitement.php, remplace l'ancien par :
<?php include('header.php'); 

// 1 : connexion BDD

$PARAM_hote='localhost'; // le chemin vers le serveur
$PARAM_port='3306';
$PARAM_nom_bd='captcha'; // le nom de votre base de données
$PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter
$PARAM_mot_passe=''; // mot de passe de l'utilisateur pour se connecter
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
   try
{
           $connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
}
    
   catch(Exception $e)
{
           echo 'Erreur : '.$e->getMessage().'<br />';
           echo 'N° : '.$e->getCode();
}


// 2 : recuperation de ce qu'a dit l'utilisateur sur le captcha

if ((isset($_POST['id'])) AND (!empty($_POST['id'])))
{
$id_captcha = $_POST['id'];
if ((isset($_POST['captcha'])) AND (!empty($_POST['captcha'])))
{
$reponse_captcha = $_POST['captcha'];
}
else  //si l'utilisateur na pas répondu au captcha
{
die('Veuillez remplir le captcha. <a href="javascript&#058;history.go(-1)" alt="retour" /> Retour. </a>');
}
}
else  //si on a pas reçu l'id via hidden
{
die('Erreur lors du chargement de la page. <a href="javascript&#058;history.go(-1)" alt="retour" /> Retour. </a>');
}
//si on arrive ici c'est qu'on possède l'id du captcha et la solution entrée par l'user
   


//3 : recuperation de la vrai solution du captcha

   $sql = 'SELECT solution FROM captcha WHERE id ='.$id_captcha;
   $req = $connexion->query($sql);
   $req->setFetchMode(PDO::FETCH_OBJ);
   $data = $req->fetch();
   $solution= $data->solution;
   $req->closeCursor();

          
//4 : comparaison solution/reponse user

//rappel  : $reponse_captcha contient la reponse de l'user
// et $solution contient la vrai solution (de la BDD)
if ($reponse_captcha != $solution)
{
die('Erreur dans la recopie du captcha ! <a href="javascript&#058;history.go(-1)" alt="retour"> Retour. </a>');
}

     
// 5 : envoi de l'e-mail
                           
                   if ((isset($_POST['name'])) AND (!empty($_POST['name'])) AND (isset($_POST['email'])) AND (!empty($_POST['email'])) AND (isset($_POST['message'])) AND (!empty($_POST['message'])))
				   {
$result  = true;
$name    = $_POST['name'];
$email   = trim($_POST['email']);
$message = $_POST['message'];

$to = '[email protected]';
$subject = 'Formulaire de contact';
                           
$mailbody .= "Name: ".$name."\n";
$mailbody .= "E-mail: ".$email."\n\n";
                                   
$mailbody .= "Message: ".$message."\n\n";
                                                   
$mailbody .= "IP: ".getenv("REMOTE_ADDR")."\n";
$mailbody .= "Browser: ".getenv("HTTP_USER_AGENT")."\n\n";
                                   
$use_phpmailer = true; // Activer/Désactiver l'utilisation de la fonction ()mail
                                   
// We are going to check the fields...
if(check_email_address($email) and check_value($name) and check_value($message)) {

// Paramètres SMTP
if($use_smtp) {
                                                   // Hail PHPMailer!
$mail = new phpmailer();
$mail->Mailer = "smtp";
$mail->Host = "smtp.gmail.com"; // SMTP host
$mail->SMTPAuth = true;
$mail->Username = "@gmail.com";
$mail->Password = "";
$mail->Timeout = 30;
$mail->From = $email; 
$mail->FromName = $name;
$mail->AddAddress($to);
$mail->Subject = $subject;
$mail->Body = $mailbody;
$success = $mail->Send();
} else {
$success = mail($to, $subject, $mailbody); // $to, $subject, $mailbody
}
                                           
// Succès / Erreur

if($success) {
$output = 'Message envoyé, nous traiterons votre demande dans les plus bref délais.';
$contact_class = 'contact-ok';
} else { // Ho non ! Erreur
$output = 'Il y a eu une erreur à l\'envoie de votre message, réessayez plus-tard.';
$contact_class = 'contact-error';
}
} else { // Valeurs invalides !
$output = 'Merci de remplir les champs du formulaire correctement.';
$contact_class = 'contact-error';
                                   }
                   }
				   else
					{
					echo 'Veuillez remplir correctement le formulaire svp. <a href="javascript:history.go(-1)" alt="retour" > Retour. </a>';
					include('footer.php')
					die();
					}

include('footer.php'); 
?>
et dit moi ce que ça donne. Normalement la condition est formelle et l'e-mail ne s'envoit pas si les infos ne sont pas ok, donc si ça ne marche pas je donne ma langue au chat ... Le nouveau message d'erreur sera moche, c'est le dernier echo de la page, tu peux le modifier comme tu le souhaites.

Re: Ajouter juste un captcha

par ZePhYmA » 17 déc. 2011, 14:13

Chevereto 2.0.7

Re: Ajouter juste un captcha

par arthur77 » 17 déc. 2011, 13:58

Pour le footer : essaye de le coller tout en bas de la page avec du CSS, par exemple :

Code : Tout sélectionner

.footer { position: absolute; bottom: 0px; }
et dans ton fichier footer.php, il faut que le code du footer sois dans une balise <div> avec un attribut footer, ça donne la balise : <div class='footer'> ... code du footer ... </div>


C'est quoi ton CMS ?

Re: Ajouter juste un captcha

par ZePhYmA » 17 déc. 2011, 12:57

Mise en forme :

Bon ben pour le fond c'est réglé (c'est la page blanche qui sert de support au texte que je viens de mettre). Pour le footer, je t’explique. Tu vois bien sur le screen qu'il ne touche pas le bas de la fenêtre, si tu veut un exemple, va sur l’accueil et tu pourras constater que le footer est collé au bas de ton navigateur, pas comme sur la page d'erreur ou il ne touche pas le bas de la fenêtre du navigateur. :wink:

Pour l'histoire de la sécurisation, le script de contact est par défaut dans le CMS donc je n'en connais pas plus que toi les recoins. #-o

Re: Ajouter juste un captcha

par arthur77 » 17 déc. 2011, 12:41

Perso je trouve que ton message d'erreur est réussi ... m'enfin tu peux l'adpater à ta sauce en jouant sur le CSS et tu as l'air de bien t'en sortir !

Comment ça 'le footer se décolle' ? 8-|

Quel fond ? Tu as une image/couleur de fond particulière qui en s'affiche pas sur traitement.php ?


Pour le problème que le mail s'envoi sans infos corectes, ça vient du script d'envoi de mail qui n'est pas correctement sécurisé. Or je ne m'y connais pas en envoi de mail, est-ce que tu peux me donner l'adresse où tu as trouvé ce script ?