PHP - Problema con arreglo asociativo

   
Vista:

Problema con arreglo asociativo

Publicado por Luis (54 intervenciones) el 21/09/2009 02:16:28
Es la primera vez que intento hacer un carro de compras en php y tengo un problema que no he podido solucionar y agradeceria mucho si alguien me ayuda ya que llevo varios buscando una solucion y no he podido hacer que funcione.

A continuacion muestro el codigo importante de la pagina detalle productos que es donde se encuentra la descripcion de los productos y el boton para añadir al carro, con el cual lo q hago es que recargo la pagina para enviden los datos que obtengo de la base de datos a traves de campos ocultos.

Luego tengo el siguiente codigo con el cual intento tener un contador en una variable de sesion que me permita moverme a la siguiente posicion del arreglo $itemsEnCesta (lo cual no es estoy muy seguro de que sea necesario ya que no se si la proxima vez que se pase por esta pagina se sustituye el primer valor introducido en el arreglo)

if((isset($_SESSION['contador'])) && (isset($_POST["carro"]))){
$_SESSION['contador'] += 1;

}
if ((!isset($_SESSION['contador'])) && (isset($_POST["carro"]))) {
$_SESSION['contador'] = 0;
//echo "primero";
}

if (isset($_POST["carro"])) {
$modo=$_POST['modo'];
$title=$_POST['descripcion'];
$price=$_POST['precio'];
$item=$_POST['idSubProducto'];
if($modo == "nuevo"){

$contador = $_SESSION['contador'];

$itemsEnCesta = array($contador => array ( "codigo" => $item, "titulo" => $title, "precio" => $price ));
$_SESSION["itemsEnCesta"] = $itemsEnCesta;
header("Location:VerCompras.php");

}

En VerCompras.php tengo el siguiente codigo para mostrar el contenido de la variable de sesion itemsEnCesta.


if (isset($_SESSION['itemsEnCesta'])) {
print_r($_SESSION['itemsEnCesta']);
$session=$_SESSION['itemsEnCesta'];
if($_SESSION['itemsEnCesta'] > 0){
echo "<table border='1'>";
for($i=0;$i<=1;$i++){
if($i!=1){
echo "<tr>";
foreach($session[0] as $clave=>$valor){ // linea 211
echo "<th>".$clave."</th>\n";
}
echo "</tr>";
}
echo "<tr>";
foreach($session[$i] as $clave=>$valor){ // linea 217
echo "<td>".$valor."</td>\n";
}
echo "</tr>";
}
echo "</table>";
}
}else{
print "Su ha agredo ningun producto al carrito";
}

La primera vez que agrego un producto imprime en el navegador firefox

Array ( [0] => Array ( [codigo] => A1703Q [titulo] => APLIQUE MQ ESPIGA P/B [precio] => 52 ) )
Notice: Undefined offset: 1 in C:\wamp\www\Pagi080909\public_html\VerCompras.php on line 217

Warning: Invalid argument supplied for foreach() in C:\wamp\www\Pagi080909\public_html\VerCompras.php on line 217
codigo titulo precio
A1703Q APLIQUE MQ ESPIGA P/B 52

Y si añado otro producto me imprime

Array ( [1] => Array ( [codigo] => A1803Q [titulo] => APLIQUE MIAMI [precio] => 52 ) )
Notice: Undefined offset: 0 in C:\wamp\www\Pagi080909\public_html\VerCompras.php on line 211

Warning: Invalid argument supplied for foreach() in C:\wamp\www\Pagi080909\public_html\VerCompras.php on line 211

Notice: Undefined offset: 0 in C:\wamp\www\Pagi080909\public_html\VerCompras.php on line 217

Warning: Invalid argument supplied for foreach() in C:\wamp\www\Pagi080909\public_html\VerCompras.php on line 217
A1803Q APLIQUE MIAMI 52

No entiendo porque me salen estos errores. Por lo que he leido el undefined offset significa que estoy leyendo un indice del arreglo que no existe, pero he hecho todo lo que se me ha ocurrido para ver donde esta el error y no consigo la falla. Agradeceria cualquier ayuda que me puedan dar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con arreglo asociativo

Publicado por manolo (6 intervenciones) el 21/09/2009 08:54:51
No hace falta un "contador", con guardar los productos en un array vale. Ejemplos:

// Recoger o inicializar el "carro de la compra"
$carro = isset ($_SESSION["carro"]) ? $_SESSION["carro"] : Array ();

// Guardar un nuevo producto
array_push ($carro, array ( "codigo" => $item, "titulo" => $title, "precio" => $price ));
$SESSION["carro"] = $carro;

// Recorrer los productos del carro
if (count ($carro) > 0){
foreach ($carro as $producto){
echo "Codigo: " . $producto["codigo"] . "<br />";
echo "Titulo: " . $producto["titulo"] . "<br />";
echo "Precio: " . $producto["precio"] . "<br /><hr />";
}
}
else
echo "No hay productos.";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con arreglo asociativo

Publicado por Luis (54 intervenciones) el 21/09/2009 17:41:55
Manolo muchas gracias por tu ayuda. Probe el ejemplo que me diste y funciona muy bien.

El problema que tengo ahora es que quiero validar que si ya ha sido agregado un codigo no se cree un nuevo elemento en el array si no que aumente cantidad.

$itemsEnCesta = isset ($_SESSION["itemsEnCesta"]) ? $_SESSION["itemsEnCesta"] : Array ();

// Guardar un nuevo producto
$contItems = count ($itemsEnCesta);

if($contItems > 0){
foreach($itemsEnCesta as $producto){
if($producto["codigo"]==$item){
$producto["cantidad"] += $cantidad;
}else{
array_push ($itemsEnCesta, array ( "codigo" => $item, "titulo" => $title, "precio" => $price, "cantidad" => $cantidad ));
break;
}
}
}else{
array_push ($itemsEnCesta, array ( "codigo" => $item, "titulo" => $title, "precio" => $price, "cantidad" => $cantidad ));
}

$_SESSION["itemsEnCesta"] = $itemsEnCesta;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con arreglo asociativo

Publicado por manolo (6 intervenciones) el 22/09/2009 15:48:56
...

if($contItems > 0){
$existe = false;

foreach($itemsEnCesta as $producto){
if($producto["codigo"]==$item){
$producto["cantidad"] += $cantidad;
$existe = true;
}
}

if (!$existe)
array_push ($itemsEnCesta, array ( "codigo" => $item, "titulo" => $title, "precio" => $price, "cantidad" => $cantidad ));

}
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con arreglo asociativo

Publicado por Luis (54 intervenciones) el 22/09/2009 18:11:05
Manolo gracias por tu ayuda pero sigo sin poder modifcar el contenido del arreglo no entiendo que podra ser lo que pasa. Si tienes alguna idea de porque no modifica te lo agradeceria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con arreglo asociativo

Publicado por Luis (54 intervenciones) el 24/09/2009 03:16:33
Pude arreglar mi codigo con este ejemplo de un carrito de compras que consegui en la siguiente pagina: http://www.programacionweb.net/articulos/articulo/?num=329.

Es el mejor ejemplo que he visto de un carrito de compras.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con arreglo asociativo

Publicado por NElson (1 intervención) el 17/11/2009 22:18:53
Tienes que usar
Ej 1
arreglo = array_merge(array[id],array,array[id],....);

Ej 2

arreglo[] = array_merge(array[id],array,array[id],....);

Esto une uno o mas arreglos en uno solo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar