Insert Same Items In Cart CodeIgniter - php

I'm trying to add 2 or more of same items in my cart, the problem is the new one items will replace quantity of the old one. My recent cart gave me this result:
SuperBike 31
What i want is like this:
SuperBike 11
SuperBike 20
Here's the code below:
$cart_item = array(
'id' => $this->input->post('id'),
'productid' => $this->input->post('productid'),
'name' => $this->input->post('name'),
'qty' => $amountReq
);
$insert = $this->cart->insert($cart_item);
if ($insert) {
echo count($this->cart->contents());
} else {
echo json_encode(false);
}
Any Answer? Thank you

you can try this. Open cart.php file in system/libraries/Cart.php
replace
unset($this->_cart_contents[$rowid]);
With
if(isset($this->_cart_contents[$rowid]))
{
$this->_cart_contents[$rowid]['qty']++;
return $rowid;
}
unset($this->_cart_contents[$rowid]);

Related

creating session array in my shopping cart not functioning

hello I am trying to create a simple shopping cart for my school project the problem I have was the session array is not creating and array with information. So I can't add items on my cart. here is my code.
if(isset($_POST['add_to_cart'])) {
if(isset($_SESSION['cart'])) {
$session_array_id = array_column($_SESSION['cart'], 'id');
if(!in_array($_GET['id'], $session_array_id)) {
$session_array = array(
'id' => $_GET['id'],
'name' => $_POST['name'],
'price' => $_POST['price'],
'quantity' => $_POST['quantity']
);
$_SESSION['cart'][0]= $session_array;
}
}else {
$session_array = array(
'id' => $_GET['id'],
'name' => $_POST['name'],
'price' => $_POST['price'],
'quantity' => $_POST['quantity']
);
$_SESSION['cart'][] = $session_array;
}
the picture above is just overwriting my selection everytime I press add to cart it won't stack up new item on top of the other. so basically the session array stays 0 all the time.
Pls somebody help me figure this out thank you so much!
When you do $_SESSION['cart'][0]= $session_array; you set it always on index 0. Try
array_push($_SESSION['cart'], $session_array);
Also this is not sticking $_SESSION['cart'][] = $session_array;
Always trust in array push.

How to sum all the current product prices of a user cart together as total price

I'm working on an Online Store project using PHP and MySQLi. Most of this project is done and now I'm struggling with total price that a user must pay. This total price is showing in the cart.php page (where users can see all the product items that they have added earlier). So it must be set to the total price of all current items.
So here is the code of cart.php:
if(isset($_GET['cart_id']))
{
$cart_id = $_GET['cart_id'];
$get_add = "SELECT * FROM cart WHERE cart_id = '$cart_id'";
$run_add = mysqli_query($con,$get_add);
$cart_items = [];
while ($row_results = mysqli_fetch_array($run_add)){
$item = array(
'table_id' => $row_results['table_id'],
'cart_id' => $row_results['cart_id'],
'pro_id' => $row_results['product_id'],
'pro_title' => $row_results['product_title'],
'pro_price' => $row_results['product_price'],
'pro_img' => $row_results['product_image'],
'pro_supplier' => $row_results['product_supplier'],
'qty' => $row_results['qty'],
'cart_ip' => $row_results['cart_ip'],
);
$cart_items[] = $item;
}
foreach ($cart_items as $cart) {
echo $cart['pro_price']
}
}
The table cart structure goes like this:
see image here
So now I want to print the sum of all products as total_price, till now I tried several different ways but I could not get the result.
So if you know how to solve this question, please let me know.. I really really appreciate that...
Thanks in advance!
Assuming you need the sum of qty*product_price you could sum this way
$tot = 0;
while ($row_results = mysqli_fetch_array($run_add)){
$cart_items[] = array(
'table_id' => $row_results['table_id'],
'cart_id' => $row_results['cart_id'],
'pro_id' => $row_results['product_id'],
'pro_title' => $row_results['product_title'],
'pro_price' => $row_results['product_price'],
'pro_img' => $row_results['product_image'],
'pro_supplier' => $row_results['product_supplier'],
'qty' => $row_results['qty'],
'cart_ip' => $row_results['cart_ip'],
);
$tot += $row_results['qty']*$row_results['product_price'];
}
foreach ($cart_items as $cart) {
echo $cart['pro_price'];
}
echo $tot;

How to update the quantity of all items in the cart with respect to database?

I am doing a shopping cart using code-igniter. While I can do the add cart functions, I'm somewhat confused with how to update them with regards to database. All I want is when I change the item quantity in the cart and click update ,both the cart and database must be updated for that particular item.I tried to do it but couldn't get it.Can someone please enlighten me what to do?
controller code
$this->load->model('user_m');
$result['query'] = $this->user_m->get($id); // inserts coresponing item
foreach ($result['query'] as $row)
$id = $row->pid;
$qty = $a;
$quan=$row->quantity;
$price = $row->pprice;
$name = $row->pname;
$q=$quan-$a; // for remainig stock i.e total qty-user qty
$data = array(
'id' => $id,
'qty' => $qty,
'price' => $price,
'name' => $name,
'stock' =>$q
);
$this->cart->insert($data);
$this->load->model('user_m');
$result['qry'] = $this->user_m->up_cart($id,$q);
redirect($_SERVER['HTTP_REFERER']);
}
just tell me how to update pls!
when ever you add any product in cart, it will generate an uniq row ID and that will be unique for each and every product and hence you need to update quantity by that row ID
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// Or a multi-dimensional array
$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);
$this->cart->update($data);
Now you want to know about how you will get row id.
$cart=$this->cart->contents();
it will return whole array of cart and when you listing it on webpage, please associate row id with quantity text box to update that particular product.
please check following url:
https://ellislab.com/codeigniter/user-guide/libraries/cart.html

