Foros del Web » Programando para Internet » PHP »

saber desde donde se llama a un formulario

Estas en el tema de saber desde donde se llama a un formulario en el foro de PHP en Foros del Web. Hola, tengo una nueva duda: Resulta que llamo al mismo formulario desde 2 partes distintas de una aplicación: desde añadir y desde editar. Lo que ...
  #1 (permalink)  
Antiguo 19/07/2006, 08:54
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 18 años, 4 meses
Puntos: 0
saber desde donde se llama a un formulario

Hola, tengo una nueva duda:

Resulta que llamo al mismo formulario desde 2 partes distintas de una aplicación: desde añadir y desde editar. Lo que quiero saber es como puedo diferenciar desde donde lo he llamado para que, a la hora de devolver los valores, vaya a añadir o a editar, dependiendo de donde se le ha llamado. Gracias
  #2 (permalink)  
Antiguo 19/07/2006, 09:03
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 20 años
Puntos: 1
ten un campo oculto:

<input name="accion" type="hidden">

y cuando des al boton de enviar, dependiendo de lo que vayas a hacer haces esto en el onclick:

onclick='document.getElementById("accion").value=" editar";' (o "anadir" depende de lo que quieras hacer)

y cuando vas a la pagina que gestiona los datos recoges el valor $_POST['accion'] y dependiendo de que sea "editar" o "anadir" ya trabajas con lo que quieras hacer..

a ver si te gusta esa forma
__________________
ALOZORRO v5.0 (ahora en .es)
  #3 (permalink)  
