Foros del Web » Programando para Internet » PHP »

Problema con Captcha

Estas en el tema de Problema con Captcha en el foro de PHP en Foros del Web. Hola a todos, soy nueva con esto de php. Estoy queriendo hacer un captcha para un formulario de contacto, y sólo me anda la primera ...
  #1 (permalink)  
Antiguo 30/06/2010, 14:33
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Problema con Captcha

Hola a todos, soy nueva con esto de php. Estoy queriendo hacer un captcha para un formulario de contacto, y sólo me anda la primera vez, si quiero volver a hacer una consulta despues de enviar la primera, ya no funciona. Hice un echo para ver qué valores se comparaban y éstos son distintos, pero no logro darme cuenta por qué.

Les dejo el código para ver si alguien me puede orientar:
captcha.php
Código PHP:
<?php
session_start
();
function 
randomText($length) {
    
$pattern "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    for(
$i=0;$i<$length;$i++) {
      
$key .= $pattern{mt_rand(0,61)};
    }
    return 
$key;
}

$_SESSION['tmptxt'] = randomText(4);
$captcha imagecreatefromgif("bgcaptcha.gif");
$colText imagecolorallocate($captcha000);
imagestring($captcha5167$_SESSION['tmptxt'], $colText);

header("Content-type: image/gif");
imagegif($captcha);
?>
contacto.php
Código PHP:
<?php
session_start
();
if (
$_POST['action'] == "checkdata") {
    
//En estas dos líneas siguientes, es donde me muestra que tienen valores diferentes, y no logro entender el motivo.
    
echo 'SESSION='.$_SESSION['tmptxt'];
    echo 
'<br/> POST='.$_POST['tmptxt'];
    if (
$_SESSION['tmptxt'] == $_POST['tmptxt']) {
        
$nombre $_POST['nombre'];    
        
$localidad $_POST['localidad'];    
        
$mail $_POST['mail'];    
        
$mens $_POST['mensaje'];    

        function 
validarCorreo($mail) {
            return 
ereg('^.+@(.+\..+)$'$mail);
        }
            
        if(
validarCorreo($mail)){
            
$header 'De: ' $mail " \r\n";
            
$mensaje "Este mensaje fue enviado por " $nombre " \r\n";
            
$mensaje .= "Su e-mail es: " $mail " \r\n";
            
$mensaje .= "Enviado el " date('d/m/Y'time()). " \r\n";
            
$mensaje .= "DATOS DEL INTERESADO :  Nombre: " $nombre ." \r\n"  ." Localidad: " $localidad" \r\n";
            
$mensaje .= "MENSAJE: " $mens ." \r\n";
            
$para '[email protected]';
            
$asunto '[Contacto Web]';
            
mail($para$asunto$header$mensaje); 
        echo 
"Gracias por completar el formulario. <br /> A la brevedad nos comunicaremos con Ud.";

    
        }else     {

                        echo
"Verifique los datos ingresados y vuelva a intentarlo. (Mail mal!)";
                        echo
'<a href="javascript:history.back()">volver</a>';

                 }
} else { 
                        echo
"Verifique los datos ingresados y vuelva a intentarlo. (captcha mal!)";
                        echo
'<a href="javascript:history.back()">volver</a>';
            
        }
    unset(
$_SESSION);
    
session_destroy();
    exit;
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<html>
<body>

        <form id="contacto" name="contacto" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                    <p>
                      <label class="label">Nombre<br />
                      <input name="nombre" type="text" id="nombre" size="50" class="input_form"/>
                    </label></p>
                    <p>
                      <label class="label">Localidad<br />
                      <input name="localidad" type="text" id="localidad" size="50" class="input_form"/>
                    </label></p>
                    <p>
                      <label class="label">E-mail<br />
                      <input name="mail" type="text" id="mail" size="50" class="input_form" /></label></p>
                    <p><label class="label">Mensaje<br /> 
                    <textarea name="mensaje" cols="50" rows="8" id="mensaje" class="input_form"></textarea></label></p>
                    <img src="captcha.php" width="100" height="30" vspace="3"><br>
                      <input name="tmptxt" type="text" size="30"><br>
                      <input name="btget" type="submit" class="boton" value="Enviar">
                      <input name="action" type="hidden" value="checkdata">
        </form>


</body>
</html>
En conclusión, lo que sucede es que la imagen me muestra 4 caracteres, yo lo ingreso correctamente en el campo del formulario, pero a la hora de comparar, $_SESSION['tmptxt']; tiene un valor distinto al que me mostró y no sé por qué.
Bueno, espero haber sido clara, muchas gracias desde ya!!
Saludos!!
  #2 (permalink)  
Antiguo 30/06/2010, 16:56
 
Fecha de Ingreso: julio-2008
Mensajes: 201
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Problema con Captcha

Cita:
unset($_SESSION);
session_destroy();
exit;
Te recomiendo que indiques la sesión a destruir.

P.D: con unset ya basta.
  #3 (permalink)  
Antiguo 30/06/2010, 23:14
Avatar de camsworksinc  
Fecha de Ingreso: julio-2008
Ubicación: Queretaro
Mensajes: 261
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Problema con Captcha

Verifica que la variable de sesion si exista en el script "contacto.php", mediante la siguiente instruccion:
Código PHP:
Ver original
  1. if (isset($_SESSION['tmptxt'))
  2.   echo "Si existe la variable";
  3. else
  4.   echo "La variable no existe";

Si la variable no existe, entonces quiere decir que no se estan estableciendo las variables de sesion. Verifica que tu navegador este aceptando cookies.
Algo que puede estar afectando, es cuando envias la imagen con los headers.
Un problema comun que existe es cuando se utilizan los headers para redireccionar a otra pagina. En este caso, las variables de sesion no se establecen debido a que el script tiene que terminar primero para que puedan estabelcerse los valores, y al hacer el redirect, eso no sucede. No se si lo mismo aplique para el caso de enviar la imagen con los headers. Igual prueba quitando el que envie la imagen, y que solo mande texto por ejemplo, para ver si asi se establece correctamente la variable.

Suerte!
__________________
¡Malditas computadoras que siempre hacen lo que les DIGO que hagan, no lo que QUIERO que hagan!
  #4 (permalink)  
Antiguo 01/07/2010, 06:41
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Problema con Captcha

Cita:
Iniciado por tld32 Ver Mensaje
Te recomiendo que indiques la sesión a destruir.

P.D: con unset ya basta.
Gracias por responder!. No se si está bien, pero para indicar la sesión a destruir lo que hice fue debajo de session_start(); puse $session_name = session_name(); y donde estaba el destroy, le puse session_destroy($session_name); pero sigue sin funcionar.
Hice un echo $session_name; y me muestra siempre el mismo valor, yo pensé que al actualizar la página me iba a mostrar otro valor cada vez.
Además cambié el <a href="javascript:history.back()">volver</a> por
<a href="contacto.php">volver</a> , simplemente pensando que podía afectar en algo.
Todos estos cambios los hice en el script contacto.php.

Ahora me surje otra pregunta, en el captcha.php yo inicio una sesión, hay que destruirla tambien a esta?

Saludos!
  #5 (permalink)  
Antiguo 01/07/2010, 06:54
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Problema con Captcha

Cita:
Iniciado por camsworksinc Ver Mensaje
Verifica que la variable de sesion si exista en el script "contacto.php", mediante la siguiente instruccion:
Código PHP:
Ver original
  1. if (isset($_SESSION['tmptxt'))
  2.   echo "Si existe la variable";
  3. else
  4.   echo "La variable no existe";

Si la variable no existe, entonces quiere decir que no se estan estableciendo las variables de sesion. Verifica que tu navegador este aceptando cookies.
Algo que puede estar afectando, es cuando envias la imagen con los headers.
Un problema comun que existe es cuando se utilizan los headers para redireccionar a otra pagina. En este caso, las variables de sesion no se establecen debido a que el script tiene que terminar primero para que puedan estabelcerse los valores, y al hacer el redirect, eso no sucede. No se si lo mismo aplique para el caso de enviar la imagen con los headers. Igual prueba quitando el que envie la imagen, y que solo mande texto por ejemplo, para ver si asi se establece correctamente la variable.

Suerte!
Gracias por responder! Verifiqué que exista la variable de sesión, y siempre me dice que si.
Lo de los headers en cuanto lo pruebe les aviso, igualmente ya está comprobado que la variable siempre existe.

Para ejemplificar más, hice varios "echo" para ver los valores, me muestra en pantalla esto:
Session_name=PHPSESSID //echo "Session_name=".$session_name;
Si existe la variable //esto es del if que me dijiste que haga
SESSION=fU5b //echo 'SESSION='.$_SESSION['tmptxt'];
POST=ROU5 //echo 'POST='.$_POST['tmptxt'];

Estos ultimos dos valores me dan generalmente distintos.... y es por eso que nunca se me valida el captcha.

Esperando haber sido clara, los saludo!!

Etiquetas: captcha, session, formulario
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 00:50.