Foros del Web » Programando para Internet » PHP »

carrito de la compra

Estas en el tema de carrito de la compra en el foro de PHP en Foros del Web. Hola a todos, otra vez por aquí. Veréis, hace muy poco q he empezado con php pero no tengo otro remedio q hacer un carrito ...
  #1 (permalink)  
Antiguo 29/08/2005, 03:34
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
carrito de la compra

Hola a todos, otra vez por aquí. Veréis, hace muy poco q he empezado con php pero no tengo otro remedio q hacer un carrito de compra con lo poco q sé. Sinceramente, lo q he hecho es buscar manuales con scripts ya preparados para ello y he intentado modificarlos pero hay algo q no sale.

Lo normal es q me digais q busque por ahi, pero es q la mayoría de los manuales son copiados unos de otros y no sé ya como buscar en Google para dar con lo q busco. Así q me voy a arriesgar a preguntar...

Tengo el código de un carrito muy sencillo, q pego a continuación. Lo que no sé es cómo hacer q aunque encuentre el producto ya introducido, se añada en una nueva linea ¿lo entendeis? es decir yo añado al carro un boli, y luego añado otro. Al ser el mismo producto se suman las cantidades en la misma linea. Le he hecho mil modificaciones al código pero siempre se suman. Por favoooor echadme un cable con esto, os prometo q siempre me parto la sesera antes de preguntar.

Código PHP:
<?php 
   session_start
(); 
   
session_register('itemsEnCesta'); 
   
$item=$_POST['item']; 
   
$cantidad=$_POST['cantidad']; 
   
