在 Codeigniter 中填充动态下拉列表

Posted

技术标签:

【中文标题】在 Codeigniter 中填充动态下拉列表【英文标题】:Populate Dynamic Dropdowns List in Codeigniter 【发布时间】:2016-10-17 21:18:57 【问题描述】:

数据库包括艺术、科学和 IT 等组。通过选择一个组第二个动态下拉列表将显示与组相关的主题。 这是我的观点

   <?php include('admin_header.php'); ?>
   <body id="page-wrapper">
 <div class="container-fluid">
    <h1 class="text-center">Enter Courses</h1>
 <hr>
 </div>
 <?php if($feedback = $this->session->flashdata('feedback')):
  $feedback_class = $this->session->flashdata('feedback_class');
  ?>
 <div class="col-lg-6 col-lg-offset-3">
   <div class="alert alert-dismissible <?= $feedback_class ?>">
      <button type="button" class="close" data-dismiss="alert">&times;</button>
      <p><?= $feedback ?></p>
    </div>
 </div>
   <?php endif; ?>
 <div class="cotainer-fluid">
        <div class="col-lg-6 col-lg-offset-3">
         <?php echo form_open('courses/input',['class'=>'form-group']); ?>
            <br>
  <?php echo form_input(['name'=>'rollno','class'=>'form-control','placeholder'=>'Enter Student ROll NO']); ?>
            <br>
            <select name="group" class="form-control"     onchange="/courses/getsubject'+this.value" >
                <option value="Arts">Arts</option>
                <option value="Science">Science</option>
                <option value="IT">IT</option>
            </select>

            <br>
            <?php echo form_dropdown(''); ?>
            <br>
            <?php echo form_submit(['class'=>'form-control btn btn-         success','value'=>'Submit']) ?>
        <?php echo form_close(); ?>
    </div>
 </div>
 </body>

这是控制器

   <?php
class Courses extends MY_Controller
  
public function assign()

    $this->load->helper('form');
    $this->load->view('admin/course');

public function getsubject($grp)

        $this->load->model('courses');
$grp = $this->courses->getsubjects($grp);
  
     ?>

我不知道如何在 Codeigniter 中做到这一点,得到了谷歌的帮助,比如 Ajax 技巧,但什么都没有

【问题讨论】:

&lt;?php include('admin_header.php'); ?&gt; 在 CI 中可以是 &lt;?php $this-&gt;load-&gt;view('admin_header'); ?&gt;.... :) onChange 事件应该触发一个 javascript 函数。 onchange="/courses/getsubject'+this.value"需要参考JS函数。此外,您的控制器方法不会返回任何内容。我会使用 jQuery 来加载数据,我认为 ajax 调用更容易。 但是如何在控制器的参数中获取这个值呢?然后下一个下拉菜单将如何更新? 你能提供代码吗? 这是什么意思?? “得到了谷歌的帮助,比如 Ajax 技巧,但一无所获” 【参考方案1】:

这是一个例子:

控制器(索引)

<?php

class Index extends CI_Controller 

    public function __construct() 
        parent::__construct();
        $this->load->helper('url_helper');
        $this->load->model('countries_model');
    

    public function index() 
        $query = $this->db->query('SELECT id,name FROM countries');
        $data['countries'] = $query->result_array();
        $this->load->view('index/index', $data);
    

    public function cities() 
        $country_id = $this->input->post('country_id');
        $query = $this->db->query('SELECT id,name FROM cities WHERE country_id=' . $country_id);
        $data['cities'] = $query->result_array();
        $this->load->view('index/cities', $data);
        echo $country_id;
    


模型(Countries_model.php)

<?php

class Countries_model extends CI_Model 

    public function __construct() 
        $this->load->database();
    


查看(index.php)

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dymanic Selects</title>
<script type="text/javascript" src="<?php echo base_url(); ?>js/jquery.js" ></script>

<script type="text/javascript">
$(document).ready(function()
    $('#sl_countries').change(function()
            $('#sl_cities').load("<?php echo site_url('index/cities') ?>",country_id:$(this).val());
        ); 
);
</script>

</head>
<body>
    <label>Countries</label>
    <select id="sl_countries">
        <?php foreach($countries as $c):?>
        <option value="<?php echo $c['id']?>"><?php echo $c['name']?></option>
        <?php endforeach;?>
    </select>

    <label>Cities</label>
    <select id="sl_cities"></select>
</body>
</html>

查看 (cities.php)

<?php foreach ($cities as $c): ?>
    <option value="<?php echo $c['id'] ?>"><?php echo $c['name'] ?></option>
<?php endforeach; ?>

为此,我使用了 jquery,所以它更容易。 需要两个视图,index.php 是主视图,cities.php 是显示国家列表的视图。

【讨论】:

来源:lax-soft.tk/index.php/programacion/php-y-jquery/… Demo:lax-soft.tk/codeIgnitercbx,检查所有国家,有些国家没有关联城市,或者检查你的服务器配置 query() 永远不应该从控制器层调用——这就是模型的用途。 此外,当您将用户输入传递到 sql 查询以提高安全性/稳定性时,您应该使用占位符。最后,对服务器的 ajax 调用对于相对少量的数据来说可能是多余的。在某些情况下,更理想的做法是创建一个多维查找数组,将其传递给视图,其中 is 转换为 json 对象并在 onchange 事件中引用。如果使用 ajax,最好将响应缓存为 json 对象,这样如果用户重新选择特定选项,服务器就不会受到冗余调用的困扰。

以上是关于在 Codeigniter 中填充动态下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 上的动态相关下拉列表国家和州

在 CodeIgniter 中验证表单下拉列表

在 CodeIgniter 中从数据库中获取下拉列表

Codeigniter与AJAX动态相关的下拉列表

如何在引导下拉列表中获取选定元素,其中下拉列表是动态填充的

使用反应钩子在 REACTJS 中使用数组填充动态下拉列表的步骤