PHP: Incremental list using SESSION? - php

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';
}

Related

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 add a restriction if else in my restaurants add to cart

Hi I have an assignment of making add to cart foods of different restaurants but there is a bit problem where adding restrictions in adding food. My problem is when I add to cart food all of the restaurants can be added I wanted to have a 1 transaction per restaurant where when i add to cart a different restaurant food it will prompt a message that i have items in my cart in a different restaurant if i wanted to continue the cart will be unset and will add the new food in my cart. Please help thanks
I don't know where to place my if else statement to restrict the adding of food
//check if Add to Cart button has been submitted
if(filter_input(INPUT_POST, 'add_to_cart')){
if(isset($_SESSION['shopping_cart'])){
//keep track of how many products are in the shopping cart
$count = count($_SESSION['shopping_cart']);
//create sequential array for matching array keys to products id's
$product_ids = array_column($_SESSION['shopping_cart'], 'Product_ID');
if(!in_array(filter_input(INPUT_GET, 'p'), $product_ids)){
$_SESSION['shopping_cart'][$count] = array (
'Restaurant_ID' => filter_input(INPUT_GET, 'r'),
'Product_ID' => filter_input(INPUT_GET, 'p'),
'name' => filter_input(INPUT_POST, 'name'),
'price' => filter_input(INPUT_POST, 'price'),
'quantity' => filter_input(INPUT_POST, 'quantity')
);
}
else { //product already exists, increase quantity
//match array key to id of the product being added to the cart
for ($i = 0; $i < count($product_ids); $i++){
if($product_ids[$i] == filter_input(INPUT_GET, 'p')){
//add item quantity to the existing product in the array
$_SESSION['shopping_cart'][$i]['quantity'] += filter_input(INPUT_POST, 'quantity');
}
}
}
}
else {//if shopping cart doesn't exist, create first product with array key 0
//create array using submitted form data, start from key 0 and fill it with values
$_SESSION['shopping_cart'][0] = array (
'Restaurant_ID' => filter_input(INPUT_GET, 'r'),
'Product_ID' => filter_input(INPUT_GET, 'p'),
'name' => filter_input(INPUT_POST, 'name'),
'price' => filter_input(INPUT_POST, 'price'),
'quantity' => filter_input(INPUT_POST, 'quantity')
);
}
}
}
?>

Insert Same Items In Cart CodeIgniter

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]);

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

How do I count the number of each unique array inside a multidimentional array? PHP

I'd like to build a simple shopping cart using arrays. I need to display each unique item in the shopping cart aswell as the quantity of each item along side.
My initial cart array might look like this:
$cart=
array(
array(2003,100,"Table")
,array(2003,100,"Table")
,array(2003,100,"Table")
,array(2004,200,"Chair")
,array(2004,200,"Chair")
);
The first value in each array is the product_id, then the price & then the product name.
How do I print each unique item once aswell as the quantity of each along side?
Thanks in advance.
$new_cart = array();
foreach($cart as $product) {
if(!isset($new_cart[$product[0]])) {
$new_cart[$product[0]] = array('quantity' => 1, 'label' => $product[2], 'price' => $product[1]);
}
else {
$new_cart[$product[0]]['quantity']++;
}
}
I strongly suggest using associative arrays for this though. Your problem is the way you are storing the values. Try using something like this:
$cart_items = array(
2004 => array('quantity' => 3, 'label' => 'Leather Chair', 'price' => 200),
2901 => array('quantity' => 1, 'label' => 'Office Desk', 'price' => 1200),
);
When a user updates a quantity or adds an existing product simply increment the quantity.
You could simply iterate the array and use the product ID as key to count the amounts:
$amounts = array();
foreach ($cart as $item) {
if (!isset($amounts[$item[0]])) $amounts[$item[0]] = 0;
$amounts[$item[0]]++;
}
But it would be easier if your cart just stores the product IDs and amounts, so:
array(
2003 => 3,
2004 => 2
)
This is actually what the algorithm above is doing. But with this, you have all the information you need (product ID and amount).

Categories