刷新视图页面会刷新控制器,也会刷新代码点火器


Refreshing a view page refreshes controller also codeigniter

Controller :

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(视图),$data将传递到下一页。每件事都工作正常,即(插入值和传递数据以查看)。我的问题是如果我尝试刷新我的new_question页面(查看页面)。控制器($this->db->insert('question',$data)) 再次被调用,并且再次插入相同的值。所以我不知道为什么会发生这种情况,也指导我如何在刷新视图时防止控制器刷新。

正如 Vaira 建议的那样,您应该重定向到另一个页面(一个用于新页面,另一个用于保存目的)。就像您停留在同一页面中一样,发布数据将在其中可用,刷新页面将再次发布它并执行所有列出的操作。

另一种使用变量放置某些条件并检查该特定变量是否具有忽略相同数据插入的值的方法。或者可能在数据库中重复检查也会有所帮助。

嗯....

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
    }
}

您的业务逻辑似乎存在问题。您不检查值是否已插入。您必须进行检查或重定向到另一个页面。

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);   
  } 
}