我是CodeIgniter的新手,我在制作URL链接和显示数据库中的数据时遇到了问题。
我有一个州(马萨诸塞州)的数据库。我在马萨诸塞州也有几个城市(波士顿,布罗克顿,剑桥和西牛顿)。
My Database is set up like this.
id, state, city,
1 Massachusetts Boston
2 Massachusetts Brockton
3 Massachusetts Cambridge
4 Massachusetts West Newton
我的第一个目标是显示马萨诸塞州。我用下面的语法完成了我的目标。
我的问题是:当有人点击“马萨诸塞州”时,我想显示该州的城市。我该怎么做呢?下一步是什么?
我的控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Site extends CI_Controller {
public function index(){
$this->load->model('model_data');
$data["results"] = $this->model_data->getState();
$this->load->view('view_home',$data);
}
}
我的模特:
class Model_data extends CI_Model{
function getState(){
$this->db->distinct();
$this->db->select('state');
$this->db->order_by('state','ASC');
$query = $this->db->get('states');
return $query->result();
if ($query->num_rows() > 0){
foreach($query->result() as $row){
$data[] = $row;
}
return $data;
}
}
}
我的观点_家庭:
<?php echo doctype("html5");?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Home View</title>
</head>
<?php
foreach ($results as $row){
$state = $row->state;
echo $state.'<br>';
/*
Notes to myself: Do I have to pass a URI segment? but do I pass the variable of $state
*/
echo anchor("",$row->state,array('title'=>$row->state));
}
?>
<body>
</body>
</html>
答案 0 :(得分:1)
根据您当前的数据库,您可以在Site
控制器中添加另一种方法来显示州的城市。首先,您的链接应为此(使用Site
控制器和getCities
作为方法):
echo anchor('site/getCities/'.$row->state, $row->state, array('title'=>$row->state));
这将生成如下链接:
<a href="http://yourDomain.com/site/getCities/Massachusetts" title="Massachusetts">Massachusetts</a>
或者喜欢这个(取决于您的.htaccess
文件进行网址重写):
<a href="http://yourDomain.com/index.php/site/getCities/Massachusetts" title="Massachusetts">Massachusetts</a>
现在,您可以在Site
控制器中添加方法,例如:
public function getCities($state = null)
{
if(is_null($state)) return false;
$this->load->model('Model_data');
$data['cities'] = $this->getCitiesByState($state);
$this->load->view('showCities');
}
在您的Model_data
模型中,添加方法getCitiesByState
以按州名取得所有城市:
public function getCitiesByState($state)
{
// load database if not autoloaded
// assumed, your table name is cities
$query = $this->db->get_where('cities', array('state' => $state));
if($query->num_rows()) return $query->result();
return null;
}
然后在视图(showCities.php)中:
if(isset($cities) && !is_null($cities))
{
echo "Cities of " . $cities[0]->state . "<br />";
foreach ($cities as $city)
{
echo $city->id . " " . $city->city . "<br />";
}
}
答案 1 :(得分:0)
$ query = $ this-&gt; db-&gt; get('states') - 不应该是$ query = $ this-&gt; db-&gt; get('state')
foreach($结果为$ row){ $ state = $ row-&gt; state-&gt; city; echo $ state
并编辑您的功能以获取城市,或创建另一个功能以获得该州的城市。或者,将所有数据库表一起更改并按ID连接表,并在城市中回显匹配ID。