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($captcha, 0, 0, 0);
imagestring($captcha, 5, 16, 7, $_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!!