probleme de captcha

Eléphant du PHP | 59 Messages

21 févr. 2011, 11:56

bonjour,j'ai trouvé un petit script de code captcha qui est très léger et je l'ai adopté,mais mon problème est que le formulaire est validé même sans taper le code,le voici:
  <?php
    $oui = '1';
    $value = '';
    $type = 'password';
    if ( isset ($_POST['code_entre']) AND isset ($_POST['code']))
    {
        $code_entre = $_POST['code_entre'];
        $code = $_POST['code'];
        $code = $code / '368.5';
        if ($code_entre == NULL)
        {
            $ok = ' Erreur, vous n\'avez pas entré de code.';
            $oui = '0';
        }
        elseif ($code_entre != $code)
        {
            $ok = ' Erreur, mauvais code.';
            $oui = '0';
        }
        else
        {
            $ok = ' OK, le code est bon.';
            $value = 'value="' .$code. '"';
            $type = 'text';
        }
    }
    else
    {
        $ok = '';
        $oui = '0';
    }
    if ( $oui == '0' )
    {
        $code = rand('100000', '999999');
        header ('Content-type: image/png');
        $image = imagecreate('56', '20');
        $noir = imagecolorallocate($image, '0', '0', '0');
        $blanc = imagecolorallocate($image, '255', '255', '255');
        imagestring($image, '4', '4', '2', $code, $blanc);
        imagepng($image, 'code.png');
        header ('Content-type: text/html');
    }
    $code = $code * '368.5';
    ?>
    <form method="post" action="">
        <p><img src="code.png" title="Code" alt="Code"/><label for="code_entre"> Entrez le code de l'image.</label> <input type="<?php echo $type ?>" name="code_entre" id="code_entre" size="7" maxlength="6" <?php echo $value; ?>/>
        <input type="submit" value="OK"/>
        <input name="code" id="code" type="hidden" value="<?php echo $code; ?>"/>
    </form>
    <?php echo $ok; ?></p>
avez vous une idée?
merci de votre aide

Avatar du membre
ViPHP
ViPHP | 3008 Messages

21 févr. 2011, 12:12

Bonjour,

Je n'ai pas regardé le code en détail mais je l'ai avant tout testé.

De mon côté, le formulaire ne se valide pas si le champ est vide et si le code est erroné...

Eléphant du PHP | 59 Messages

21 févr. 2011, 22:19

bonsoir
merci pour ta réponse.
chez moi le formulaire est valide,avec code ou sans code.
veux tu que je poste la page complète pour voir si j'ai fait un erreur car moi je ne trouve rien qui cloche.
merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 févr. 2011, 02:03

salut,

effectivement le code complet parait être une bonne idée vu que le code est fonctionnel ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 59 Messages

22 févr. 2011, 09:30

bonjour et merci voici le code complet du formulaire:

<?php
session_start();
?>

<html>
<script type="text/javascript" language="Javascript" >
<!--
 <?php
    $oui = '1';
    $value = '';
    $type = 'password';
    if ( isset ($_POST['code_entre']) AND isset ($_POST['code']))
    {
        $code_entre = $_POST['code_entre'];
        $code = $_POST['code'];
        $code = $code / '368.5';
        if ($code_entre == NULL)
        {
            $ok = ' Erreur, vous n\'avez pas entré de code.';
            $oui = '0';
        }
        elseif ($code_entre != $code)
        {
            $ok = ' Erreur, mauvais code.';
            $oui = '0';
        }
        else
        {
            $ok = ' OK, le code est bon.';
            $value = 'value="' .$code. '"';
            $type = 'text';
        }
    }
    else
    {
        $ok = '';
        $oui = '0';
    }
    if ( $oui == '0' )
    {
        $code = rand('100000', '999999');
        header ('Content-type: image/png');
        $image = imagecreate('56', '20');
        $noir = imagecolorallocate($image, '0', '0', '0');
        $blanc = imagecolorallocate($image, '255', '255', '255');
        imagestring($image, '4', '4', '2', $code, $blanc);
        imagepng($image, 'code.png');
        header ('Content-type: text/html');
    }
    $code = $code * '368.5';
    ?>
