Formulaire php htlm / captcha [Résolu]

Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 15 févr. 2011 à 20:36 - Dernière réponse :
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Dernière intervention
11 septembre 2013
- 15 févr. 2011 à 20:51
3
Merci
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++

Merci cod57 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cod57
Meilleure réponse
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 16 févr. 2011 à 14:44
3
Merci
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 !

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 15 févr. 2011 à 21:37
0
Merci
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
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Dernière intervention
11 septembre 2013
- 15 févr. 2011 à 23:10
0
Merci
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
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 16 févr. 2011 à 14:10
0
Merci
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
Messages postés
2
Date d'inscription
mercredi 16 février 2011
Dernière intervention
17 février 2011
- 16 févr. 2011 à 20:21
0
Merci
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
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Dernière intervention
11 septembre 2013
- 16 févr. 2011 à 21:30
0
Merci
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
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 17 févr. 2011 à 16:48
0
Merci
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.