entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Emular un post de otra página del sistema

Buenos días, tengo un nuevo proyecto hoy. Tengo una página que hace un post y al hacer ese post hace una serie de cosas (una de ellas enviar un correo electrónico). Hay alguna forma de forzar esa página a hacer un post desde otra página del sistema? Por ejemplo, pagina1.php tiene un formulario que al hacer post llama a otra página, salva datos y envía un correo.

Desde pagina2.php quiero que se fuerce a hacer un post del formulario de pagina1.php con los valores que tiene en ese momento. El salvado de datos es irrelevante ya que no son muchos datos y que sean sobreescritos no es relevante ya que los datos son los mismos.

SaludoS!

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola @ankeorum,

tal vez no entienda bien tu pregunta, pero a priori, parece que no se puede hacer lo que querés, porque los script PHP corren del lado del servidor, y por tanto no podrían disparar el envío de un formulario de una página que está viendo un usuario porque 1) son computadoras diferentse, 2) el servidor no mantiene una conexión con el cliente luego de transmitidos los datos, y 3) no hay (salvo que lo implementes) forma de saber cuál de las posibles miles de copias de esa página que están viendo los usuarios es la que hay que enviar.

Lo que sí se puede hacer es, mediante JavaScript, que cuando un usuario cargue pagina2.php se ejecute un submit del formulario en página1.php

Si pagina2.php se abre como un popup de pagina1.php es muy fácil:

<script>
parent.document.getElementById('formulario').submit();
</script>

Si no es un popup hay que darle unas vueltas más y tener cuidado de no violar las políticas del mismo origen para JavaScript.

De todas formas, tal vez te sirva algo sea más simple todavía: poner un contador en pagina1.php y cada cierto tiempo (por ejemplo cada 1 minuto) hacer el submit del formulario, con lo que estarías enviando los datos sin depender de otra página.

Esto último mejora un poco más si enviás los datos vía AJAX, de forma tal de que no se recargue la página, y el guardado sea transparente al usuario.

Saludos cordiales!

PD: si entendí mal, danos más contexto del problema (qué son página1 y página2, para qué guardar datos que pueden estar inconclusos, etc) así podemos ayudarte mejor.

0voto

ankeorum comentado

Parece como que la opción de que pagina2 sea un popup de pagina1 es más que viable. Voy a probarlo.

Como puedo ejecutar pagina2 como un popup de pagina1? Eso nunca lo he hecho :-(

Muchísimas gracias

0voto

ankeorum comentado

Me acabo de dar cuenta de que esa solución no vale, voy a ampliar el contexto del problema a su complejidad completa.

El formulario form1 se encuentra en una página en forma de inputs (no editable), en ese formulario se cargan valores de una tabla de la base de datos, tabla1. Ese formulario form1 se convierte en formulario con sus campos editables y tal cuando pagina1.php?edit=true; mientras no es editable ni siquiera es un formulario sino que es una tabla con todos los valores rescatados de la base de datos.

La primera vez en la vida de cada registro de la base de datos que se cargan en esa tabla y se editan se genera un correo con todos los valores que se han introducido. Ese correo es enviado a clientes e internamente. Sin embargo se han detectado introducción de datos por parte de usuarios "novatos" con errores que estaban siendo enviados a los clientes. La solución adoptada por mi IT Manager ha sido que el primer correo se envíe solo internamente y una vez chequeado (y modificado cualquier error), volver a enviar el correo derivado del formulario en cuestión a los clientes. Esta validación la haría obviamente un usuario diferente que el usuario "novato".

Si os soy sincero no se ni esto está claro ya que releyéndolo ni me parece muy claro ni siquiera a mi.

Resumiendo: usuario_novato chequea form1 que se llena de datos insertados por un cliente y se comprueban/modifican - se genera un correo interno - otro usuario va a la tabla donde se rescatan todos los datos y se comprueban/modifican si fuera necesario - los datos de ese registro están marcados con un flag "no validado" - al pulsar el botón "Validar" se valida ese registro y ya a partir de ahí se mandan alertas a los clientes, incluido el primero correo de "nuevo registro" que sería una copia del primer correo generado pero con los datos modificados pertinentemente.

Lo que estoy pensando en hacer es simplemente crear una página nueva que sea reenviar.php y se rescaten todos los datos actuales del registro, al pulsar ese botón se regenera el correo primero pero con los datos nuevos y se cambia el flag de ese registro a "validado".

Lo que pasa es que estoy seguro de que debe de haber alguna forma de reutilizar todo el código de cuando se hace el post en el formulario inicial no? Porque si no reconstruir el correo va a ser una locura.

Muchas gracias. SaludoS!

0voto

Leonardo-Tadei comentado

Para abrir una página como un popup, se usa la función JS window.open()

https://developer.mozilla.org/en-US/docs/Web/API/Window/open

1voto

Leonardo-Tadei comentado

En el escenario que describís, es seguro mucho mejor tener una página para los novatos y otra para los que validen los datos.

Por otra parte, es posible qu eno hayas estructurado lo suficientemente bien tu código y ahora se te plantean repeticiones innecesarias... tendrías que tener una función para generar el formulario (vacío la primera vez y con los datos guardados las veces siguientes), una función para armar el mensaje según los registros en la tabla en la que la lista de destinatarios sea uno de los parámetros y otra función para hacer el envío.

De esta forma te quedaría en pseudocódigo algo como:

novato.php
incluir formulario(datos)

novato_procesar.php
incluir guardar($_POST)
incluir enviar(registro, destinatarios)

experto.php
incluir formulario(datos)

experto_procesar.php
incluir guardar($_POST)
incluir enviar(registro, destinatarios)

Para no quedar mal, decile a tu IT Manager que estás "rafactorizando el código", que siempre suena bien. Si te cuestiona algo, decile que si quiere aumentar la "deuda tecnológica" del código y poner repeticiones no es problema, pero que asuma él la resposabilidad (y si todo esto es por mail, hasta te queda por escrito).

PD: posiblemente el cambio más grande sea hacer que la confección del mail y el envío partan de un registro en la DB, en vez de partir de los datos recibidos por el formulario, que es lo que supongo que hacés ahora.

0voto

ankeorum comentado

Me ha encantado esta parte:

Para no quedar mal, decile a tu IT Manager que estás "rafactorizando el código", que siempre suena bien. Si te cuestiona algo, decile que si quiere aumentar la "deuda tecnológica" del código y poner repeticiones no es problema, pero que asuma él la resposabilidad (y si todo esto es por mail, hasta te queda por escrito).

Es simplemente genial.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta