Ayuda con carrito de compra y array

  • Autor Autor pa3lo022
  • Fecha de inicio Fecha de inicio
P

pa3lo022

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos, la verdad me estoy volviendo loco, he leido y visto muchos tutoriales y no logro que funcione. Les explico brevemente lo que estoy intentando hacer, es un carrito de compra que si el usuario compra el usuario tiene los productos A, B, C ... N, cuando el usuario compra el producto A lo ingreso a un array en una variable session, hasta ahi todo bien, pero cuando el usuario ya agrego al carrito el producto A y quiere comprar el producto B, es no se agrega a un indice nuevo, lo unico que pude hacer es que sume la cantidad de A+B, y lo que quiero lograr es:

producto: A
cantidad: 12

producto: B
cantidad: 5

Es decir que a la variable $_SESSION se le agregue el subindice [1] y agregue el producto B.

No se si me explico?, no me pidan codigo porque lo he reescrito tantas veces que al final no tengo nada :fatigue:

Si alguien sabe como puedo hacer esto, se los agradeceria.

Saludos
 
Pues a lo que describes y sin código lo que yo creo que te falta es una tabla en la base de datos que se llame detalle_de_venta y así sumarias el detalle del producto con su total y por cada producto comprado, en si la suma de todos estos detalles te generan una venta.

Repito, es difícil explicar así nadamas y menos sin un poco de código ya que no se como tengas estructurada tu base de datos y tus interfaces.
 
Antes que nada gracias por tu respuesta, la tabla en la base de datos existe y tengo el detalle y el precio, mi gran dolor de cabeza es que a la variable session se le sume un indice mas cada vez que el usuario ingresa a otro item, pero para resumirlo mas, mi problema es como se puede sumar un indice mas a un array de session.
 
Pues sin código es un poco difícil amigo y lo único que se me ocurre es que sumes así
PHP:
// AUI TIENE QUE IR TU CONDICIONAL, SI SE CUMPLE EJECUTAS ESTE CODIGO.

$_SESSION['valor'] = $_SESSION['valor'] + (double)$valorIncrementar;
 
Gracias, todo es bienvenido, lo que si no se que hace es el (double)
 
Gracias, todo es bienvenido, lo que si no se que hace es el (double)

Es solo para convertir la variable en numero de punto flotante pero en tu caso creo que seria int para que sean números enteros
 
Hola, la funcion array_push te ayudará en lo que quieres, sirve para agregar mas elementos a un array :encouragement:
 
Si la vi y la use y algo abre hecho mal porque no me salio, cuando lei el array solo me traia el un solo elemento.
 
Tendrias que usar un arreglo de 2 dimensiones.
Lo arme y probe rapido, creo que te puede servir.

Genera carro de compra y va agregando al array

PHP:
<?php
session_start();
$carro = array(); #declaro arreglo
$carro[] = array("tamaño","cantidad"); #dentro de la posicion 0 del arreglo, ingreso un arreglo
$carro[] = array(10,20); #si deseo agregar otro producto mas, lo hago de la siguiente forma, se incrementa el indice del arreglo carro automaticamente
$_SESSION['carrito']  = $carro; #ingreso el arreglo a la variable sesion
?>

Index donde mostrar la informacion.

PHP:
<?php
session_start();
$carro = $_SESSION['carrito']; #obtengo el arreglo que cree previamente
$tamaño = count($carro); #cuento tamaño del arreglo para mostrar cantidad de productos
echo $carro[0][0]; #imprimo primera posicion del arreglo principal y primera posicion del arreglo interior
echo $carro [0][1]; #imprimo primera posicion del arreglo principal y segunda posicion del arreglo interior
echo "<br>";
echo $carro[1][1]; #imprimo segunda posicion del arreglo principal y segunda posicion del arreglo interior
?>

Es un ejemplo muy basico, al primer codigo le podes pasar los valores por parametro e ir incrementando el arreglo con los productos, previamente obteniendo el arreglo que mantenes en la sesion para que aumente en base a ese.
tambien considera que el usuario quiera vaciar el carrito, lo podes hacer con unset para borrarlo completamente
Espero que te sirva

Saludos HomeGuard
 
