Foros del Web » Programando para Internet » PHP »

No puedo ver mi arreglo

Estas en el tema de No puedo ver mi arreglo en el foro de PHP en Foros del Web. Saludos maestros, mi situación es la siguiente: Estoy haciendo un carrito de compra, cada elemento del carrito conste de nombre, codigo del producto, precio y ...
  #1 (permalink)  
Antiguo 13/07/2004, 13:50
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 10 meses
Puntos: 21
No puedo ver mi arreglo

Saludos maestros, mi situación es la siguiente:

Estoy haciendo un carrito de compra, cada elemento del carrito conste de nombre, codigo del producto, precio y cantidad, ahora bien, he declarado una variable de sesión donde voy a ir agregando cada uno de los productos que se vayan comprando, la creo de la siguiente forma:

$arreglo=array ("nombre","codigo","precio","cantidad","importe ");
$_SESSION['cesta']=$arreglo;

Ahora bien en otra página recibo de un formulario los datos del producto y lo agrego a lo que ya hay:

// Recibo del formulario
$nombre=$_POST['nombre'];
$codigo=$_POST['codigo'];
$precio=$_POST['precio'];
$cantidad=$_POST['cantidad'];
$importe=$precio*$cantidad;

//Lo inserto como nuevo elemento de la variable de sesion
$_SESSION['cesta'][]=array ("nombre"=>$nombre,"codigo"=>$codigo,"precio"=>$pr ecio,"cantidad"=>$cantidad,"importe"=>$importe);

Ahora bien, deseo imprimir el arreglo para ver si se estan guardando bien los datos, antes que yo les pongo como lo intento hacer quiero explicar lo que entiendo hasta ahora:

Segun como lo veo la variable de sesion es un arreglo pero que cada uno de los elementos es otro arreglo y cada uno de lo eloemntos del segundo arreglo son ya los valores, estoy entendiendo bien? por que es aquí donde me pierdo:

Bueno trato de desplegar los valores del arreglo de arreglos de la siguiente forma:

foreach ($_SESSION['cesta'] as $value) {
echo "Nombre: ".$value['nombre']."<br>";
echo "Codigo: ".$value['codigo']."<br>";
echo "Precio: ".$value['precio']."<br>";
echo "Cantidad: ".$value['cantidad']."<br>";
echo "Importe: ".$value['importe']."<hr>";
$total=$total+$value['importe'];

}

Pero me muestra solo una letra por campo como que separa el nombre y cada letra es un valor, esta muy raro y la verdad no se como se guir adelante

Alguna sugerencia?
  #2 (permalink)  
Antiguo 13/07/2004, 14:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm podrías usar print_r($_SESSION['cesta']) para ver que estructura concreta tiene tu array;

Código PHP:
echo "<pre>";
print_r($_SESSION['cesta']);
echo 
"</pre>"
Si tu $value no es un array .. si haces $value['algo'] .. ese "algo" será tomado como indice "0" del string del valor que contenga dandote el primer caracter de tu resultado.

Un saludo,
  #3 (permalink)  
Antiguo 13/07/2004, 15:39
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 10 meses
Puntos: 21
Oki cluster y como le puedo hacer para que $value sea un arreglo y me muestre todo el contenido jiji

Gracias por al ayuda
  #4 (permalink)  
Antiguo 13/07/2004, 16:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Se supone que con esto que haces a la hora de declarar tu "cesta" en la sesión .. ya tendría que ser un array:

$_SESSION['cesta'][]=array()

Por eso te deciá de hacer tu print_r() y observar que es lo que realmente estás obteniendo.

Yo todo eso lo haría tal cual creo que ya te indiqué en otro mensaje tuyo, concretamente en:
http://www.forosdelweb.com/f18/recorriendo-arreglo-global-215360/

Un saludo,
  #5 (permalink)  
Antiguo 13/07/2004, 16:15
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 10 meses
Puntos: 21
aaaah creo que ya se donde esta el prblema, esta en la declaración del arreglo, no se esta declarando un arreglo de arreglos, solo un arreglo de elementos, esto fue lo que me mostro :

