Page 1 sur 1

Captcha Cryptographp sur formulaire

Posté : 08 mai 2011, 11:11
par Steve91
Bonjour à tous.
Je suis à la dernière étape de mon site web et étant débutant je bloque sur un détail dans l'installation de mon Captcha sur mon formulaire.

J'ai installé ce code dans le formulaire
 <?php 
 $cryptinstall="crypt/cryptographp.fct.php";
 include $cryptinstall;  
 ?>


Nickel, celui-ci aussi
<?php dsp_crypt(0,1); ?><br>
<font color="#848484"><b>Recopiez le code ici :</b></font><br>
<input type="text" name="code">
(sert à afficher le captcha)

Et enfin dans l'envoi du formulaire j'inclu "action="verifier.php" qui contient les lignes suivantes :
<?php 
$cryptinstall="cryptographp.fct.php";
include $cryptinstall; 
?>


<html>
<?php
  if (chk_crypt($_POST['code'])) 
     echo "Bravo";
     else echo "Erreur" ;
?>
</html>

Tout fonctionne parfaitement, si le code est bon on me renvoi bravo et si il est mauvais on me renvois erreur.
Maintenant ce que je souhaite c'est que le formulaire s'envoie une fois que le code a été vérifié (donc changer bravo par du code qui exécuterais le reste de l’envoi), et que ça affiche un message d'erreur si il est mauvais.
Voici le formulaire en entier

<?php

// On vérifie si la fonction ini_set() a été désactivée...
$desactive = ini_get('disable_functions');
if (preg_match("/ini_set/i", "$desactive") == 0) {
// Si elle n'est pas désactivée, on définit ini_set de manière à n'afficher que les erreurs...
ini_set("error_reporting" , "E_ALL & ~E_NOTICE");
}

