Page 1 sur 1

Souci formulaire contact php avec captcha

Posté : 19 sept. 2010, 14:03
par snip74
Bonjour,

je fait appel a vous car je pète un câble lol.

Voila j'ai trouvé un système de captcha je les mis sur mon formulaire de contact et rien ne marche ni alerte ni envoie d'email. donc je fait appel a vous car je suis dessus depuit 3 jours sans trouvé pourquoi il ne fonctionne pas je vous mais le code originale puis mon code a moi.

code originale :
<?
session_start(); //ouverture la session pour conserver le captcha

if (!isset($_POST["action"])) $_POST["action"]="";
if (!isset($_POST["nom"])) $_POST["nom"]=""; //déclaration de chaque élément de formulaire
if (!isset($_POST["email"])) $_POST["email"]=""; 
if (!isset($_POST["message"])) $_POST["message"]="";
if (!isset($_POST["captcha"])) $_POST["captcha"]="";
$msg="";
$flag=0;

if ($_POST["action"]=="Envoyer" && $_POST["email"]!="" && strtolower($_POST["captcha"])==$_SESSION["phrase"]){
    $destinataire="[email protected]"; //mettez ici votre adresse e-mail en tant que webmaster du site
    $objet="Formulaire de contact du site web"; // titre du mail automatique
    $message_envoi=" Vous avez reçu une demande de contact \n";
    $message_envoi.="Voici le contenu : \n"; //déclaration du contenu du message
    $message_envoi.="nom du contact :".$_POST["nom"]." \n";
    $message_envoi.="email du contact :".$_POST["email"]." \n";
    $message_envoi.="message du contact :".$_POST["message"]." \n"; //rajouter apres cette ligne les autres éléments du formulaire
    mail($destinataire,$objet,$message_envoi); // envoi du message
    
    $flag=1; //si tout est OK, on passe cette variable à 1
}
else{
    $msg="<i>remplissez au moins le nom et le texte de vérification</i>";
}

// gestion de l'affichage du captcha
$monfichier=fopen("captcha.txt","r");
$i=0;
while(!feof($monfichier)){
    $montab[$i]=fgets($monfichier,4096);
    $i++;
}
fclose($monfichier);
shuffle($montab);
$elem0=explode(";",$montab[0]);
$elem1=explode(";",$montab[1]);
$elem2=explode(";",$montab[2]);
$elem3=explode(";",$montab[3]);
$elem4=explode(";",$montab[4]);
$phrase=$elem0[0].$elem1[0].$elem2[0].$elem3[0].$elem4[0];
$_SESSION["phrase"]=$phrase; 
$img="<div class='img'><img src='img_captcha/".$elem0[1]."' /><img src='img_captcha/".$elem1[1]."' /><img src='img_captcha/".$elem2[1]."' /><img src='img_captcha/".$elem3[1]."' /><img src='img_captcha/".$elem4[1]."' /></div>";
//fin de gestion du captcha
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Formulaire de contact</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
/* feuille de style pour le formulaire, changez ici ce que vous désirez */
form{width:500px;font-family:verdana;font-size:10px;}
legend{font-weight:bold;} 
.img{border:1px solid black;width:125px;}
</style>
</head>
<body>
<? 
if($flag==1){
 // quand le message est parti voici ce qui est affiche, libre à vous de changer ce texte
 echo "merci pour votre message";
}
else {
?>
<form method="post" name="contact" action="<?php echo $PHP_SELF ?>">
<fieldset>
    <legend>Formulaire de Contact</legend>
    <p><? echo $msg ?></p>
    <p><label>Nom : </label><input type="text" name="nom" value="<?php echo $_POST["nom"] ?>" /></p>
    <p><label>Email : </label><input type="text" name="email" value="<?php echo $_POST["email"] ?>"/></p>
    <!-- vous pouvez rajouter des éléments de formulaires ici -->
    <p><label>Message : </label><textarea name="message" cols=40 rows=8><?php echo $_POST["message"] ?></textarea></p>
    <p><? echo $img ?><label>Recopiez le texte de l'image :</label><input type="text" name="captcha" size="5"/></p>
</fieldset>
<input type="submit" name="action" value="Envoyer" />
</form>
<? } ?>
</body>
</html>


