Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/06/2010, 14:33
potoka
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 4 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!!