// Vérifier que le formulaire a été envoyé...
if (isset($_POST['envoi'])) {



// Définir l'indicateur d'erreur sur zéro...
$flag_erreur = 0;

//On commence une session pour enregistrer les variables du formulaire...

session_start();


$_SESSION['champ1'] = $_POST['champ1'];
//Contrôle du spam...
if (eregi("http",$_POST['champ1'])) {
$erreur_champ1 = "Pour raisons de sécurité, ce champ ne peut comporter les caractères <b>http</b>";
$flag_erreur = 1;
}
if (eregi("\[url",$_POST['champ1'])) {
$erreur_champ1 = "Pour raisons de sécurité, ce champ ne peut comporter les caractères <B>[url</b>";
$flag_erreur = 1;
}
if (eregi("<a",$_POST['champ1'])) {
$erreur_champ1 = "Pour raisons de sécurité, ce champ ne peut comporter des liens hypertexte.";
$flag_erreur = 1;
}
if (eregi("\[link",$_POST['champ1'])) {
$erreur_champ1 = "Pour raisons de sécurité, ce champ ne peut comporter les caractères <b>[link</b>";
$flag_erreur = 1;
}
$_SESSION['zone_email1'] = $_POST['zone_email1'];

//Contrôle du spam...
if (eregi("http",$_POST['zone_email1'])) {
$erreur_email1 = "Pour raisons de sécurité, ce champ ne peut comporter les caractères <b>http</b>";
$flag_erreur = 1;
}
if (eregi("\[url",$_POST['zone_email1'])) {
$erreur_email1 = "Pour raisons de sécurité, ce champ ne peut comporter les caractères <B>[url</b>";
$flag_erreur = 1;
}
if (eregi("<a",$_POST['zone_email1'])) {
$erreur_email1 = "Pour raisons de sécurité, ce champ ne peut comporter des liens hypertexte.";
$flag_erreur = 1;
}
if (eregi("\[link",$_POST['zone_email1'])) {
$erreur_email1 = "Pour raisons de sécurité, ce champ ne peut comporter les caractères <b>[link</b>";
$flag_erreur = 1;
}

// Définir l\'icone apparaissant en cas d\'erreur...


// Définir sur 0 pour afficher un petit x de couleur rouge.
// Définir sur 1 pour afficher l\'image d\'une croix rouge telle que celle utilisée dans l\'assistant
// Si vous utilisez l\'option 1, l\'image de la croix rouge \'icone.gif\' doit se trouver dans le répertoire \'images\',
// ce dernier devant se trouver au même niveau que votre formulaire...
$flag_icone = 0;

// On vérifie si $flag_icone est défini sur 0 ou 1...
if ($flag_icone == 0) {
$icone = "<b><font size=\"3\" face=\"Arial, Verdana, Helvetica, sans-serif\" color=\"#CC0000\">x</font></b>";
} else {
$icone = "<img src=\"images/icone.gif\"";
}


//Validation PHP des éléments du formulaire...

// N'envoyer le formulaire que s'il n'y a pas d'erreurs...
if ($flag_erreur == 0) {					

// Addresse de réception du formulaire
$email_dest = "[email protected]";
$sujet = "Contact";
$entetes ="MIME-Version: 1.0 \n";
	$entetes .="From: Contact<[email protected]>\n";
	$entetes .="Return-Path: Contact<[email protected]>\n";
	$entetes .="Reply-To: Contact<[email protected]>\n";
	$entetes .="Content-Type: text/html; charset=iso-8859-1 \n";
	$partie_entete = "<html>\n<head>\n<title>Formulaire</title>\n<meta http-equiv=Content-Type content=text/html; charset=iso-8859-1>\n</head>\n<body bgcolor=#FFFFFF>\n";


//Partie HTML de l'e-mail...
$partie_champs_texte .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Message = " . $_SESSION['champ1'] . "</font><br>\n";
$partie_zone_email .= "<font face=\"Verdana\" size=\"2\" color=\"#003366\">Mail = " . $_SESSION['zone_email1'] . "</font><br>\n";
					

					// Fin du message HTML
					$fin = "</body></html>\n\n";
					
					$sortie = $partie_entete . $partie_champs_texte . $partie_zone_email . $partie_listes . $partie_boutons . $partie_cases . $partie_zone_texte . $fin;


					// Send the e-mail
					if (@!mail($email_dest,$sujet,$sortie,$entetes)) {
					echo("Envoi du formulaire impossible");
					exit();
					} else {

                    // Rediriger vers la page de remerciement
                    header("Location:merci.php");
                    exit();
                  } // Fin else
			    } // Fin du if ($flag_erreur == 0) {
			} // Fin de if POST
?>

 <?php 
 $cryptinstall="crypt/cryptographp.fct.php";
 include $cryptinstall;  
 ?>

<!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</title></head><body><form name="mail_form" method="post" action="verifier.php" action="<?php echo($_SERVER['PHP_SELF']); ?>">
  <div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong>Formulaire
    de contact</strong></font></div><br></br><table align="center" width="566" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td height="16"><div align="center">
  <font color="#CC0000" size="2" face="Verdana, Arial, Helvetica, sans-serif, Tahoma"><strong><?php
if ($erreur_champ1) {
	  echo(stripslashes($erreur_champ1));
	  } else {
if ($erreur_email1) {
	  echo(stripslashes($erreur_email1));
	  } else {
} // Fin du else...
} // Fin du else...
?>
    </strong></font>
    </div></td>
      </tr>
    </table>
<p align="center"></p><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Message</font></div></td>
	  <td align="center" valign="middle" width="30">
      <?php
	  if ($erreur_champ1) {
	  echo($icone);
	  }
	  ?>
      </td>
      <td><input name="champ1" type="text" value="<?php echo(stripslashes($_SESSION['champ1'])); ?>"></input></td>
    </tr></table><table width="566" border="0" align="center"><tr>
      <td width="140"><div align="right"><font face="Verdana" size="2">Mail</font></div></td>
      <td width="30" align="center" valign="middle">
	  <?php
	  if ($erreur_email1) {
	  echo($icone);
	  }
	  ?>
	  </td>
      <td><input name="zone_email1" type="text" value="<?php echo(stripslashes($_SESSION['zone_email1'])); ?>"></input></td>
    </tr></table><table width="566" border="0" align="center"><tr>
