学习CodeIgniter 3并尝试做一个简单的搜索来查询Db…: -)
我建立了我的控制器,必须查询数据库的模型,以及包含结果和搜索字段的视图…
我的表单实际上提交,我得到$_POST数组提交后的表单…但似乎模型,甚至被调用(或不正确!? ?!?!)不是查询数据库…为什么不呢?
Search.php控制器<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Search extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper('url');
$this->load->database();
$this->load->helper('text');
$this->load->library('pagination');
$this->load->helper('form') ;
//$this->load->library('MY_sphinxclient');
$this->load->model('Search_model');
}
public function index()
{
if ($this->form_validation->run() === FALSE)
{
$this->load->view('search');
}
else
{
$data['search']=$this->input->get_post('search');
$this->Search_model->get_search($data);
$this->load->view('search');
}
}
}
Search_model.php
<?php
class Search_model extends CI_Model {
public function __construct()
{
// Call the Model constructor
parent::__construct();
}
public function get_search($search_submit)
{
$sql = "SELECT ads.id AS id, 1 AS table_id, location, provLabel, text,
R_rand, addate, adcat.name AS catname, adsubcat.name AS subname, f_value
FROM ads
JOIN search_town ON search_town.townId=ads.townId
JOIN search_region ON search_region.regionId=search_town.relRegionId
JOIN search_prov ON search_prov.provId=search_region.relProvId
JOIN adcat ON adcat.id=ads.catid
JOIN adsubcat ON adsubcat.id=ads.subcatid
LEFT JOIN adfields ON adfields.ad_id=ads.id
WHERE ads.adactive=1 AND ads.subcatid!=841 AND scam=0 AND ads.catid!=8
AND (text LIKE '%$search_submit%' OR f_value LIKE '%$search_submit%')";
$query = $this->db->query($sql);
return $query->result();
$result= $query->result();
echo count($result);
}
}
My simple view search.php
<?php
echo 'Hello World!!!';
if(isset($_POST)){
var_dump($_POST);
}
echo form_open('search');
echo form_label('Search: ');
$data_name = array(
'name' => 'search',
'id' => 'search',
'placeholder' => 'Search'
);
echo form_input($data_name);
echo form_submit('submit', 'Submit');
echo form_close( );
if(isset($search)){
echo '<table>';
foreach($search as $rows) {
echo '<tr>
<td>'.$rows->id.'</td>
<td>'.$rows->text.'</td>
</tr>';
}
echo '</table>';
}
search_submit();
您的模型命名为Search_model
,但您使用的是$this->search_model
。
不应该这样:
$this->search_model
:
$this->Search_model
或者您应该在执行加载时指定一个名称:
$this->load->model('Search_model', 'search');
$this->search->get_search();
查看最新编辑:
$this->load->model('Search_model', 'search');
$this->search->get_search($seach); //Shouldn't $search be $this->input->get_post('search')
好了,我把这个排序好了。要对数据库进行简单查询,例如,在Codeigniter 3
中创建一个搜索表单谢谢大家的帮助!
控制器:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Search extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper('url');
$this->load->database();
$this->load->helper('text');
$this->load->library('pagination');
$this->load->helper('form') ;
$this->load->library('form_validation');
$this->form_validation->set_rules('fsearch', 'Search', 'required');
//$this->load->library('MY_sphinxclient');
$this->load->model('Search_model');
}
public function index()
{
if ($this->form_validation->run() === FALSE)
{
$this->load->view('search');
}
else
{
$fsearch=$this->input->get_post('fsearch');
$data['results']=$this->Search_model->get_search($fsearch);
$this->load->view('search', $data);
}
}
}
模型:
<?php
class Search_model extends CI_Model {
public function __construct()
{
// Call the Model constructor
parent::__construct();
}
public function get_search($search)
{
$sql = "SELECT ads.id AS id, 1 AS table_id, location, provLabel, text,
R_rand, addate, adcat.name AS catname, adsubcat.name AS subname, f_value
FROM ads
JOIN search_town ON search_town.townId=ads.townId
JOIN search_region ON search_region.regionId=search_town.relRegionId
JOIN search_prov ON search_prov.provId=search_region.relProvId
JOIN adcat ON adcat.id=ads.catid
JOIN adsubcat ON adsubcat.id=ads.subcatid
LEFT JOIN adfields ON adfields.ad_id=ads.id
WHERE ads.adactive=1 AND ads.subcatid!=841 AND scam=0 AND ads.catid!=8
AND (text LIKE '%$search%' OR f_value LIKE '%$search%') GROUP BY ads.id ORDER BY ads.id DESC LIMIT 20";
$query = $this->db->query($sql);
return $query->result();
echo 'Search Done';
}
}
?>
视图:<?php
echo 'Hello World!!!';
if(isset($_POST)){
var_dump($_POST);
}
echo form_open('search');
echo form_label('Search: ');
$data_name = array(
'name' => 'fsearch',
'id' => 'search',
'placeholder' => 'Search'
);
echo form_input($data_name);
echo form_submit('submit', 'Submit');
echo form_close( );
if(isset($results)){
echo '<table>';
foreach($results as $rows) {
echo '<tr>
<td>'.$rows->id.'</td>
<td>'.$rows->text.'</td>
</tr>';
}
echo '</table>';
}
?>
<?php echo validation_errors(); ?>
在form_validation上设置=== use ==
确保加载了form_validation库
您缺少的form_validation->set_rules()
defined('BASEPATH') OR exit('No direct script access allowed');
class Search extends CI_Controller {
public function __construct() {
parent::__construct();
// I would autoload Database
$this->load->database();
$this->load->helper('url');
$this->load->helper('text');
$this->load->library('pagination');
$this->load->helper('form');
$this->load->model('search_model');
}
public function index() {
$this->load->library('form_validation');
$this->form_validation->set_rules('search', 'Search');
if ($this->form_validation->run() == FALSE) {
$this->load->view('search');
} else {
$data['search'] = $this->input->post_get('search');
$this->search_model->get_search($data);
$this->load->view('search');
}
}
}