Foros del Web » Programando para Internet » PHP »

duda con arrays multidimensionales

Estas en el tema de duda con arrays multidimensionales en el foro de PHP en Foros del Web. Hola, necesito crear un array multidimensional, compuesto por un numero de clientes determinado y sus datos correspondientes, tras crearlo, necesito enviarlo por url, redireccionar la ...
  #1 (permalink)  
Antiguo 24/12/2008, 04:53
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
duda con arrays multidimensionales

Hola, necesito crear un array multidimensional, compuesto por un numero de clientes determinado y sus datos correspondientes, tras crearlo, necesito enviarlo por url, redireccionar la pagina y recuperar los datos de dicho array, la verdad es que este tema se me atraganta un pco pq no he trabajdo mucho cn ellos, a ver si podeis ayudarme con lo que he hecho de momento....

Código PHP:
function genera_Pdf($fecha){

$fecha $_REQUEST['fecha'];

$sql_muestras mysql_query("SELECT Cliente_id FROM tmuestras WHERE Fecha = '$fecha'")or die ("Error en la consulta sql_muestras".mysql_error());

$num_cliente 0//inicializamos el numero de etiquetados


$cliente = array();

while(
$muestras mysql_fetch_array($sql_muestras)){ //Por cada muestra hacemos la consulta necesaria para rescatar los datos del cliente

$id_cliente $muestras[0]; //cogemos su id
$num_cliente ++; // sumamos uno al numero de etiquas

//se buscan todos sus datos
$sql_cliente mysql_query("SELECT * FROM tclientes WHERE $Id = $id_cliente")or die ("Error en la consulta sql_cliente".mysql_error());

//recogemos sus datos en la variable datos_cliente
$datos_cliente mysql_fetch_array($sql_cliente);

// almacenamos en el array los datos de cada uno de los clientes

    
    
$cliente = array
    ( 
"cliente nº:".$num_cliente => array
        ( 
"nombre" => $datos_cliente[0],
           
"direccion" => $datos_cliente[1],
           
"localidad" => $datos_cliente[2],
           
"provincia" => $datos_cliente[3],
           
"cp" => $datos_cliente[4],
           
"per_con" => $datos_cliente[5]
          )
    );
}

// esto lo he visto en un ejemplo

$compac_array=serialize($cliente);

$compac_array=urlencode($compac_array);
//-------------------------------------------------------


//Cerramos el PHP 
Código:
<script languaje="javascript">
	window.open("pdf/genera_pdf.php?clientes=$compac_array")
</script>


y luego necesito recuperarlo en genera_pdf.php

Código PHP:

if (isset($_GET['clientes']))
            
 
{
            
 
// esto forma parte del ejemplo que he visto....


      
$a=stripslashes ($_GET['clientes']);
            
 
      
$array_clientesunserialize($a);
            
 
      foreach (
$array_clientes AS $clave => $valor)
            
 
              echo 
"$clave ----> $valor <br>";
            
 


Última edición por manguiti; 24/12/2008 a las 04:58
  #2 (permalink)  
Antiguo 24/12/2008, 05:10
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: duda con arrays multidimensionales

No puedes mandar así un array por url. Ten en cuenta que las variables por URL se mandan visibles.

Para hacerlo deberías serializar el array antes de enviarlo y desserializarlo al recogerlo (creo que era así, que hace tiempo que no uso algo de eso, y nunca lo he hecho con array multidimensionales). Pero esto te generará una URL kilométrica (dependiendo de lo grande que sea el array).

Creo que es más viable que guardes el array en una variable de sesión y lo recojas en la otra página.
  #3 (permalink)  
Antiguo 24/12/2008, 05:18
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: duda con arrays multidimensionales

ok, lo guardaré en una variable de sesion, pero tengo la duda si cuando voy creando el array con el while, me va a crear el mismo array "aumentando" el valor de la primera clave o si por el contrario por cada iteracion en el while está creando un nuevo array...ya que estoy utilizando la funcion print_r() pra visualizar el array tras cargar el archivo y si lo pongo despues del while solo me toma la ultima iteracion....


Código PHP:

while($muestras mysql_fetch_array($sql_muestras)){ //Por cada muestra hacemos la consulta necesaria para rescatar los datos del cliente

    
$id_cliente $muestras['Cliente_id']; //cogemos su id
    
$num_cliente ++; // sumamos uno al numero de etiquas

    //se buscan todos sus datos
    
$sql_cliente mysql_query("SELECT nombre, domicilio, localidad, provincia, cp FROM clientes_1 WHERE Id = $id_cliente")or die ("Error en la consulta sql_cliente".mysql_error());

    
//recogemos sus datos en la variable datos_cliente
    
$datos_cliente mysql_fetch_array($sql_cliente);

    
// almacenamos en el array los datos de cada uno de los clientes

    
    
$cliente = array
    ( 
"cliente nº:".$num_cliente => array
        ( 
"nombre" => $datos_cliente[0],
           
"direccion" => $datos_cliente[1],
           
"localidad" => $datos_cliente[2],
           
"provincia" => $datos_cliente[3],
           
"cp" => $datos_cliente[4],
          )
    );
    
print_r($cliente);
}




$_SESSION['datos_clientes'] = $clientes
  #4 (permalink)  
Antiguo 24/12/2008, 05:50
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 16 años, 5 meses
Puntos: 5
Respuesta: duda con arrays multidimensionales

Te toma la ultima iteracion. Para que se te una al resto del array te falta los corchetes al final de $cliente. 3 consejos:
- La clave de un array debe ser algo sencillo. No es aconsejable añadir espacios y menos el caraceter º, eso lo puedes añadir en el array.

- Deberias leer un poco mas sobre sentencias MySQL, para intentar sacar todos los clientes en una sola sentencia. Por lo que estoy viendo haces una sentencia por cada cliente, ademas de la inicial. Es decir que si tienes 100 clientes haces 101 sentencias MySQL, algo que retardara un monton tu script incluso lo detendra. :

- Si no puedes sacar la sentencia MySQL de la iteracion deberias añadir al final mysql_free_result(), para evitar que se te llene la memoria.

Código PHP:
while($muestras mysql_fetch_array($sql_muestras)){ //Por cada muestra hacemos la consulta necesaria para rescatar los datos del cliente

    
$id_cliente $muestras['Cliente_id']; //cogemos su id
    
$num_cliente ++; // sumamos uno al numero de etiquas

    /*
     *Intenta sacar esta sentencia fuera. Haces una sentencia MySQL por cada iteracion
     */
    
$sql_cliente mysql_query("SELECT nombre, domicilio, localidad, provincia, cp FROM clientes_1 WHERE Id = $id_cliente")or die ("Error en la consulta sql_cliente".mysql_error());

    
//recogemos sus datos en la variable datos_cliente
    
$datos_cliente mysql_fetch_array($sql_cliente);

    
// almacenamos en el array los datos de cada uno de los clientes. Te falta los corchetes. Y deberias cambiar la clave del array
    
$cliente[] = array
    ( 
$num_cliente => array
        (  
"cliente" => "cliente nº:".$num_cliente
           
"nombre" => $datos_cliente[0],
           
"direccion" => $datos_cliente[1],
           
"localidad" => $datos_cliente[2],
           
"provincia" => $datos_cliente[3],
           
"cp" => $datos_cliente[4],
          )
    );
    
print_r($cliente);
    
mysql_free_result($sql_cliente);

__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #5 (permalink)  
Antiguo 24/12/2008, 05:56
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: duda con arrays multidimensionales

muchas gracias por la informacion, entiendo lo que dices del numero de iteraciones, pero es que realmente necesito ir buscando ese cliente en cuestion en diferentes tablas...

Código PHP:

//se buscan todos sus datos
    
$sql_cliente mysql_query("SELECT nombre, domicilio, localidad, provincia, cp FROM clientes_".$zona_provincia[0]." WHERE Id = $id_cliente")or die ("Error en la consulta sql_cliente".mysql_error());

    
//recogemos sus datos en la variable datos_cliente
    
$datos_cliente mysql_fetch_array($sql_cliente); 
como ves, del valor de zona provincia dependera de la tabla en la que busque los valores de ese cliente...por lo demás gracias, voy a hacer lo que me dices...
  #6 (permalink)  
Antiguo 24/12/2008, 06:20
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 16 años, 5 meses
Puntos: 5
Respuesta: duda con arrays multidimensionales

Bueno quien dice en una, dice dos; que es mejor que n+1;

Código PHP:

//Guardamos todas sus ids en un array.
$ary_id_clientes = array();
while(
$muestras mysql_fetch_array($sql_muestras))
    
$ary_id_clientes[] = $muestras['Cliente_id']; 

mysql_free_result($sql_muestras);

//Sentencia para usar con la clausula IN de MySQL
$sent '('.implode(", "$ary_id_clientes).')';

$sql_cliente mysql_query("SELECT nombre, domicilio, localidad, provincia, cp FROM clientes_1 WHERE Id IN $sent")

$clientes = array();
$num_cliente =0;
while(
$datos_cliente mysql_fetch_array($sql_clienteMYSQL_NUM))
{
   
$cliente[] = array
    ( 
$num_cliente => array
        (  
"cliente" => "cliente nº:".$num_cliente
           
"nombre" => $datos_cliente[0],
           
"direccion" => $datos_cliente[1],
           
"localidad" => $datos_cliente[2],
           
"provincia" => $datos_cliente[3],
           
"cp" => $datos_cliente[4],
          )
    );
    
$num_cliente++;

}

mysql_free_result($sql_cliente); 
La hemos reducido a 2. Y seguro que se puede reducir aun mas.
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #7 (permalink)  
Antiguo 24/12/2008, 06:24
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: duda con arrays multidimensionales

ya creo el array correctamente, ahora me falta saber si al hacer la redireccion por javascript, como ir mostrando el array en el otro archivo....sería algo así....


Código PHP:

if (isset($_SESSION['datos_clientes']))
            
 
{
                      
             
      foreach (
$_SESSION['datos_clientes'] AS $clave => $valor){
            
 
          
$clave $valor;
        
      }      
 

 
//////////////////////////////////////////////////
    
    
    
    //Fuente
    
$this->SetFont('Times','',12);
    
//Imprimir texto en una columna de 6 cm de ancho
    
$this->MultiCell(60,5,$nombre);
    
$this->MultiCell(60,5,$direccion);
    
$this->MultiCell(60,5,$localidad);
    
$this->MultiCell(60,5,$provincia);
    
$this->MultiCell(60,5,$cp);
    
$this->MultiCell(60,5,$persona_cont);
    
$this->Ln();
    
//Cita en itálica
    
$this->SetFont('','I');
    
$this->Cell(0,5,'(fin del extracto)');
    
//Volver a la primera columna
    
$this->SetCol(0);

debería ir recuperando cada clave-valor para luego ir mostrandolos en un pdf que va a contenter tantas "tarjetas" como clientes haya generado la consulta donde se introduciran los datos que he recogido antes....

Última edición por manguiti; 24/12/2008 a las 06:30
  #8 (permalink)  
Antiguo 26/12/2008, 02:48
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: duda con arrays multidimensionales

alguien puede orientarme sobre como coger luego el array una vez generado en la otra página???gracias!!
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:11.