控制器:
public function new_question($question_title)
{
if($this->db->insert('question',$data))
{
$data['asked_title'] = $decoded_question_title;
$data['max_id'] = $this->db->insert_id();
$this->load->vars($this->data);
$this->load->view('new_question',$data);
}
}
以上代码中的朋友我正在尝试将值插入数据库。如果插入成功,则控制器应加载new_question(View),$ data将传递到下一页。每件事都很好,即(插入值和传递数据到视图)。我的问题是,如果我尝试刷新我的new_question页面(查看页面)。已再次调用控制器($ this-> db-> insert('question',$ data)))并再次插入相同的值。所以我不知道为什么会发生这种情况也会引导我如何在刷新视图时防止刷新控制器。
答案 0 :(得分:0)
正如Vaira建议的那样,您应该重定向到另一个页面(一个用于新页面,另一个用于保存目的)。好像你留在同一页面一样,发布数据就可以了,刷新页面会再次发布并完成所有列出的操作。
使用变量放置某些条件并检查该特定变量是否具有忽略相同数据插入的值的另一种方法。或者可能是db中的重复检查也会有所帮助。
答案 1 :(得分:0)
嗯....
public function new_question($question_title)
{
if($this->db->insert('question', $data))
{
$question_id = $this->db->insert_id();
// reset post data with redirect
redirect(site_url('your_controller/view_question/' . $question_id));
}
}
public function view_question($question_id = 0)
{
$query = $this->db->get_where('your_questions_table', array('id' => $question_id), 1);
if($query->num_rows() == 1)
{
$this->load->view('your_question_view', array('question' => $query->row()));
}
else
{
// question not fount
}
}
答案 2 :(得分:0)
您的业务逻辑似乎存在问题。您不检查是否已插入该值。您要么必须进行检查,要么重定向到另一个页面。
public function new_question($question_title)
{
if(!isset($this->sessions->inserted) || !$this->sessions->inserted)
{
$inserted = $this->db->insert('question',$data)
if (înserted)
{
$data['asked_title'] = $decoded_question_title;
$data['max_id'] = $this->db->insert_id();
$this->load->vars($this->data);
$this->load->view('new_question',$data);
}
// don't forget to deleted this session data when the program ends
$this->sessions->set_userdata('inserted', $inserted);
}
}