从php(CodeIgniter)中的给定数组中选择mysql表中的列。

I want to select columns form mysql table which I have selected names as input value. In my view, have to select column names as multiple input fields. In this selection option values are equals to column names in my “pass_due” table in database.

<form id=""  name=" Passdue "  action="<?=base_url('index.php/Passdue_ctrl/select')?>" method="post">
<div >
     <input class="date-picker" id="report_date" name="report_date"   value="" placeholder="Select Date"/>
     <select multiple="" class="chzn-select" id=" " data-placeholder="Select sections " name="table_feilds">
                           <option value="" />
                           <option value="below_1" /> Below month
                           <option value="month_1_3" /> Month 1-3
                           <option value="month_3_6" /> Month 3-6
                            <option value="month_6_9" /> Month 6-9
                            <option value="over_9" /> Over 9 month
      </select>
</div>
<div>
            <button type="submit" class="btn btn-mini btn-info">Submit</button> 
              <button type="reset" id="reset" class="btn btn-mini btn-info">Reset</button>
</div>   
</form>

This is function in my controller

Function select (){
$fld_name =$this->input->post('table_feilds');
$reportdate=$this->input->post('report_date');
$report=$this->Passdue_model->get_report_part($fld_name,$reportdate);
If($report){
$this->data['report_part']=$report;
$this->data['fld_name']=$fld_name;
$this->load->view('Passdue_other_view',$this->data);
}
}

In my model like this.

function get_report_part1($fld_name,$reportdate)
    {
$this->db->select($fld_name);
$this->db->from(‘pass_due’);
$this->db->where('fld_actORinact_date <=',$reportdate);
            $query = $this->db->get();
                if($query){
                 return $query->result();
                }
   }

When I run this code it select all columns from table, not only selected ones. And also it shows error as Invalid argument supplied for foreach() .

</div>

You can use this new model method to retreive data from your db.So insert this method into your model

function getDetail($tablename = '', $columns_arr = array(), $where_arr = array(), $limit = 0, $offset = 0)
{
    $limit = ($limit == 0) ? Null : $limit;

    if (!empty($columns_arr)) {
        $this->db->select(implode(',', $columns_arr), FALSE);
    }

    if ($tablename == '') {
        return array();
    } else {
        $this->db->from($tablename);

        if (!empty($where_arr)) {
            $this->db->where($where_arr);
        }

        if ($limit > 0 AND $offset > 0) {
            $this->db->limit($limit, $offset);
        } elseif ($limit > 0 AND $offset == 0) {
            $this->db->limit($limit);
        }

        $query = $this->db->get();

        return $query->result();
    }
}
//These are include within controller methods

$fld_name =$this->input->post('table_feilds');
//you have to send your columns from your multiple select object as array.
//create column array
$arr_columns=array();
for($i=0,$i<=count($fld_name);$i++){
$arr_columns=array_push($fld_name)
}
$reportdate=$this->input->post('report_date');
 //create where array
$arr_where=array('fld_actORinact_date <=' => $reportdate);
//retreive data
$datatable=‘pass_due’;
   $report=$this->Passdue_model->getDetail($datatable,$arr_columns,$arr_where,0,0);
var_dump($report);

//finally dump_data set .it return array object.Then loop retrieved object.

then this will return what you expect. Also like to advise you to use generalized model except using separate models for each & every tables.

use below code in form

    <select multiple="multiple" class="chzn-select" id=" " data-placeholder="Select sections " name="table_feilds[]">  <!-- use [] for multiple values --> 

and I don't see any foreach loop?

and first 
echo '<pre>';print_r($fld_name);exit; before 
$report=$this->Passdue_model->get_report_part($fld_name,$reportdate);

In your model return the query as follows

return $query->result_array();

In your controller get data by

data['fld_name']=$this->Passdue_model->get_report_part($fld_name,$reportdate);
$this->load->view('Passdue_other_view',$data);

In your view page

foreach($fld_name as $fld_name){?> <th><?php echo $fld_name['column_name '];?></th> <?php }?> </tr> </thead>