Search code examples
phpcodeigniteropencartcodeigniter-2codeigniter-3

Add and show list product in cart codeigniter


I have a problem when I add some products to cart, but then when I want to fetch contents of the cart I find it is empty.

this is my controller :

public function add_to_cart(){

    $insert_data = array( 
     'id' => $this->input->post('id'),
     'name' => $this->input->post('name'),
     'price' => $this->input->post('price'),
     'qty' => $this->input->post('qty') );

     // This function add items into cart.
    $this->cart->insert($insert_data);


}

and this is my form to add new product to cart :

<div class="button-group">
                  <form method="POST" action="<?php echo base_url().'add_to_cart'; ?>">
                  <div style="display:none">
                  <input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash();?>" />
                  </div> 
                  <input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
                    <input type="number" name="qty" id="<?php echo $ligneBase->id;?>">
                    <input type="hidden" name="name" value="<?php echo $ligneBase->name;?>">
                    <input type="hidden"  name="price"  value="<?php echo $ligneBase->price;?>">
                    <input type="hidden"  name="id"  value="<?php echo $ligneBase->id;?>">
                      <input class="add_cart" type="submit" value="Add to cart">
                      <div class="add-to-links">
                  </form>
                </div>

and this is my cart in header.php :

<table class="table">
                <tbody>
                <div id="text">
                  <?php $cart_check = $this->cart->contents();

                  // If cart is empty, this will show below message.
                  if(empty($cart_check)) {
                  echo '<h4 align="center">No Product in cart, To add products to your shopping cart click on "Add to Cart" Button</h4>';
                  } ?> 
                </div>

                  <?php
                     $cart = $this->cart->contents();
                     foreach($cart as $indice => $ligneBase){
                  ?>
                  <tr>
                    <td class="text-center"><a href="product.html"><img class="img-thumbnail" title="Xitefun Causal Wear Fancy Shoes" alt="Xitefun Causal Wear Fancy Shoes" src="image/product/sony_vaio_1-50x50.jpg"></a></td>
                    <td class="text-left"><a href="product.html"><?php echo $ligneBase->id;?></a></td>
                    <td class="text-right">x 1</td>
                    <td class="text-right"><?php echo $ligneBase->name;?> </td>
                    <td class="text-center"><button class="btn btn-danger btn-xs remove" title="Remove" onClick="" type="button"><i class="fa fa-times"></i></button></td>
                  </tr>

                <?php
                  }
                ?>


                </tbody>
              </table>

Solution

  • Can I suggest a bit improvements in your code structure. You need to use a model for db interactions

    Step-1. Controller Function

    public function cart()
    {
        $data['cart_items']=$this->cart_model->getCartItems();
        if($_POST)
        {
            // Perform Validation
            if($this->form_validation->run()==false)
            {
                $data['errors']=validation_errors();
                $this->load->view('cart_view',$data);
            }
            else
            {
                $row=$this->cart_model->insertToCart($this->security->xss_clean($_POST));
                if($row)
                {
                    $data['success']='Item Added';
                    $this->load->view('cart_view',$data);
                }
                else
                {
                    $data['error']='Item Could not be Added';
                    $this->load->view('cart_view',$data);
                }
            }
        }
        else
        {
            $this->load->view('cart_view',$data);
        }
    
    }
    

    Step-2. Model Functions

    public function getCartItems()
    {
        $sql='create query';
        return $this->db->query($sql)->result_array();
    }
    
    public function insertToCart($data)
    {
        $item=array(
            'field' => $data['index']
        );
        $this->db->insert('cart',$item);
        return $this->db->insert_id();
    }
    

    Step-3. View

    <div class="button-group">
         <form method="POST" action="">
           <input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash();?>" />
           <input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
           <input type="number" name="qty" id="<?php echo $ligneBase->id;?>">
           <input type="hidden" name="name" value="<?php echo $ligneBase->name;?>">
           <input type="hidden"  name="price"  value="<?php echo $ligneBase->price;?>">
           <input type="hidden"  name="id"  value="<?php echo $ligneBase->id;?>">
           <input class="add_cart" type="submit" value="Add to cart">
           <div class="add-to-links">
          </form>
     </div>