如何使用codeigniter在刷新页面时停止将数据插入数据库

时间:2017-10-16 11:24:04

标签: html codeigniter

这是我的插入功能。它可以很好地插入数据并在另一个视图中显示数据。但它有一个问题。如果我刷新它再次插入的视图页面。我想防止再次插入刷新页面。 plzzzzzzzzzzzzz

视图

<html>
<head></head>
<body>
<form method="post" action="insert_controller">
<input type="text" placeholder="plate number" name="plate">
<input type="text" placeholder="maker" name="maker">
<input type="text" placeholder="model" name="model">
<input type="text" placeholder="year" name="year">
<input type="text" placeholder="color" name="color">
<input type="text" placeholder="drive" name="drive">
<input type="text" placeholder="phone" name="phone">
<input type="text" placeholder="name" name="name">
<input type="text" placeholder="city" name="city">
<input type="text" placeholder="country" name="country">
<input type="submit" name="submit">
<a >cancel</a>
</form>
</body>
</html>

这是我的控制器。插入数据后,结果很好,进入了search_view页面。但是当我刷新search_view页面时,它再次插入数据。我想在刷新search_view页面时再次避免插入数据。

控制器

class car extends CI_Controller {
  public function insert_controller() {
      $data['search']=$this->m->insert_model();
      $this->load->view('searching_view',$data);
  }
}

它是model .it插入数据并从数据库中获取数据并发送结果。

模型

class add_model extends CI_Model {
  public function insert_model()
   {
    if ($this->input->post('submit')) 
    {

    date_default_timezone_set('Asia/Karachi');
    $date=date('g:i A').' on '.date('F d,Y');
    // echo "<pre>";
    // die(print_r($date, TRUE));
    $plate = $this->input->post('plate');
    $phone = $this->input->post('phone');
    $this->db->select('*');
    $this->db->from('car');
    $this->db->where('plate', $plate);
    $this->db->or_where('phone', $phone);
    $d = $this->db->get();
    if ($this->db->affected_rows()>0)
     {
         redirect('http://localhost/Ci/index.php/Car/error_message2');
      }
      else
     {
      $arr= array(
                 'plate'  =>   $this->input->post('plate'),
                 'maker'  =>   $this->input->post('maker'),
                 'model'  =>   $this->input->post('model'),
                 'year'   =>   $this->input->post('year'),
                 'color'  =>   $this->input->post('color'),
                 'drive'  =>   $this->input->post('drive'),
                 'phone'  =>   $this->input->post('phone'),
                 'name'   =>   $this->input->post('name'),
                 'city'   =>   $this->input->post('city'),
                 'country'=>   $this->input->post('country'),
                 'date'  =>   $date
                  );
                  $this->db->insert('car', $arr);

                  $id= $this->db->insert_id();

                  // fetching

                  $this->db->select('id,plate,maker,model,year,color,drive,phone,name,city,country');
                  $this->db->from('car');
                  $this->db->where('id', $id);
                  $d = $this->db->get();
                  return $d->result();
       }
     }


  }
}

1 个答案:

答案 0 :(得分:2)

通常,您的浏览器应该在发送另一个POST请求之前发出警告。但如果你想完全避免这种可能性,你可以做以下事情:

  1. 进行重定向
  2. (使用CSRF-tokens
  3. 第二个解决方案在尝试重新发送数据时会返回错误,因此不应该在没有重定向的情况下使用它,因为用户只会在重新加载时出错。