Search code examples
codeignitercart

How can fixed the codeigniter cart update issue


I am unable to update cart on checkout page. I do not know what is Happen. Here is my code.

function update_cart()
{
  $rowid =$this->input->post('rowid');
  $price =$this->input->post('price');
  $qty = $this->input->post('qty');
  $pr = preg_replace( '/,/', '', $price);
  $amount = $pr * $qty;
  $data = array(
    'rowid' => $rowid,
    'price' => $price,
    'amount' => $amount,
    'qty' => $qty
  );
  $this->cart->update($data);
     redirect('checkout');
}

Here is my car view code .I am trying to update cart value here.No error showing. I unable to solve .Any help .Only update cart is not working . Other functionality is working good .add to cart delete to cart but update to cart does not working . I create session table and also try other suggestion and solution form stack overflow.

    <form action="<?=base_url()?>cart/update_cart" method="post">
            <div class="panel panel-info">
                <div class="panel-heading">
                    <div class="panel-title">
                        <div class="row">
                            <div class="col-xs-6">
                                <h5><span class="glyphicon glyphicon-shopping-cart"></span> Shopping Cart</h5>
                            </div>
                            <div class="col-xs-6">
                                <a href="<?=base_url()?>">
                                <button type="button" class="btn btn-primary btn-sm btn-block">
                                    <span class="glyphicon glyphicon-share-alt"></span> Continue shopping
                                </button>
                                </a>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="panel-body">
                <?php $i = 1; ?>
                <?php 
                //print_r($this->cart->contents() );
                //die;
                foreach ($this->cart->contents() as $items): ?>
                <?php echo form_hidden($i.'[rowid]', $items['rowid']); ?>

                    <div class="row">
                        <div class="col-xs-2">
                        <img class="img-responsive" src="<?=base_url()?>uploads/product/<?=$items['image'];?>" />
                        </div>
                        <div class="col-xs-4">
                            <h5 class="product-name">
                            <strong><?php echo $items['name']; ?>
                            </strong>
                            <?=$items['options'];?>
                            </h5>

                        </div>
                        <div class="col-xs-6">
                            <div class="col-xs-6 text-right">
                                <h6><strong><?= $this->cart->format_number($items['price']); ?>
                                <span class="text-muted">x</span></strong></h6>
                            </div>
                            <div class="col-xs-4">
                                <?php //echo form_input(array('name' => $i.'[qty]', 'value' => $items['qty'], 'size' => '1')); ?>
                            <input  type="text" name="qty" min="1" value="<?=$items['qty'] ?>" maxlength="1" style="width: 50%;">
                            <input type="hidden" name="price" value="<?=$items['price'] ?>">
                            <input type="hidden" name="name" value="<?=$items['name'] ?>">
                            <input type="hidden" name="description" value="<?=$items['description'] ?>">
                            </div>
                            <div class="col-xs-2">
                                <a href="<?=base_url()?>cart/remove/<?=$items['rowid']?>">
                                <button type="button" class="btn btn-link btn-xs">
                                    <span class="glyphicon glyphicon-trash" onclick="confirm('Are you sure want to delete')";> </span>
                                </button>
                                </a>
                            </div>
                        </div>
                    </div>
                    <hr>


<?php $i++; ?>

<?php endforeach; ?>

Solution

  • at view .... use only two input

       <input  type="text" name="qty[]" min="1" value="<?=$items['qty'] ?>" maxlength="1" style="width: 50%;">
    <input type="hidden" name="rowid[]" value="<?=$items['rowid'] ?>">
    

    at controller

    you only need to change qty if you are going to update a cart

        function update_cart()
    {
    for ($i=0; $i < count($_POST) - 1; $i++) { 
            $data = array(
                'rowid' => $_POST['rowid'][$i],
                'qty'   => $_POST['qty'][$i]
          );
    
        $this->cart->update($data);
          }
     redirect('checkout');
    }