Page 1 sur 1

Création d'une confirmation visuelle dans un formulaire

Posté : 07 mars 2006, 17:13
par Victor BRITO
Salut à tous!

Pour mon tout premier message sur ce forum, je voudrais savoir comment s'y prendre pour créer une confirmation visuelle, et ce non pas dans un forum phpBB, mais dans un formulaire d'envoi de courriel.

Posté : 07 mars 2006, 17:43
par mere-teresa
Comme un message d'erreur, mais quand il n'y a pas d'erreur ?

Posté : 07 mars 2006, 17:45
par Victor BRITO
Salut!

Non. Je veux parler de la confirmation visuelle, qui génère une image avec des chiffres et des lettres tordues que le client doit taper avant d'envoyer le formulaire.

Posté : 07 mars 2006, 17:50
par mario
tu veux sans doute parler du CAPTCHA

Posté : 07 mars 2006, 17:52
par Victor BRITO
Salut!

Oui, c'est ça. :)

Posté : 07 mars 2006, 18:03
par mario
Tu recherches une solution toute faite ou tu souhaites le faire toi même ?

Posté : 07 mars 2006, 18:05
par Victor BRITO
Re!

J'ai cherché à travers le lien que tu as donné et trouvé des tutoriaux que je garde sous le coude. Mais, si je peux le faire moi-même, c'est encore mieux. :wink:

Posté : 07 mars 2006, 18:14
par mario
Re!

J'ai cherché à travers le lien que tu as donné et trouvé des tutoriaux que je garde sous le coude. Mais, si je peux le faire moi-même, c'est encore mieux. :wink:
Le principe est de générer un texte. J'ai une fonction très basique sur mon blog , tu peux t'en inspirer :arrow: LIEN

Une fois le mot de passe généré, le mieux, à mon avis, est de le stocker dans une variable de session :arrow: INFO ICI

Créé un fichier image.php par exemple pour générer le CAPTCHA (texte issu de la variable de session). Tu peux t'inspirer de la doc pour générer simplement un texte :arrow: imageString()

pour appeler le captcha a partir du formulaire, tu insères simplement:
<img src='image.php'/>


Pour la validation du formulaire, tu fais une simple condition (IF) pour comparer ce que le visiteur a tapé avec le texte stocké dans ta variable de session.

J'espère ne pas avoir été brouillon dans mes explications :wink:

Posté : 07 mars 2006, 18:19
par Victor BRITO
Salut!

Merci bien. Je m'en vais essayer tout ça.

Posté : 08 mars 2006, 17:01
par Victor BRITO
Salut!

J'ai essayé, mais le formulaire ne s'affiche pas: en lieu et place, une page toute blanche, sans message d'erreur. :(

Voici le code de la page image.php:
<?php 
$img=imagecreate(200, 50);
$noir=imagecolorallocate($img, 0, 0, 0);
$blanc=imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $noir);
session_start();
$img_alea=$_SESSION["img_alea"];
imagechar($img, 5, 0, 0, $img_alea[0], $blanc);
imagechar($img, 5, 25, 0, $img_alea[1], $blanc);
imagechar($img, 5, 50, 0, $img_alea[2], $blanc);
imagechar($img, 5, 75, 0, $img_alea[3], $blanc);
imagechar($img, 5, 100, 0, $img_alea[4], $blanc);
imagechar($img, 5, 125, 0, $img_alea[5], $blanc);
imagechar($img, 5, 150, 0, $img_alea[6], $blanc);
imagechar($img, 5, 175, 0, $img_alea[7], $blanc);
header("Content-type: image/jpeg");
imagejpeg($img);
?>
Et voici celui de la page index.php (où doit s'afficher le formulaire):
<?php 
session_start();
$img_texte="";
$_SESSION["img_alea"]=$img_texte;
if (!isset($_POST["saisie"])) $saisie=""; else $saisie=$_POST["saisie"];
$caracteres="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
for($i=1; $i<=8; $i++){
	$img_texte.=$caracteres[rand(0, 61)];
}
return $img_texte;
?>
<!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>Document sans titre</title>
</head>

<body>
<?php 
if (!isset($_POST["saisie"])){
?>
<form id="form1" name="form1" method="post" action="">
  Veuillez saisir le code<br />
  <img src="image.php?<?php echo SID ?>" /><br />
  <input name="saisie" type="text" id="saisie" />
  <br />
  <input type="submit" name="Submit" value="OK" />
</form>
<?php 
}
else{
	if ($saisie==$img_texte) echo "Bravo&nbsp;! vous n&rsquo;&ecirc;tes pas un robot.";
	else echo "R&eacute;essayez, si vous n&rsquo;&ecirc;tes pas un robot. <a href='index.php'>Retour</a>";
}
session_unset();
session_destroy();
?>
</body>
</html>