Foros del Web » Programando para Internet » PHP »

Enviar un arreglo de una pagina php a otra

Estas en el tema de Enviar un arreglo de una pagina php a otra en el foro de PHP en Foros del Web. Hola a todos, recien soy nuevo en este maravilloso muindo de la programacion web en php, mi duda es como enviar un arreglo q cargo ...
  #1 (permalink)  
Antiguo 03/12/2004, 17:22
 
Fecha de Ingreso: diciembre-2004
Mensajes: 94
Antigüedad: 19 años, 4 meses
Puntos: 0
Enviar un arreglo de una pagina php a otra

Hola a todos, recien soy nuevo en este maravilloso muindo de la programacion web en php, mi duda es como enviar un arreglo q cargo en una pagina php y mandarlo y recibirlo en otra pagina php, es decir q desde otra pagina php pueda tener acceso a mi arreglo. Si hay alguna manera, muchas gracias.

Última edición por Jose_Luis; 03/12/2004 a las 17:28
  #2 (permalink)  
Antiguo 03/12/2004, 17:33
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Lo puedes pasar por cualquier medio...
Si necesitas que esté disponible en varias páginas... lo mejor sería que lo guardes en una variable de sesión...
Pero si simplemente lo quieres pasar de un script a otro... lo debes serializar... lo envías como cualquier variable y luego al recibirlo en el otro script, lo desserializas.... y lo tienes igual.
Función serialize():
http://www.php.net/serialize
Función unserialize:
http://www.php.net/unserialize

Saludos
  #3 (permalink)  
Antiguo 04/12/2004, 15:26
 
Fecha de Ingreso: diciembre-2004
Mensajes: 94
Antigüedad: 19 años, 4 meses
Puntos: 0
Hola , estuve intentando pero no puedo, el codigo q intente es mas o menos asi ,

En la pagina donde lleno de datos mi arreglo:
$contador=0;
while($resultadoVector=mysql_fetch_array($resultad oQuery)) {

$arreglo[contador]=$resultadoVector["campo2"];

echo $arreglo[contador];
$contador=$contador+1;
}

$serializado=serialize($arreglo);//aca serializo el arreglo con todos los datos(esta bien?

$instanciaConexion->closeConexion();
header ("Location: maestro.php"); //mando a la otra pagina llamada maestro.php

como ven lo unico q hago es guardar en un arreglo los resulktados de un Select a una bD.

Y ahora en la pagina maestro.php, como haria para deserializarla??? yo he puesto asi:

$unserialcad=unserialize($serializado);

ahi me quedo, no se como hacer , tengo q hacer algun casteo????

Muchas gracias por su ayuda.
  #4 (permalink)  
Antiguo 04/12/2004, 16:24
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues

Y por que razón no usas las funciones para trabajar con arreglos que te da PHP? Por ejemplo sería más fácil hacer esto:
Código PHP:
 $miarreglo = array();
 while(
$resultadoVector=mysql_fetch_array($resultadoQuery)) {
  
array_push($miarreglo,$resultadoVector["campo2"]);
 } 
Ya tu arreglo contiene los valores que sacastes de la consulta. Ahora para serializarlo y pasarlo de una página a otra sería sencillamente esto:
Código PHP:
 $serializado serialize($miarreglo); 
y el proceso inverso sería:
Código PHP:
 $sinserializar unserialize($serializado); 
Cuando le das unserialize a la variable $serializado vuelves a obtener el mismo resultado inicial que tenias en el arreglo $miarreglo. Espero te sriva.

Salu2
__________________
Ing. Reynier Pérez Mira
  #5 (permalink)  
Antiguo 04/12/2004, 17:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Revisa esta FAQ para propagar tu array entre scripts (una vez que lo obtengas en un array como te comenta Reynier en su primera parte de sus ejemplos si es que procede en tu caso):

http://www.forosdelweb.com/f18/faqs-php-530600-post262072/

Un saludo,
  #6 (permalink)  
Antiguo 04/12/2004, 20:33
 
Fecha de Ingreso: diciembre-2004
Mensajes: 94
Antigüedad: 19 años, 4 meses
Puntos: 0
Hola, gracias por sus mensajes, realmente me ayudan mucho en lo q es PHP, pero ahora tengo otra duda y para explicarlo mejor voy a agregar el codigo:

Este es parte del codigo de la primera pagina php q va a mandar el arreglo


while($resultadoVector=mysql_fetch_array($resultad oQuery)) {
array_push($arreglo,$resultadoVector["campo2"]);
}

echo "Este es el primer valor del arreglo ".$arreglo[0]."<br>";

