0
votes

I want to select some data in the CodeIgnigher PHP application from the database and want to make some change and insert to another table. I would like to insert as as many as selected records into the IN table. Currently I am getting only one row inserted into the out table.

Can you please point, what is being done wrong here.

My tables are. Out_Table (id, name..) and In_Table (id, name, quantity..).

My Model Code is:

<?php

    class ShoppingListM extends CI_Model {

    public function getData() {
        $query = $this->db->get('products');
        return $query->result();
    }

    function SaveForm($form_data) {
        $this->db->insert('SLists', $form_data);

        if ($this->db->affected_rows() == '1') {
            return TRUE;
        }

        return FALSE;
    }

}

?>

View Code:

        <div class="divTable">

        <fieldset>
            <!-- these will be affected by check all -->
     <div class="divRow">Product Name | Quantity | Packages</div>
            <div class="divRow"><input type="checkbox" size="100" class="checkall"> Check all</div>


            <br>

                <?php foreach ($records as $rec) {
                    ?>

                    <div class="divRow"><input type="checkbox">
                            <input size="5" type="hidden" value="<? echo $rec->id; ?>" name="id"></input>
                            <input size="20" type="text" value="<? echo $rec->name; ?>" name="name"></input>
                            <input size="5" type="text" value="" name="quantity"></input>
                            <select name="package">
                                <option name="case">Case</option>
                                <option name="box">Box</option>
                                <option name="box">Single Bottle</option>
                            </select>
                    </div>                
                    <br> 
                        <?
                    }
                    ?>


                    </fieldset> 
                    </div>
                    <div><input type="submit" name="submit"/></div>
                    </form>

Controller Code:

class ShoppingListController extends CI_Controller {

public function index() {
    //$data['val'] = array("test1", "test2", "test3");

   // $this->load->model('HomeModel');
    //$data['records'] = $this->HomeModel->getData();

    $this->load->model('ShoppingListM');

    $data['records'] = $this->ShoppingListM->getData();






    $this->form_validation->set_rules('name', 'Name', 'required|max_length[255]');          
    $this->form_validation->set_rules('qty', 'qty', '');                    
    $this->form_validation->set_rules('package', 'Package', 'required|max_length[128]');



            if ($this->form_validation->run() == FALSE) // validation hasn't been passed
    {
        $this->load->view('ShoppingListV', $data);
    }
    else // passed validation proceed to post success logic
    {
        // build array for the model

        $form_data = array(
                        'name' => set_value('name'),
                        'quantity' => set_value('quantity'),
                        'package' => set_value('package')
                    );

        // run insert model to write data to db

                    // run insert model to write data to db

        if ($this->ShoppingListM->SaveForm($form_data) == TRUE) // the information has therefore been successfully saved in the db
        {
            redirect('ShoppingListController/success');   // or whatever logic needs to occur
        }
        else
        {
        echo 'An error occurred saving your information. Please try again later';
        // Or whatever error handling is necessary
        }
    }
1

1 Answers

0
votes

well i cannt see where is in_table/out_table in the code u provided yet.

to insert many rows what u want insert_batch

example from doc

$data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);

$this->db->insert_batch('mytable', $data); 

or u can loop all ur rows from in_table and insert them one by one if its a maintaince job that u dont care about multiple queries

$data= $this->db->get('Out_table');
try
{
    if ( $data->num_rows == 0)
         throw new Exception('table empty');

    foreach( $data->result() as $row)
    {

        //modifiy the row as u want
        $modified=$row;

        $q=$this->db->insert('in_table',$modified);
        if( ! $q )
            throw new Exception('failed to insert row id:'.$row->id);
    }
    echo $data->num_rows.'rows inserted';    
 }


catch (Exception $e)
{
    echo $e->getMessage();
 // Stop method execution with return, or use exit
    return;
}