function verification()
{



 if(document.formulaire.pseudo.value == "")  {
   alert("Veuillez entrer un pseudo svp");
   document.formulaire.pseudo.focus();
   return false;
  }
   else if(document.formulaire.pwd.value == "") {
   alert("Veuillez entrer un mot de passe svp");
   document.formulaire.pwd.focus();
   return false;
  }
   else if(document.formulaire.pwd2.value == "") {
   alert("Veuillez confirmer votre mot de passe svp");
   document.formulaire.pwd2.focus();
   return false;
  }
  else   if(document.formulaire.pwd2.value != document.formulaire.pwd.value) {
   alert("Veuillez entrer un mot de passe identique svp");
   document.formulaire.pwd2.focus();
   return false;
  }
  else   if(document.formulaire.mail.value == "") {
   alert("Veuillez entrer une adresse email svp");
   document.formulaire.mail.focus();
   return false;
  }
  
  else  if(document.formulaire.mail.value.indexOf('@') == -1) {
   alert("Ce n'est pas une adresse mail valide");
   document.formulaire.mail.focus();
   return false;
  }
  else  if(document.formulaire.mail.value.indexOf('.') == -1) {
   alert("Ce n'est pas une adresse mail valide");
   document.formulaire.mail.focus();
   return false;
  }
 
   else if(document.formulaire.accord.checked == false) {
   alert("Veuillez accepter la difusion de vos coordonnées svp");
   document.formulaire.accord.focus();
   return false;
  } 
  
  	
return true
}
//-->
</script>

<table width="940" border="0" align="left" >

	<TR>
		<TD width="150" valign="top">
			<?php include('frame_gauche.php'); ?>
		</TD>

		<TD>

<?php
	
if ($_SESSION['loginOK'] == true) {
	include('menus_session.htm');
	echo "</br>";	
}
	
If ($modif != 2) {

$modif=$_GET['modif'];

		$pseudo2="";
		$mail="";
		$pwd="";
		$nom="nom";
		$prenom="prenom";
	}

if ($_SESSION['loginOK'] == true AND $modif == 1) {
	
	$id=$_SESSION['id'];
		
	include('connexion_SQL.php');
		
	$reponse = mysql_query("SELECT * FROM conducteurs WHERE ID='$id'") or die(mysql_error());
		
	while ($donnees = mysql_fetch_array($reponse) ) {
		$pseudo2=$donnees['pseudo'];
		$mail=$donnees['mail'];
		$pwd=$donnees['pwd'];
		$nom=$donnees['nom'];
		$prenom=$donnees['prenom'];
		$tel=$donnees['tel'];
		}
		
	mysql_close();
	}
	
	else {
		//$modif = "";
		}
?>

		
		
<form name="formulaire" action="

<?php
if ($modif == 1) { echo"enregistre_conducteur.php?modif=1"; }
else {echo"enregistre_conducteur.php"; }
?>

" method="post" onSubmit="return verification()">
  
  <table width="750" border="0">
    <tr>
      <td width="240" height="24"><p><strong>Je m'identifie:</strong></p>
      </td>
      <td width="500">&nbsp;</td>
  </tr>
  </table>
  
    <table width="750" border="0">
    <tr>
      <td width="240" height="24"><div align="right">Mon nom</div></td>
      <td width="500"><input name="prenom" type="text" <?php echo "value=\"$prenom\""; ?>	  onFocus="javascript:this.value=''" >
        <input name="nom" type="text" <?php echo "value=\"$nom\""; ?> onFocus="javascript:this.value=''" ></td>
    </tr>
	</table>
	
	<table width="750" border="0">
    <tr>
      <td width="240" height="24"><div align="right">Mon pseudo*</div></td>
      <td width="500"><input type="text" name="pseudo" <?php echo "value=\"$pseudo2\""; ?> ></td>
    </tr>
	</table>
	
	<table width="750" border="0">
    <tr>
      <td height="8"></td>
    </tr>
	</table>
  
	<table width="750" border="0">
  <tr>
    <td width="240" height="24"><div align="right">Je choisis un mot de passe*</div></td>
    <td width="500"><input type="password" name="pwd" <?php echo "value=\"$pwd\""; ?> ></td>
  </tr>
	</table>
  
  <table width="750" border="0">
  <tr>
    <td width="240" height="24"><div align="right">Je confirme le mot de passe*</div></td>
      <td width="500"><input type="password" name="pwd2" <?php echo "value=\"$pwd\""; ?>></td>
  </tr>
	</table>
