Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 刷新视图页面也会刷新控制器codeigniter_Php_Codeigniter - Fatal编程技术网

Php 刷新视图页面也会刷新控制器codeigniter

Php 刷新视图页面也会刷新控制器codeigniter,php,codeigniter,Php,Codeigniter,控制器: 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-&

控制器:

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

在上面的代码中,我试图将这些值插入数据库。如果插入成功,那么控制器应该加载新的_问题(视图),并且$data将被传递到下一页。每件事都很好,即(插入值并将数据传递给视图)。我的问题是,如果我尝试刷新我的新问题页面(查看页面)。再次调用控制器($this->db->insert('question',$data)),并再次插入相同的值。因此,我不知道为什么会发生这种情况,同时也指导我如何在刷新视图时防止刷新控制器。

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

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

Hmmm

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

一旦完成插入过程,然后重定向到controllerbefore中的另一个函数以插入值检查值是否已插入,如果未插入,则插入它,否则获取值