[Resuelto] Invocar JS desde PHP

Iniciado por danny920825, 26 Abril 2017, 21:28 PM

0 Miembros y 1 Visitante están viendo este tema.

danny920825

Hola a todos. No se si el titulo era explicativo, pero lo que quiero hacer es ejecutar un código JS, específicamente un alert desde PHP. Cuando lo hago solo me funciona, pero lo que quiero es hacer una alerta y que redireccione al usuario. Como conozco poco casi nada de JS, lo que estoy haciendo es lo siguiente:
Código (php) [Seleccionar]

if(!pi=3.14) //Solo un ejemplo
{
 echo "<script>alert('Los datos no coinciden');</script>";
 header("location:direccion.php");
}

y lo que hace es que redirecciona directo, no muestra el alert. ¿Como puedo hacer para que eso funcione?
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

#!drvy

Tienes que hacerlo desde JS todo o mostrar la alerta en la otra pagina. Las cabeceras (header()) se ejecutan antes que cualquier otra cosa. Es una regla estricta que de hecho estas rompiendo al imprimir un echo antes.

Entonces tendrás que hacer algo tipo esto:

Código (php) [Seleccionar]
if(!pi=3.14){
    die('<script> alert("Los datos no coinciden"); window.location = "direccion.php"; </script>');
}


Por ejemplo.

Saludos

danny920825

Gracias!! De veras que eso ayuda mucho con la validación de los formularios. Uso
Código (php) [Seleccionar]
header("location:") porque no conozco otra forma de redireccionar desde PHP. Si existiera alguna otra forma, estoy dispuesto a usarla, ya que supongo que el nombre indica que es lo primero que se debe mandar en una página. Que el hecho de que se pueda usar no significa que sea la forma correcta de hacerlo, pero no conozco otra :( (Ahora conozco la de JS, pero estuve buscando una de PHP y no encontre)
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

#!drvy

No vas a encontrar nada. El caso es que PHP se ejecuta antes de que incluso el navegador presente el html. Ten en cuenta que PHP es un backend, esta pensado para ejecutar lógica en el servidor y no presentarse al usuario.

Yo te recomendaría hacerte una validación javascript y luego mostrar errores en PHP (si la validación en PHP falla) con un enlace para volver.. o eso o lo que comente de mostrar los errores en la pagina a la que redireccionas.

Saludos

danny920825

Lo otro que he estado haciendo es crear una sesion de esta forma:
Código (php) [Seleccionar]

$_SESSION['error_validar'] = "El nombre contiene caracteres incorrectos";

y ahora con el código que me diste, redirecciono a la página del formulario y alli muestro en un span el contenido de esa variable.
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

#!drvy


danny920825

Perfecto. Entonces Muchas Gracias y Tema Cerrado si quieres
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

animanegra

A ver, para validar datos de entrada hazlo desde javascript en la pagina antes de enviar el formulario. Validarlos en el php para presentarle el error al usuario es obligar al usuario a hacer mas peticiones al servidor para hacer lo mismo. Mas recursos a tener en el servidor que de forma general ante errores de usuario tiene que procesar y validar y mas tiempo de espera del usuario que no puede tener la retroalimentacion del error al momento.

Por otro lado, en el servidor tienes que hacer la verificacion de las entradas para evitar ataques, y si ves algo raro sacar al usuario de alli y evitar que la entrada erronea llegue a buen puerto.

Pero primero ten claro algo, el javascript se procesa en el cliente y el php en el servidor. De modo que el php generará toda la pagina entera y despues el cliente ejecutará la pagina con el javascript que pongas en ella. Yo me repasaría un poco el funcionamiento de los servidores web y su procesado. Y vovlería a mirar las diferencias entre procesado en cliente y en servidor. Si no tienes claro como el agua eso terminaras teniendo problemas.

Saludos.

42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.

danny920825

Si, eso lo entiendo y se que el primer paso en la validacion se hace en JS para que el usuario no necesite enviar los datos al servidor, pero de igual forma tengo que validar los datos en el servidor, porque el usuario puede deshabilitar en JS en el navegador y así saltarse la validación. Prefiero validar en ambos lados, aunque realmente la validacion en JS no la se hacer. Y no solo para no hacer peticiones innecesarias. Se debe hacer en JS para evitar que el usuario tenga que escribir nuevamente los datos. Eso es molesto y lo digo por experiencia
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno