刷新时,重复数据插入到codeigniter

时间:2015-07-10 06:33:44

标签: php mysql codeigniter

我已使用$this->db->insert()将数据插入到我的表格中。成功插入数据后,必须显示消息,也不应再次插入数据。

控制器:

public function index($message = '') {
    $this->load->template('homePage');
}

/**
 * Insert functionlaity
 */
public function insert() {
    if ($_POST['save']) {
        $result = $this->home->insertEntry();
        $data['message'] = ($result > 0) ? 'saved' : 'Not';
        redirect('HomeController',$data);
    }
    $this->load->view('homePage');
}

型号:

public function insertEntry()
{
    $this->name    = $_POST['name'];
    $this->email   = $_POST['email'];
    $this->db->insert('users', $this);
    return $this->db->affected_rows();

}

查看:

    <div class="container sampleForm"><?php
echo isset ($message) ? $message : '';
echo form_open( get_class(get_instance()) . '/insert')
 . form_label('id') . form_input('id', isset($query['id']) ? $query['id'] : '', 'class="form-control"') . br()
 . form_label('name') . form_input('name', isset($query['name']) ? $query['name'] : '', 'class="form-control"') . br()
 . form_label('email') . form_custom_input('email','email', isset($query['email']) ? $query['email'] : '', 'class="form-control"') . br()
 . form_submit('save', 'save', 'class="btn btn-primary"')
 . form_close();
?> </div>

我的问题是,如果我可以显示状态,则不会显示每次刷新其他状态的数据插入。

这一切应该在我的HomeController.php中作为控制器,Home.php作为模型,homePage.php作为视图文件。不在任何其他文件中。

我的逻辑是:

Ex:我有一张学生表,我将存储学生姓名和标记name, m1, m2, m3。现在我想添加标记,如果添加标记我想显示状态。刷新页面时不应发生重复插入。学生姓名和商标相似。我想单独使用php。

5 个答案:

答案 0 :(得分:1)

目前,没有选项可以将状态(成功,错误)消息传递到概述页面(或所需页面)。

使用$ _SESSION保存值并从会话中检索值。

要显示状态消息并避免重复条目,代码如下:

控制器:

if (isset($_POST['save'])) {
    $result = $this->home->insertEntry();
    $message = ($result > 0) ? 'saved' : 'Not';
    $this->session->set_userdata('message', $message);
    //redirect, avoid duplicate entries
    redirect('HomeController');
}

查看:

<div class="container sampleForm"><?php
    if($this->session->has_userdata('message')){
        echo $this->session->message;
        $this->session->unset_userdata('message');
    }

    echo form_open( get_class(get_instance()) . '/insert')
     . form_label('id') . form_input('id', isset($query['id']) ? $query['id'] : '', 'class="form-control"') . br()
     . form_label('name') . form_input('name', isset($query['name']) ? $query['name'] : '', 'class="form-control"') . br()
     . form_label('email') . form_custom_input('email','email', isset($query['email']) ? $query['email'] : '', 'class="form-control"') . br()
     . form_submit('save', 'save', 'class="btn btn-primary"')
     . form_close();
    ?> </div>

答案 1 :(得分:1)

在控制器中:

public function inserttest() {
   if (isset($_POST['submit'])) {
       $result = $this->admin_model->insertEntry();     
       if($result>0) {
          // values are saved in session to display the message.
          $this->session->set_flashdata('message', 'Save');
       } else {
          $this->session->set_flashdata('message', 'No');
       }
       // To avoid duplicate redirect to another page
       redirect('admin/user/inserttest');
   } else {
       $this->load->view('admin/test');
   }
}

型号:

public function insertEntry()
{
     $data=array(

     'id'=>$_POST['id'],
     'name'=>$_POST['name'],
     'email'=>$_POST['email'],

     );


    $this->db->insert('test_check',$data);
    return $this->db->affected_rows();

}

查看:

<html>
    <body>
       <?php  if(isset($this->session->flashdata('message'))){ 
              echo $this->session->flashdata('message'); 
              }
       ?>
  <form action="" method="post">

    Id:<input type="text" name="id">

    Name:<input type="text" name="name">
    Email<input type="email" name="email">
    <input type="submit"  value="submit"  name="submit">

  </form>
</body>
</html>

阅读本文,了解有关flashdata的更多信息:ellislab.com/codeigniter/user-guide/libraries/sessions.html

答案 2 :(得分:0)

很简单,您可以使用以下代码来解决电子邮件的重复条目

if(!empty($submit))
{
    //echo "<pre>"; print_r($_POST); die;
    $data = $this->get_data_from_post();
    $unique_email = '|is_unique['.TBL_USERS.'.email]';
    $this->form_validation->set_rules('firstname', 'First Name', 'trim|required|min_length[2]|max_length[12]|xss_clean|htmlentities|prep_for_form|alpha');
    $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email|htmlentities|prep_for_form'.$unique_email);
    if($this->form_validation->run($this) == TRUE ){ 
        $data['name']    = $_POST['name'];
        $data['email']   = $_POST['email'];
        $res = $this->mdl_customer->_insert($data);
        redirect('home'); // where you want to redirect.
    }
}

通过执行此操作,刷新的用户将刷新landing_page.php,这意味着它不会执行两次插入操作。 最佳建议:如果不插入,请先检查用户是否存在!

在代码中完成插入或更新后,您始终需要重定向到另一个页面。

答案 3 :(得分:0)

调用此函数打开视图页面以及提交,保留action=""它检查您提交数据或仅访问视图页面,但此数据不会在刷新时插入

function add()
{
   if(isset($_POST{['submit']))
    {
     $result = $this->home->insertEntry();
     $data['message'] = $result ? 'saved' : 'Not';  
     redirect('add',$data);

    }

    $this->load->view('view page');  

}

答案 4 :(得分:-1)

$result = $this->home->insertEntry();
$data['message'] = $result ? 'saved' : 'Not';
$this->load->view('Your View page name ',$data);

并在您的查看页面中使用以下代码来显示消息

if(isset($message))
{
  echo $message;
}