Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2007, 19:12
Avatar de leskolpykos
leskolpykos
 
Fecha de Ingreso: junio-2007
Ubicación: Caracas
Mensajes: 96
Antigüedad: 16 años, 11 meses
Puntos: 0
Pregunta captcha no verifica los datos introducidos

amigos tengo un problema para crear un sistema de código de seguridad o captcha como le llaman. el formulario crea la imagen con el código perfectamente pero no verifica lo introducido en el campo, es decir, asi coloque los numeros de la imagen o no, igual envia el form, inclusive dejando el campo vacio también lo envía. alguien me dijo que le debe faltar un condicional pero no se q es eso ni como ubicarlo pues no soy programador. estuve leyendo un manual en internet pero no me funcionó, quisiera saber si alguien me puede ayudar adecirme que le falta y en que parte va ese condicional. gracias de antemano.

les coloco los dos códigos para que puedan ver donde está el error o lo que falta. gracias por su ayuda!


********************** formulario.php********************

<?php
session_start();
$longitud=4;
$codi="";
for ($i=1; $i<=$longitud; $i++)
{
$letra = chr(rand(48,57));
$codi .= $letra;
}
$captcha=$codi;
session_register ("captcha");
?>
<html >
<head>
<title>php.elmultiusos.com</title>
</head>
<body>
<br />
<FORM METHOD="post" ACTION="">
<TABLE WIDTH="510" BORDER="0" align="center" cellpadding="3" bgcolor="#FFFFFF">
<TR>
<TD WIDTH="150" align="right"><span class="text_blau">Nombre</span></TD>
<TD WIDTH="360"> <INPUT NAME="Nombre" TYPE="text" SIZE="46" ></TD>
</TR>
<TR>
<TD WIDTH="150" align="right"><span class="text_blau">Apellido</span></TD>
<TD WIDTH="360"> <INPUT NAME="apellido" TYPE="text" SIZE="46"></TD>
</TR>
<tr>
<td colspan="2">


//Hacemos la llamada a la imagen generada por captcha.php

<div align="center">
<img src="captcha.php" alt="Código de seguridad" class="center">
</div><br>
<div align="center" style="padding-left:24px;">
<input name="codigo_captcha" type="text" id="codigo_captcha">
</div>

<br>
</td>
</tr>
<TR>
<TD colspan="4"><div align="center">
<input type="SUBMIT" value="Guardar" name="ok">
</div></TD>
</TR>
</TABLE>
</FORM>
</body>
</html>


********************** captcha.php ********************

<?php
session_start();

// Carácteres usados en el código
$letras = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

// Configuración del tamaño de la imágen y de la fuente
$ancho_caja = 150;
$alto_caja = 50;
$tam_letra = 14;
$tam_letra_grande = 30;

// Angulo de rotación de las letras
$angmax = 10;

// Formato de la imágen
header("Content-type: image/png");

// Crear la imágen
$im = imagecreate($ancho_caja, $alto_caja);

// Colores ha usar
$gris = ImageColorAllocate($im, 200, 200, 200);
$colorLetra = ImageColorAllocate($im, 120, 100, 101);
$colorLetraFondo = ImageColorAllocate($im, 180, 180, 180);

// Tipo de letra, esta ha sido obtenida en dafont.net
$fuente = 'HOTTAML.TTF';


// Calculo el número de líneas que entran
$caja_texto = imagettfbbox($tam_letra, 0, $fuente , $letras);
$alto_linea = abs($caja_texto[7]-$caja_texto[1]);
$num_lineas = intval($alto_caja / $alto_linea)+1;

// Dibujar el fondo de la imágen
$pos = 0;
for ($i = 0; $i<$num_lineas; $i++)
{
$x = 0;
for ($j = 0; $j<30; $j++)
{
$texto_linea = $letras[rand(0, strlen($letras)-1)].' ';
$caja_texto = imagettfbbox($tam_letra, 0, $fuente , $texto_linea);
imagettftext($im, $tam_letra, rand(-$angmax, $angmax), $x, $alto_linea*$i, $colorLetraFondo, $fuente , $texto_linea);
// Posicion x de la siguiente letra
$x += $caja_texto[2] - $caja_texto[0];
}
}
// Escribir las cuatro letras del CAPTCHA

$res=$_SESSION[captcha]; //El valor lo recuperamos de la session abierta

$ang1 = rand(-$angmax, $angmax);
$caja_texto = imagettfbbox($tam_letra_grande, $ang1, $fuente , $res[0]);
$y1 = abs($caja_texto[7]-$caja_texto[1]);
$x1 = abs($caja_texto[2]-$caja_texto[0]);
$res .= $letras[rand(0, strlen($letras)-1)];
$ang2 = rand(-$angmax, $angmax);
$caja_texto = imagettfbbox($tam_letra_grande, $ang2, $fuente , $res[1]);
$y2 = abs($caja_texto[7]-$caja_texto[1]);
$x2 = abs($caja_texto[2]-$caja_texto[0]);
$res .= $letras[rand(0, strlen($letras)-1)];
$ang3 = rand(-$angmax, $angmax);
$caja_texto = imagettfbbox($tam_letra_grande, $ang3, $fuente , $res[2]);
$y3 = abs($caja_texto[7]-$caja_texto[1]);
$x3 = abs($caja_texto[2]-$caja_texto[0]);
$caja_texto = imagettfbbox($tam_letra_grande, $ang2, $fuente , $res[3]);
$y3 = abs($caja_texto[7]-$caja_texto[1]);
$x3 = abs($caja_texto[2]-$caja_texto[0]);


imagettftext($im, $tam_letra_grande, $ang1, ($ancho_caja/2)-(($x1+$x2+$x3)/2), $y1+($alto_caja-$y1)/2, $colorLetra, $fuente , $res[0]);
imagettftext($im, $tam_letra_grande, $ang2, ($ancho_caja/2)-(($x1+$x2+$x3)/2)+($x1), $y2+($alto_caja-$y2)/2, $colorLetra, $fuente , $res[1]);
imagettftext($im, $tam_letra_grande, $ang3, ($ancho_caja/2)-(($x1+$x2+$x3)/2)+($x1+$x2), $y3+($alto_caja-$y3)/2, $colorLetra, $fuente , $res[2]);
imagettftext($im, $tam_letra_grande, $ang3, ($ancho_caja/2)-(($x1+$x2+$x3)/2)+($x1+$x2+$x3), $y3+($alto_caja-$y3)/2, $colorLetra, $fuente , $res[3]);
imagepng($im);
imagedestroy($im);
imagedestroy($im2);
?>