【发布时间】:2011-06-16 06:05:23
【问题描述】:
我正在尝试使用带有 CodeIgniter 和 jQuery 的 ajax 创建一个动态过滤系统。
我有一个从我的数据库中提取的项目列表,以及一个用于过滤这些项目的复选框列表。 我希望能够选择多个允许各种过滤器的复选框。
单击过滤器复选框时,我会序列化表单,但我不确定如何将其传递给 codeigniter 以及如何处理它。 到目前为止,我已经尝试过,将序列化数据传递到查询字符串中。
$('#filter input').bind('change', function(){
var f = $('#filter').serialize();
$('#list').load('http://localhost/testing/filter?'+f);
});
我的序列化表单返回以下内容,对应于过滤器复选框。
cat_0=1&cat_1=1
在 CodeIgniter 中,我可以轻松地创建这个 sql 查询,查询数据库并返回匹配过滤器的项目。
SELECT * FROM `items` WHERE `category` ='0' OR `category` ='1'
我想我的主要问题是从我的序列化表单中获取类别信息到 CodeIgniter。还是有另一种更有效的过滤方法。 任何帮助将非常感激。谢谢
编辑
我的问题是没有收到查询字符串,而是如何在 CI 中处理它。我最终这样做了。这很混乱,所以如果有人可以看到改进,请告诉我。谢谢
我刚刚使用接收到的查询字符串中的类别构建了一个 sql 查询。
function filter(){
if($this->input->get('cat_0', true)) {
$a[] = " OR `category` = '0'";
}
if($this->input->get('cat_1', true)) {
$a[] = " OR `category` = '1'";
}
if($this->input->get('cat_2', true)) {
$a[] = " OR `category` = '2'";
}
if($this->input->get('cat_3', true)) {
$a[] = " OR `category` = '3'";
}
if($this->input->get('cat_4', true)) {
$a[] = " OR `category` = '4'";
}
if($this->input->get('cat_5', true)) {
$a[] = " OR `category` = '5'";
}
if($this->input->get('cat_6', true)) {
$a[] = " OR `category` = '6'";
}
if(!isset($a)){
echo "no items";
} else {
$sql = 'SELECT * FROM `items` WHERE ';
$a[0] = str_replace(" OR ", "", $a[0]); //remove 'OR' from first
foreach($a as $b){
$sql = $sql.$b;
}
echo "<pre>";
print_r($this->db->query($sql)->result());
echo "</pre>";
}
}
编辑第二部分
我回到这个问题,我现在需要在查询中添加用户名检查。我已经尝试过以下机智了。
function filter(){
$this->db->where('username', $this->ion_auth->profile()->username);
foreach($_GET as $key=>$value){
if($value == 1){
$key = explode('_', $key);
$this->db->or_where('cat', $key[1]);
}
}
print_r($this->db->get('items')->result());
}
这是我需要在我的数据库中创建和工作的 SQL 语句。
SELECT * FROM `items` WHERE `username` = 'tmp_username' AND `cat` = '0' OR `cat` = '6';
【问题讨论】:
-
因为我在该网址中没有看到 index.php,我假设您正在运行 .htaccess 并将其从网址中删除?
标签: php jquery serialization codeigniter filtering