2015-07-10 84 views
4

我使用$this->db->insert()将数据插入到表中。当数据插入成功时,消息必须显示,数据也不应再次插入。刷新时,重复的数据插入到codeigniter中的数据库中

控制器:

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作为视图文件。不在任何其他文件中。

我的逻辑是:

例如:我有一个学生的表中我将要以学生的名称和标记存储像name, m1, m2, m3。现在我想添加标记,如果它添加我想显示状态。刷新页面时不应该发生重复插入。学生的名字和标记是相似的。我想单独使用php。

+0

我不能明白你的问题,是否当你重定向实际发生的事情时,表单会再次提交并插入? – Neal

+0

对于我来说,数据必须插入一次,状态必须在插入后显示。 – Jagadeesh

+0

好的,为什么不尝试通过Ajax提交表单,这是我通常在表单中执行的操作,这样您就可以轻松地验证它们,然后基于你的函数在控制器的响应,你会决定是否显示一个成功的消息或不使用jQuery和JavaScript – Neal

回答

1

目前,没有选项可将状态(成功,错误)消息传递到概览页面(或期望的页面)。

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

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

CONTROLLER:

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

VIEW:

<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> 
+0

请详细解释你的建议。 –

+0

要显示状态消息,如下所示: – vinoth

+0

我已更新我的回答 – vinoth

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

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

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

我试过这个,这种情况下入口会反复保存 – Jagadeesh

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,这意味着它不会执行插入操作两次。 最好的建议:做一个检查,看看用户是否先存在,如果不这样插入!

在您的代码中完成插入或更新后,您总是需要重定向到其他页面。

+0

请理解我的问题。刷新时条目正在重复。不要求验证 – Jagadeesh

+0

请检查我编辑的答案。 –

+0

或取消注释重定向代码,并在会话中设置成功或错误消息。 $ result = $ this-> home-> insertEntry(); $ data ['message'] = $ result? '保存':'不'; 重定向('HomeController'); –

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

} 
+0

如果我删除动作表单不提交确切的功能。如果插入值,则重定向意味着无法显示状态消息。 – Jagadeesh

+0

使用相同的控制器来打开视图,当您提交表单(leave action =“”)时,它会自动将您重定向到相同的函数,并检查它是否用于提交表单或加载视图。 –

+0

我已经添加了更多的代码,以便更好的理解也添加了我的逻辑。请看看这个。 – Jagadeesh

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

+0

通过此消息我们可以显示吗? – Jagadeesh

+0

通过使用set_flashdata你可以鞋msg –

+0

你能解释一下吗? – Jagadeesh

相关问题