Ajouter juste un captcha

Eléphant du PHP | 188 Messages

16 déc. 2011, 23:29

Il y a déjà des messages d'erreur/de succés dans ton code (de ton CMS) mais ... ils ne s'affichent pas ! donc même si on fait des messages dans la même syntaxe que ton CMS, ils ne s'afficheront pas. Là, le problème vient de ton CMS et/ou de l'utilisation du script d'envoi d'e-mail (notemment du truc la 'contact-ok' etc ...' Essaie de voir sur le site du CMS ...
Sinon pour l'envoi de mail et le captcha c'est bon ? tu as testé en mettant des bonnes/mauvaises valeurs, bon/mauvais captcha ? Tu reçois correctement le mail ?

Eléphanteau du PHP | 36 Messages

17 déc. 2011, 11:10

J'ai rentré un code correct en laissant vide tous les autres champs et l'email s'envoi quand même :shock: :?
Enfin je veut dire que j'ai le message de succès, donc il doit y avoir une erreur dans le code !

Eléphant du PHP | 188 Messages

17 déc. 2011, 11:45

Là ça vient de ton code d'envoi mail initial ...
Essaye ça :

remplace cette ligne (traitement.php, etape 5 : envoi du mail)
if ($_POST['name'] and $_POST['email'] and $_POST['message'])
par :
if ((isset($_POST['name'])) AND (!empty($_POST['name'])) AND (isset($_POST['email'])) AND (!empty($_POST['email'])) AND (isset($_POST['message'])) AND (!empty($_POST['message'])))

Eléphanteau du PHP | 36 Messages

17 déc. 2011, 11:53

Du coup je me dit, autant supprimer les messages d'erreurs/succès d'origine carrément vu que ça ne sert à rien de les laisser :!:
La seule chose que j’espère c'est pouvoir arriver à mettre en forme les messages de succès/erreurs que j'utilise, on est déjà arrivé à y mettre le footer, maintenant faudrait pouvoir mettre le fond de page ! :P J'ai donc déjà essayé de mettre en forme un message d'erreur :
<div id="content" class="pages"> <h1>Erreur - Captcha</h1>
<hr /> <br /> <br />
<div style="margin-bottom: 10px; background: #ffb2b2; padding: 6px; height:auto; border: 2px solid #ff8080; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;"><div style="text-align:center">Pour procéder à la validation du formulaire, merci de remplis le captcha. <a href="javascript&#058;history.go(-1)" alt="retour" />Retour.</a> </div> </div> <br /> <br /> <br /><br /> 
Ce qui donne ceci, pas très réussi ! Peut-être que ce sera mieux quand on aura mis le fond de page derrière. Le footer se décolle :lol: Je suppose que ça fera pareil avec les autres messages d'erreurs.

Donc pour le formulaire, toujours pareil, il est envoyé même si aucuns champs n'a été remplis à par le formulaire à pars le captcha.
Donc suffit de rentrer un captcha correct et ça s'envoi.

Eléphant du PHP | 188 Messages

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 ?

Eléphanteau du PHP | 36 Messages

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

Eléphant du PHP | 188 Messages

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 ?

Eléphanteau du PHP | 36 Messages

17 déc. 2011, 14:13

Chevereto 2.0.7

Eléphant du PHP | 188 Messages

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.

Eléphanteau du PHP | 36 Messages

17 déc. 2011, 19:00

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

Eléphant du PHP | 188 Messages

17 déc. 2011, 21:08

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

Eléphanteau du PHP | 36 Messages

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'); 
?>

Eléphant du PHP | 188 Messages

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 ?

Eléphanteau du PHP | 36 Messages

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.

Eléphant du PHP | 188 Messages

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