Foros del Web » Programando para Internet » PHP »

Duda con sumar cantidades en carrito y boton para Actualizar Todo

Estas en el tema de Duda con sumar cantidades en carrito y boton para Actualizar Todo en el foro de PHP en Foros del Web. Hola a todos! Sigo afinando mi carrito de compras y me surgió una duda... ¿Cómo hago para que al cargar 2 veces un MISMO producto ...
  #1 (permalink)  
Antiguo 20/10/2011, 08:47
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Duda con sumar cantidades en carrito y boton para Actualizar Todo

Hola a todos! Sigo afinando mi carrito de compras y me surgió una duda... ¿Cómo hago para que al cargar 2 veces un MISMO producto pero con cantidades diferentes me las sume en vez de reemplazarlas?

Ej: cargo en el carrito:
producto A = 10

...vuelvo a cargar el mismo producto pero con otra cantidad:

producto A = 30

...y actualmente el resultado es: 30 y debería ser 40

Les muestro el código:
Código PHP:
session_start();
include(
'conectar.php');

$conexion mysql_connect($host_db$usuario_db$pass_db) or die ("no se ha podido conectar a la BD");
mysql_select_db($base_db$conexion) or die ("no se ha podido seleccionar la BD");

$cod_articulo $_POST["cod_articulo"];
$cod_categoria $_POST["cod_categoria"];
$cantidad $_POST["cantidad"];

if(!isset(
$cantidad)){$cantidad=$_POST["cantidad"];}

$qry=mysql_query("SELECT * FROM producto WHERE cod_articulo='".$cod_articulo."' AND cod_categoria='".$cod_categoria."'");
$row=mysql_fetch_array($qry);
$_SESSION['carro']

if(isset(
$_SESSION['carro']))
$carro=$_SESSION['carro'];

$carro[md5($cod_articulo)]=array('identificador'=>md5($cod_articulo),'cantidad'=>$cantidad,'unidad'=>$row['unidad'],'categoria'=>$row['categoria'],'linea'=>$row['linea'],'precio'=>$row['precio'],'cod_articulo'=>$cod_articulo,'cod_categoria'=>$cod_categoria);

$_SESSION['carro']=$carro
Además de esto, tengo el listado con esos mismos productos. El listado muestra un producto por fila y cada una de ellas está encerrada en un formulario (como se muestra en el código abajo).



Y este es el formulario que se genera por cada producto:
Código HTML:
<form name="a<?php echo $v['identificador'] ?>" method="post" action="carro_actualiza.php?<?php echo SID ?>" id="a<?php echo $v['identificador'] ?>">
 <input name="cantidad" type="text" class="prod" id="cantidad" value="<?php echo $v['cantidad'] ?>" size="6">
 <input name="cod_articulo" type="hidden" id="cod_articulo" value="<?php echo $v['cod_articulo'] ?>">
 <input name="cod_categoria" type="hidden" id="cod_categoria" value="<?php echo $v['cod_categoria'] ?>">
<a href="carro_borrar.php?<?php echo SID ?>&cod_articulo=<?php echo $v['cod_articulo'] ?>&cod_categoria=<?php echo $v['cod_categoria'] ?>"><img src="trash.gif" width="12" height="14" border="0"></a>
 <input name="imageField" type="image" src="actualizar.gif" width="20" height="20" border="0">
</form> 
Así como está el código, cada fila/producto tiene la opcion de BORRAR y ACTUALIZAR. El problema con esto es que si cargo 100 productos y tengo que modificar las 100 cantidades, tengo que presionar por cada modificación el boton ACTUALIZAR y lo que necesito es UN SOLO BOTON para ACTUALIZAR TOOODO.
¿Puede ser esto posible?

Muchiiisimas gracias por el aguante y por su ayuda.
Abraz. Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 20/10/2011, 09:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Para tu primer duda, tendrías que primero comparar si existe ya el elemento en tu variable $_SESSION['carro'] usando isset o algo similar, si existe en lugar de reemplazar el elemento compruebas la cantidad y la sumas, en caso contrario lo agregas a tu array.

Para tu segunda duda, puedes hacerlo de dos maneras, la primera es encerrar todo tu table en una forma y así enviar todos los textboxes para procesarlos en el servidor, o de la otra manera es que vía javascript recojas todos tus inputs y hagas un submit desde javascript al servidor para procesarlo.

