I'm working through an eCommerce exercise - adding items to a cart, then removing them. The items/cart are an item id and a quantity value stored in the session and manipulated in the Controller functions - nothing pulled from a database except the product id. Adding to a cart or updating is working, but removing is not.
From what I can tell then function for adding or removing are straightforward - one should increment a value, the other decrement. Code is below. Any ideas?
Remove from basket:
public function remove_from_basket($item_id)
{
// remove an item from a cart
$quantity = $this->session->userdata($item_id);
$quantity -= $this->session->post('qty');
$this->session->set_userdata($item_id, $quantity);
redirect('/eCommerceItems/eCommerce_basket');
}
Called from
<?php
$total=0;
foreach ($items as $item)
{
$temp = $item['price'] * $this->session->userdata($item['id']);
$total += $temp;
if ($this->session->userdata($item['id']) > 0)
{
echo "<div class='item'>
<div class='description'>
<p>Name: {$item['name']}</p>
<p>Price: {$item['price']}</p>
<p>Quantity: {$this->session->userdata($item['id'])}</p>
<form action '/eCommerceItems/remove_from_basket/{$item['id']}' method='post'>
<select name='qty'>";
for($i=1;$i <= $this->session->userdata($item['id']);$i++)
{
echo "<option>{$i}</option>";
}
echo "</select>
<input type='submit' value='Remove'>
</form>
</div>
</div>";
}
}
Add to basket
public function add_to_basket($item_id)
{
//Add an item to a cart
$quantity = $this->session->userdata($item_id);
$quantity += $this->input->post('qty');
$this->session->set_userdata($item_id, $quantity);
redirect('/eCommerceItems');
}
Called from:
<?php
foreach($items as $item)
{
echo "<div class='item'>
<div class='description'>
<p>Name: {$item['name']}</p>
<p>Description: {$item['description']}</p>
<p>Price: \${$item['price']}</p>
<p>Quantity Available: {$item['quantity']}</p>
<p>Item ID is: {$item['id']}</p>
<form action='/eCommerceItems/add_to_basket/{$item['id']}' method='post'>
<select name='qty'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
<input type='submit' value='Add to basket'>
</form>
</div>
</div>";
}
?>
In your code you have:
$quantity -= $this->session->post('qty');
This should be:
$quantity -= $this->input->post('qty');
Give this a go... Also need to take into account going below 0 I would assume?
public function remove_from_basket($item_id)
{
// remove an item from a cart
$increment = $this->input->post('qty');
$quantity = $this->session->userdata($item_id);
$newQuantity = $quantity - $increment;
if ($newQuantity > 1) {
$this->session->set_userdata($item_id, $Quantity);
} else {
$this->session->unset_userdata($item_id);
}
}
If you're still having trouble I suggest print_r($variable); die;
each step (or use CI's logging function) and see if your values are what you think they are?
Sometimes its just easier to write it all out more basic to get it to work...