Antiguo 19/07/2006, 09:08
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
O bien, utilizando esos campos ocultos puedes comprobar el valor del mismo de la siguiente manera:
Código PHP:
<input name="campoOculto" type="hidden" value="editar" /> 
Código PHP:
if( $_POST['campoOculto'] == 'editar' )
{
   ....

  #4 (permalink)  
Antiguo 19/07/2006, 09:12
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 20 años
Puntos: 1
Cita:
Iniciado por jerkan
O bien, utilizando esos campos ocultos puedes comprobar el valor del mismo de la siguiente manera:
Código PHP:
<input name="campoOculto" type="hidden" value="editar" /> 
Código PHP:
if( $_POST['campoOculto'] == 'editar' )
{
   ....

es lo que he dicho yo pero no puse lo del if porque eso ya lo doy pur supuesto jeje.. solo que tu metes el valor directamente, pero en ese caso el campo oculto siempre va a tener el mismo valor, hay que darle un valor dependiendo de lo que quiera hacer.. y eso lo haces en el onclick.
__________________
ALOZORRO v5.0 (ahora en .es)
  #5 (permalink)  
Antiguo 19/07/2006, 09:18
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola:

También se pueden pasar valores desde el mismo botón submit, y en teoría solo le llega el valor del botón que se pulsa.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 19/07/2006, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
usa PHP_SELF, o REQUEST_URI, ambas estan en $_SERVER :)
  #7 (permalink)  
Antiguo 19/07/2006, 09:24
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 18 años, 4 meses
Puntos: 0
Pero lo que yo me referia era que al mismo formulario lo llamo desde 2 scripts distintos, por ejemplo: añadir.php y editar.php. Entonces a la hora de devolver los valores tengo que enviarlo a uno u otro dependiendo de quien lo llamara. ¿como hago eso? Aviso que soy muy nuevo en esto, asi que agradeceria que me lo explicarais como si fuera un niño de 8 años XD

Gracias por responder tan rapido
  #8 (permalink)  
Antiguo 19/07/2006, 09:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
usa por decir:
Código PHP:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>">
los campos
</form>
Asi siempre la forma se ira, al mismo script desde el que lo hayas llamado.
  #9 (permalink)  
Antiguo 19/07/2006, 10:25
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 18 años, 4 meses
Puntos: 0
He usado esto último pero se me queda en blanco la página.
Este es el código que uso

Código PHP:
echo "<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=\"post\"> \n";
¿que puede fallar?
  #10 (permalink)  
Antiguo 19/07/2006, 10:47
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 18 años, 4 meses
Puntos: 0
Si usas un 'echo' no debes entrar y salir de php para mostrar el $_SERVER['PHP_SELF']...

Aún así tb puedes probar con $PHP_SELF aunque no sé cual de los 2 es el q debería usarse para mayor compatibilidad.
__________________
La muerte es un camino que todos debemos recorrer...
  #11 (permalink)  
Antiguo 19/07/2006, 10:57
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 18 años, 4 meses
Puntos: 0
Usando $PHP_SELF manda los datos al mismo script en el que estoy, es decir, en el del formulario, y lo que yo necesito es que lo mando al script donde lo llama.

Por ejemplo. Teniendo 3 scripts: añadir.php, editar.php y formulario.php.
Desde añadir y editar se llama a formulario.php, y una vez aqui, dependiendo quien lo llamara, le manda los datos a añadir.php o a editar.php.

Eso es lo que necesito hacer. Cómo puedo hacerlo??
  #12 (permalink)  
Antiguo 19/07/2006, 11:09
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 18 años, 4 meses
Puntos: 0
Con esto casi formulo una pregunta también... ¿xq algunos distribuís los formularios en una página y la comprobación en otra? ¿No sería mejor q la comprobación estuviera en la misma y en kaso de error en algún campo mantenéis los datos q el cliente introdujo en el formulario metiéndolos en el value, mostráis el error en la misma página y resaltáis dicho campo?
__________________
La muerte es un camino que todos debemos recorrer...
  #13 (permalink)  
Antiguo 19/07/2006, 11:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por djreficul
Con esto casi formulo una pregunta también... ¿xq algunos distribuís los formularios en una página y la comprobación en otra? ¿No sería mejor q la comprobación estuviera en la misma y en kaso de error en algún campo mantenéis los datos q el cliente introdujo en el formulario metiéndolos en el value, mostráis el error en la misma página y resaltáis dicho campo?
Da igual realmente si separas el proceso o no en -dos- scripts o propagas en caso de error al script del formulario las variables desde el script del proceso.

El caso es que si usas -un- sólo script .. al enviar las variables el mismo script no tienes que hacer mucho más al respecto .. simplemente las llamas por el método que enviastes .. En el caso de dos scripts separados .. o las montas en un URL al redireccionar o las dejas en una Cookie o Sessión para tomarlas en el script que redireccionas.

Yo en lo personal uso dos scripts para estos procecsos. Uso sesiones para dejar las variables en el servidor y tomarlas en el script que vuelvo, así "separo" por completo o lo más posible los procesos ..

Lo importante es "ver" que son "procesos" lo que estamos haciendo .. no por el hecho de estar en un mismo script los -dos- procesos pensar que es "un sólo proceso. (No sé si me entendieron .. pero "proceso= recarga de página o redirección").

Si quieres podrías abrir un tema nuevo .. expón tu código y lo conversamos. Si realmente estás "separando procesos" o no .. Por ejemplo un error común (se use dos o un script para ambos procesos) es el de dejar el proceso final (el que registra datos en una BBDD, el que envia e-mails .. etc ..) en el mismo script .. al recargar la página se origina un re-envio de variables (así te avisará tu navegador) y se origina una nueva ejecución de tu proceso (se envia un e-mail duplicado .. se crean registros duplicados en BBDD .. etc).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 19/07/2006, 12:14
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 18 años, 4 meses
Puntos: 0
A ver...si la cosa esta en que si voy a añadir un nuevo articulo, tengo que devolver los datos a esta url:

localhost/xoops2/modules/news/admin/index.php?op=newarticle

y si estoy modificando datos que ya existen, a esta:

localhost/xoops2/modules/news/submit.php?returnside=1&op=edit&storyid=1

Entonces necesito saber de donde se llama al formulario para devolverselo a una u otra url. ¿HAy alguna forma de hacerlo o estoy dando palos de ciego?
  #15 (permalink)  
Antiguo 19/07/2006, 12:19
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 18 años, 4 meses
Puntos: 0
¿Por qué no generas una variables de sesión con la cual identifiques cual es la página que está haciendo la llamada y así sabes a cual devolverla?

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #16 (permalink)  
Antiguo 19/07/2006, 12:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por sober25
A ver...si la cosa esta en que si voy a añadir un nuevo articulo, tengo que devolver los datos a esta url:

localhost/xoops2/modules/news/admin/index.php?op=newarticle

y si estoy modificando datos que ya existen, a esta:

localhost/xoops2/modules/news/submit.php?returnside=1&op=edit&storyid=1

Entonces necesito saber de donde se llama al formulario para devolverselo a una u otra url. ¿HAy alguna forma de hacerlo o estoy dando palos de ciego?
Tienes la variable:

HTTP_REFERER que la puedes acceder por $_SERVER['HTTP_REFERER']

Pero, realmente esa variable NO ES SEGURA, falla en muchos casos (por ejemplo si abres ventanas ...)

Lo recomendable es lo que creo que ya te han comentado .. En tu script "index.php" al saltar a "newarticle" ahí tomas el nombre del script en el que estas: $_SERVER['PHP_SELF'] y si te hace falta .. también el "Query String" (con $_SERVER['QUERY_STRING']) y así obtienes todo tu URL donde estás.

Ese dato lo pasas en el "submit" de ese formulario en un campo oculto (hidden) para que lo puedas tomar y redireccionar a hacia donde llegastes .. pero el detalle es que ese dato lo propagas tu .. (ideal sería usar una variable de sesión mas que propagarla en el URL o en un campo de un formulario).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 19/07/2006, 12:44
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 18 años, 4 meses
Puntos: 0
No acaba de estar claro el tema.Resulta que el formulario desde donde envio los datos no esta en:
localhost/xoops2/modules/news/admin/index.php?op=newarticle

esta en otro script, en este:
localhost/xoops2/modules/news/admin/enlaces.php

Es desde este enlaces.php donde quiero redireccionar a
1)localhost/xoops2/modules/news/admin/index.php?op=newarticle si estoy añadiendo, o a...

