2015-07-10 82 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

相關問題