Foros del Web » Programando para Internet » PHP »

necesito consejos para paso de ARRAY entre ventanas

Estas en el tema de necesito consejos para paso de ARRAY entre ventanas en el foro de PHP en Foros del Web. hola a todos, primera vez que escribo. he leìdo algunos mensajes respecto a paso de arrays, serialize, etc. y me he dado cuenta que hay ...
  #1 (permalink)  
Antiguo 15/05/2005, 15:49
wdc
 
Fecha de Ingreso: mayo-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
Mensaje necesito consejos para paso de ARRAY entre ventanas

hola a todos, primera vez que escribo.

he leìdo algunos mensajes respecto a paso de arrays, serialize, etc. y me he dado cuenta que hay foreros que saben bastante así que me atreví a pedir su opinión.

estoy haciendo un programa en php (no sè que versiòn uso, el server está en otra ciudad) y soy novato en este lenguaje y ademàs tengo poco tiempo para leer tutoriales y eso pues debo terminarlo pronto.

como sea el problema es que tengo una ventana o formulario php que abre una ventana popup a través de un botón, en esta ventana popup busco y elijo uno o màs "productos" con su código y este conjunto lo guardo en un array, luego, al cerrar la popup debo pasarle este array a la ventana que la abrió para mostrar los productos de array en un <TEXTAREA> comun y corriente y finalmente guardar los códigos de los "productos" en una base de datos (oracle8 ) a travès de un botón "guardar". espero que se entienda. ademàs antes de guardar debo poder modificar la lista de productos abriendo la ventana popup otra vez y haciendo las modificaciones necesarias (al abrirla debo ver los productos que ya tengo en el array obviamente para permitir eliminar algunos, por ejemplo). todo esto para darle flexibilidad al programa y al usuario.

hasta el momento paso el array que creo en la popup usando
Código PHP:
session_start();
session_register('arreglo'); 
para guardar y algo similar en la ventana original para usar el array (no tengo el código a la mano en este momento). pero no me gusta este mètodo por hallarlo algo forzado y ademàs tengo miedo que mi array se "traspase" entre usuarios que usen el programa al mismo tiempo en diferentes computadores (esto es porque no domino bien el asunto de las sesiones).

buscando he leìdo sobre el mètodo serialize (en la web de php.net, acá mismo en las faq y en otro lados) pero aún no lo pruebo porque es domingo y no puedo acceder a mi código.

lo que quisiera (si no es mucho pedir), es algúnos consejos sobre el uso de serialize, por ejemplo:
1) es mejor serialize que session_start() para el programa que estoy haciendo?

2) pueden "mezclarse" los arrays usando session_start, tal como tengo miedo que suceda? (para usar el programa hay que entrar con login y password).

3) en php.net dicen que en bueno usar base64_encode(), cookies, $gzcompresses u otros mètodos junto con serialize para ASEGURAR que el array se conserve exactamente igual al serializarlo, qué tan conveniente es hacer esto? (mirar: http://us2.php.net/manual/es/function.serialize.php )

4) como hago para eliminar el array una vez usado (por ejemplo al cerra la ventana popup y al grabar a la base de datos el formulario de la ventana principal), esto lo quiero para no dar lugar a que este array quede en memoria o algo y luego se "mezcle" con otros formularios que se creen en la msima sesión o pc. he probado unset() pero no funciona usando session_start() parece. en este momento soluciono esto reescribiendo el array en blanco una vez que lo uso.

5) todo esto apunta a que el array haga las veces de "tabla intermedia" de una base de datos, es decir, exista mientras no se guarda a la tabla permanente pero una vez grabados los datos el array deje de existir.

6) necesito que mientras el array no se grabe pueda pasarlo libremente entre la ventana principal y la popup pudièndolo modificar en cualquiera de ellas y ver estas modificaciones en la otra.

eso es todo, uso el mètodo POST.

como ven, no me manejo mucho pero tengo ganas y voluntad de aprender y probar todo lo que me digan.

muchìsimas gracias de antemano y sorry por el mensaje tan largo.

saludos.

max.

pd. de lunes a viernes trabajo en el programa y puedo responder cualquier duda con còdigo en mano.
  #2 (permalink)  
Antiguo 16/05/2005, 07:17
wdc
 
Fecha de Ingreso: mayo-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
hola gente!,

viendo que mi mensaje no tuvo mucho éxito lo refloto para poner algo de mi código para que les sirva para responder a mis preguntas:

en la ventana popup tengo este código para pasar el array:

Código:
session_start();
session_register("arreglo");
y en la ventana principal lo recojo de esta manera:

Código:
session_start();
$arreglo = $_SESSION["arreglo"];
en este momento funciona pero voy a cambiarlo para pasar el array via serialize usando este ejemplo de Cluster: http://www.forosdelweb.com/showpost....2&postcount=23 . mi duda es si debiera dejarlo con session o serializar.

bueno, luego cuento como me fue.

saludos!

m.
  #3 (permalink)  
Antiguo 16/05/2005, 10:13
wdc
 
Fecha de Ingreso: mayo-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
no puedo usar serialize por un problema de comillas!:

la instruccion original de Cluster es:

