Foros del Web » Programando para Internet » PHP »

Problema de variables, con el REQUEST o GET o...

Estas en el tema de Problema de variables, con el REQUEST o GET o... en el foro de PHP en Foros del Web. Hola Maestros, Vamos a ver, tengo un problema que no se si es una estupidez, o que... Tengo una pagina web con un formulario y ...
  #1 (permalink)  
Antiguo 22/10/2003, 05:29
Avatar de Isil  
Fecha de Ingreso: febrero-2003
Mensajes: 48
Antigüedad: 14 años, 9 meses
Puntos: 0
Exclamación Problema de variables, con el REQUEST o GET o...

Hola Maestros,

Vamos a ver, tengo un problema que no se si es una estupidez, o que...

Tengo una pagina web con un formulario y varios checkbox. Cada vez que hago click en un chek, hace un submit. El metodo de envio es GET.

El target de ese formulario es un iframe que tengo en esa misma pagina.

En la pagina del iframe, que hace un reload cada N segundos, recojo el valor de los checks.

Los checks se llaman 'origen0', 'origen1', ... y asi...

Para recoger el valor de esos checks hago un for, guardando en una lista los valores de $_REQUEST['origen0']...
Si lo hago de $_GET['origen0'], el resultado es el mismo (el problema que explicare tb).

Ok, entonces...
mi problema es que esa pagina tengo dos versiones. MySQL, donde no hay problema, funciona perfectamente.
Y Oracle, donde $_REQUEST [...] no coge el valor que tiene que coger, a veces si, a veces no...

La versiones son calcadas, los resultados de las consultas funcionan. El unico punto donde veo error es que el $_REQUEST no tiene valor!!

Añado que la version en Oracle es mucho más lenta, no entiendo porque, pero siempre ha sido así en el ordenador sobre el que trabajo.

A alguien se le ocurre donde puede estar el problema? Muchas gracias!!!
__________________
:censura:
  #2 (permalink)  
Antiguo 22/10/2003, 06:14
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Has dicho que recargas ese iframe cada n segundos. ¿Quien lo recarga? ¿El o la pagina donde esta el iframe? Si es la pagina "madre" (donde tienes el <iframe>), eso quiere decir que cada n segundos cancela la carga del iframe y vuelve a pedirla. Esta nueva peticion no tendra los valores del submit.

Asi que va mi hipotesis. Dices que la version oracle es mucho mas lenta. Podria ser que la recarga se produciria antes de que le diera tiempo a grabar los datos. Esto cancelaria el script, parando su ejecucion y perdiendo los datos.

En http://www.php.net/manual/en/feature...n-handling.php se explica como "controlar" el estado de la conexion. En concreto pone la funcion ignore_user_abort() (http://www.php.net/manual/en/functio...user-abort.php) para ignorar las peticiones de abortar por parte del cliente, y finalice siempre el script. Puede que funcione para este caso.

Para comprobar la teoria, aumenta el tiempo entre 2 recargas, para ver si actualiza todas las veces.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 22/10/2003, 06:40
Avatar de Isil  
Fecha de Ingreso: febrero-2003
Mensajes: 48
Antigüedad: 14 años, 9 meses
Puntos: 0
Muchas gracias Josemi,

Ya habia localizado el problema justo antes de leer tu respuesta. Es efectivamente un problema de machacamiento de variables. Me explico...

La pagina madre es un formulario de checkbox donde hace submit cuando hago algun click, esto envia a su iframe los resultados en las variables $_REQUEST[...]. El problema es que el Iframe hace reload cada n segundos, para estar actualizado continuamente con la base de datos. Muestra una tabla que coge de unos resultados de la BD segun los checkboxs.
No pierde el valor de $_REQUEST, mientras va haciendo el reload.

El problema es: si hago click en alguno de los checks, hace submit enviando los nuevos valores de $request, pero antes se para en una consulta obligada en la BD, durante ese lapso, se hace reload de la pagina, con lo que creo yo que serian sus $request que tienen el valor antiguo. Total, que pasa de los cambios que le indicarian los check.

Evidentemente,si aunmento el tiempo entre dos recargas funciona, pero el problema no esta solucionado porque el usuario podria hacer click cuando estuviera a punto de recargarse el iframe y ya la hemos liado.

Se me ha ocurrido, no hacer submit al hacer click, e intentar coger los valores de los check de la pagina principal mediante javascript en el iframe (que no se exactamente como hacerlo, estoy en ello), pero no estoy seguro si funcionaria. A alguien se le ocurre otra forma?
__________________
:censura:
  #4 (permalink)  