$cadenaserial=serialize($arreglo);

$instanciaConexion->closeConexion();

header("Location:maestro.php?variable=".$cadenaser ial);

como pueden ver el arreglo ha sido mandado; esta listo para ser recibido , pero no quiero que salga nada en la URL, por q ahi sale una cadena super larga.
Hay alguna manera de evitar que el arreglo que mando salga en la direccion URL??

Muchas Gracias..
  #7 (permalink)  
Antiguo 04/12/2004, 20:39
 
Fecha de Ingreso: diciembre-2004
Mensajes: 94
Antigüedad: 19 años, 4 meses
Puntos: 0
Otra duda, la unica manera de serializar y unserialize es habiendolo mandado por la URL verdad??? no puedo hacerle de frente el unserialize en la otra pagina???
POr ahi lei q serialize() te guarda la variable en disco y x lo tanto puedes acceder a ella. Muchas gracias por su tiempo
  #8 (permalink)  
Antiguo 04/12/2004, 21:04
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Revisaste lo de Cluster

Revisaste lo que te dejo Cluster??? Creo que ahí está lo que buscas.

Salu2
__________________
Ing. Reynier Pérez Mira
  #9 (permalink)  
Antiguo 04/12/2004, 21:26
 
Fecha de Ingreso: diciembre-2004
Mensajes: 94
Antigüedad: 19 años, 4 meses
Puntos: 0
Si , me fue de gran ayuda, pero lo q me dijo Cluster, aun tengo q hacerle un click en un boton o en un link para q lo mande. Pero yo quiero que la llamada sea automatica por eso utilizo el header()
Lo que no quiero es qe todo esa cadena , se muestre en la url.

Muchas Gracias
  #10 (permalink)  
Antiguo 05/12/2004, 01:05
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 5 meses
Puntos: 1
Pues veamos