<p>&nbsp;</p>
<p><strong>Pour me joindre:</strong></p>
<table width="750" border="0">
  <tr>
    <td width="240" height="24"><div align="right">Mon adresse mail*      </div></td>
    <td width="500"><input type="text" name="mail" <?php echo "value=\"$mail\""; ?>></td>
  </tr>
</table>

	<table width="750" border="0">
  <tr>
    <td width="240" height="24"><div align="right">Mon t&eacute;l&eacute;phone</div></td>
    <td width="500"><input type="text" name="tel" <?php echo "value=\"$tel\""; ?>></td>
  </tr>
	</table>

	
<p>* champs obligatoires</p>

<BR>

<p>
  <input name="accord" type="checkbox" value="oui" <?php if ($modif != "") {echo"checked"; } else {echo "unchecked"; } ?> >
  J'accepte que mes coordonnées soient communiquées aux usagers de ce site (dans tous les cas mon adresse mail ne sera pas visible sur le site)<br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ce site s'engage à ne pas communiquer vos données à toute autre personne que les utilisateurs de ce site.<br />
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Je decharge les createurs de ce site de toute responsabilité en cas de problème survenu lors du covoiturage. 
  
  <br />
</p>
<blockquote>
  <p>
   	   <form method="post" action="">
        <p><img src="code.png" title="Code" alt="Code"/><label for="code_entre"> Entrez le code de l'image.</label> <input type="<?php echo $type ?>" name="code_entre" id="code_entre" size="7" maxlength="6" <?php echo $value; ?>/>
        <input type="submit" value="OK"/>
        <input name="code" id="code" type="hidden" value="<?php echo $code; ?>"/>
    </form>
    <?php echo $ok; ?></p>
  </p>
</blockquote>
</form>

</TD>
</TR>

</table>


</html>
merci bonne journée

Avatar du membre
ViPHP
ViPHP | 3008 Messages

22 févr. 2011, 10:25

Après vérification des champs de ton formulaire par du javascript, tu le rediriges soit vers enregistre_conducteur.php?modif=1 soit vers enregistre_conducteur.php. Or tu as mis la vérification PHP du capcha dans la page du formulaire donc cette vérification ne se fera jamais.

Eléphant du PHP | 59 Messages

22 févr. 2011, 10:35

merci mais je ne suis pas un pro,alors si tu veux bien m'indiquer la modif en vert ça serait sympa de ta part!
cordialement

Avatar du membre
ViPHP
ViPHP | 3008 Messages

22 févr. 2011, 10:50

Je t'ai tout expliqué plus haut. Tu n'es pas un pro c'est pour ça que chercher par toi-même d'après les explications t'aidera bien plus.

En gros, lorsque tu valides ton formulaire et après vérification des champs, il va exécuter l'action qui se trouve être une autre page (enregistre...).

Ton code pour vérifier le captcha commence par :
if ( isset ($_POST['code_entre']) AND isset ($_POST['code']))
A quoi correspond POST si ce n'est les variables que tu récupères à partir de ton formulaire ? Il faut que tu fasses de tel manière que lorsque tu valides ton formulaire, ce dernier passe avant tout par cette vérification.

Eléphant du PHP | 59 Messages

22 févr. 2011, 11:27

ok compris,merci pour tout

ViPHP
ViPHP | 5462 Messages

22 févr. 2011, 11:35

if ( isset ($_POST['code_entre']) AND isset ($_POST['code']))
plutôt
if(isset($_POST['code_entre'], $_POST['code']))
mais normalement c'est plus :
if(filter_has_var(INPUT_POST, 'code_entre') && filter_has_var(INPUT_POST, 'code'))
:wink: