Hola, tengo un problema con un captcha para un formulario de contacto, el problema es que luego de enviar el mensaje, no cambia el captcha, asi que sigue siendo el mismo cuando vuelvo a la pagina, intente cambiando el tipo de captcha, como nose nada de php, simplemente busque por internet alguno que fuera libre de usar y lo implemente, uno de sumas, y otro de letras, pero en ambos pasa lo mismo, la verdad nose si esto se solucione por medio de php, o a lo mejor debo implementar algo en javascrip que me detecte cuando ya se envio el mensaje, y que "recarge" la pagina para que asi me genere un captcha nuevo.
El código de la imagen de captcha es el siguiente:
Código PHP:
Ver original<?php
// Creo los valores aleatorios y guardo el resultado
$_SESSION["ResultadoCaptcha"] = $Valor1 + $Valor2;
// Creo una imagen vacia de 120x30 a la que pintaremos el fondo transparente y los valores en negro
imagestring($Imagen, 4, 5, 5, $Valor1." + ".$Valor2." =", $Color_Texto);
// Cabecera para la imagen PNG
header('Content-Type: image/png');
// Imprimo la imagen
// Liberar memoria
?>
Como dije, este código lo saque de internet. Es un captcha que genera una imagen de suma, también use este otro.
Código PHP:
Ver original<?php
###########################################################################################
#
# CAPTCHA FÁCIL 1.0
#
# Autor: Alejandro Martín Núñez
# Contact: alemnunez at gmail dot com
# Date: October 10, 2009
#
# COMO USAR CAPTCHA FÁCIL
#
# FORMULARIO
# En el formulario que deseas validar, inserta el siguiente código:
#
# <img src="captcha.php" /><br/>
# <input type="text" size="12" name="captcha" />
#
#
# VERIFICACIÓN
# Al procesar el formulario, compara el contenido del campo que
# completó el usuario con el contenido de $_SESSION["captcha"]
# que generó este programa:
#
# session_start();
# if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){
# // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
# $_SESSION["captcha"] = md5(rand()*time());
# // INSERTA EL CÓDIGO EXITOSO AQUI
# }else{
# // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
# $_SESSION["captcha"] = md5(rand()*time());
# // INSERTA EL CÓDIGO DE ERROR AQUÍ
# }
#
#
# OLVIDÁ EL SPAM!
#
###########################################################################################
#create image and set background color
imagefill($captcha, 0, 0, $background_color);
#draw some lines
for($i=0;$i<10;$i++){
imageline($captcha, rand(0,130),rand(0,35), rand(0,130), rand(0,35),imagecolorallocate($captcha, $color, $color, $color)); }
#generate a random string of 5 characters
#make string uppercase and replace "O" and "0" to avoid mistakes
#save string in session "captcha" key
$_SESSION["captcha"]=$string;
#place each character in a random position
$font = 'arial.ttf';
for($i=0;$i<5;$i++){
imagettftext ($captcha, 15, rand(-25,25), $x, $y, imagecolorallocate($captcha, $color, $color, $color), $font, $string[$i]); }else{
}
}
#applies distorsion to image
#avoids catching
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false);
#return the image
header("Content-type: image/gif"); ?>
La validación la hago en un archivo php separado del HTML , la validación funciona perfectamente, y como dije, nose de PHP, asi que intente hacer lo que pude con los conocimientos que tenia.
Código PHP:
Ver original<?php
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$mensaje = $_POST['mensaje'];
$asunto = $_POST['asunto'];
$news = $_POST['newsletter'];
$titulo = $asunto;
$header = 'From: ' . $email;
$msjCorreo = "Nombre: $nombre\n E-Mail: $email\n Asunto: $asunto\n Mensaje:\n $mensaje";
if ($_POST['submit']) {
if ($_POST["captcha"] == $_SESSION["ResultadoCaptcha"]) {
if(mail($para, $titulo, $msjCorreo, $header)&& mail($email,'Contacto Movimiento Aztlan',"Gracias por su mensaje \n En breve nos comunicaremos con usted para darle una respuesta",'From: '.$para)){ if( $news == 'SI' ){
mail($new,'Nuevo contacto para Newsletter',"Este es un nuevo contacto para la lista de Newsletter",$header); }
echo "<script language='javascript'>
window.location.href = 'mensaje_enviado.html';
</script>";
} else {
echo "<script language='javascript'>
window.location.href = 'error_mensaje.html'
</script>";
}
} else {
echo "<script language='javascript'>
window.location.href = 'captcha_incorrecto.html';
</script>";
}
}
?>
La razón por la que pongo "window.location.href", es porque crei que si después de mandar el correo, o de que se equivoque, lo mande a otra pagina, donde espera 5 segundos para que lo redireccione a otra pagina, y de esta forma, tuviera que volver a "contacto" y que ahí recargara la pagina, pero claro que no funciono, D:
El HTML lo tengo asi, solo es el fragmento donde esta el formulario:
Código HTML:
Ver original<form action="contacto.php" method="post"> <input class="form" id="nombre" type="text" name="nombre" placeholder="Nombre y Apellido (opcional)" /> <input class="form" id="asunto" type="text" name="asunto" placeholder="Ej. Sugerencia, Queja, Pedido, etc. (opcional)" /> <textarea class="form"id="mensaje" name="mensaje" placeholder="Mensaje" required></textarea> <label for"new">¿Desea suscribirse a nuestro boletín de novedades?:
</label> <input id="news" type="radio" name="newsletter" value="SI" style="width:16px;height:16px;background:#eee;margin:0 1em;">Si, quiero suscribirme.
<br> <input id="news" type="radio" name="newsletter" value="NO" style="width:16px;height:16px;background:#eee;margin:0 1em;" checked="">No, gracias.
<br>
<img id="img-captcha" src="captcha.php"><br><input id="captcha" type="text" name="captcha" placeholder="Introduce las letras de la imagen." required autocomplete="off" > <input class="form" id="submit" type="submit" name="submit" value="Enviar" />
Si me pudieran ayudar, se los gradeceria mucho, :D
Lo vuelvo a decir, no tengo conocimientos en php, tampoco en javascrip, pero si logro entender su funcionamiento. :D