我的CMS中有一个激活按钮,允许用户快速切换新闻文章的活动/非活动标记。单击切换时,切换对URL /news/toggle_active/$id
发出POST请求,之后news_model
更新数据库中的特定文章ID的布尔变量,并且控制器重定向回索引。
function toggle_active()
{
$url = $this->uri->uri_string();
$last_segment = count($this->uri->segment_array());
$id = $this->uri->segment($last_segment);
$row = $this->news_model->set_active($id);
redirect('news/index', 'refresh');
}
function set_active($id)
{
$data = array(
'display_flg' => 'NOT display_flg'
);
$this->db->where('id', $id);
$this->db->update($this->tbl_news, $data);
}
第一次单击激活按钮时,它可以正常工作,但后续点击不执行任何操作。如果我关闭浏览器窗口并重新打开页面,该按钮将再次起作用,但只能单击一次。
我没有特别启用任何缓存,因此我不确定最新情况。
如果我从toggle_active()
方法的末尾删除重定向,并输出display_flg
变量的当前值,并将POST发送到/news/toggle_active/$id
,则它似乎对第一个没有任何作用请求。但是,在每次后续刷新时,变量都会更改值。为什么第一次链接被击中时它没有做任何事情?
虽然没有可靠的解决方案,但我在codeigniter论坛上找到了一些似乎是类似问题的人。
答案 0 :(得分:0)
我认为这最终不是一个缓存问题。我做了两个主要的修改来解决这个问题。
首先,在重定向之前,我没有检查数据库请求是否成功。
我还重写了我的模型set_active()
方法。将SET子句作为数组传递给更新函数第二个参数不起作用。我需要使用set functions第三个参数来阻止查询转义查询的NOT
部分。
我调整了我的功能如下:
function show_toggle($id)
{
if($this->news_model->set_active($id))
{
redirect('news/index', 'refresh');
}
}
function set_active($id)
{
$this->db->where('id', $id);
$this->db->set('display_flg', 'NOT display_flg', FALSE);
$query = $this->db->update($this->tbl_news);
return $query;
}