Te dejo un ejemplo simple de como podría ser un carrito (no lo probé, así que podría salir algún que otro error :witless🙂:
PHP:
<?php
if ( !is_session_started() )	session_start();

class ShoppingCart {
	private $items;
	private $name;

	function __construct( $name = 'shopping_cart' ) {
		$this->name = $name;
		$this->load();
	}

	private function load() {
		if ( !empty( $_SESSION[$this->name] ) && is_array( $_SESSION[$this->name] ) ) {
			$this->items = $_SESSION[$this->name];
		} else {
			$this->items = array();			
		}		
	}

	private function save() {
		$_SESSION[$name] = $this->items;
	}

	public function get_items() {
		return $this->items;
	}

	public function empty() {
		unset( $this->items );
		$this->save();
		$this->load();
	}

	public function is_empty() {
		return ($this->total_items > 0);
	}

	public function total_items() {
		return count( $this->items );
	}

	public function add( $id, $amount = 1 ) {
		if ( array_key_exists( md5($id), $this->items ) ) {
			$this->items[md5($id)]['amount'] += (int)$amount;
		} else {
			$this->items[md5($id)] = array(
				'id'		=>	(int)$id,
				'amount'	=> $amount
			);
		}
		$this->save();
	}

	public function delete( $id ) {
		if ( array_key_exists( md5($id), $this->items ) ) {
			unset( $this->items[md5($id)] );
			$this->save();
		}
	}
}

Métodos:
PHP:
get_items();		// Te regresa todos los productos que contiene el carrito
empty();			// Limpia el carrito
is_empty();			// Regresa true si el carrito contiene productos, false en caso contrario
total_items();		// Número de productos en el carrito
add( $id, $amount );// Agrega un producto al carrito, $id => id del producto, $mount => cantidad de elementos (si no se le pasa este último, $amount = 1)
delete( $id );		// Elimina un producto del carrito, $id => id del producto

Ejemplo:
PHP:
<?php
$shopping_cart = new ShoppingCart('mi_carrito_de_compras'); // Puede ser solo $shopping_cart = new ShoppingCart(); y el nombre de la sesión será "shopping_cart"
$shopping_cart->add( 15 );
$shopping_cart->add( 15, 2 );
$shopping_cart->add( 11, 5 );
$shopping_cart->delete( 11 );

if ( !$shopping_cart->is_empty() ) {

	foreach ($shopping_cart->get_items() as $product) {
		# code...
	}

}

$shopping_cart->empty();

Ejemplo de estructura del array de productos:
PHP:
array(
	'6456484513516846845565121'	=>	array(
		'id'		=>	15,
		'amount'	=>	5
	),
	'3463456346737567456746746'	=>	array(
		'id'		=>	5,
		'amount'	=>	1
	)
);

Saludos.
 
Última edición:
Hola a todos, nuevamente yo.

Bueno les cuento que pude hacer el array de 2 formas distintas, les paso el codigo.

ARRAY 1:

<?php
session_start();

include ("conexion.php");
include ("function.php");

$producto[]=array('Cantidad'=>$_REQUEST['cantidad'], 'Capacidad'=>$_REQUEST['capacidad'],'Precio'=>$_REQUEST['precio'],'Codigo'=>$_REQUEST['cod']);
//$producto[]=array('Codigo'=>$_REQUEST['cod'],'Cantidad'=>$_REQUEST['cantidad']);



$_SESSION['Productos'][]=$producto;

echo "<ul><li>" . implode("</li><li>", $datos[0]) . "</li></ul><br>";
?>

ARRAY 2:

<?php
session_start();

include ("conexion.php");
include ("function.php");

$cantidad[]=$_REQUEST['cantidad'];
$capacidad[]=$_REQUEST['capacidad'];
$precio[]=$_REQUEST['precio'];
$codigo[]=$_REQUEST['cod'];


$_SESSION['Cantidad'][]=$cantidad;
$_SESSION['Capacidad'][]=$capacidad;
$_SESSION['Precio'][]=$precio;
$_SESSION['Codigo'][]=$codigo;

?>


<table border="1">
<tr>
<td>Cantidad</td>
<td>Capacidad</td>
<td>Precio</td>
<td>Codigo</td>
</tr>
<tr>
<td>
<?php
foreach ($_SESSION['Cantidad'] as $cantidad1 ){
echo implode($cantidad1) ."<br>";
}
?>
</td>
<td>
<?php
foreach ($_SESSION['Capacidad'] as $capacidad1 ){
echo implode($capacidad1) ."<br>";
}
?>
</td>
<td>
<?php
foreach ($_SESSION['Precio'] as $precio1 ){
echo "$ " .implode($precio1) ."<br>";
}
?>
</td>
<td>
<?php

foreach ($_SESSION['Codigo'] as $codigo1 ){
echo implode($codigo1) ."<br>";
}
?>
</td>
</tr>

<?php

?>
</table>

Ahora tengo otro problema, y no se si me van a poder dar una mano, necesito que cuando inserte los elementos se fije si ya esta y le sume la cantidad que trae y sino que agregue uno nuevo.

Probe con todo, in_array, array_key_exist, count, etc. y no tuve exito 😕 alguien me podria dar una mano con esto por favor.

Saludos y muchas gracias.
 
Atrás
Arriba