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フォーラムで同様の問題を抱えている人を見つけました。