【问题标题】:display data from database to dropdown CodeIgniter将数据库中的数据显示到下拉 CodeIgniter
【发布时间】:2013-11-24 04:28:57
【问题描述】:

我在将数据库中的数据显示到下拉列表时遇到了困难。

这是我尝试过的:

Model.php

        public function __construct()
        {
            parent::__construct();
        }

        function getAllGroups()
        {
            /*
            $query = $this->db->get('location');

            foreach ($query->result() as $row)
            {
                echo $row->description;
            }*/

            $query = $this->db->query('SELECT description FROM location');

            foreach ($query->result() as $row)
            {
                echo $row->description;
            }

            //echo 'Total Results: ' . $query->num_rows();
        }

Controller.php

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    class Delivery_controller extends CI_Controller{
        public function __construct()
        {
            parent::__construct();
            $this->load->model('delivery_model');

        }
        public function index()
        {

            $data['title']= 'Warehouse - Delivery';
            $this->load->view('include/header',$data);
            $this->load->view('include/navbar',$data);
            $this->load->view('delivery_view', $data);
            $this->load->view('include/sidebar',$data);
            $this->load->view('include/footer',$data);
        $data['groups'] = $this->delivery_model->getAllGroups();
        }


    }

View.php

           <select class="form-control">
                <?php 
                        $data = $this->delivery_model->getAllGroups();
                foreach($description as $each)
                { ?><option value="<?php echo $each['description']; ?>"><?php echo $each['description']; ?></option>';
                <?php }
                ?>
                </select>

但结果显示在我的页面顶部。它没有出现在下拉列表中。我在这里做错了什么?非常感谢您的帮助。谢谢。

【问题讨论】:

  • 您的模型中的return $data; 是什么?你在哪里定义了$data 变量?
  • @JamshidHashimi 我从模型中删除了返回的 $data。
  • 我发布了一个详细的答案。检查是否能解决您的问题。

标签: php mysql codeigniter


【解决方案1】:

您不应该从您的视图中调用您的模型。而是在加载视图之前尝试调用你的模型并设置$data['groups']

也不要在模型中回显行结果,除非您希望它显示在您的页面上。

控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Delivery_controller extends CI_Controller{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('delivery_model');

    }
    public function index()
    {

        $data['title']= 'Warehouse - Delivery';
        $data['groups'] = $this->delivery_model->getAllGroups();
        $this->load->view('include/header',$data);
        $this->load->view('include/navbar',$data);
        $this->load->view('delivery_view', $data);
        $this->load->view('include/sidebar',$data);
        $this->load->view('include/footer',$data);

    }


}

型号:

    public function __construct()
    {
        parent::__construct();
    }

    function getAllGroups()
    {
        /*
        $query = $this->db->get('location');

        foreach ($query->result() as $row)
        {
            echo $row->description;
        }*/

        $query = $this->db->query('SELECT description FROM location');


        return $query->result();

        //echo 'Total Results: ' . $query->num_rows();
    }

查看:

       <select class="form-control">
            <?php 

            foreach($groups as $row)
            { 
              echo '<option value="'.$row->description.'">'.$row->description.'</option>';
            }
            ?>
            </select>

【讨论】:

  • 谢谢老兄!它已经起作用了。对了,你是不是用了主动记录?
  • 当您将$data 传递给您的视图时,每个键都是您视图中的可访问变量。例如:控制器中的$data['groups'] 对应于视图中的$groups
【解决方案2】:

这是你应该做的:

型号

public function __construct()
{
    parent::__construct();
}

function getAllGroups()
{
    $query = $this->db->query('SELECT description FROM location');
    return $this->db->query($query)->result();
}

控制器

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Delivery_controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('delivery_model');
    }
    public function index()
    {
        $data['title']= 'Warehouse - Delivery';
        $data['groups'] = $this->delivery_model->getAllGroups();
        //I take here a sample view, you can put more view pages here
        $this->load->view('include/header',$data);
    }
}

查看

<select class="form-control">
    <?php foreach($groups as $each){ ?>
        <option value="<?php echo $each->description; ?>"><?php echo $each->description; ?></option>';
    <?php } ?>
</select>