2) localhost/xoops2/modules/news/submit.php?returnside=1&op=edit&storyid=1 si estoy editando datos


Entonces...¿deberia mandar una variable al formulario (por ejemplo $direccion)cuyo contenido sea la url desde donde llamo al formulario de enlaces.php con el fin de devolver la informacion a la url que contenga esta variable $direccion? ¿no existe un método más sencillo?
  #18 (permalink)  
Antiguo 19/07/2006, 13:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Entonces...¿deberia mandar una variable al formulario (por ejemplo $direccion)cuyo contenido sea la url desde donde llamo al formulario de enlaces.php con el fin de devolver la informacion a la url que contenga esta variable $direccion? ¿no existe un método más sencillo?
Pues con el enrredo que tienes .. no es tan sencillo .. Enrredo me refiero a una estructura "modular" con scripts por médio que llaman a otros .. etc...

Podrías probar HTTP_REFERER como te he comentado .. eso indica el URL anterior por el que pasastes (exactamente lo mismo que si vas a tu navegador y le das al botón "atrás" .. ahí llegas). Pero, .. si bien esto te puede solventar el problema ten cuidado NO ES seguro esa variable.

Lo recomendable es lo que ya te han comentado .. tomar el URL de donde estás para luego propagarselo a donde procesas para que este pueda redireccionar hacia donde pasó. Por cierto, mejor con una variable de sesión (si no es así .. casi es lo mismo de "adulterable" un HTTP_REFERER que pasarlo "a mano" en una varible tuya).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 20/07/2006, 10:23
 
