Formulaire php htlm / captcha

Résolu
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015 - 15 févr. 2011 à 20:36
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015 - 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

8 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
15 févr. 2011 à 20:51
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++
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
16 févr. 2011 à 14:44
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 !
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
15 févr. 2011 à 21:37
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 ...
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
15 févr. 2011 à 23:10
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);
 
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
16 févr. 2011 à 14:10
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.
0
Sotaicho Messages postés 2 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 17 février 2011
16 févr. 2011 à 20:21
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
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
16 févr. 2011 à 21:30
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++
0
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
17 févr. 2011 à 16:48
Exact ! Voici un autre exemple que tu n'as plus qu'à copier dans ta page pour tester :




Voila ...
0
Rejoignez-nous