0

我的 CMS 中有一个激活按钮,允许用户快速切换新闻文章的活动/非活动标志。单击切换时,会向 url 发出 POST 请求/news/toggle_active/$id,之后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论坛上发现了一些人似乎有类似的问题。

4

1 回答 1

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;
}
于 2012-06-15T03:35:12.890 回答