Foros del Web » Programando para Internet » Javascript »

Problema con formulario e innerHTML, PHP y Javascript

Estas en el tema de Problema con formulario e innerHTML, PHP y Javascript en el foro de Javascript en Foros del Web. Hola, tengo un problema en un documento de php. Se ejecuta todo bien excepto una línea que necesita llevar delante un alert; sin ese alert ...
  #1 (permalink)  
Antiguo 12/08/2012, 06:46
 
Fecha de Ingreso: agosto-2012
Mensajes: 9
Antigüedad: 12 años, 4 meses
Puntos: 0
Problema con formulario e innerHTML, PHP y Javascript

Hola, tengo un problema en un documento de php. Se ejecuta todo bien excepto una línea que necesita llevar delante un alert; sin ese alert no funciona. El correo se envía perfectamente.Pienso que debe ser un problema al cargarse la página; he probado de insertarlo dentro de una función utilizando el evento onload y tampoco funciona. Cualquier ayuda será eternamente agradecida os paso el código: gracias por anticipado

esto es lo que hay en el archivo php:

Código PHP:
Ver original
  1. <?php
  2. $mymail = "[email protected]";
  3. $subject = "Mensaje enviado desde wwww por ";
  4. $cuerpo = $_POST["mensaje"];
  5. $nombre = $_POST["Nombre"];
  6. $correo = $_POST["Email"];
  7. $fecha = date("d-M-y H:i");
  8. $contenido = $nombre." Escribió:\n\n";
  9. $contenido .= $cuerpo."\n\n";
  10. $contenido .= "El mensaje se escribió el ".$fecha;
  11. $contenido .= "\n\nDesde xxxxxx ";
  12. $status=mail(@$mymail, $subject.$nombre, $contenido, "From:".$correo);
  13. if($status){
  14. $titulo = "Respuesta desde xxxxx";
  15. $respuesta = "ESTE ES UN MENSAJE GENERADO DE FORMA AUTOMATICA, NO RESPONDA.";
  16. $respuesta .= "\n\nGracias por confiar en xxxxxx.";
  17. $respuesta .= "\n\nHemos recibido su consulta a través del formulario de nuestra web.";
  18. $respuesta .= "\n\nEn breve nos pondremos en contacto con usted.";
  19. $respuesta .= "\n\nReciba un cordial saludo.";
  20. mail(@$correo, $titulo, $respuesta, "From:".$desde);
  21. ?>
  22.     <script language="javascript" type="text/javascript">
  23.     window.location = 'http://xxxxxx/contacto/';
  24.     alert("1");    / SIN ESTE ALERT NO FUNCIONA LA LÍNEA SIGUIENTE/
  25.         document.getElementById('ErrMsg').innerHTML = "Mensaje enviado";
  26.     </script>
  27. <?php  
  28. }
  29. else { ?>
  30.     <script language="javascript" type="text/javascript">
  31.         window.location = 'http://XXXXX/error-de-envio/';
  32.     </script>
  33. <?php
  34. }
  35. ?>

este es el div que hay en el formulario:

<div id="ErrMsg"></div>

Última edición por 909matt; 12/08/2012 a las 12:52 Razón: olvide dar las gracias....
  #2 (permalink)  
Antiguo 12/08/2012, 18:49
Avatar de xIamAlex  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 118
Antigüedad: 12 años, 7 meses
Puntos: 23
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

A ver, prueba así:

Reemplaza:

Código HTML:
 <script language="javascript" type="text/javascript">
    window.location = 'http://xxxxxx/contacto/';
    alert("1");
        document.getElementById('ErrMsg').innerHTML = "Mensaje enviado";
    </script> 
Por:

Código HTML:
 <script language="javascript" type="text/javascript">
    window.addEventListener('load', function(){
window.location = 'http://xxxxxx/contacto/';
    alert("1");    / SIN ESTE ALERT NO FUNCIONA LA LÍNEA SIGUIENTE/
        document.getElementById('ErrMsg').innerHTML = "Mensaje enviado";
}, false);
    </script> 
¡¡Suerte!!
__________________
Las personas quieren autos, casas, teléfonos, dinero, poder, ser famosos, parejas, en fin.. yo solo quiero ser libre y feliz.
  #3 (permalink)  
Antiguo 12/08/2012, 18:51
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Con alert o sin alert, esto
<script type="text/javascript">
window.location = 'http://xxxxxx/contacto/';
alert("1"); / SIN ESTE ALERT NO FUNCIONA LA LÍNEA SIGUIENTE/
document.getElementById('ErrMsg').innerHTML = "Mensaje enviado";
</script>