Et ici mon code qui ne fonctionne pas :/

Mon code :
<?
session_start(); //ouverture la session pour conserver le captcha

if (!isset($_POST["action"])) $_POST["action"]="";
if (!isset($_POST["sexe"])) $_POST["sexe"]="";
if (!isset($_POST["nom"])) $_POST["nom"]=""; //déclaration de chaque élément de formulaire
if (!isset($_POST["email"])) $_POST["email"]="";
if (!isset($_POST["sujet"])) $_POST["sujet"]="";
if (!isset($_POST["message"])) $_POST["message"]="";
if (!isset($_POST["captcha"])) $_POST["captcha"]="";
$msg="";
$flag=0;

if ($_POST["action"]=="Envoyer" && $_POST["email"]!="" && strtolower($_POST["captcha"])==$_SESSION["phrase"]){
    $destinataire="[email protected]"; //mettez ici votre adresse e-mail en tant que webmaster du site
    $objet="Contact de la page"; // titre du mail automatique
    $message_envoi=" Vous avez reçu une demande de contact \n";
    $message_envoi.="Voici le contenu : \n"; //déclaration du contenu du message
    $message_envoi.="Sexe :".$_POST["sexe"]." \n";
    $message_envoi.="nom du contact :".$_POST["nom"]." \n";
    $message_envoi.="email du contact :".$_POST["email"]." \n";
    $message_envoi.="sujet du contact :".$_POST["sujet"]." \n";
    $message_envoi.="message du contact :".$_POST["message"]." \n"; //rajouter apres cette ligne les autres éléments du formulaire
    mail($destinataire,$objet,$message_envoi); // envoi du message
    
    $flag=1; //si tout est OK, on passe cette variable à 1
}
else{
    $msg="<i>Tout les champs sont obligatoir (*)</i>";
}