Array
(
[0] => nombre
[1] => codigo
[2] => precio
[3] => cantidad
[4] => importe
[5] => Array
(
[nombre] => cocacola
[codigo] => sefrw
[precio] => 52
[cantidad] => 5
[importe] => 260
)

)

Solo el último elemento del arreglo es otro arreglo, los anteriores son cadenas, por eso sale asi, de todas formas voy a seguir investigando, muchísimas gracias.

Saludos.
  #6 (permalink)  
Antiguo 13/07/2004, 16:35
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 10 meses
Puntos: 21
Si ya logre definir el arreglo correctamente lo hice de esta forma:

$_SESSION['cesta']=array ( array ("nombre","codigo","precio","cantidad","importe")) ;

y me muestra esto:

Array
(
[0] => Array
(
[0] => nombre
[1] => codigo
[2] => precio
[3] => cantidad
[4] => importe
)

[1] => Array
(
[nombre] => televisor
[codigo] => 8514df
[precio] => 45
[cantidad] => 3
[importe] => 135
)

)

Ahora bien, al definir el arreglo se creal el valo [0], ¿es posible definir la estructura pero sin que se cree el valor para el indice [0]? o sea, definir la estructura pero sin necesidad de darle valore iniciales?

Saludo y gracias nuevamente.
  #7 (permalink)  
Antiguo 13/07/2004, 16:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Fijate como defines tus arrays ..

En un primer momento haces:

$arreglo=array ("nombre","codigo","precio","cantidad","importe ");

Que es un array unidimensional como así lo estás viendo en tun print_r() (ves lo útil que resulta para evaluar un problema?).

Pero luego defines un array unidimensional .. pero asociativo:
$_SESSION['cesta'][]=array ("nombre"=>$nombre,"codigo"=>$codigo,"precio"=>$pr ecio,"cantidad"=>$cantidad,"importe"=>$importe);

¿para que usas el primero?

Un saludo,
  #8 (permalink)  
Antiguo 13/07/2004, 17:03
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 10 meses
Puntos: 21
efectivamente cluster, elimine la primera declaración y ya funciona sin problemas.

Ya recibe asigna y muestra todo solo una cosita, ya no registrao la variable de sesion en ningun lado, simplemente le asigno valores:

$_SESSION['cesta'][]=array ("nombre"=>$nombre,"codigo"=>$codigo,"precio"=>$pr ecio,"cantidad"=>$cantidad,"importe"=>$importe);

Y sin embargo si funciona, habia leído que habia necesidad de registrar las variables de sesion que vamos a ir pasando de pagina a pagina, sin embargo, aqui no la registro y pero si funciona, esta bien? no mas esa duda me queda por ahora y les agadezco nuevamente su ayuda.

Saludos
  #9 (permalink)  
Antiguo 13/07/2004, 17:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lo que comentas de "registrar" eso viene de los viejos usos de session_register() donde había que declarar antes (o despues de esa función) el valor de tu variable que ivas a registrar (con esa función) en la sesión.

Pero ahora estás usando arrays superglobales como el de sesión que manejas .. así que no es necesario ir con variables intermédias si no lo estimas oporturno. El coso es que ante cualquier modificación vas a acceder como a un elemento cualquiera de un array común .. salvo que esa es una "sesión" y tu a su vez le asignas otro array de cualquier tipo.

Un saludo,
  #10 (permalink)  
Antiguo 13/07/2004, 17:15
 
Fecha de Ingreso: enero-2002
Mensajes: 4.156
Antigüedad: 15 años, 10 meses
Puntos: 21
aaah los arreglos superglobales tambien son como por ejemplo $_POST y $_GET no?

Solo una cosita, si algun experto se apiada de nosotros los primerizos sería bueno que se hiciera un tutorialito dedicado exclusivamente a arreglos, la información que encontré esta muy escueta, de no ser por que el buen Cluster me dijo como revisar el contenido del arreglo ya hubiese saltado por la ventana.

Sinceramente los arreglos me parecieron (y creo que a muchos tambien) muy abstractos cuando uno lo esta usando por primera vez, seria ideal algun tutorialillo dedicado exclusivamente a ellos.

Claro, es solo ua sugerencia.

Saludos.

Última edición por Elalux; 13/07/2004 a las 17:28
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 13:37.