Fecha de Ingreso: junio-2006
Mensajes: 37
Antigüedad: 18 años, 4 meses
Puntos: 0
Hola de nuevo, he estado mirando sobre las variables de sesion, y segun he comprendido, serian una especie de variables que son visibles en todas las paginas que se vean mientras se este conectado al servidor no?

Bueno, intente hacer lo siguiente, en la pagina de index.php?op=newarticle tengo el siguiente código:
Código PHP:
session_start(); // incio de uso de sesiones.

$_SESSION['direc']=$PHP_SELF;

$fileseltray->addElement(new XoopsFormLabel("<a href='".XOOPS_URL."/modules/news/admin/enlaces.php' >Pulsar aqui para acceder a la pagina de enlaces para la reproducción de los archivos</a>"),false); 
ES decir, creo una variable de sesion $direc y creo un enlace q me lleva al formulario de enlaces.php.

Entonces, una vez en el formulario de la pagina enlaces.php tengo lo siguiente:

Código PHP:
session_start();
$direccion=$_SESSION['direc']; 
?>
<form action= <?echo $direccion;?> method=\"post\">
Lo que entiendo que tendria q hacer con esto es recibir en la variable $direccion el contenido de la variable de sesion $direc, y usarla en el formulario para devolver los datos a una página u otra.

Bueno, pues eso es lo que yo he entendido al menos. No funciona porque al probar a poner un echo session_name(); en ambas paginas me pone nombres de sesiones distintas, y la variable $direc nunca llega a enlaces.php.

¿que hago mal?¿que tengo q cambiar?¿soy un caso perdido?
Gracias por vuestra paciencia conmigo
  #20 (permalink)  
Antiguo 20/07/2006, 10:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Si, así serían las variables de sesión (en su base)

No uses $PHP_SELF .. aunque obtengas el valor esperado (por cierto lo has comprabado?) usa $_SERVER para acceder a ese tipo de variables (la de ejemplos que hemos puesto en este mensaje y sigues haciendolo como "global"):

Código PHP:
$_SESSION['direc']=$_SERVER['PHP_SELF']; 
Cita:
Bueno, pues eso es lo que yo he entendido al menos. No funciona porque al probar a poner un echo session_name();
"¿Nombres de sesión distintas?" .. lo que debes ver es el SID .. como constante que es o el ID de sesión .. ese es el que interesa que sea el mismo en tu proceso de páginas y saltos entre estas pues así confirmas que la sesión está activa y es la misma: session_id()

Por otro lado .. el flujo entre páginas ha de ser vía links, redireccionamientos .. etc .. No puedes llamar a un script directo y a otro directo por tu "barra de direcciones" en forma alternada y directa .. ahí es normal que se creen sesiones diferentes (no sé como has hecho tus pruebas).

Cita:
¿que hago mal?¿que tengo q cambiar?¿soy un caso perdido?
Las sesiones son un tema delicado .. yo sé que tienes que solventar tu problema puntual del código que usas .. pero si te enfrentas a un tema -nuevo- al cual le afecta muchooooooooooooooo diferentees factores como: configuración de PHP, tu código y propiedades del "cliente" (navegador/PC usuario) que tienes que revisar .. se hará complicado hacer todas estas validaciones sobre lo que ya tienes hecho.

Te recomiendo encarecidamente que hagas un simple ejemplo de sesiones. De los que tienes en las FAQ's .. un scriptA.php genera una variable de sesión . .usa un link y/o redireccionamiento automático (header("location .. ")) y obten el valor en el scriptB.php donde redirecciones .. Ahí veras si en tus condiciones de pruebas te funcionan las sesiones en general .. si te funcionan (sobre todo si redireccionas con "header()" .. ) ya puedes ver tu código actual en busca de otro tipo de problemas: normalmente que no asignastes el valor a la variable de sesión por otros motivos ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 14:09.