Te va a redirigir, asi que da lo mismo. Para que mostrar un mensaje que no se va a ver ?, o el mensaje o la redirección, ó el mensaje + la redirección con setTimeout.
Y por supuesto la ejecución de la script posteriormente a la aparición del div de id "ErrMsg" en el dom, o la función con onload

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 13/08/2012, 07:55
 
Fecha de Ingreso: agosto-2012
Mensajes: 9
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Muchas gracias a los dos por la ayuda, seguiré buscando.

Última edición por 909matt; 13/08/2012 a las 08:04
  #5 (permalink)  
Antiguo 13/08/2012, 08:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 9
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Cita:
Iniciado por xIamAlex Ver Mensaje
A ver, prueba así:

Reemplaza:

Código HTML:
 <script language="javascript" type="text/javascript">
    window.location = 'http://xxxxxx/contacto/';
    alert("1");
        document.getElementById('ErrMsg').innerHTML = "Mensaje enviado";
    </script> 
Por:

Código HTML:
 <script language="javascript" type="text/javascript">
    window.addEventListener('load', function(){
window.location = 'http://xxxxxx/contacto/';
    alert("1");    / SIN ESTE ALERT NO FUNCIONA LA LÍNEA SIGUIENTE/
        document.getElementById('ErrMsg').innerHTML = "Mensaje enviado";
}, false);
    </script> 
¡¡Suerte!!
Muchas gracias xIamAlex, lo he probado y tampoco funciona.

Me explico, lo que quiero es que una vez envíado el formulario, aparezca un mensaje con el texto "Mensaje enviado". Tanto en mi código como en el que tu has escrito, funciona siempre y cuando tenga un alert delante, creo que el problema es que le estoy diciendo al script que actue en un archivo del servidor y no le da tiempo a cargarse en el navegador, entiendo que al funcionar con el alert es porque le doy tiempo a cargarse por completo en el navegador.

Osea, si pongo un alert, si me muestra el mensaje en el div, si no lo pongo, no lo hace.

Seguro que es algo muy sencillo pero todavía no sé mucho de php. También he probado de ralentizar el scritp con un set timeout pero sigue sin funcionar, necesita un alert.

Muchas gracias por la ayuda, seguiré intentándolo, si doy con la solución la colgaré.

Saludos.
  #6 (permalink)  
Antiguo 13/08/2012, 08:47
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

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
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>titulo</title>
  6. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  7. </head>
  8. <body>
  9. <?php
  10. if(!isset($_POST['procesar'])){
  11. ?>
  12. <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
  13. <input type="text" name="nombre" /><br />
  14. <input type="submit" value="contactar" name="procesar" />
  15. </form>
  16. <?php
  17. }else{
  18.  
  19. // envio email
  20. $mail = "correcto";
  21.  
  22. if($mail == 'correcto'){
  23. echo "<p>Tu mensaje ha sido enviado, en unos segundos serás redirigido a nuestra página principal</p>";
  24. echo <<< SCRIPT
  25. <script type="text/javascript">
  26. function redir(){
  27. window.location.href = "index.html";
  28. }
  29. setTimeout('redir()', 3000);
  30. </script>
  31. SCRIPT;
  32. }else{
  33. echo "<p>Se ha producido un error al enviar, <a href='". $_SERVER['SCRIPT_NAME'] . "'>inténtar nuevamente</a></p>";
  34. }
  35.  
  36. }
  37. ?>
  38.  
  39. </body>
  40. </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
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 13/08/2012, 15:12
 
Fecha de Ingreso: agosto-2012
Mensajes: 9
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Se me olvidó remarcar que le plantilla está elaborada con wordpress, no se si puede ayudar a descifrar que es lo pasa...gracias por vuestro tiempo
  #8 (permalink)  
Antiguo 13/08/2012, 15:42
 
Fecha de Ingreso: agosto-2012
Mensajes: 9
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Cita:
Iniciado por emprear Ver Mensaje
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
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>titulo</title>
  6. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  7. </head>
  8. <body>
  9. <?php
  10. if(!isset($_POST['procesar'])){
  11. ?>
  12. <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
  13. <input type="text" name="nombre" /><br />
  14. <input type="submit" value="contactar" name="procesar" />
  15. </form>
  16. <?php
  17. }else{
  18.  
  19. // envio email
  20. $mail = "correcto";
  21.  
  22. if($mail == 'correcto'){
  23. echo "<p>Tu mensaje ha sido enviado, en unos segundos serás redirigido a nuestra página principal</p>";
  24. echo <<< SCRIPT
  25. <script type="text/javascript">
  26. function redir(){
  27. window.location.href = "index.html";
  28. }
  29. setTimeout('redir()', 3000);
  30. </script>
  31. SCRIPT;
  32. }else{
  33. echo "<p>Se ha producido un error al enviar, <a href='". $_SERVER['SCRIPT_NAME'] . "'>inténtar nuevamente</a></p>";
  34. }
  35.  
  36. }
  37. ?>
  38.  
  39. </body>
  40. </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.
  #9 (permalink)  