the best way to store quantity in $_SESSION

I have the following function to add products to shopping cart:
function AddToCart($pid)
{
$_SESSION['products'][]['product_id'] = $pid;
}
What is the best way to store product quantity to the same array with the product id, since the array after the ['products'] generates automatically I'm confused how can I assign quantity there? Thank you for your help:)
Why not store all of the information you need at the same time? Here is an excerpt from my own cart:
// add item to cart
$_SESSION['cart'][] = array('product_id' => $product_id,
'cat_id' => $cat_id,
'title' => $title,
'default_img' => $default_img,
'price' => $valid_product['base_price'],
'weight' => $valid_product['weight'],
'length' => $valid_product['length'],
'width' => $valid_product['width'],
'height' => $valid_product['height'],
'surcharge' => $surcharge,
'quantity' => $quantity,
'prop_selection' => $prop_selection,
'po_id' => $po_id,
'stock' => $stock,
'shipper_id' => $valid_product['shipper_id']);
If I understand the question correctly, when AddToCart() is called for a $pid that is already in the array, do you just want it to increment a quantity property for that product? Seems to me you just will need to use an associative array for $_SESSION['products'] instead of a numerically indexed array like you are now:
function AddToCart($pid, $quantity=1) {
if(is_array($_SESSION['products']) && array_key_exists($pid, $_SESSION['products'])) {
$_SESSION['products'][$pid]['quantity'] += $quantity;
} else {
$_SESSION['products'][$pid] = array(
'product_id' => $pid,
'quantity' => $quantity
);
}
}

PHP: Incremental list using SESSION?

I'm working on a simple shopping cart, I'm able to output a single form result (POST), but I have no idea how to incrementaly add lines to newer items when the user comes back to the form and adds items (they are currently being overriden).
Here's what I currenly have:
<?php
session_start();
//Getting the list
$list[]= $_SESSION['list'];
$_SESSION['list'] = array(
'item' => $item,
'quantity' => $quantity,
'price' => $price);
//list
echo "<b>SHOPPING CART</b></br>";
echo "1. ".$_SESSION['list']['item']." ".$_SESSION['list']['quantity']." units".", ".$_SESSION['list']['price']." USD.";
//Returning list
$_SESSION['list'] = $list;
?>
A sample of the current output is:
SHOPPING CART
1. Banana 3 units, 2 USD.
The ideal output should be something like this:
SHOPPING LIST
1. Banana 3 units, 2 USD.
2. Coffe 4 units, 6 USD.
3. Etc
and infinte...
Let it be a multi-dimensional array:
//add an element to the list
$_SESSION['list'][] = array(
'item' => $item,
'quantity' => $quantity,
'price' => $price),
);
Then use foreach to loop over it:
foreach($_SESSION['list'] as $key => $item) {
echo $key, '. ', $item['item'], ' ', $item['quantity'], ' units';
}

Categories