// gestion de l'affichage du captcha
$monfichier=fopen("captcha.txt","r");
$i=0;
while(!feof($monfichier)){
    $montab[$i]=fgets($monfichier,4096);
    $i++;
}
fclose($monfichier);
shuffle($montab);
$elem0=explode(";",$montab[0]);
$elem1=explode(";",$montab[1]);
$elem2=explode(";",$montab[2]);
$elem3=explode(";",$montab[3]);
$elem4=explode(";",$montab[4]);
$phrase=$elem0[0].$elem1[0].$elem2[0].$elem3[0].$elem4[0];
$_SESSION["phrase"]=$phrase; 
$img="<div class='img'><img src='img_captcha/".$elem0[1]."' /><img src='img_captcha/".$elem1[1]."' /><img src='img_captcha/".$elem2[1]."' /><img src='img_captcha/".$elem3[1]."' /><img src='img_captcha/".$elem4[1]."' /></div>";
//fin de gestion du captcha
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formulaire de contact</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
body {
    background-image: url();
    background-color: #CCCCCC;
}
.Style6 {
    color: #008000;
    font-weight: bold;
}
.Style1 {color: #FF0000}
-->
</style></head>

<body>
<? 
if($flag==1){
 // quand le message est parti voici ce qui est affiche, libre à vous de changer ce texte
 echo "merci pour votre message";
}
else {
?>
<div id="page">
<!--debut banniere -->
  <div id="baniere"><img src="images/bnr.jpg" alt="bannière" width="955" height="150" longdesc="http://www.Monlien.fr" /></div>
  <!--Fin banniere -->
  <!--debut menu -->
  <div id="menu">
    <ul>
      <li><a href="#">Nous contacter</a></li>
      <li><a href="#">Inscrivez-vous</a></li>
      <li><a href="#">Nos tarifs</a></li>
      <li><a href="#">Nos services</a></li>    
      <li><a href="index.php">Accueil</a></li>    
    </ul>
  </div>
  <!--fin menu -->
  <!--debut menu gauche -->
  <div id="gauche">
    <ul>
      <li><a href="#">Menu</a></li>
      <li><a href="#">Menu</a></li>
      <li><a href="#">Menu</a></li>
      <li><a href="#">Menu</a></li>
    </ul>
  </div>
  <!--fin menu gauche -->
  <!--debut centre -->
  <div id="centre">
    <form method="post" name="contact" action="<?php echo $PHP_SELF ?>" >
      <table>
        <tr>
          <td colspan="2"><div align="center"><span class="Style6">Formulaire De Contact</span></div></td>
        </tr>
        <tr>
          <td colspan="2">S'il vous plaît, prenez le temps de remplir tous les champs portant un   astérisque <span class="Style1">*</span>,
          vous nous aiderez à traiter votre demande le plus rapidement   possible. Merci. </td>
        </tr>
        <tr>
          <td colspan="2">&nbsp;</td>
        </tr>
        <tr>
          <td><strong>Vous êtes:</strong> <span class="Style1">*</span></td>
          <td><select id="sexe" name="sexe">
            <option selected="selected" value="<?php echo $_POST["sexe"] ?>">Choisissez</option>
            <option value="Madame">Madame</option>
            <option value="Mademoiselle">Mademoiselle</option>
            <option value="Monsieur">Monsieur</option>
          </select></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td><strong>Nom, Prénom:</strong> <span class="Style1">*</span></td>
          <td><input type="text" name="nom" maxlength="50" size="43" value="<?php echo $_POST["nom"] ?>" /></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        
        <tr>
          <td><strong>Votre Email</strong> : <span class="Style1">*</span></td>
          <td><input type="text" name="email" maxlength="50" size="43" value="<?php echo $_POST["email"] ?>" /></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td><strong>Sujet</strong> : <span class="Style1">*</span></td>
          <td><input type="text" name="sujet" maxlength="50" size="43" value="<?php echo $_POST["sujet"] ?>" /></td>
        </tr>
        <tr>
          <td colspan="2"><div align="center">Votre message : <span class="Style1">*</span> <br />
              <textarea name="message" cols=50 rows=8><?php echo $_POST["message"] ?></textarea>
          </div></td>
        </tr>
        
        <tr>
          <td><strong>Entrée le code</strong> : <span class="Style1">*</span></td>
          <td><input type="text" name="captcha" size="5"/></td>
        </tr>
        <tr>
          <td><strong>Code a introduire</strong> : </td>
          <td><? echo $img ?></td>
        </tr>
<tr></tr>
      </table>
      <div align="center">
        <input name="action" type="submit" value="Envoyer" />
      -
      <input name="reset" type="reset" value="Annuler" />
      </div>
    </form><? } ?>
  </div>
  <!--fin centre -->
  <!--debut pied page -->
  <div id="pied"> 
    <div align="center">Copyright © 2010 </div>
  </div>
  <!--fin pied page -->
</div>

</body>
</html>



Merci par avace.

Cordialement Stéphane

Re: Souci formulaire contact php avec captcha

Posté : 19 sept. 2010, 18:52
par Spols
sois plus précis quand tu dits que rien ne marche, on a du mal à t'aider.

Vois tu l'image captcha ?
Essaye de tester tes variables à l'aide d'un echo pour positionner le problème

Re: Souci formulaire contact php avec captcha

Posté : 20 sept. 2010, 12:58
par Invité
Bonjour,
merci de cette réponse.

pour être plus précis :

Image Captcha : et bien afficher

Alerte si une case na pas étais remplis : ne fonctionne pas (donc aucune alerte)

aucun mail reçus même pas dans les indésirables

Cordialement Stéphane

Re: Souci formulaire contact php avec captcha

Posté : 20 sept. 2010, 17:02
par Spols
Je vois plusieurs choses dans ton code

En premier, pour les balises php, il vaut mieux les ouvrir avec <?php plutôt que <?
Dans la déclaration de l'attribut action de ta balise form, tu utilise $PHP_SELF essaie plutôt $_SERVER['PHP_SELF']
Si tu veux rendre tous les champs obligatoire, tu doit tous les tester et pas seulement le mail et le captcha

Tu serais plus facile à lire avec moins de faute dans tes messages

Re: Souci formulaire contact php avec captcha

Posté : 23 sept. 2010, 16:37
par snip74
Bonjour,

J'ai refait un formulaire mais j'arrive plus a mettre le captcha et quand je ne sélectionne pas Madame,Monsieur,Mademoiselle et prénom j'ai aucune alerte comme quoi sa na pas étais remplie.

Code : Tout sélectionner

<?php //Ecrivez votre adresse e-mail entre les guillemets $destinataire='[email protected]'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Formulaire de contact</title> <link href="style.css" rel="stylesheet" type="text/css" /> <style type="text/css"> <!-- body { background-image: url(); background-color: #CCCCCC; } .Style6 { color: #008000; font-weight: bold; } .Style1 {color: #FF0000} --> </style></head> <body> <div id="page"> <!--debut banniere --> <div id="baniere"><img src="images/bnr.jpg" alt="banni&egrave;re" width="955" height="150" longdesc="http://www.jetinformatique.fr" /></div> <!--Fin banniere --> <!--debut menu --> <div id="menu"> <ul> <li><a href="#">Nous contacter</a></li> <li><a href="#">Inscrivez-vous</a></li> <li><a href="#">Nos tarifs</a></li> <li><a href="#">Nos services</a></li> <li><a href="index.php">Accueil</a></li> </ul> </div> <!--fin menu --> <!--debut menu gauche --> <div id="gauche"> <ul> <li><a href="#">Menu</a></li> <li><a href="#">Menu</a></li> <li><a href="#">Menu</a></li> <li><a href="#">Menu</a></li> </ul> </div> <!--fin menu gauche --> <!--debut centre --> <div id="centre"> <form id='contact' method="post" action="<?php echo $_server['PHP_SELF'];?>"> <table width="729"> <tr> <td colspan="2"><div align="center"><span class="Style6">Formulaire De Contact</span></div></td> </tr> <tr> <td colspan="2"><div align="center"> <?php $Envoi="\n".'<p class="bt"> <input name="envoi" tabindex="4" value="Envoyer" type="submit" /></p>'; if (isset($_POST['message'])) { // La variable $verif va nous permettre d'analyser si la s&eacute;mantique de l'email est bonne $verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#'; //quelques remplacements pour les specialchars $message=preg_replace('#(<|>)#', '-', $_POST['message']); $message=str_replace('"', "'",$message); $message=str_replace('&', 'et',$message); $objet=preg_replace('#(<|>)#', '-', $_POST['objet']); $objet=str_replace('"', "'",$objet); $objet=str_replace('&', 'et',$objet); // On assigne et/ou prot&egrave;ge nos variables $email=stripslashes(htmlentities($_POST['email'])); $message=stripslashes(htmlspecialchars($message)); $objet=stripslashes(htmlspecialchars($objet)); //input envoi $envoi=htmlentities($_POST['envoi']); //on enl&egrave;ve les espaces $email=trim($email); $message=trim($message); $objet=trim($objet); /*On v&eacute;rifie si l'e mail et le message sont pleins, et on agit en fonction. (on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/ //Si ca ne vas pas (mal rempli, mail non valide...) if((empty($message))or(empty($objet))or(!preg_match($verif,$email))) { //les 3 champs sont vides if(empty($email)and(empty($message))and(empty($objet))) { echo '<p>Tous les champs sont vides.</p>'; $message='';$email='';$objet=''; } //un des champs est vide else { if(!preg_match($verif,$email)) echo'<p>Votre adresse e-mail n\'est pas valide.</p>'; else { echo'<p>Il faut remplir tous les champs !</p>'; } } } //Si les deux sont pleins et que l'adresse est valide, on envoie on on pr&eacute;visualise sans envoi else { $domaine=preg_replace('#[^@]+@(.+)#','$1',$email); $DomaineMailExiste=checkdnsrr($domaine,'MX'); if(!$DomaineMailExiste) echo'<p>Le nom de domaine de l\'adresse e-mail que vous avez donn&eacute; n\'existe pas.</p>'; elseif(!empty($envoi)) { $objet='Jet informatique Sujet : '.$objet; $headers='From:'.$email."\r\n".'To:'.$mail."\r\n".'Content-type:text/plain;charset=is-8859-1'."\r\n".'Sent:'.date('l, F d, Y H:i'); if(mail($destinataire,$objet,$message,$headers)) { echo '<p>Votre message a bien &eacute;t&eacute; envoy&eacute;. Merci.</p><p><a href="/">Retour &agrave; la page d\'accueil</a></p>'; $Envoi=''; } else echo'<p>Un probl&egrave;me est survenu durant l\'envoi du mail.</p>'; } else echo'<p>Une condition innatendue est survenue lors de l\'ex&eacute;cution du script.</p>'; } } else { echo '<p>S\'il vous plaît, prenez le temps de remplir tous les champs portant un astérisque *, vous nous aiderez à traiter votre demande le plus rapidement possible. Merci. </p>'; $email='';$message=''; } $bas_formulaire=$Envoi; ?> </div> </td> </tr> <tr> <td colspan="2">&nbsp;</td> </tr> <tr> <td><strong>Vous &ecirc;tes:</strong> <span class="Style1">*</span></td> <td><select id="sexe" name="sexe"> <option selected="selected" value="<?php echo $_POST["sexe"] ?>">Choisissez</option> <option value="Madame">Madame</option> <option value="Mademoiselle">Mademoiselle</option> <option value="Monsieur">Monsieur</option> </select></td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td><strong>Nom, Pr&eacute;nom:</strong> <span class="Style1">*</span></td> <td><input type="text" name="nom" maxlength="50" size="43" value="<?php echo $_POST["nom"] ?>" /></td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td><strong>Votre Email</strong> : <span class="Style1">*</span></td> <td><input name="email" tabindex="20" size="30" type="text" id="mail" value="<?php echo $email; ?>" /></td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td><strong>Sujet</strong> : <span class="Style1">*</span></td> <td><input type='text' name='objet' id='objet' tabindex='10' size='30' /></td> </tr> <tr> <td colspan="2"><div align="center"> <p><strong>Votre message</strong> : <span class="Style1">*</span></p> <p> <label> <textarea name="message" cols="50" rows="8"></textarea> </label> <?php echo $message; ?></p> </div></td> </tr> <tr> <td colspan="2">&nbsp;</td> </tr> <tr> <td><strong>Entr&eacute;e le code</strong> : <span class="Style1">*</span></td> <td><input type="text" name="captcha" size="5"/></td> </tr> <tr> <td><strong>Code a introduire</strong> : </td> <td></td> </tr> <tr> <td colspan="2"><div align="center"><?php echo $bas_formulaire;?></div></td> </tr> </table> </form> </div> <!--fin centre --> <!--debut pied page --> <div id="pied"> <div align="center">Copyright &copy; 2010 par Jet Informatique tout droit r&eacute;serv&eacute;.</div> </div> <!--fin pied page --> </div> </body> </html>
Cordialement Stéphane

Re: Souci formulaire contact php avec captcha

Posté : 24 sept. 2010, 15:27
par Spols
Je pense que tu devrais arranger ton code autrement

après détection d'un retour de formulaire, tu essaie chacun de tes champs obligatoire avec les test d'usage. Je te conseil de définir une variable error à false avant les tests, et si un test échoue tu passe la variable à true et tu ajoute un message d'erreur dans ta page avec echo. Après les test d'usage, tu test ta valeur de error, et si c'est false, tu exécute le code pour faire un mail.

concernant l'ajout du captcha, regarde ton premier code et mix les deux ca devrait aller