Saludos.
  #3 (permalink)  
Antiguo 20/10/2011, 13:44
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

mmm... mas o menos capté lo que me has comentado. Igual voy a tener que investigar un poco en cuanto llegue a casa. Espero no se me complique por demás.

Gracias y cualquier cosa vuelvo.
Saludos.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #4 (permalink)  
Antiguo 21/10/2011, 09:18
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Bueno, la verdad es que voy a necesitar una mano de parte de uds. porque estoy dando vueltas ahora sin éxito y como verán, he hecho una ensalada rusa con esto.
Quise hacerlo de esta manera:

Código PHP:
session_start();
$cod_articulo $_POST["cod_articulo"];
$cod_categoria $_POST["cod_categoria"];
$cantidades $_POST["cantidad"];

$qry=mysql_query("SELECT * FROM producto WHERE cod_articulo='".$cod_articulo."' AND cod_categoria='".$cod_categoria."'");
$row=mysql_fetch_array($qry);

if(isset(
$_SESSION['carro']))
$carro=$_SESSION['carro'];
$cantidad=$_SESSION['cantidad'];


if (
$cod_articulo){ 
   if (!isset(
$cantidad)){ 
      
$cantidad[$cod_articulo]=$cantidades
   }else{ 
      foreach(
$cantidad as $k => $v){ 
         if (
$cod_articulo==$k){ 
         
$cantidad[$k]+=$cantidades
         
$encontrado=1;
         }
      }
      if (!
$encontrado$carro[md5($cod_articulo)]=array('identificador'=>md5($cod_articulo),'cantidad'=>$cantidades,'unidad'=>$row['unidad'],'categoria'=>$row['categoria'],'linea'=>$row['linea'],'precio'=>$row['precio'],'cod_articulo'=>$cod_articulo,'cod_categoria'=>$cod_categoria);
   }
}

$_SESSION['carro']=$carro
¿Me pueden corregir lo que está mal? Mil gracias.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #5 (permalink)  
Antiguo 21/10/2011, 10:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Lo que tienes que hacer es simple:
Código PHP:
Ver original
  1. <?php
  2. $cod_articulo = $_POST["cod_articulo"];
  3. $cod_categoria = $_POST["cod_categoria"];
  4. $cantidad = $_POST["cantidad"];
  5.  
  6. $carro = $_SESSION['carro'];
  7. if (!isset($carro)) {
  8.      $carro = array();
  9. }
  10.  
  11. $identificador = md5($cod_articulo);
  12. if (isset($carro[$identificador])) { // ya existe solo actualizar cantidad
  13.          $carro[$identificador]['cantidad'] += $cantidad;
  14. } else {
  15.         $qry=mysql_query("SELECT * FROM producto WHERE cod_articulo='".$cod_articulo."' AND cod_categoria='".$cod_categoria."'");
  16.         $row=mysql_fetch_array($qry);
  17.  
  18.         $carro[$identificador]=array('identificador'=>md5($cod_articulo),'cantidad'=>$cantidades,'unidad'=>$row['unidad'],'categoria'=>$row['categoria'],'linea'=>$row['linea'],'precio'=>$row['precio'],'cod_articulo'=>$cod_articulo,'cod_categoria'=>$cod_categoria);
  19. }
  20.  
  21. $_SESSION['carro'] = $carro;
  #6 (permalink)  
Antiguo 21/10/2011, 12:08
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

GatorV: Excelente!!! Funcionó PERFECTO!!! Obvio que te llevas todo el crédito como siempre.

Claaaaaaro, ahora me doy cuenta... no estaba tan errado en la intención, pero había mezclado bastante las cosas. Además no sabía como había que utilizar el md5 y como dentro del array verificar solo el valor $cantidad. Buen desorden había puesto antes, jajaja!!!

Me quedó algo para preguntarte que no te entendí...
Cita:
Para tu segunda duda, puedes hacerlo de dos maneras, la primera es encerrar todo tu table en una forma y así enviar todos los textboxes para procesarlos en el servidor, o de la otra manera es que vía javascript recojas todos tus inputs y hagas un submit desde javascript al servidor para procesarlo.
Cuando dices "encerrar todo tu table en una forma y así enviar todos los textboxes para procesarlos en el servidor".... esto se puede hacer mediante un solo formulario ó hay que hacerlo si o si con javascript?

Nuevamente mil gracias por todo. Abrazo grande.
Marx
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #7 (permalink)  
Antiguo 21/10/2011, 12:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Como te digo puedes poner toda tu tabla en un <form> y asi al hacer submit se enviaran todos los valores de tus <inputs> dentro de tu tabla y asi puedes porcesarlo en el servidor, por ejemplo:
Código PHP:
Ver original
  1. <form>
  2. <table>
  3. <?php foreach ($carro as $identificador => $elemento) { ?>
  4.       <tr>
  5.            <td><input name="cantidad[<?php echo $identificador; ?>]" value="<?echo echo $elemento['cantidad']; ?>" /></td>
  6.       </tr>
  7. <?php } ?>
  8. </table>
  9. </form>

En PHP vas a recibir un array donde tienes los indices y las nuevas cantidades que puedes usar para actualizar tu array del carro.

Saludos.
  #8 (permalink)  
Antiguo 26/10/2011, 19:12
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Uh! Me puse a probar esto y me generó una duda... si yo tengo los productos en los cuales les puedo cambiar la cantidad (esto genera un producto = un formulario)... para generar este form que al presionar el boton me cambie toooodo de un click... ¿no se puede generar un formulario PADRE con un boton "Modificar Todo" y dentro estos que se generan en la consulta, no?

Gracias y saludos.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #9 (permalink)  
Antiguo 26/10/2011, 19:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

No, no existen los formularios padres, la limitacion es directa en HTML.

Saludos.
  #10 (permalink)  
Antiguo 27/10/2011, 04:09
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

mmm... o sea que debería optar por modificar individualmente cada cantidad (como estaba antes) o bien crear un solo form (como me has mostrado en el ejemplo y realizando un foreach) y ahi sí, le agrego un solo botón que modifique todo... no es así?

Gracias GatorV por tu tiempo, copmo siempre.

Saludos.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #11 (permalink)  
Antiguo 27/10/2011, 15:09
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Aquí en algún momento alguien preguntó exactamente lo que me está pasando a mí y hasta ahí no le respondieron. No sé cómo lo habrá resuelto.
Formularios dentro de Formularios
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #12 (permalink)  
Antiguo 30/10/2011, 09:47
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Nooooo nononoo No entiendo, no hay casoooooo!!! Estoy más perdido que Wilson en la película El Naufrago!!!
Intenté, traté pero no entiendo un soto. Les muestro lo que hice probando lo que me dijo GatorV acá:

Cita:
Iniciado por GatorV Ver Mensaje
Como te digo puedes poner toda tu tabla en un <form> y asi al hacer submit se enviaran todos los valores de tus <inputs> dentro de tu tabla y asi puedes porcesarlo en el servidor, por ejemplo:
Código PHP:
Ver original
  1. <form>
  2. <table>
  3. <?php foreach ($carro as $identificador => $elemento) { ?>
  4.       <tr>
  5.            <td><input name="cantidad[<?php echo $identificador; ?>]" value="<?echo echo $elemento['cantidad']; ?>" /></td>
  6.       </tr>
  7. <?php } ?>
  8. </table>
  9. </form>
En PHP vas a recibir un array donde tienes los indices y las nuevas cantidades que puedes usar para actualizar tu array del carro.
Saludos.
...pero haciendo esto me duplica los productos ingresados y al presionar sobre el unico botón de Actualizar me tira el error: Fatal error: Unsupported operand types in ... que es esta línea: $subto=$v['cantidad']*$v['precio'];

Les muestro el formato con el código completo de la página:
Código PHP:
<table width="100%" border="0">
  <tr>
    <td align="center"><h1 align="center">Carrito</h1></td>
  </tr>
  <tr>
    <td align="center">
<?php 
if($carro){
?>
  <form name="a<?php echo $v['identificador'?>" method="post" action="carro_actualiza.php?<?php echo SID ?>" id="a<?php echo $v['identificador'?>">

<table width="900" border="0" cellspacing="0" cellpadding="0" align="center">
  <?php foreach ($carro as $identificador => $v) { ?>
  <tr bgcolor="#333333" class="tit"> 
    <td width="70" height="20">Producto</td>
    <td width="214">Categoria</td>
    <td width="227">Linea</td>
    <td width="87" height="20" align="center">Precio Unitario</td>
    <td height="20" colspan="3" align="center">Unidades</td>
    <td width="75" height="20" align="center">SubTotal</td>
    <td width="41" align="center">Borrar</td>
    <td width="67" height="20" align="center">Actualizar</td>
  </tr>
  <?php
  $color
=array("#ffffff","#F0F0F0");
  
$contador=0;
  
$suma=0;
   foreach(
$carro as $k => $v){
   
$subto=$v['cantidad']*$v['precio'];
   
$suma=$suma+$subto;
   
$contador++;
    
?>
    <tr bgcolor="<?php echo $color[$contador%2]; ?>" class='prod'> 
      <td height="20"><?php echo $v['cod_articulo'?></td>
      <td height="20"><?php echo $v['categoria'?></td>
      <td height="20"><?php echo $v['linea'?></td>
      <td height="20" align="center"><?php echo number_format($v['precio'], 2','' '?></td>
      <td width="31" height="20" align="right"><?php echo $v['cantidad'?></td>
      <td width="76" height="20" align="center"> 
        <input name="cantidad[<?php echo $identificador?>]" type="text" class="prod" id="cantidad" value="<?php echo $v['cantidad'?>" size="6">
        <input name="cod_articulo" type="hidden" id="cod_articulo" value="<?php echo $v['cod_articulo'?>">
        <input name="cod_categoria" type="hidden" id="cod_categoria" value="<?php echo $v['cod_categoria'?>"></td>
      <td width="12" align="left">&nbsp;</td>
      <td height="20" align="center"><?php echo number_format($subto2','' '?></td>
      <td height="20" align="center"><a href="carro_borrar.php?<?php echo SID ?>&cod_articulo=<?php echo $v['cod_articulo'?>&cod_categoria=<?php echo $v['cod_categoria'?>"><img src="trash.gif" width="12" height="14" border="0"></a></td>
      <td height="20" align="center"></td>
  </tr>
  

  <?php }
  
$contador2=0;
  
$suma2=0;
  foreach(
$carro as $k => $v)
  {
   
$subto=$v['cantidad'];
   
$suma2=$suma2+$subto;
   
$contador2++;
  }
  
  
?><?php ?>
</table>
<input name="imageField" type="image" src="actualizar.gif" width="20" height="20" border="0"></form>
Solo les pido una última ayuda ocn esto... necesito entregarlo este lunes si o si y solo me falta este MALDITO boton que actualice todo.

Por favor y muchas gracias.
MArx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #13 (permalink)  
Antiguo 31/10/2011, 17:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Cita:
Iniciado por marx-pola Ver Mensaje
Porfa gente... ¿alguna sugerencia?
Si da error en la operación intenta imprimir la operación y observar si es lógica o no:
Código PHP:
echo "subto={$v['cantidad']}*{$v['precio']}"
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 01/11/2011, 10:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con sumar cantidades en carrito y boton para Actualizar Todo

Tienes muchos foreachs que no entiendo que hacen, lo que necesitas hacer es simple, generas tu tabla y actualizas, ejemplo:
Código PHP:
Ver original
  1. <form>
  2. <table>
  3. <?php foreach ($carro as $identificador => $elemento) { ?>
  4.       <tr>
  5.            <td><input name="cantidad[<?php echo $identificador; ?>]" value="<?echo echo $elemento['cantidad']; ?>" /></td>
  6.       </tr>
  7. <?php } ?>
  8. </table>
  9. </form>
Código PHP:
Ver original
  1. <?php
  2. // leer carro
  3. foreach ($_POST['cantidad'] as $identificador => $cantidad) {
  4.       if(isset($carro[$identificador]['cantidad'])) {
  5.              $carro[$identificador]['cantidad'] = $cantidad; // nueva cantidad
  6.       }
  7. }
  8. // Salvas carro

Saludos.

Etiquetas: carrito, formulario, mysql, sql, todo, botones, usuarios, cantidad
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 16:51.