Formulaire php htlm / captcha [Résolu]

djbabou 155 Messages postés dimanche 21 octobre 2007Date d'inscription 23 novembre 2015 Dernière intervention - 15 févr. 2011 à 20:36 - Dernière réponse : djbabou 155 Messages postés dimanche 21 octobre 2007Date d'inscription 23 novembre 2015 Dernière intervention
- 17 févr. 2011 à 16:48
Bonjour, a tous

J'ai développé un formulaire dans lequel j'ai intégrer un captcha image. Comme tous captcha normalement construit, après soumission du formulaire, une vérification se fait afin de déterminer si le code saisi est correct ou pas.

Ce que je cherche a faire c'est cela :
si code est bon -> on enregistre dans bd ->on envoie mail au client et a l'admin
sinon, si code erroné -> on redirige vers le formulaire remplis avec les infos saisies précédemment, et le champs captcha à vide.

Pour valider quand le captcha est correct, c'est bon, par contre quand ce n'est pas le cas je c plus "???".
J'ai vu sur le net ->
utilisation des sessions ( pas trouvé de bon tuto )
utilisation de xmlhttprequst ( pas trouvé de bon tuto )

Connaissez vous d'autre moyen de générer un retour avc en plus la retransmission des infos pour éviter qu'on ressaisisse les même infos ?
Ou du moins avez vous des pistes quand aux tutos sur ces deux méthodes ?

Merci
Afficher la suite 

8 réponses

Répondre au sujet
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 15 févr. 2011 à 20:51
+3
Utile
bonsoir

tu peux

dans le form de départ
form.php

<?php if(isset($_GET['message']) && $_GET['message']==1){
$message="erreur code captcha";
echo $message; /*echo ici ou ailleurs dans la page*/
}else{
$message=NULL;
}


/*pour chaque input textarea du form ...*/

"/>

puis si ton captcha est pas bon dans la pageverif.php

header('Location: form.php?message=1');exit;

a++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cod57
djbabou 155 Messages postés dimanche 21 octobre 2007Date d'inscription 23 novembre 2015 Dernière intervention - 16 févr. 2011 à 14:44
+3
Utile
Bon une solution alternative,

La seule que j'ai trouvé pour l'instant : utiliser des sessions. Je crée une variable session pour chaque champs du formulaire, si bien que lors du retour sur le formulaire, mon champs se remplis bel et bien.

Peut être que je fait mal, et qu'il est dangereux d'utiliser ainsi les sessions, je n'en sait rien. Vous en pensez quoi ?

Voici le code que sa donne du coup

form.php
<?php
session_start();
if(isset($_GET['message']) && $_GET['message']==1){ 
$message="Erreur saisir un code correct"; 
//echo $message; /*echo ici ou ailleurs dans la page*/ 
}else{ 
$message=NULL; 
} 
?>
<form method="post" action="verif.php">
" /> 


<?php echo $message;?>

 

 
</form>


verif.php
<?php
session_start();
if(isset($_POST['code']) && isset($_SESSION['code']) && $_POST['code']===$_SESSION['code']){
echo '';
print_r($_POST); /*du form.php*/
echo '

';
echo 'ça marche';
/*un traitement*/
/*
mail();
mysql_connect() ...
*/
}else{
$_SESSION['nom'] = $_POST['nom'] ;
header('Location: form.php?message=1');exit;
}
?>


Du coup, mes champs se remplissent correctement... Je suis preneur si vous voulez me donner des conseils quand à l'utilisation des sessions ( ou des tutos ).

Merci cod57 pour ta précieuse aide !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de djbabou
djbabou 155 Messages postés dimanche 21 octobre 2007Date d'inscription 23 novembre 2015 Dernière intervention - 15 févr. 2011 à 21:37
0
Utile
Merci pour ta réponse !

Malheureusement, quand je l'applique à mon script, ben sa ne marche malheureusement pas tout a fait!

J'ai bien la redirection après validation, mais mes champs eux sont vides si le code est erroné.

J'ai mis ceci :
" />

Une erreur à ce niveau selon toi ? Peut être que je devrai d'abord récupérer toutes mes valeurs dans des POST quand je suis sur ma page de traitement avant la redirection ?

En tout cas merci déjà pour l'aide et la solution apportée ...
Commenter la réponse de djbabou
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 15 févr. 2011 à 23:10
0
Utile
bonsoir

ok petit tuto
les trois scripts + la police font arial dans un repertoire et tu testes
elle est dans c:/windows/fonts/

form.php
<?php
if(isset($_GET['message']) && $_GET['message']==1){ 
$message="Erreur saisir un code correct"; 
//echo $message; /*echo ici ou ailleurs dans la page*/ 
}else{ 
$message=NULL; 
} 
?>
<form method="post" action="verif.php">
" /> 

" /> 


<?php echo $message;?>

 

 
</form>