<td valign="top"><div align="center"> 

<center><br>
<?php dsp_crypt(0,1); ?><br>
<font color="#848484"><b>Recopiez le code ici :</b></font><br>
<input type="text" name="code"><br>
</center><br>

          <input type="reset" name="Reset" value=" Effacer "></input>
            
          <input type="submit" name="envoi" value="Envoyer"></input>
        </div></td></tr></table><div align="center"><input name="nbre_fichiers" type="hidden" id="nbre_fichiers" value="0"></input></div></form></body></html>



Bon, ça fait un peu peur mais c'est un simple formulaire.
Pour vous aider un peu, voici la partie du code qui envoie le mail...
<form name="mail_form" method="post" action="verifier.php" action="<?php echo($_SERVER['PHP_SELF']); ?>">
Comme la vérification renvoie sur "verifier.php" le reste du code ne s’exécute pas, j'aimerais savoir comment exécuter ce code si le captcha est bon, que mettre dans verifier.php ?




Merci pour votre aide, j'en ai extrêmement besoin, je sèche.
Bonne journée !

Re: Captcha Cryptographp sur formulaire

Posté : 08 mai 2011, 12:26
par Ryle
Lorsque tu soumets ton formulaire tu envoi à la fois les le captcha et les autres données. Plutot que de tout envoyer vers le script de contrôle et t'embêter à renvoyer les donner vers la page de traitement, pourquoi ne pas tout envoyer vers la page de traitement et contrôler ton captcha en début de script ?

Si ton captcha est bien renseigné, tu exécutes le traitement du formulaire, sinon, ben tu fais autre chose.. ou pas :)

Re: Captcha Cryptographp sur formulaire

Posté : 08 mai 2011, 15:58
par Steve91
Merci pour ta réponse ! J'aimerais bien mais... Comment ?!!! :oops:

Re: Captcha Cryptographp sur formulaire

Posté : 08 mai 2011, 16:32
par moogli
Yop,

Le plus simple est de copier le code de vérification du captcha dans le code de vérification du formulaire (au debut).

Avec le code que tu a mis tu peut mettre la vérification du formulaire dans le if (la ou il y a bravo) et ainsi gérer les deux ensemble.

@+

Re: Captcha Cryptographp sur formulaire

Posté : 08 mai 2011, 17:11
par Steve91
J'y est pensé, j'ai mis ça au lieu d'intégrer verifier.php
<form name="mail_form" method="post" action="<?php if (chk_crypt($_POST['code'])) echo($_SERVER['PHP_SELF']); else echo "Erreur, le code est incorrect" ; ?>" onsubmit="return verifSelection()" >
Pour moi ça devrait marcher mais il y a un truc qui cloche...
J'ai juste intégré ça :
<?php
  if (chk_crypt($_POST['code'])) 
     echo "bla";
     else echo "<a><font color='#FF0000'>=> Erreur, le code est incorrect</font></a>" ;
?>
A ça :
<form name="mail_form" method="post" action="<? php echo($_SERVER['PHP_SELF']);  ?>" onsubmit="return verifSelection()" >
Donc logiquement si le code est bon ça envoie avec
php echo($_SERVER['PHP_SELF']);
Mais ça ne marche pas du tout.

Re: Captcha Cryptographp sur formulaire

Posté : 08 mai 2011, 17:24
par moogli
En fait le code que tu a mis doit etre utilisé avec le code php de validation du formulaire et non a l'affichage du formulaire.

Donc ton code de validation devrait etre (schématiquement)
If(captcha valide){
if (formulaire valide){
echo ok
}
else {
formulaire pas bon
}
}
else {
Captcha pas bon
}

Affichage du html

@+

Re: Captcha Cryptographp sur formulaire

Posté : 08 mai 2011, 17:31
par Steve91
Je comprends la logique mais franchement je suis loin d'être en mesure de l'appliquer seul :(
Je comprends mais je ne sait pas mettre en place.