Antiguo 13/08/2012, 16:32
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 4 meses
Puntos: 17
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Cita:
Iniciado por 909matt Ver Mensaje
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.
Claro que te funcionaria con el alert, porque estas parando el proceso de redireccion sin embargo php llega hasta la linea donde printea que fue todo un exito...

Si esta pagina php , fue un exito y vas redireccionar entonces colaca antes de hacer la redireccion crea una variable en session y redireccionas a la otra pagina

esta otra pagina testeas si la session de mandar el mail fue un exito, si lo fue entonces lo printeas y listo si no, entonces indica que no funciono y muestra la forma de nuevo.
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #10 (permalink)  
Antiguo 16/08/2012, 08:41
 
Fecha de Ingreso: agosto-2012
Mensajes: 9
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Cita:
Iniciado por utan Ver Mensaje
Claro que te funcionaria con el alert, porque estas parando el proceso de redireccion sin embargo php llega hasta la linea donde printea que fue todo un exito...

Si esta pagina php , fue un exito y vas redireccionar entonces colaca antes de hacer la redireccion crea una variable en session y redireccionas a la otra pagina

esta otra pagina testeas si la session de mandar el mail fue un exito, si lo fue entonces lo printeas y listo si no, entonces indica que no funciono y muestra la forma de nuevo.
De nuevo, gracias por intentar ayudarme pero sigue sin funcionar, he probado iniciar sesion y tampoco funciona.

Tal vez es mucho mas simple de lo que yo estoy planteando.

A ver si me explico bien, dentro de wordpress, he hecho una página nueva en la que he escrito mi formulario, lo valido con un archivo javascritp mío, y en el method del formulario lo envio a un archivo contact.php que es el que me da problemas.

Osea, tengo por una parte mi validador.js, por otra mi página de worpdpress con el formulario y en otra el contact.php con el código que puse al iniciar el tema.

Lo único que quiero es que en mi formulario, una vez se haya enviado, salga un mensaje con el texto "enviado..." no quiero ir a otra página, quiero que me devuelva a la página donde tengo el formulario y me escriba eso dentro de un div.

Por ejemplo como en esta página:
http://www.naranjus.com/contacta/

Aquí están utilizando JQuery y sería muy sencillo hacerlo así pero no me gusta como valida el validador de JQuery, quiero usar el mío.

He probado poniendo en el formulario:
<form class="form" action="../contact.php" method="post" onsubmit="return valida_form(this);">

<input type="hidden" id="someVar" value=""/>
<div id="estado"></div>

</form>

Y antes del formulario:
<script>
var envio = document.getElementById("someVar").value;
if (envio = "ok"){
document.getElementById("estado").innerHTML = "enviado";
}
}
</script>

Y en el php:
?>
<script language="javascript" type="text/javascript">
window.location = 'http://wwwww/prueba.php'; document.getElementById("someVar").value = "ok";

</script>
<?php

Así, yo entiendo que al enviarse el formulario, el archivo php cambia el valor del input, y al refrescarse la página, el script evalua si el valor es ok y escribe el html donde yo quiero.
NO FUNCIONA, tengo que poner el dichoso alert.

Como no sé mucho (mas bien poco) de php, me va a explotar la cabeza.
Seguro que es algo muy facil, si sabéis otro método para conseguir lo que yo quiero hacer, os lo agradecería.

Saludos.
  #11 (permalink)  
Antiguo 16/08/2012, 19:12
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 4 meses
Puntos: 17
Respuesta: Problema con formulario e innerHTML, PHP y Javascript

Hola,

esa pagina que pusistes es ajax.. esta no necesita refrescar ase una llamada asincronica a un documento php, es en php donde se hace la validacion puesto que en Javascript no es recomendable..

Despues que php valida este manda un resultado , este es colocado en el lugar indicado en tu html en la forma..

Ese escript no esta usando nada de lo que as colocado de aqui ... en tu ejemplo..

Mira este link http://vcomputadoras.com/maneja-datos-de-mysql-con-ajax/ (bueno no deja poner links).

Aqui hay una forma que usa ajax en ves de usar mysql para validar tu mensaje usas tu documento php, y puedes usar tu forma ya echa..
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com

Etiquetas: formulario, innerhtml, php
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 13:57.