Foros del Web » Programando para Internet » Javascript »

Popup que envia formulario via POST al padre para ejecutar script php

Estas en el tema de Popup que envia formulario via POST al padre para ejecutar script php en el foro de Javascript en Foros del Web. Cómo hacer esto? Una ventana padre abre un popup. Este popup contiene un formulario via POST ( 1 input type, 1 input file, 1 input ...
  #1 (permalink)  
Antiguo 11/01/2004, 01:57
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 3 meses
Puntos: 0
Pregunta Popup que envia formulario via POST al padre para ejecutar script php

Cómo hacer esto?

Una ventana padre abre un popup. Este popup contiene un formulario via POST ( 1 input type, 1 input file, 1 input submit), el action del formulario es un script php. En el momento de hacer submit, se tendria que enviar la informacion a la ventana padre ejecutandose el script en el padre y cerrarse el popup.

He creado el popup, el formulario envia la información al script php, pero lo ejecuta en el popup y no en la ventana padre.

Lo que queda es cómo hacer que el popup apunte al padre para enviarle el formulario via post.

Aqui teneis el código:
Código PHP:
<html>
<head>
<title> New Document </title>
</head>
<body>

<?php

if (isset($_GET['p'])) {
    
?>
    <form method='post' action='upload2.php' enctype="multipart/form-data">
    <input type='file' name='file' id='file'>
    Escribir algo <input type='text' name='text' id='text'>
    <br>
    <input type='submit' name='submit' value='Ok' Onclick=''>
    </form>
    <?php
    
exit;
}

if (isset(
$_FILES['file'])) {
    
$fileupload=$_FILES['file']['tmp_name'];
    
$destination=$_FILES['file']['name'];
    if (
is_uploaded_file($_FILES['file']['tmp_name'])) {
        if (
move_uploaded_file($fileupload,$destination)) print("<br><br>Guardat correctament a: $destination");
        else print(
'No guardat, error');
    }
}

if (isset(
$_POST['text'])) {
    echo 
'Este es el texto:'.$_POST['text'];
    exit;
}

?>


<a href='upload2.php' Onclick="window.open('upload2.php?p=','new','toolbar=no,width=300,height=300,status=no,scrollbars=no,resize=no,menubars=no'); return false;">click</a>
</body>
</html>
Espero antentamente vuestras respuestas. Un saludo.
  #2 (permalink)  
Antiguo 11/01/2004, 18:04
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola jmaribau:

Tal como lo planteas, deberías poner en el action del formulario "opener"...

<form action="opener" method="post" ....

Ten en cuenta que los script php solo se ejecutan en el servidor, así que tiene que refrescarse la página.

Pruébalo, y dime si te sirve.

Saludos
  #3 (permalink)  
Antiguo 11/01/2004, 18:35
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 3 meses
Puntos: 0
No sirve, ya que no encuentra la pagina.

Puedes probar el código?
  #4 (permalink)  
Antiguo 11/01/2004, 18:42
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 3 meses
Puntos: 0
Que ese puede poner en el action? Se le puede poner alguna instrucción en javascript.
Ni poniendo opener en el action funciona.

Seria valido ponerle:
<form action="javascript: opener.location='upload2.php?o=';" .....


Espera que te podré el código entero y con algunas modificaciones que he hecho:

Código PHP:
<html>
<head>
<title> New Document </title>
</head>
<body>

<?php

if (isset($_GET['p'])) {
    
?>
    <form action='upload2.php?o=' method="post" enctype="multipart/form-data" onsubmit="opener.location='upload2.php?o=';  return false;">
    <input type='file' name='file' id='file' onChange="document.imagen.src='file:///' + this.value">
    Escribir algo <input type='text' name='text' id='text'>
    <br>
    <input type='submit' name='submit' value='Ok'>
    <br>
    <img name='imagen' />
    </form>
    <?php
    
exit;
}

if (isset(
$_GET['o'])) {
    
//var_dump($_REQUEST);
    
echo ' Ejecucion';
    exit;
}

if (isset(
$_FILES['file'])) {
    
$fileupload=$_FILES['file']['tmp_name'];
    
$destination=$_FILES['file']['name'];
    if (
is_uploaded_file($_FILES['file']['tmp_name'])) {
        if (
move_uploaded_file($fileupload,$destination)) print("<br><br>Guardat correctament a: $destination");
        else print(
'No guardat, error');
    }
}

if (isset(
$_POST['text'])) {
    echo 
'Este es el texto:'.$_POST['text'];
    exit;
}

?>

<a href='upload2.php?p=' target='new' Onclick="window.open('upload2.php?p=','new','toolbar=no,width=300,height=300,status=no,scrollbars=no,resize=no,menubars=no'); return false;">click</a>
</body>
</html>
  #5 (permalink)  
Antiguo 11/01/2004, 18:52
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 3 meses
Puntos: 0
No hay manera que lo consigo.

He hecho estos cambios que parecen que van bien pero no envia el formulario:

<form action="javascript: opener.location='upload2.php'; window.close();" method="post" enctype="multipart/form-data">
  #6 (permalink)  
Antiguo 12/01/2004, 08:15
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Hay una cosa que funciona, pero habría que adaptarlo a tus necesidades:
prueba148.html

Código PHP:
<html>
<
head>
<
title>
    
Formulario y submit
</title>
</
head>
<
body >
<
form action="popup148.html" target="ventana" onsubmit="window.open('', 'ventana', '')" >
<
input type="submit" />
</
form>

<
form >
<
input type="text" name="texto" value="" />
</
form>

</
body>
</
html
popup148.html:

Código PHP:
<html>
<
head>
<
script>
function 
envio()    {
    
opener.document.forms[1].texto.value document.forms[0].texto.valuewindow.close();
}
</script>
<title>
    Formulario y submit
</title>
</head>
<body >
<form action="javascript: envio()" method="get">
<input type=text name="texto" value="hola" />
<input type=submit value=enviar />
</form>
</body>
</html> 
Si por alguna razón es importante que se ejecute el script php supongo que tendrías que refrescar la página.

Probé unas cuantas formas, pero solo me funcionó esta.

Saludos
  #7 (permalink)  
Antiguo 12/01/2004, 10:02
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 20 años, 6 meses
Puntos: 13
Prueba cuando creas el popup poner un nombre a la ventana padre, de la siguiente forma:

self.name="nombre"

En el formulario del popup en el target pon el nombre que has dado a la ventana padre
  #8 (permalink)  
Antiguo 12/01/2004, 10:08
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 3 meses
Puntos: 0
Caricatos,
En la ventana padre no hay formulario, y el formulario de hijo se envia via POST. Es via Post pq tengo un upload.

No sirve el ejemplo de copiar values entre formularios, pq sólo tengo el formulario en el hijo.


Última edición por jmaribau; 12/01/2004 a las 12:54
  #9 (permalink)  
Antiguo 12/01/2004, 12:53
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 3 meses
Puntos: 0
Aleluya!! Aleluya!! Ha funcionado a la perferccion.
Poniendole self.name='padre' la cosa ah funcionado.
Estoy mas contento que unas pascuas!!!!!.

Ahora una pregunta:
como cierro el hijo desde el padre?

Creacion del hijo:
<a href='hijo.html' target='hijo' Onclick="self.name='padre';window.open('hijo.html' , 'hijo', 'toolbar=no, width=300, height=300, status=no, scrollbars=no, resize=no, menubars=no'); return false;">click</a>

En el padre:
Si pongo:
<script> hijo.close(); </script>
Me dije que hijo no esta definido. hijo es undefined

Gracias por vuestras respuestas!!!
  #10 (permalink)  
Antiguo 23/01/2004, 08:13
 
Fecha de Ingreso: enero-2004
Mensajes: 1
Antigüedad: 20 años, 3 meses
Puntos: 0
Cerrar ventana hija

Hola, a ver si me consigo explicar bien para ayudarte:

Para poder cerrar la ventana hija desde la padre tienes que tener una variable a ella, es decir, en el enlace deberías poner:

<a href='hijo.html' target='hijo' Onclick="self.name='padre';hijo=window.open('hijo. html', 'hijo', 'toolbar=no, width=300, height=300, status=no, scrollbars=no, resize=no, menubars=no'); return false;">click</a>

Y luego donde quieras cerrarla ya puedes poner: hijo.close();

Es que lo que tienes en la primera parte del enlace (<a href='hijo.html' target='hijo') es por si alguien que ve tu página no tiene habilitado javascript. Prueba a cambiar el href por otra página cualquiera y luego visualízalo con tu navegador con javascript activado y verás que no pasa nada. Y luego el atributo target yo creía que era por si tenías un marco con ese nombre ('hijo' en tu caso) para que te abriera allí la página pero de eso no estoy del todo seguro.

Espero haberme explicado.
Ahora me gustaría pedirte a ti tu ayuda ya que quiero hacer algo muy parecido a lo que has hecho tú, pero no me termino de aclarar con las comunicaciones entre padre e hijo (también quiero sacar un popup que recoja información y que se trate en la ventana del padre en una página que se llame modificar.php, por ejemplo, distinta de la que sacó el popup), ¿me puedes mandar el código que has usado tú para echarle un ojo y aclararme? Mi dirección de correo es: [email protected] (como no sé si saldrán las arrobas lo pongo otra vez: mr_grueso arroba hotmail.com).
Muchas gracias,
Alvaro.
  #11 (permalink)  
Antiguo 02/02/2004, 08:38
 
Fecha de Ingreso: febrero-2004
Mensajes: 2
Antigüedad: 20 años, 2 meses
Puntos: 0
Hola a todos,

He estado un tiempo intendando conseguir el mismo efecto del que hablais pero no lo he conseguido. Realmente pongo self.name="padre", pero despues en el formulario del hijo no consigo poner el código necesario para recibir en el formulario padre los datos del formulario.

Por favor, sería de gran ayuda que si habeis conseguido hacer funcionar el código que se he comentado me ayudaseis con él. Me sería de gran ayuda un esquema del código fuente de hijo.html o las bases para que funcione...

¿Que se pone en el action? ¿Habeis utilizado finalmente window.opener.location? ¿Como habeis llamado a "padre" desde el hijo?

Muchisimas gracias de antemano.
Juan
  #12 (permalink)  
Antiguo 02/02/2004, 09:20
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 20 años, 6 meses
Puntos: 13
el el formulario del hijo deberías poner:

<form method="post" action="padre" ....>

Y si quieres que cuando se envie, se cierre:

<form method="post" action="padre" onsubmit="window.close()"....>
  #13 (permalink)  
Antiguo 02/02/2004, 09:21
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 20 años, 6 meses
Puntos: 13
Perdona, donde he puesto action, quería poner target

Siempre me confundo jeje
  #14 (permalink)  
Antiguo 02/02/2004, 09:59
 
Fecha de Ingreso: febrero-2004
Mensajes: 2
Antigüedad: 20 años, 2 meses
Puntos: 0
bueno Jercer,

muchisimas gracias porque el problema se ha solucionado perfectamente. La verdad es que cuando se comentó lo del target pensaba que se refería al action... pero bueno.

Ahora ya sólo me queda programar exactamente lo que quiero... sólo. Pero la prueba preliminar ha funcionado bien

Muchas gracias a todos,
JHRNeoN
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 02:35.