Foros del Web » Programando para Internet » PHP »

captcha no verifica los datos introducidos

Estas en el tema de captcha no verifica los datos introducidos en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 09/06/2007, 19:12
Avatar de leskolpykos  
Fecha de Ingreso: junio-2007
Ubicación: Caracas
Mensajes: 96
Antigüedad: 16 años, 10 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);
?>
  #2 (permalink)  
Antiguo 09/06/2007, 23:58
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: captcha no verifica los datos introducidos

Hola leskolpykos, bienvenido a los foros :

El código captcha suele usarse en el destino del formulario, y la verificación sería algo así:
if ($_POST["captcha"] == $_SESSION["captcha"]) // correcto...

En tu caso no veo que uses un action por lo que el envío se debe hacer a sí mismo... pero no le veo sentido.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 10/06/2007, 13:34
Avatar de leskolpykos  
Fecha de Ingreso: junio-2007
Ubicación: Caracas
Mensajes: 96
Antigüedad: 16 años, 10 meses
Puntos: 0
Exclamación Re: captcha no verifica los datos introducidos

hola caricatos! gracias por responderme! ese código que coloqué fue el que encontré en internet, yo lo adapto a mi form, aqui te coloco el form donde lo voy a colocar, para que veas el action

estuve leyendo otros temas sobre captcha aqui en el foro y vi que otro usuario tiene el mismo problema y lo que hicieron fue mandarlo a ver unos links pero el code es el mismo, y veo que otros usuarios con experiencia en programación también estan bien confundidos. tan dificil es hacer esto para ponerle seguridad a un formulario? que otra cosa puedo usar que no sea un captcha ya que veo que esto no lo voy a poder hacer, espero tu consejo. gracias de antemano

<?php

$datafile = "msgs.data";

if(isset($_POST[content])) {
extract($_POST);

$oldarray = fopen("$datafile", "r");
$oldcontents = fread($oldarray, filesize($datafile)) or die( 'Could not read from file.');
fclose($oldarray);

if(!$fp = fopen("$datafile", "w")){
die("Error: PHP does not appear to have permission to write to $datafile");
}
fwrite ($fp, "<b>Enviado por:</b> $name - ");
fwrite ($fp, date("d/n/y [h:i:s A]"));
fwrite ($fp, "<br><b>Email:</b> <font color='#FFFFFF'><a href='mailto:$email'>$email</a></font><br>");
fwrite ($fp, "<b>Título:</b> $title<br><b>Mensaje:</b><br>");
fwrite ($fp, stripslashes($content) . "<br><hr noshade size=1><br>");
fwrite ($fp, $oldcontents);
fclose($fp);
header("Location: $_SERVER[PHP_SELF]");
}
?>



<form method="post" action="<? echo $_SERVER[PHP_SELF]; ?>">
</font>
<span class="Estilo4">
<b><font style='font-family:Verdana' color="#FFCC00">Escribe tu mensaje<font><font size=2 style='font-family:Verdana'><br>
<br>
Nombre:</font></b><font color="#FFCC00" size="2" style="font-family: Verdana">*</font><font style='font-family:Verdana; font-size:8pt'>
</font><font size=2 style='font-family:Verdana'>&nbsp;<input type="text" name="name" style="font-family: Verdana; font-size: 10pt; color: #800000; border: 1px solid #800000" size="20"><br>
</font>
</span>
<span class="Estilo4">
<font style='font-family:Verdana; font-size:2pt'><br>
</font><font size=2 style='font-family:Verdana'><b>Email:</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" name="email" size="20" style="font-family: Verdana; font-size: 10pt; color: #800000; border: 1px solid #800000"><br>
</font><font style='font-family:Verdana; font-size:2pt'>
<br>
</font><font size=2 style='font-family:Verdana'><b>Título:</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" name="title" style="font-family: Verdana; font-size: 10pt; color: #800000; border: 1px solid #800000" size="20">
<br>
</font><font style='font-family:Verdana; font-size:2pt'><br>
</font><font size=2 style='font-family:Verdana'><b>Mensaje:</b><font color="#FFCC00">*</font>
<textarea name=content rows=6 cols=47 wrap=soft style="font-family: Verdana; font-size: 10pt; color: #800000; border: 1px solid #800000"></textarea><br>
</font><font style='font-family:Verdana; font-size:2pt'><br>
</font><font style='font-family:Verdana; font-size:7pt'[</font><font color="#FFCC00" size="2" style="font-family: Verdana">*</font><font style='font-family:Verdana; font-size:7pt'>Campos
obligatorios]&nbsp; </font><font size=2 style='font-family:Verdana'>


<input type="submit" name="submitButton" value="Publicar" style="font-family: Verdana; color: #FFFFFF; font-size: 8pt; border: 1px solid #FFFFFF; background-color: #CC0000">
</span>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:24.