Tema: Captcha
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/07/2010, 06:35
gspablo
 
Fecha de Ingreso: octubre-2009
Mensajes: 223
Antigüedad: 15 años, 6 meses
Puntos: 2
Captcha

Buenas tengo un formulario con un campo captcha, es la primera vez que lo he usado, entonces me encuentro que tengo un campo con una imagen, generada por el archivo captcha.php, pero mi problema viene cuando intento que si el captcha introducido se comprueba con el requerido, porque de la forma que tengo hecho el formulario debe de ser enviado (en este caso a esta misma página ya que la comprobación solo funciona enviando el form) y además no recuerda los campos rellenados por tanto es una molestia para el usuario, os dejo el código a ver si podeis ayudarme

Tampoco puedo hacerlo con Javascript antes de enviarlo porque los numeros no coinciden...

Si pongo justo despues del formulario esta linea me aparece un numero distinto
echo $_SESSION['key'] (teoricamente este valor lo da en el captcha.php pero creo que lo ejecuta antes en el código)


ARCHIVO INDEX.PHP
--------------------------
Código PHP:
Ver original
  1. <form name="guestbook_entry" method="post" action="index.php">
  2. ......
  3. <tr>
  4.                 <td><img src="captcha.php" alt="" /></td>
  5.                 <td><input name="number" type="text"></td>
  6.                 <td></td>
  7.             </tr>
  8.             <tr>
  9.                 <td></td>
  10.                 <td>Please enter the string shown in the image above in the
  11.                 form.</td>
  12.             </tr>
  13.             <tr>
  14.                 <td>&nbsp;</td>
  15.                 <td><input type="submit" name="Submit" value="Submit"></td>
  16.             </tr>
  17.             </table>
  18.         </form>

ARCHIVO CAPTCHA.PHP
-----------------------------
Código PHP:
Ver original
  1. <?php
  2.  
  3. $RandomStr = md5(microtime());
  4. $ResultStr = substr($RandomStr,0,5);
  5. $NewImage = imagecreatefromjpeg("captcha/img.jpg");
  6.  
  7. $LineColor = imagecolorallocate($NewImage,233,239,239);
  8. $TextColor = imagecolorallocate($NewImage, 255, 255, 255);
  9. imageline($NewImage,1,1,40,40,$LineColor);
  10. imageline($NewImage,1,100,60,0,$LineColor);
  11. imagestring($NewImage, 5, 20, 10, $ResultStr, $TextColor);
  12.  
  13. $_SESSION['key'] = $ResultStr;
  14.  
  15. header("Content-type: image/jpeg");
  16. imagejpeg($NewImage);
  17.  
  18. ?>

COMPROBACION AL PRINCIPIO DE INDEX.PHP
----------------------------------------------------------
Código PHP:
Ver original
  1. $key=substr($_SESSION['key'],0,5);
  2.                 $number = $_REQUEST['number'];
  3.                 if($number!=$key)
  4.                 {......