Antiguo 22/10/2003, 07:00
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
El reload no tiene por que enviar los valores anteriores. Depende de como sea el reload. Para vover a enviar los valores de un formulario tendria que ser un submit o explicitamente decirle que envie los valores.

¿Has probado lo que te he comentado de la funcion ignore_user_abort()? Quizas con esa funcion consigues que se ejecute completamente el script.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 22/10/2003, 07:07
Avatar de Isil  
Fecha de Ingreso: febrero-2003
Mensajes: 48
Antigüedad: 14 años, 9 meses
Puntos: 0
Lo he probado, pero no parece solucionar nada... de hecho no veo la diferencia. De hecho, si hace reload, y pasa del submit que le envia el usuario, probablemente pierda las variables que hubieran venido con el submit, que es lo que me pasa ahora...
__________________
:censura:
  #6 (permalink)  
Antiguo 22/10/2003, 07:11
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Bueno, sin ver el codigo del reload, el formulario y parte del iframe, pues no se me ocurre ninguna cosa.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 22/10/2003, 07:40
Avatar de Isil  
Fecha de Ingreso: febrero-2003
Mensajes: 48
Antigüedad: 14 años, 9 meses
Puntos: 0
mira, te pongo cachos:

1- El formulario

<form method="get" name="formselect" target="elframe" action="elIframe.php">
...
<input type="checkbox" name="origen0" onClick="submit();">CCV

<input type="checkbox" name="origen1" onClick="submit();">Punt 2

<input type="checkbox" name="origen3" onClick="submit();">Tres

...

Donde llama al Iframe:
...
<iframe name="elFrame" src="elIframe.php>
...

Asi, mas o menos...

El action es elIframe.php, y hace lo siguiente...

...
<body onLoad="setTimeout('window.location.reload();',500 0);">

...

$disk= ObtieneElementos();
$num = count($disk);
$grp='origen';
$dOrigen=llenaTablaElem($num,$disk,$grp);

...

donde ObtieneElementos(); hace una consulta a la BD que me devuelve un array con los elementos (que son los mismos que salian con los checkbox, o sea 'CCV', 'punt 2' y 'tres', porque el formulario tb se construye dinamicamente).

Y el llenarTablaElem($num,$disk,$grp) es asi:
$j=0;
for ($i=0;$i<$num;$i++){
$nom = $grp.$i;
if ($_REQUEST[$nom]==true){

if ($_REQUEST[$nom]!='') $res[$j]=$disk[$i];
}
$j++;
}
return $res;
...

Explico:

Por cada elemento, mira si existe, si esta seleccionado, y si lo esta, lo pone el el array de salida.


Esto funciona...
pero en MySQL, porque lo hace rapido. En Oracle se machacan... el problema esta en los REQUEST...

Como ves, estoy desesperado!
__________________
:censura:
  #8 (permalink)  
Antiguo 22/10/2003, 08:01
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
A ver, por lo que veo, es el propio iframe el que se recarga, ¿verdad? (el onload=settimeout() esta en elframe.php).

Pues si el codigo esta organizado como lo has puesto, tienes que reorganizarlo. Porque me parece que estas mandando el HTML del tag <body> (con el onload) antes de realizar las operaciones con la base de datos.

Yo te recomendaria realizar todas las operaciones PHP que no requieran salida por el navegador ANTES de empezar a mandar salida al navegador (antes de mandar el <html>). Con esto realizadas todas las operaciones antes de nada.

Tambien te recomendaria que a la vez que mandas un submit al frame, desactives el settimeout() del frame. Asi si hay un submit, no se producira la recarga por timeout. Te quedarian los check estilo:

<input type="checkbox" name="origen0" onClick="desactivar_setimeout_frame(); submit();">CCV

Ahora mismo no se como se desactiva, pero supongo que abra alguna forma (creo que hay una funcion cleartimeout).

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 22/10/2003, 14:31
Avatar de Isil  
Fecha de Ingreso: febrero-2003
Mensajes: 48
Antigüedad: 14 años, 9 meses
Puntos: 0
Buenas,

finalmente ya lo he solucionado, te explico...

El iframe es una pagina PHP que lo unico que hace es escribir las variables $_REQUEST en otras de SESSION, y redirecciono a la php que hace el reload. De esta forma, cuando hago un submit, actualizo las variables de session, y en el php que se va relodeando, voy mirando siempre las variables de session, que solo varian en el caso que se haga un submit con alguno de los check!!!

:D

Ha constado 1 dia entero, pero se ha solucionado! ueh!

Muchas gracias por todo!

Que vaya bien!
__________________
:censura:
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 21:13.