Hola, estoy haciendo un captcha y el problema llega al querer verificar lo introducido por el usuario.
Les pongo los codigos:
Código PHP:
session_start();
$img=imagecreate(300,200);
.....
......
$letras="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$len_string=rand(3,7);
$string="";
for($i=0;$i<$len_string;$i++)
$string.=substr($letras,rand(0,61),1);
for($i=0;$i<strlen($string);$i++)
{
imagettftext($img,20,15*$inc,30*$i,50,$blanco,"FACERG.TTF",substr($string,$i,1));
$inc*=-1;
}
//variable que voy a usar en el script procesa_form.php
$_SESSION['string']=strtolower($string);
header("Content-Type: image/JPEG");
imagejpeg($img);
Formulario para introducir el valos del captcha
Código HTML:
<form action="procesa_form.php" method="post">
<h2 >Formulario con imagen</h2>
Ingresa el codigo de seguridad:<input type="text" size="25" name="captcha"/>
(No diferencia entre mayusculas y minusculas)
<img id='cap' name='cap' src='imagen-primero.php'/>
<?php echo $_SESSION['string'];?>
<br/>
<a href="#" onClick="actucap();" >No veo bien la imagen</a>
<br/>
<input type="submit" value="Enviar"/>
</form>
Script que procesa el formulario anterior
Código PHP:
session_start();
if(empty($_POST['captcha']) || !isset($_POST['captcha']))
{
header("location: form-captcha.htm");
return;
}
$captcha=strtolower($_POST['captcha']);
if(!$captcha!=$_SESSION['string'])
{
$_SESSION['mensaje']="Codigo de verificacion incorrecto";
header("location: form-captcha.php");
}
else
{
$_SESSION['mensaje']="<h3>Bien, lo lograste!</h3>"
."<a hrerf=\"http://localhost/Imagenes_PHP/form_captcha/form-captcha.php\">"
."Intentalo de nuevo"
."</a>";
header("location: http://localhost/Imagenes_PHP/form_captcha/confirm.php");
}
El problema esta en que la variable $_SESSION['string'], que es donde almaceno el valor de la captcha, al momento de crear la imagen para despues comparala contra lo que escribe el usuario.
Esta variable me trae siempre un valor atrasado, por ejemplo si la captcha tiene "abc", la variable me muestra el valor que el captcha tenia antes.
Se entinede?
Espero me ayuden, gracias.