Código:
$array=array_envia($array);
pero si la uso tal cual obtengo el siguiente error:

Fatal error: Call to undefined function array_envia() in /var/apache/htdocs... .../enviar_array.php on line 160

así que le pongo comillas simples al llamado a la función para que quede así:
Código:
$array='array_envia($array)';
y así deja de darme el error de arriba pero no pasa el array, ni con post ni get. nota: usando la instrucción sin comillas el array pasa en los archivos php de ejemplo que Cluster dió pero no en mis php.

que puedo hacer?

saludos.

m.
  #4 (permalink)  
Antiguo 16/05/2005, 10:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Con el uso de sesiones que haces . .no es correcto mezclar $_SESSION con session_register() .. Es decir tu ejemplo usando sesiones de paso de arrays sería:

Código PHP:
<?
session_start
();
$tu_array=array("blabla","bla2");
$_SESSION['array']=$tu_array;
?>
<a href="leesesion.php">pasa a leesesion.php</a>
leesesion.php
Código PHP:
<?
session_start
();
// Ejemplo para ver que contenido tiene tu variable de sesión (sea del tipo que sea)
echo "<pre>";
print_r($_SESSION['array']);
echo 
"</pre>";
?>
Mi consejo sería que sigas usando sesiones para tal fin. Pasar los datos por el URL no es ilimitado (los datos que propagues) además que los veras en el URL (cosa nada "estética") .. También depende con que fin hagas eso ..

En el ejemplo que describes de uso de la función que propongo en esa FAQ .. El mensaje de error que obtienes al usarlo tal cual el ejemplo es que NO has incluido la función que ahí ves su código de "array_envia()" en ese script .. no sé como lo has probado pero el error es referente a eso. Esa función "array_envia()" no es própia de PHP (salvo error u omisión ese es el nombre que le dí en el ejemplo de la FAQ mencionada y así se usa).

Lo del uso de las "comillas" como pones en el último ejemplo .. es lógico que no funcione. Las comillas simples para una variable se usan para definir un "string" tal cual no se interpreta ese código.

Un saludo,


Un saludo,
  #5 (permalink)  
Antiguo 16/05/2005, 11:12
wdc
 
Fecha de Ingreso: mayo-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
hola,

ok, ya sabía que no era correcto mezclar $_SESSION con session_register() pero hice el cambio a lo que tú sugieres y el array simplemente no pasa, así que lo dejé tal cual.

respecto al serialize, si incluí la funcion array_envía al comienzo del script desde donde envío el array, igualmente puse la función array_recibe en el script que lo recibe, sin embargo al copiar y pegar tus códigos a archivos php y ejecutarlos si paso los arrays, sólo que en mis archivos php no logro que funcionen.

como sea usaré sesiones, mezcladas incorrectamente y todo pues de otra forma no funcionan.

otra cosa, por favor, en el script donde recibo el array tengo el siguiente código para mostrar sus valores en una ventana <TEXTAREA> de nombre otrosdiag:

Código PHP:
echo "this.document.formul.otrosdiag.value='".$arreglo[0].'\n'.$arreglo[1].'\n'.$arreglo[2].'\n'.$arreglo[3].'\n'.$arreglo[4].'\n'.$arreglo[5]."'"
evidentemente esto sólo me escribe las primeras 6 entradas en el textarea, estaba buscando un método para evitar poner $arreglo[0], etc. sino que solo el programa determinara el largo del array y copiara los valores, se te ocurre algo?

gracias.

m.
  #6 (permalink)  
Antiguo 16/05/2005, 12:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
evidentemente esto sólo me escribe las primeras 6 entradas en el textarea, estaba buscando un método para evitar poner $arreglo[0], etc. sino que solo el programa determinara el largo del array y copiara los valores, se te ocurre algo?
Si, usa un bucle foreach() para ir concatenando el "string" que necesitas o simplemente usar implode() para concatenar tus elementos del array usando como separador ese \n que necesitas.

Código PHP:
echo "this.document.formul.otrosdiag.value='".implode('\n',$arreglo)."'"
Un saludo,
  #7 (permalink)  
Antiguo 16/05/2005, 12:04
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
Bueno primero pasas los valores del array a un string y los concatenas y luego solo pones el resultado final en el value de otrosdiag.

Código PHP:
<?php
for($i=0;$i<count($arreglo);$i++) {
 
$string $string.$arreglo[$i]."\n";
}
echo 
"this.document.formul.otrosdiag.value='".$string;
?>
  #8 (permalink)  
Antiguo 16/05/2005, 17:01
wdc
 
Fecha de Ingreso: mayo-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
ok, ahora estoy ocupado en otra cosa, luego probaré que tal las soluciones que me dan, gracias.

m.
  #9 (permalink)  
Antiguo 18/05/2005, 10:33
wdc
 
Fecha de Ingreso: mayo-2005
Mensajes: 25
Antigüedad: 19 años
Puntos: 0
gracias, el implode funcionó perfecto, la técnica tuya dwacs sólo no me funcionó porque tenía que pasar el arreglo de un formulario a otro con javascript, es decir yo me equivoqué al plantear la pregunta, muchísimas gracias de todo modos.

saludos!

w.
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 11:34.