【讨论】:

    【解决方案3】:

    Codeigniter 已经具有专门的功能,可以最大限度地减少您必须在代码中转储的 html 数量:

    型号

    public function description_pulldown(){
        $this->db->from('location');
        $query = $this->db->get();
        foreach($query->result() as $row ){
            //this sets the key to equal the value so that
            //the pulldown array lists the same for each
            $array[$row->description] = $row->description;
        }
        return $array;
    }
    

    控制器

    public function index(){
        $data['description_list'] = $this->delivery_model->description_pulldown();
        //load all of your view data
        $this->load->view('delivery_view', $data);
    }
    

    查看

    echo form_label("Description");
    echo form_dropdown('description', $description_list, set_value('description'), $description_list);
    

    如果需要让视图拉出下拉列表中之前的数据,可以做一个foreach循环从数据库中获取下拉列表之前的值,即... $description = $item->description;并在视图中,将 'set_value('description')' 更改为简单的 '$description'。

    【讨论】:

      【解决方案4】:

      永远不要从视图中调用模型。这是可行的,但是你又失去了首先使用 MVC 的意义。 从控制器调用模型。获取数据并将数据传递到您的视图中。

      像下面这样使用。

      public function index(){
          $data['title']= 'Warehouse - Delivery';
          $data['groups'] = $this->delivery_model->getAllGroups();
          $this->load->view('include/header',$data);
          $this->load->view('include/navbar',$data);
          $this->load->view('delivery_view', $data);
          $this->load->view('include/sidebar',$data);
          $this->load->view('include/footer',$data);
      }
      

      在您看来,只需将$groups 变量和echo 循环到您的下拉列表即可。

      <select class="form-control">
      <?php 
      $i = 0;
      while($i < count($groups)){
        $val= $groups[$i]['value'];
        $des = $groups[$i]['description'];
        echo "<option value='$i'>$des</option>";
      }
      </select>
      

      你的模型的功能应该是,

      function getAllGroups(){
         $query = $this->db->get('location');
          return $query->result_array();
      }
      

      【讨论】:

        【解决方案5】:

        我认为更好,在您看来使用:

        在您的模型上,将所有数据放在一个数组中:

        public function get_all_description()
        {
            $query = $this->db->get('description');
            return $query->result_array();
        }
        

        在控制器中:

        $data['description']=$this->model->get_all_description();
        

        在视图中:

        for($i=0;$i<sizeof($description);$i++)
        {
            $description2[$description[$i]['description']]=$marque[$i]['description'];
        }
        
        echo form_dropdown('description', $description22, set_value('description'));
        

        【讨论】:

          【解决方案6】:

          这是 Codeigniter 4 的答案。

          控制器

          public function index()
          {
              $delModel = new delivery_model();
              $groups=$delModel->getAllGroups();
              $data = [
          
                  'title' => 'Warehouse - Delivery',
                  'groups' => $groups,
          
              ];
                  return view('include/header',$data);
                  return view('include/navbar',$data);
                  return view('delivery_view', $data);
                  return view('include/sidebar',$data);
                  return view('include/footer',$data);
          
          }
          

          型号

          public function getAllGroups()
          {
              $db = \Config\Database::connect();
              $query = $db->query("SELECT description FROM location;");
              return $query->getResultArray();
          }
          

          查看

          <select>
              <?php
                foreach ($groups as $row) {
                echo '<option value="' . $row["description"] . '">' .$row["description"] . '</option>';
                }?>
          </select>   
          

          【讨论】:

            【解决方案7】:

            public function __construct(){
                parent::__construct();
                $this->load->helper('url');
                $this->load->model('trip_model');
            }
            
            public function index(){
                $data['trips']=$this->trip_model->get_all_trips();
                $this->load->view("trip_view",$data);
            }
            
            public function trip_add(){
                if(!empty($_FILES['trip_image']['name'])){
                    $config['upload_path'] = 'assests/images/';
                    $config['allowed_types'] = 'jpg|jpeg|png|gif';
                    $config['max_size'] = 2048;
                    $config['file_name'] = $_FILES['trip_image']['name'];
            
                    $this->load->library('upload',$config);
                    $this->upload->initialize($config);
            
                    if($this->upload->do_upload('trip_image')){
                        $uploadData = $this->upload->data();
                        $trip_image = $uploadData['file_name'];
                    }
                    else{
                        $trip_image = 'Hello..!!';
                    }
                }
                else{
                    $trip_image = 'Byeee..!!';
                }
            
                $data = array(
                    'trip_image' => $trip_image,
                    'name' => $this->input->post('name'),
                    'location' => $this->input->post('location'),
                    'trip_datetime' => $this->input->post('trip_datetime')
                );
            
                $insert = $this->trip_model->trip_add($data);
                echo json_encode(array("status" => TRUE));
            }
            
            function do_upload(){
                $url = "assests/images/";
                $image = basename($_FILES['trip_image']['name']);
                $image = str_replace(' ','|',$image);
                $type = explode(".",$image);
                $type = $type[count($type)-1];
            
                if (in_array($type,array('jpg','jpeg','png','gif'))){
                    $tmppath="assests/images/".uniqid(rand()).".".$type;
                    if(is_uploaded_file($_FILES["trip_image"]["tmp_name"])){
                        move_uploaded_file($_FILES['trip_image']['tmp_name'],$tmppath);
                        return $tmppath;
                    }
                }
            }
            public function ajax_edit($id){
                $data = $this->trip_model->get_by_id($id);
                echo json_encode($data);
            }
            
            public function trip_update(){
                if(!empty($_FILES['trip_image']['name'])){
                    $config['upload_path'] = 'assests/images/';
                    $config['allowed_types'] = 'jpg|jpeg|png|gif';
                    $config['file_name'] = $_FILES['trip_image']['name'];
            
                    $this->load->library('upload',$config);
                    $this->upload->initialize($config);
            
                    if($this->upload->upload_img('trip_image')){
                        $uploadData = $this->upload->data();
                        $trip_image = $uploadData['file_name'];
                    }
                    else{
                        $trip_image = 'Hello..!!';
                    }
                }
                else{
                    $trip_image = 'Byeee..!!';
                }
            
                $data = array(
                    'trip_image' => $trip_image,
                    'name' => $this->input->post('name'),
                    'location' => $this->input->post('location'),
                    'trip_datetime' => $this->input->post('trip_datetime')
                );
            
                $this->trip_model->trip_update(array('trip_id' => $this->input->post('trip_id')), $data);
                echo json_encode(array("status" => TRUE));
            }
            
            public function trip_delete($id){
                $this->trip_model->delete_by_id($id);
                echo json_encode(array("status" => TRUE));
            }
            

            }

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-12-21
              • 2017-10-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多