Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Sumar cantidades, foreach, array

Estas en el tema de Sumar cantidades, foreach, array en el foro de PHP en Foros del Web. Hola buen día que me puedan ayudar en este problema. Código PHP: $_SESSION [ 'carrito' ][]= array ( 'codigo' => $_POST [ "codigo" ], 'nombre' => $_POST ...
  #1 (permalink)  
Antiguo 28/10/2017, 13:00
 
Fecha de Ingreso: julio-2014
Mensajes: 59
Antigüedad: 9 años, 9 meses
Puntos: 0
Sumar cantidades, foreach, array

Hola buen día que me puedan ayudar en este problema.

Código PHP:
$_SESSION['carrito'][]= array ('codigo'=>$_POST["codigo"],'nombre'=>$_POST["nombre"],'cantidad'=>
$_POST["cantidad"]); 
Código PHP:
   foreach($_SESSION['carrito'] as $producto)
   {     

 echo 
$producto['codigo'];
 echo  
" ";
 echo 
$producto['nombre'];
 echo  
" ";
 echo 
$producto['cantidad'] ;
 echo  
"<br>";
                             

Busco que cuando ingreso un mismo código en lugar de agregarlo como nuevo
ejemplo

Cita:
Codigo, Nombre, Cantidad
Cita:
01, papas, 1
01, papas, 2
02, coca, 1
02, coca, 2
Me aparezca así que valla sumando la cantidad.

Cita:
Codigo, Nombre, Cantidad
Cita:
01, papas, 3
02, coca, 3
Cita:
Si ya tengo el producto agregado en la session
y voy a insertarlo nuevamente.
que me sume en ves de crear una nueva fila.

Última edición por domichis; 28/10/2017 a las 13:18
  #2 (permalink)  
Antiguo 28/10/2017, 13:31
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sumar cantidades, foreach, array

Código PHP:
Ver original
  1. for($k=0;$k<sizeof($_SESSION["carrito"]);$k++){
  2.  
  3. if($_POST["codigo"] == $_SESSION["carrito"][$k]["codigo"]){
  4. $_SESSION["carrito"][$k]["cantidad"]++;
  5. break;
  6. }
  7. }

P.S: para usar el operador ++ debes almacenar cantidad como un entero.
Saludos
  #3 (permalink)  
Antiguo 28/10/2017, 14:11
 
Fecha de Ingreso: julio-2014
Mensajes: 59
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Sumar cantidades, foreach, array

alvaro_trewhela

No me funciona como requiero....
Si le ingreso

Cita:
01 papas 1
y despues
01 papas 5
obtengo este resultado con el código que me proporcionaste.
Cita:
01 papas 3
01 papas 5
-------------------------------------

Si inserto estos datos
Cita:
01 papas 1
y despues
01 papas 5

Quiero que salga esto


Cita:
01 papas 6
  #4 (permalink)  
Antiguo 28/10/2017, 14:51
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sumar cantidades, foreach, array

Hice esto y me anduvo bien

Código PHP:
Ver original
  1.  
  2. $c = $_GET["code"];
  3. $n = $_GET["name"];
  4. $am = intval($_GET["ammount"]);
  5.  
  6. if(!isset($_SESSION["carrito"])){
  7. $_SESSION["carrito"][0] = array("codigo"=>$c, "nombre"=>$n, "cantidad"=>$am);
  8. }
  9. else{
  10. $found = false;
  11.     for($k=0;$k<sizeof($_SESSION["carrito"]);$k++){
  12.         if($c == $_SESSION["carrito"][$k]["codigo"]){
  13.         $_SESSION["carrito"][$k]["cantidad"] += $am;
  14.         $found = true;
  15.         break;
  16.         }
  17.     }
  18.     if(!$found){
  19.     $_SESSION["carrito"][sizeof($_SESSION["carrito"])] = array("codigo"=>$c, "nombre"=>$n, "cantidad"=>$am);
  20.     }
  21. }
  22.  
  23. var_dump($_SESSION["carrito"]);

Saludos

P.S: Use get para hacer pruebas rápidas, no tener que hacer un formulario y tener que apretar actualizar para que además el nav, me pregunte estupideces
  #5 (permalink)  
Antiguo 29/10/2017, 02:33
 
Fecha de Ingreso: julio-2014
Mensajes: 59
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Sumar cantidades, foreach, array

Muchas gracias. alvaro_trewhela

Ahora como veras estoy en otro problema
Estoy intentando vaciar valores con este código:

Código PHP:
  if($_GET["accion"] == "eliminar"){
               unset(
$_SESSION["carrito"][$k]["codigo"]);
            } 
pero no me funciona.


Tengo esto.

Cita:
01, papas, 3
02, coca, 5
si aplico acción de eliminar valor en la session.
ejemplo vació código 02. debería quedar así.

Cita:
01, papas, 3
  #6 (permalink)  
Antiguo 29/10/2017, 04:34
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Sumar cantidades, foreach, array

Tal vez sea porque estas eliminando solo una posición (código) del array interno, cuando lo que deberías eliminar es toda la posición actual del array principal.

Intenta hacer el unset sin la posición carrito , es decir, hasta la k
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 29/10/2017, 06:03
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Sumar cantidades, foreach, array

Prueba así:

Código PHP:
Ver original
  1. //si esta declarada la sesion carrito agrega los item nuevos
  2. if (isset($_SESSION['carrito'])){
  3.         $mi_carrito=$_SESSION['carrito'];
  4.  
  5.             if (isset($_GET['id'])){
  6.                 $id=$_GET['id'];
  7.                 $codigo = $_GET['codigo'];
  8.                 $nombre=$_GET['nombre'];
  9.                 $precio=$_GET['precio'];
  10.                 $cantidad=$_GET['cantidad'];
  11.                 $iva = $_GET['iva'];
  12.                 $pos=-1;
  13.  
  14.                 //Buscamos el item en la variable de sesion
  15.                 for($i=0;$i<count($mi_carrito);$i++){
  16.                     if($id==$mi_carrito[$i]['id']){
  17.                         $pos=$i;
  18.                     }
  19.                 }
  20.  
  21.                 //si lo encuentra actualiza la cantidad de articulos
  22.                 if($pos<>-1){
  23.                     $cuanto=$mi_carrito[$pos]['cantidad']+$cantidad;
  24.                     $mi_carrito[$pos]=array('id'=>$id,'codigo'=>$codigo,'nombre'=>$nombre,'precio'=>$precio,'cantidad'=>$cuanto, 'iva'=>$iva);
  25.                 }else{
  26.                     //si no lo agrega
  27.                     $mi_carrito[]=array('id'=>$id,'codigo'=>$codigo,'nombre'=>$nombre,'precio'=>$precio,'cantidad'=>$cantidad,'iva'=>$iva);
  28.                 }
  29.     }
  30. }

Es un codigo que hice para un carro hace un tiempo, adaptalo y ve si te sirve, este lo que hace es recibir mediante ajax los datos del producto, verifica si este ya esta en la variable sde sesion y suma las cantidades si no, lo agrega como nuevo
__________________
[email protected]
HITCEL
  #8 (permalink)  
Antiguo 29/10/2017, 10:41
 
Fecha de Ingreso: julio-2014
Mensajes: 59
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta Respuesta: Sumar cantidades, foreach, array

Gracias xfxstudios lo de agregar, sumar ya lo tengo adapte el código de alvaro_trewhela


Me deja ir agregando ejemplo

agrego
Cita:
coca 1 eliminar
papas 2 eliminar

y hasta aquí la suma la va haciendo bien sin problemas.



PERO SI YO QUIERO ELIMINAR ALGÚN PRODUCTO

Cita:
coca 1 eliminar
papas 2 eliminar

Si le doy eliminar en coca
Cita:
coca 1 eliminar
en teoría me debería dejar esto;
Cita:
papas 2 eliminar
y si vuelvo agregar coca me debería dejar esto
Cita:
coca 1
papas 2
pero si borro algún producto
Cita:
coca 1 eliminar
papas 2 eliminar
Me borra todos los productos almacenados.






mortiprogramador - ESTO USANDO ESTE CODIGO

Código PHP:
    if(isset($_GET['accion'])){

         if(
$_GET['accion'] == 'eliminar'){
            @
$codigo intval($_GET['codigo']);
            if(isset(
$_SESSION['carrito'][$codigo])){
session_unset($_SESSION['carrito'][$codigo]);
            }
         }
  } 
Y PARA LLAMARLO ESTE

Código PHP:
<a href='no.php?accion=eliminar&$codigo'>Eliminar</a

Última edición por domichis; 29/10/2017 a las 12:23 Razón: codigo
  #9 (permalink)  
Antiguo 29/10/2017, 12:47
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Sumar cantidades, foreach, array

El problema esta en el link.

Luego del & debería ir:
codigo =
Y luego si la variable $codigo

Código PHP:
Ver original
  1. <a href='no.php?accion=eliminar&codigo=<?php echo $codigo; ?>'>Eliminar</a>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #10 (permalink)  
Antiguo 29/10/2017, 13:19
 
Fecha de Ingreso: julio-2014
Mensajes: 59
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Sumar cantidades, foreach, array

SI PONGO ESTE
Cita:
<a href='?accion=eliminar&<?php echo $codigo; ?>'>Eliminar</a>
ME BORRA TODOS.


PERO -------------- ----------------------

SI PONGO ESTE
Cita:
<a href='?accion=eliminar&codigo=<?php echo $codigo; ?>'>Eliminar</a>
NO ME BORRA NADA.


ESTE ES EL CODIGO QUE TENGO PHP


Código PHP:
     if(isset($_GET['accion'])){

         if(
$_GET['accion'] == 'eliminar'){
            @
$codigo intval($_GET['codigo']);
            if(isset(
$_SESSION['carrito'][$codigo])){
session_unset($_SESSION['carrito'][$codigo]);
            }
         }
  } 
  #11 (permalink)  
Antiguo 29/10/2017, 13:38
 
Fecha de Ingreso: julio-2014
Mensajes: 59
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Sumar cantidades, foreach, array

Gracias a todos por su apoyo mortiprogramador, xfxstudios, alvaro_trewhela
He resulto el problema.
  #12 (permalink)  
Antiguo 29/10/2017, 14:06
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Sumar cantidades, foreach, array

Hola domichis,

Te digo lo mismo que en el otro post, ya que lo has marcado como solucionado, es mejor si publicas la solución para que, cuando alguien venga buscando sobre el mismo problema, la pueda encontrar aquí.
  #13 (permalink)  
Antiguo 29/10/2017, 14:25
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sumar cantidades, foreach, array

No se si solucionate tu problema de eliminar el registro, pero te comento que session_unset elimina todas las variables $_SESSION, y no una especifica

Si lo que quieres es eliminar un item en especifico, te sugiero lo que dice morti, usa unset, te dejo lo que deberías hacer

El problema esta en que mi propuesta ingresa de este modo

[0] = array(datos)
[1] = array(datos)
...

Entonces nuevamente lo que tienes que hacer es recorrer y eliminar, te dejo mi propuesta de eliminación:

Código PHP:
Ver original
  1. $code = intval($_GET["code"]);
  2. for($k=0;$k<sizeof($_SESSION["carrito"]);$k++){
  3.     if($code == $_SESSION["carrito"][$k]["codigo"]){
  4.     unset($_SESSION["carrito"][$k]);
  5.     $_SESSION["carrito"] = array_values($_SESSION["carrito"]); //reindex the array, without it the system go crazy
  6.     break;
  7.     }
  8. }

Faltaría hacer la validación que propones, no lo hice solo por mostrarte la solución rápida al problema

Saludos
  #14 (permalink)  
Antiguo 29/10/2017, 15:19
 
Fecha de Ingreso: julio-2014
Mensajes: 59
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Sumar cantidades, foreach, array

No lo he resuelto aun... Me quede en la parte donde:


PONGO ESTE
Cita:
<a href='?accion=eliminar&<?php echo $codigo; ?>'>Eliminar</a>
Y ME BORRA TODOS


-------------------------------------------------------------------------------------------------------
PONGO ESTE
Cita:
<a href='?accion=eliminar&codigo=<?php echo $codigo; ?>'>Eliminar</a>
NO ME BORRA NADA...


USANDO ESTE CÓDIGO PARA VACIAR LA SESSION

Cita:
if(isset($_GET['accion'])){

if($_GET['accion'] == 'eliminar'){
@$codigo = intval($_GET['codigo']);
if(isset($_SESSION['carrito'][$codigo])){
session_unset($_SESSION['carrito'][$codigo]);
}
}
}


Probare nuevamente con el codigo de

alvaro_trewhela

Última edición por domichis; 29/10/2017 a las 15:25

Etiquetas: foreach, nombre
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 23:00.