Cita:
Iniciado por emprear Tu esquema es un poco confuso, por que hacer un innerHTML si tu php puede generar el mensaje por si mismo, faltaría saber si el form y la respuesta están integradas en un solo archivo o si son 2 distintos.
Si después de mostrar un mensaje querés agregar una redirección, entonces usas el stTimeout como te indiqué para dar tiempo a leer el mensaje
Ejemplo
formulario.php
Código PHP:
Ver original<!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>
<title>titulo</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
if(!isset($_POST['procesar'])){ ?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<input type="text" name="nombre" /><br />
<input type="submit" value="contactar" name="procesar" />
</form>
<?php
}else{
// envio email
$mail = "correcto";
if($mail == 'correcto'){
echo "<p>Tu mensaje ha sido enviado, en unos segundos serás redirigido a nuestra página principal</p>";
echo <<< SCRIPT
<script type="text/javascript">
function redir(){
window.location.href = "index.html";
}
setTimeout('redir()', 3000);
</script>
SCRIPT;
}else{
echo "<p>Se ha producido un error al enviar, <a href='". $_SERVER['SCRIPT_NAME'] . "'>inténtar nuevamente</a></p>";
}
}
?>
</body>
</html>
Para verificar, cambia el valor de la variable $mail a otra cosa. Demás está decir que tu php, antes de enviar el email, debería hacer las validaciones correspondientes
Saludos
Gracias de nuevo pero esa no es la solución que yo quiero.
Mi formulario está en una página de wordpress, lo valido mediante un archivo js mío.
Tengo un div en el formulario en el que muestro los mensajes de error si algo está mal validado y lo que quiero es que cuando esté todo correcto, vaya a mi archivo php, envíe el formulario y que vuelva a la misma página mostrando en mi div que ya ha sido enviado.
Ya he probado con setTimeOut y no funciona.
Como digo, mi código funciona perfecto, envia los mensajes y valida, además si antes de:
document.getElementById('ErrMsg').innerHTML = "Mensaje enviado";
pongo un alert con lo que sea, da igual el texto, entonces además de funcionar a la perfección, muestra en mi formulario, en el div que tengo para los errores, el mensaje que yo quiero, si no pongo el alert, funciona perfecto pero no muestra el texto en el div.
Alguna idea de lo que hago mal?
Gracias y Saludos.