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.
Related
I have this shopping cart page coded, but i am clueless about how to acces the product id from session in another page? Anyone please help me! I'm beginner so if you please give me example code too it'd help me a lot.
<?php
session_start();
$product_ids = array();
//session_destroy();
//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 mnay products are in the shopping cart
$count = count($_SESSION['shopping_cart']);
//create sequantial array for matching array keys to products id's
$product_ids = array_column($_SESSION['shopping_cart'], 'id');
if (!in_array(filter_input(INPUT_GET, 'id'), $product_ids)){
$_SESSION['shopping_cart'][$count] = array
(
'id' => filter_input(INPUT_GET, 'id'),
'name' => filter_input(INPUT_POST, 'name'),
'price' => filter_input(INPUT_POST, 'price'),
'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
(
'id' => filter_input(INPUT_GET, 'id'),
'name' => filter_input(INPUT_POST, 'name'),
'price' => filter_input(INPUT_POST, 'price'),
'quantity' => filter_input(INPUT_POST, 'quantity')
);
}
}
?>
Use the same code you have here on the other page to get the product_ids
//other page
session_start();
$product_ids = array_column($_SESSION['shopping_cart'], 'id');
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]);
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
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
);
}
}
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).