Codeigniter select- from-其中 [英] Codeigniter select- from- where
本文介绍了Codeigniter select- from-其中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
只是想让codeigniter过滤表单工作。例如,如果从下拉列表中选择Samsung,并且从复选框字段选择2G,则应返回ID为1和4的行。但我的模型不返回任何东西。我认为问题是在IF语句的模型,但我不知道什么是确切的原因。请帮助我。
Just want to make codeigniter filter form work. For example, if "Samsung" will be selected from dropdown list and "2G" from checkbox fields, rows with id 1 and 4 should be returned. But my model returns nothing.I think the problem is in IF statement of the model but I cannot find out what is the exact reason. Please help me.
这是我的数据库表:
这是我的过滤器表单:
这里是我的模型:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Model_example extends CI_Model {
function __construct()
{
parent::__construct();
}
public function did_filter() {
$types = $this->input->post('types');
$data = array(
'2g' => 0,
'3g' => 0,
'4g' => 0,
);
foreach ($types as $type) {
$data[$type] == 1;
}
$this->db->select('*');
$this->db->from('table_example');
$this->db->where('phone', $this->input->post('phone'));
if (
$query = $this->db->get()
)
{
if (
(('2g' == 1) AND ($data['2g'] == 1)) OR
(('3g' == 1) AND ($data['3g'] == 1)) OR
(('4g' == 1) AND ($data['4g'] == 1)))
{
return $result = $query->result_array();
}
else {
return false;
}
}
else {
return false;
}
}
}
我的观看次数1:
<?php
$this->load->helper("form","file");
echo validation_errors();
echo form_open_multipart("example/search");
echo form_label("Phone:<br>","phone");
$data = array(
"" => "Select Phone",
"samsung" => "Samsung",
"htc" => "HTC",
"nokia" => "Nokia",
);
echo form_dropdown('phone', $data, set_value('phone'));
echo br(5);
?>
<?php echo form_label("Network Type:<br>","type");?>
<input type="checkbox" name="types[]" value="2g" id="types" <?php echo set_checkbox('types[]', '2g', FALSE); ?>/>2G<br />
<input type="checkbox" name="types[]" value="3g" id="types" <?php echo set_checkbox('types[]', '3g', FALSE); ?>/>3G<br />
<input type="checkbox" name="types[]" value="4g" id="types" <?php echo set_checkbox('types[]', '4g', FALSE); ?>/>4G<br />
<br />
<?php
echo br(1);
echo form_submit("filterSearch", "Search");
echo form_close();
?>
这里是我的视图号码2:
Here is My View number 2:
<?php
print_r($result);
这是我的控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Example extends MX_Controller {
public function index() { //main function
$this->load->view("view_example");
}
public function search() {
$this->load->library('form_validation');
$this->load->model('model_example');
$this->form_validation->set_rules('phone', 'Phone','required');
$this->form_validation->set_rules('types[]', 'Network Type','required');
if($this->form_validation->run()) {
$data["result"] = $this->model_example->did_filter();
$this->load->view("view_search_results",$data);
}
else
{
$this->load->view("view_no_search_results");
}
}
}
推荐答案
尝试这个,它应该工作,我给你两个选项在哪里使用你需要的那个
Try this, it should work, i gave you two option for where so use the one that you need
public function did_filter() {
$types = $this->input->post('types');
//list of types column name you can ignore this part by in cases someone change the value in html your query will fail so i am keeping this
$data = array(
'2g' => 0,
'3g' => 0,
'4g' => 0,
);
$this->db->select('*');
$this->db->from('table_example');
$this->db->where('phone', $this->input->post('phone'));
// if you want to use and where use this block, or use the next block the is commented out
foreach ($types as $type) {
if (isset($data[$type])) { // this making sure that your column is correct
$this->db->where($type, 1);
}
}
/**
//If you want your checkbox to work as or, ie if 2g and 3g select and you want to show any check box match.
//In case of your example still it will give row 1 and 4, but if you use fist block it will give you row 1 only because row 1 got both 2g and 3g
$or_where = array();
foreach ($types as $type) {
if (isset($data[$type])) { // this makeing sure that your colum is correct
$or_where[] = "$type = 1";
}
}
if (count($or_where) > 0) {
$where = implode(' OR ', $or_where); // make the or where for array
$this->db->where("($where)");
}
*
*/
$query = $this->db->get();
if ($query && $query->num_rows() > 0) {
return $query->result_array();
} else {
return false;
}
}
这篇关于Codeigniter select- from-其中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文