verif.php
<?php
session_start();
if(isset($_POST['code']) && isset($_SESSION['code']) && $_POST['code']===$_SESSION['code']){
echo '';
print_r($_POST); /*du form.php*/
echo '

';
echo 'ça marche';
/*un traitement*/
/*
mail();
mysql_connect() ...
*/
}else{
header('Location: form.php?message=1');exit;
}
?>


imagecaptcha.php
<?php
session_start();
 
/*
* File: CaptchaSecurityImages.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 03/08/06
* Updated: 07/02/07
* Requirements: PHP 4/5 with GD and FreeType libraries
* Link: http://www.white-hat-web-design.co.uk/articles/php-captcha.php
* 
* This program is free software; you can redistribute it and/or 
* modify it under the terms of the GNU General Public License 
* as published by the Free Software Foundation; either version 2 
* of the License, or (at your option) any later version.
* 
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details: 
* http://www.gnu.org/licenses/gpl.html
*
*/
 
class CaptchaSecurityImages {
 
   var $font = 'arial.ttf';
 
   function generateCode($characters) {
      /* list all possible characters, similar looking characters and vowels have been removed */
      $possible = '23456789bcdfghjkmnpqrstvwxyz';
      $code = '';
      $i = 0;
      while ($i < $characters) { 
         $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
         $i++;
      }
      return $code;
   }
 
   function CaptchaSecurityImages($width='120',$height='40',$characters='6') {
      $code = $this->generateCode($characters);
      /* font size will be 75% of the image height */
      $font_size = $height * 0.75;
      $image = imagecreate($width, $height) or die('Cannot initialize new GD image stream');
      /* set the colours */
      $background_color = imagecolorallocate($image, 255, 255, 255);
      $text_color = imagecolorallocate($image, 20, 40, 100);
      $noise_color = imagecolorallocate($image, 100, 120, 180);
      /* generate random dots in background */
      for( $i=0; $i<($width*$height)/3; $i++ ) {
         imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
      }
      /* generate random lines in background */
      for( $i=0; $i<($width*$height)/150; $i++ ) {
         imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
      }
      /* create textbox and add text */
      $textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
      $x = ($width - $textbox[4])/2;
      $y = ($height - $textbox[5])/2;
      imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
      /* output captcha image to browser */
      header('Content-Type: image/jpeg');
      imagejpeg($image);
      imagedestroy($image);
      $_SESSION['code'] = $code;
   }
 
}
 
$width = isset($_GET['width']) && $_GET['width'] < 600 ? $_GET['width'] : '120';
$height = isset($_GET['height']) && $_GET['height'] < 200 ? $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > 2 ? $_GET['characters'] : '6';
 
$captcha = new CaptchaSecurityImages($width,$height,$characters);
 
?>
Commenter la réponse de cod57
djbabou 155 Messages postés dimanche 21 octobre 2007Date d'inscription 23 novembre 2015 Dernière intervention - 16 févr. 2011 à 14:10
0
Utile
merci pour ce tuto.

Les étapes de vérification du captcha sont les même dans mon script. Je n'ai aucun problème au niveau de la vérification du captcha, ou de l'affichage de l'erreur si le code est erroné.

Mon problème : en cliquant sur le bouton submit, si le code est erroné selon la vérification, on redirige de nouveau vers le formulaire, et la, problème, les champs remplis préalablement par le client sont vides.

J'ai fait un test en utilisant ton tuto, idem, je n'arrive pas à remplir de nouveau les champs avec les valeurs saisies par l'internaute juste avant validation.

Peut être me comprendras-tu mieux !

Merci dans tous les cas. Moi je continue a creuser pour trouver une solution.
Commenter la réponse de djbabou
Sotaicho 2 Messages postés mercredi 16 février 2011Date d'inscription 17 février 2011 Dernière intervention - 16 févr. 2011 à 20:21
0
Utile
dans mon formulaire je voudrais insérer un champs intitulé "domaine d'epérience" avec un champs texte où le condidat ecrit son expérience et juste a coté une case à cocher intitulée "aucune expérience" qui une fois coché elle désactive l'apparrition du champs text sité précédement comment je dois procédé??
Merci d'avance pour votre aide
Commenter la réponse de Sotaicho
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 16 févr. 2011 à 21:30
0
Utile
bonsoir

avec du css (div) un javascript c'est possible
une idéé http://weuhzor.com/javascript.php

ici c'est
<button onclick="show_hide ... sur un button
pour toi
<input type="checkbox" onselect="...
tu affiches un champs
je te laisse chercher

a++
Commenter la réponse de cod57
djbabou 155 Messages postés dimanche 21 octobre 2007Date d'inscription 23 novembre 2015 Dernière intervention - 17 févr. 2011 à 16:48
0
Utile
Exact ! Voici un autre exemple que tu n'as plus qu'à copier dans ta page pour tester :




Voila ...
Commenter la réponse de djbabou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.