【问题标题】:passing to model through controller in codeigniter?通过codeigniter中的控制器传递给模型?
【发布时间】:2016-05-15 16:55:59
【问题描述】:

我想从下拉菜单中选择一个产品类别选项并显示具有该特定类别的产品。

这是我的观点的表单部分:

<?php $attributes = array('method'=>"POST", "class" => "myc",  "id" => "myc", "name" => "dropdwn");
            echo form_open_multipart('frontend/home/display', $attributes); ?> 
          <div class="form-group">

                        <div class="col-sm-9">
                            <select class="form-control"  name="category" onchange="this.form.submit();" />


                                <option value="" <?php echo set_select('category', 'zero', TRUE); ?>>Categories...</option>

                                <option value="phone" >Phones</option>
                                <option value="laptops">Laptops</option>
                                <option value="accessories" >Accessories</option>

                            </select>

                        </div>
                    </div>

  <?php echo form_close(); ?> 

如您所见,我通过 onchange="this.form.submit(); 从下拉列表中获得选项 (如果这不是一个好主意,请建议其他方法,我只是不想使用 ajax,因为我还不太擅长,无论如何建议什么看起来更好)。

然后在我的控制器中我得到选项并将其转换为数组,以在我的模型中使用它。

控制器部分:

public function display($sort_by='product_id', $sort_order='asc', $offset = 0) 
    {
 $this->load->model('model_product');
$selected = implode(" ", $this->input->post());
        //var_dump($selected);
 $results = $this->model_product->fetch($selected, $limit, $offset, $sort_by, $sort_order);
        $data['products'] = $results['rows'];
        $data['num_results'] = $results['num_rows'];
//and then goes pagination part, I guess no meaning posting it, as it works fine.
}

我的模特:

function fetch($selected, $limit, $offset, $sort_by, $sort_order)
     {
        $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc';
        $sort_columns = array('product_id', 'name', 'description', 'category', 'country', 'price');
        $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'product_id';


        //actual results query
        $q = $this->db->select('product_id, name, description, category, country, price, img_name, thumb_name')
            ->from('products')
            ->where('category', $selected)
            ->limit($limit, $offset)
            ->order_by($sort_by, $sort_order);


        $ret['rows'] = $q->get()->result();
        var_dump($ret['rows']);
        die;
        //count query
        $q = $this->db->select('COUNT(*) as count', FALSE)
           ->from('products');

        $tmp = $q->get()->result();
        $ret['num_rows'] = $tmp[0]->count;
        return $ret;
     }

在这里我没有得到任何结果,可能是因为 where 子句没有返回结果。 但是,如果我更改 where 子句,例如 ->where('category', 'phones') 它只显示电话。 那么我怎样才能正确地将选定的值传递给查询呢?

【问题讨论】:

    标签: php mysql forms codeigniter select


    【解决方案1】:

    我会帮助你的。 查看文件

     <div class="box-header">
                                    <h3 class="box-title">Enter Category Details</h3>
                                </div>
    
                                <?php
                               echo validation_errors();                                   $attributes = array('id' => 'formCategory','name'=>'formCategory'); 
                                ?>
                                <?php echo form_open_multipart(base_url().'moderator/B2BCategory/addcategory'); ?>
    
                                <div class="box-body">
                                    <div class="row">
                                        <div class="col-xs-6">
                                            <div class="form-group">
                                                <label for="txtcatname">Title of Category :</label>
                                                <input type="text" name="txtcatname" class="form-control" id="txtcatname" placeholder="Category Name " required="required">
                                            </div>
                                        </div> 
                                        <div class="col-xs-6">
                                            <div class="form-group">
                                                <label for="categorysection">Section of the Category :</label>
                                                <select class="form-control" name="categorysection"  required>
                                                <option value="" >----Select------</option>
                                                <option value="1">Laptop</option>
                                                <option value="2">Phone</option>
                                              <option value="3">Accessories</option>
    
                                                 </select>
      <input type="submit" name="selsub" class="btn btn-primary">
                                            </div>
                                        </div> 
    
    
          </div>
    

    控制器

      public function addcategory() {
                $this->load->helper(array('form', 'url'));
                $this->load->view('moderator/templates/header');
                $this->load->view('moderator/templates/sidebar');
         if ($this->input->post('selsub')) {
     $data = array('ctg_name' => $this->input->post('categorysection'));
      $this->b2bcategory_model->form_insert($data);
        }
    

    在模型中

    public function form_insert($data){
    
    $this->db->insert('jil_category', $data);
    }
    

    要显示表格的输出,只需使用

     public function viewall()
       {
    
            $this->db -> select('*');
            $this -> db -> from('jil_category');
            $query = $this -> db -> get();
             return $query->result();
    
       }
    

    【讨论】:

    • 如果要从数据库中列出添加的产品列表,只需使用以下代码
    【解决方案2】:

    来自

    $selected = implode(" ", $this->input->post());
    

    $selected = $this->input->post('category');
    

    顺便说一句,echovar_dump() 在调试控制器和/或模型时非常有用。

    【讨论】:

    • 谢谢大家的回答,实际上一切正常,我的错,我的选择表单名称有错字,与数据库中的数据不对应
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    相关资源
    最近更新 更多