【问题标题】:Message: Undefined variable in controller of codeigniter消息:codeigniter 控制器中的未定义变量
【发布时间】:2014-01-09 14:36:49
【问题描述】:

我正在使用 codeigniter 动态获取国家/地区城市,但我得到以下信息

错误:消息:未定义变量:country_id 文件名:controllers/countries.php

我的控制器是:

class countries extends CI_Controller {

public function __construct()
{

    parent::__construct();
    $this->load->model('Countries_model');
}
public function country()
{
    $data=array();
    $this->load->database();
    $data['countries']=$this->Countries_model->get_countries();
    $this->load->view('countries_view',$data);
}   
public function get_cities()
{
    $this->load->model('Countries_model');
$cities = $this->Countries_model->get_cities_by_country_id($country_id);

echo json_encode($cities);

}

查看:

<select id="country" name="country">
<option value="0">Select Country</option>
<?php   foreach($countries as $val)
{
echo '<option   value="'.$val['pkCountry'].'">'.$val['CountryName'].'</option>';

}
?>
</select>

<select id="city" name="city">
<option value="0">Select City</option>
</select>

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script>
$(document).ready(function(e) {
$("#country").change(function(e) {
  var selectedValue = $(this).val();
  $.getJSON("/countries/get_cities/" + selectedVal, {}, function(cities) {
    if(cities) {
      $("#city").html("<option value=" + MCity.pkMCity + ">"+ MCity.Name +"</option>"); 
    }
  });
});
});
</script>

型号:

public function get_cities_by_country_id($country_id) {
$this->db->where('fkMCountry', $country_id);
$query = $this->db->get('MCity');

return $query->result();
}

路线:

$route['countries/get_cities'] = 'countries/get_cities';

数据库表 国家:

pkCountry 国家/地区名称

城市:

fkM国家名称

【问题讨论】:

    标签: php mysql codeigniter undefined


    【解决方案1】:

    首先 - 控制器

    你的控制器应该有第一个大写字母的类名

    改变:

    class countries extends CI_Controller {
    

    到:

    class Countries extends CI_Controller {
    

    此外,在您的代码中,在函数内部

    public function get_cities()
    {
        $this->load->model('Countries_model');
    $cities = $this->Countries_model->get_cities_by_country_id($country_id);
    
    echo json_encode($cities);
    
    }
    

    您指的是未传递给该函数的参数 $country_id。这就是您收到错误的原因。试试下面的,应该消除错误。

    public function get_cities($country_id)
        {
            $this->load->model('Countries_model');
        $cities = $this->Countries_model->get_cities_by_country_id($country_id);
    
        echo json_encode($cities);
    
        }
    

    第二个 - javascript

    您的 javascript 代码中存在拼写问题,导致第二个错误(您在 cmets 中提供)

    改变:

    var selectedValue = $(this).val();
    $.getJSON("/countries/get_cities/" + selectedVal, {}, function(cities)
    

    到:

    var selectedValue = $(this).val();
    $.getJSON("countries/get_cities/" + selectedValue, {}, function(cities)
    

    第三 - 路由

    您的路线定义并未表明 uri 中会有第三段(象征您传递给函数的 $country_id 参数)。使用下面的,它应该终于可以工作了。

    $route['countries/get_cities/(:num)'] = 'countries/get_cities/$1';
    

    或者如果你还有问题,试试

    $route['countries/get_cities/(:any)'] = 'countries/get_cities/$1';
    

    【讨论】:

    • 我收到一个错误:消息:国家缺少参数 1::get_cities() 文件名:controllers/countries.php @Gadoma
    • 能否提供控制器的完整代码,而不仅仅是get_cities函数?
    • No @Gadoma...国家下拉菜单已显示,但 onchange 获取城市仍有问题...
    • 您遇到什么错误?将您的浏览器指向您使用 json 获取的 url 并将输出 (echo json_encode($cities);) 粘贴到您的帖子中
    • @user3114651 您应该接受并 +1 答案,因为它解决了您最初的问题(最初的 CI 相关问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多