$itemsEnCesta=$_SESSION['itemsEnCesta']; 

   if (
$item){ 
      if (!isset(
$itemsEnCesta)){ 
         
$itemsEnCesta[$item]=$cantidad
         }else{ 
         foreach(
$itemsEnCesta as $k => $v){ 
            if (
$item==$k){ 
               
$itemsEnCesta[$k]+=$cantidad
               
$encontrado=1
               } 
         } 
      if (!
$encontrado$itemsEnCesta[$item]=$cantidad
      } 
   } 
   
$_SESSION['itemsEnCesta']=$itemsEnCesta
?> 

<html> 
<body> 
<tt> 

<form action="<?=$PHP_SELF."?".$SID?>" method="post"> 
Dime el producto <input type="text" name="item" size="20"><br> 
Cuantas unidades <input type="text" name="cantidad" size="20"><br> 
<input type="submit" value="Añadir a la cesta"><br> 
</form>

<? 
   
if (isset($itemsEnCesta)){ 
   echo
'El contenido de la cesta de la compra es:<br>'
      foreach(
$itemsEnCesta as $k => $v){ 
         echo 
'Artículo: '.$k.' ud: '.$v.'<br>'
      } 
   } 
?>

</tt> 
</body> 
</html>
  #2 (permalink)  
Antiguo 29/08/2005, 04:54
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 12 años, 3 meses
Puntos: 0
Carrito de la compra

A ver si te he entendido, lo que no quieres es sumar las cantidades de dos productos que sean iguales, quieres tener uno y uno por separado, cada uno con su cantidad ¿no?

En el codigo que has puesto fijate que haces un foreach que recorre el array, y si encuentra el producto le suma la cantidad, lo primero que tienes que hacer es quitar ese foreach para que no te sume las cantidades.

Además estas accediendo a la posición $item, y claro, si quieres añadir el mismo producto pero con otra cantidad te va a sobreescibir la cantidad anterior.
No se si sabes bien como funcionan los arrays en php, como has dicho que eres nuevo en esto.

El caso es que si quieres añadir el mismo producto, como $item es igual, te sobreescribiria la cantidad anterior, asi que habria que cambiar la forma de almacenar el array.
Podrias hacer un array bidimensional, algo asi:

$itemsEnCesta [1] [$item] = $cantidad1;
$itemsEnCesta [2] [$item] = $cantidad2;

O algo asi:

$array[$item] = $cantidad1;

$itemsEnCesta [1] = $array;

Espero que te sirva de algo.
  #3 (permalink)  
Antiguo 29/08/2005, 05:28
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
Exacto, lo único q conseguía era lo que tú has dicho, que se sobreescribiera. Voy a ver si soy capaz de hacerlo como tú dices y te cuento.

Muchísimas gracias
  #4 (permalink)  
Antiguo 29/08/2005, 06:56
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
Pues no soy capaz de sacarlo. Me da errores por todos lados. Entiendo más o menos el significado de cada linea, pero no sé cómo debo crear el array ni donde. Si uso el primer método me sale el nombre del producto como un número. No creo q sirva de mucho poner el código aquí pues tiene errores por todos lados.

¿Podéis decirme los pasos a segúir? No el código completo pues entonces mejor os pago y me haceis el carrito... pero sí donde debo sustituir el código. Llevo toda la mañana con esta historia.
  #5 (permalink)  
Antiguo 29/08/2005, 07:09
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 12 años, 3 meses
Puntos: 0
Carrito de la compra

No se que errores te da, pero por lo menos te dire porque te sale como nombre del producto un número.

Cuando muestras los valores, haces un foreach, no se si sabes como funciona el foreach: Recorre el array $itemsEnCesta y guarda la clave (la posicion) en $k y el valor en $v.

foreach($itemsEnCesta as $k => $v){
echo 'Artículo: '.$k.' ud: '.$v.'<br>';
}

Como el array es $itemsEnCesta[1][$item] = $cantidad pues $k que es la clave del array te muestra el 1. Lo que no se es como mostrar el $item.
Yo creo que es mejor que lo hagas de la segunda forma, asi podras acceder mejor a los valores:

Cuando vas a insertar un producto nuevo, primero haces un array que lleve en la clave $item y en el valor $cantidad.

$array [$item] = $cantidad;

Y luego haces $itemsEnCesta [] = $array.
De esta manera crea automaticamente una nueva posicion del array numericamente y le asigna el array que habias creado antes.

Acuerdate de hacer un unset($array) para que lo inicialice y no meta mas valores.

Y luego para mostrarlo haces:

foreach($itemsEnCesta as $k => $v){
foreach ($v as $key =>$value) {
echo 'Artículo: '.$key.' ud: '.$value.'<br>';
}

$v es un array porque en cada posicion de $itemsEnCesta hay un array, lo recorremos, que debe tener solo una posicion y mostramos sus parametros.

A ver si esto te vale y espero que te hayas enterado, entiendo que es un poco lioso.
Cualquier otra duda, no temas preguntarme.

Saludos!!!
  #6 (permalink)  
Antiguo 29/08/2005, 07:42
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
Bueno, me entero de algo, pero no del todo porque sigue sin salir. Ahora para colmo me dice q hay un error en la última linea, es decir en el cierre </html> ¿cómo es posible?
Te dejo el código, seguramente he puesto más de una burrada. Gracias por tu tiempo.

<?php
session_start();
session_register('itemsEnCesta');
$array [$id] = $jugadores;


if ($id){
if (!isset($itemsEnCesta)){
$itemsEnCesta [] = $array;
}else{
foreach($itemsEnCesta as $k => $v){
if ($id==$k){
$itemsEnCesta [] = $array;
$encontrado=1;
}
}
if (!$encontrado) $itemsEnCesta [] = $array;
}
}
?>
<html>
<body>
<tt>
<?
if (isset($itemsEnCesta)){
echo'El contenido de la cesta de la compra es:<br>';
foreach($itemsEnCesta as $k => $v){
foreach ($v as $key =>$value) {
echo 'Artículo: '.$key.' ud: '.$value.'<br>';
}
unset($array);
?>
</tt>
<br>
<br>
<a href="campos.htm">Añadir reserva</a></tt>
</body>
</html>
  #7 (permalink)  
Antiguo 29/08/2005, 07:49
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 12 años, 3 meses
Puntos: 0
Carrito de la compra

El error en la ultima linea te da porque no has cerrado la llave del ultimo foreach.

Y luego, creo que ya no hace falta el codigo de $encontrado ¿no? Porque vas a meter el producto de todas formas, eso lo hacias antes para ver si sumabas la cantidad o no.

He modificado esas dos cosas que te he dicho y ha quedado asi, pruebalo ¿ok?

Código PHP:
<?php
session_start
();
session_register('itemsEnCesta');
$array [$id] = $jugadores;


if (
$id){
   
$itemsEnCesta [] = $array;
}
?>
<html>
<body>
<tt>
<?
if (isset($itemsEnCesta)){
echo
'El contenido de la cesta de la compra es:<br>';
foreach(
$itemsEnCesta as $k => $v){
   foreach (
$v as $key =>$value
      echo 
'Artículo: '.$key.' ud: '.$value.'<br>';
}
unset(
$array);
?>
</tt>
<br>
<br>
<a href="campos.htm">Añadir reserva</a></tt>
</body>
</html>
  #8 (permalink)  
Antiguo 29/08/2005, 08:18
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
Tal como está ahora me da el siguiente error:

Warning: Invalid argument supplied for foreach() in /var/www/html/carrito/carrito.php on line 18


Y además cada vez q actualizo la página se añade un nuevo producto. Quzá estoy pidiendo ya demasiado...
La linea 18 es la del foreach:

if (isset($itemsEnCesta)){
echo'El contenido de la cesta de la compra es:<br>';
//linea 18
foreach($itemsEnCesta as $k => $v){
foreach ($v as $key =>$value)
echo 'Artículo: '.$key.' ud: '.$value.'<br>';
}
}
  #9 (permalink)  
Antiguo 29/08/2005, 09:54
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 12 años, 3 meses
Puntos: 0
Carrito de la compra

La verdad es que ahora mismo no se que puede ser. Haz pruebas, muestra por pantalla $itemsEnCesta y $v a ver si muestra "Array". Y si lo hace muestra su contenido.

Para mostrar todo el contenido de un array es:
print_r($itemsEnCesta);
print_r($v);

A ver que te sale.
  #10 (permalink)  
Antiguo 29/08/2005, 10:26
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
Hola!!!
Bueno habrá sido q me he ido a comer y han cogido fuerzas las neuronas porque ya sale. Lo de sumarse uno cada vez q actualizas aún pasa, pero habiendo opciones de atrás, de modificar, de añadir, borrar y adelante, no creo q a nadie le de por actualizar no? De todas formas es un detalle que puedo arreglar más adelante y así te dejo ya en paz.
Muchas gracias por todo ojalá pueda echarte yo una mano alguna vez. He modificado el código q me pasaste y ha quedado así:
<?php
session_start();
session_register('itemsEnCesta');
$array [$id] = $jugadores;


if ($id){
$itemsEnCesta [] = $array;
}
?>
<html>
<body>
<tt>
<?
if (isset($itemsEnCesta)){
echo'El contenido de la cesta de la compra es:<br>';
foreach($itemsEnCesta as $k => $v){
foreach ($v as $k =>$jugadores)
echo 'Artículo: '.$k.' ud: '.$jugadores.'<br>';
}
}
unset($array);
?>
</tt>
<br>
<br>
<a href="campos.htm">Añadir reserva</a></tt>
</body>
</html>

Última edición por xili48; 30/08/2005 a las 03:41 Razón: parecía q el código era mio
  #11 (permalink)  
Antiguo 30/08/2005, 04:47
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 4 meses
Puntos: 0
No me había dado cuenta pero cuando añades el mismo producto con otro precio (es que éste varía según la temporada) se cambia el precio en todas las filas!! ¿sabeis por qué?
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:32.