Cita:
Pero yo quiero que la llamada sea automatica por eso utilizo el header()
A que te refieres cuando dices que la llamada sea automática, a que te redireccione de esta forma:
Código HTML:
 recibe_array.php ? array = a:3:{i:0;s:4:
si es asi lo puedes hacer pero fijándote que no envies ninguna salida HTML al navegador antes del header porque sino este no funciona.

Cita:
Lo que no quiero es qe todo esa cadena , se muestre en la url.
La cadena esa se muestra de una forma grande porque la misma a sido codificada para navegar por la URL sin ningún problema (creo). Yo le he hecho algunas modificaciones al código de las FAQ's y aqui te lo dejo:
envia_array.php
Código PHP:
 function array_envia($ar) {
    
$tmp serialize($ar);
    
$tmp urlencode($tmp); // Si no quieres que salga esa URL tan larga simplemente ponle comentarios a esta linea
    
return $tmp;
  }
 
$arr= array("algo","nose","otracosa");
 
$array array_envia ($arr);
 echo 
"<a href=\"recibe_array.php?array=$array\">Pasar array</a>";
?> 
recibe_array.php
Código PHP:
<?
 $arrayserial 
= isset($_GET['array'])?$_GET['array']:NULL;
 function 
array_recibe($arr) {
    
$tmp stripslashes($arr);
    
$tmp urldecode($tmp); // Si antes comentareaste el urlenconde en la pagina envia_array.php entonces esta linea debes comentarearla tambien
    
$tmp unserialize($tmp);
    return 
$tmp;
 }
 
$array array_recibe($arrayserial);
 foreach (
$array as $indice => $valor){
  echo 
$indice." = ".$valor."<br>";
 }
?>
Espero ahora te sirva de lo contrario explica un poco mejor lo que quieres hacer
Salu2
__________________
Ing. Reynier Pérez Mira
  #11 (permalink)  
Antiguo 05/12/2004, 07:03
 
Fecha de Ingreso: diciembre-2004
Mensajes: 94
Antigüedad: 19 años, 4 meses
Puntos: 0
Para ser mas explicito en mi duda las doy el codigo completo.

Como pueden ver en esta pagina llamada SoloLogica.php , no tengo nada de codigo html , ya que lo unico que hace es recibir la accion enviada de una pagina y si esta acccion es "VerTodos" , crea un arreglo, lo llena y manda este arreglo hacia otra pagina llamada Maestro.php
A esto me refiero que la llamada a la pagina Maestro.php sea automatica ( al igual que con el gotoPage en java)



Código PHP:
<?include './Conexion.inc.php';?>

<?
$accionrealizada
=$_GET["accion"];

$instanciaConexion=new Conexion();

if (!
strcmp($accionrealizada,"VerTodos"))
 {
$paginamandar="maestro";

  echo 
"La accion es ver todos los datos de la tabla";
  echo 
"<br></br>";


  
$SentenciaSQL="select * from tab_prueba;";

  
$instanciaConexion->AbrirConexion();
  
$resultadoQuery=$instanciaConexion->doSelect($SentenciaSQL);


  
$arreglo=array();



  while(
$resultadoVector=mysql_fetch_array($resultadoQuery)) {
    
array_push($arreglo,$resultadoVector["campo2"]);
  }

 echo 
"Este es el primer valor del arreglo ".$arreglo[0]."<br>";

$cadenaserial=serialize($arreglo);
$cadenaserial=urlencode($cadenaserial);

$instanciaConexion->closeConexion();

header("Location:maestro.php?variable=".$cadenaserial);


 }

Ahora en Maestro.php tengo lo siguiente que si funciona ya que logro capturar el arreglo pero de las dos maneras ya sea comentando o descomentando el urlencode y urldecode me sale en la url algo asi:

Sin comentar:

http://localhost/maestro.php?variable=a:10:{i:0;s:4:"dssd";i:1;s:4: "assa";i:2;s:0:"";i:3;s:4:"assa";i:4;s:3:"ass";i:5 ;s:0:"";i:6;s:0:"";i:7;s:3:"asa";i:8;s:4:"sdds";i: 9;s:4:"dssd";}

y Comentando

http://localhost/maestro.php?variabl...2dssd%22%3B%7D


Código PHP:
<?
$arrayserial 
= isset($_GET['variable'])?$_GET['variable']:NULL;

function 
array_recibe($arr) {
    
$tmp stripslashes($arr);
    
$tmp urldecode($tmp); // Si antes comentareaste el urlenconde en la pagina envia_array.php entonces esta linea debes comentarearla tambien
    
$tmp unserialize($tmp);
    return 
$tmp;
}
$array array_recibe($arrayserial);
foreach (
$array as $indice => $valor){
  echo 
$indice." = ".$valor."<br>";
}



?>

Existe alguna manera de que este arreglo se envie y se reciba serializado sin que se muestre en la url??


Muchas Gracias.
  #12 (permalink)  
Antiguo 05/12/2004, 09:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Entonces .. no propages el Array en el URL .. usa una sesión para almacenar esos datos en el servidor y los lees en la pàgina/script que redirecciones.

www.php.net/session
(en las FAQ's de este foro PHP tienes ejemplos de uso y algo de explicaciòn teórica al respecto).

Si usas sesiones, no es necesario ni serializar ni des-serializar los arrays .. Hasta objetos puedes propagar en sesiones, salvo el detalle que los mètodos se pierden; sólo se conservan las propiedades del objeto (variables). Pero eso tiene solución .. se incluye tu objeto (include("tu_classe.php")) antes de inciar el uso de sesiones (session_start()) y listo.

Pero .. te hago un comentario al hilo del tema que abristes:
http://www.forosdelweb.com/f18/arquitectura-elaboracion-paginas-php-252026/#post889207

Estudia sobre "motores de templates" .. por qué no se trata de "pasar" tus variables al script que componga la salida (digamos: "vista") sino de que PHP bajo ese "motor" de gestiòn de "plantillas" .. "parsee" tu plantilla y haga las operaciones que tengan que hacerse en funciòn de tus datos y como tengas que componerla dinàmicamente para obtener su "salida".

Hasta PHP hace de "parseador" . si tu no quieres tener en un mismo script el còdigo de la "lógica de negocios" (PHP procesos) y lo que corresponde a la "vista" .. no es necesario que "redirecciones" pues iguamente puedes tenerlo "separado" pero llamando a tu "vista" (plantilla) bajo un include()..

Ejemplo

proceso_vista.php
<?
// tus procesos PHP
include ("vista.php");
?>

y vista PHP .. algo tipo
<html>
<head>
</head>
<body>
<? echo $variable ?>
</body>
</html>

Pero .. como la mayorìa de casos esto no es tan "simple" .. pues hay zonas de tu "vista" que son variables en funciòn de los datos que obtienes de una consulta a tu BD por ejemplo .. para eso estàn los "motores de templates" que gestionan a modo de "buffer" la generaciòn de tu salida completa para luego entregarlo a la "salida" .. por lo menos asì tienes separado e identificado tus "plantillas" (ese HTML con sus zonas que pueden ser repetidas .. etc).

Un saludo,

Última edición por Cluster; 05/12/2004 a las 09:13
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:02.