2017-10-11 19 views
0

私はcodeigniterで新しいです。私はこのフォームを持っており、フォームの最後に確認のためにパスワードを再入力する必要がありますが、パスワードが間違っていて入力フィールドに入力したすべてのデータが消えた場合、ページがリロードされます。ページの再読み込みを行わずにvalidation_errorを出力する方法はありますか?Codeigniter 3:フォームの検証エラーでフォームをリロードしない

ここに私のビューのフォームは

<?php echo form_open('forms/submit_form');?>    
<div id="form-interview-fill-mainform"> 
    <div class="container"> 
      <div class="col-sm-6"> 
       <div class="form-group"> 
        <label>Strengths:</label> 
        <textarea class="form-control form-input" onkeyup="textAreaAdjust(this)" rows="1" name="shifter_answer[]"></textarea> 
       </div> 
      </div> 
      <div class="col-sm-6"> 
       <div class="form-group"> 
        <label>Weaknesses:</label> 
        <textarea class="form-control form-input" onkeyup="textAreaAdjust(this)" rows="1" name="shifter_answer[]"></textarea> 
       </div> 
      </div> 
    <div class="custom-form"> 
     <?php 
     if(validation_errors()){ 
     ?> 
     <div class="alert alert-danger alert-dismissible" role="alert"> 
      <button type="button" class="close" data-dismiss="alert" aria-lable="Close"><span aria-hidden="true">&times;</span></button> 
      <strong><?php echo validation_errors()?></strong> 
     </div> 
     <?php 
     }?> 
     <label>Password</label> 
     <center> 
     <?= form_password('password','','class="form-control" id="password" style="width:80%;font-size:20px;" required');?> 
     </center> 
    </div> 
    <center><?php echo form_submit('submit','Submit Form', 'class="btn btn-success btn-lg"');?></center> 
    </div> 
</div> 
<?php echo form_close();?> 

SHIFTER.HTMLはここでコントローラ

public function submit_form(){ 
    $this->form_validation->set_rules('password','Password','trim|required|callback_check_pass'); 
    if ($this->form_validation->run()==false){ 
     $this->load->view('shifter.html'); 
    }else { 
     $session_data = $this->session->userdata('logged_in'); 

    $data['id'] = $session_data['id']; 
    $givenAns= $this->input->post('shifter_answer'); 

    foreach($givenAns as $ansKey => $ansVal){ 
     $ansKey+=16; 
     $ids []= $this->forms_model->shifter_form_submit($data['id'],$ansVal,$ansKey); 
    } 
    redirect('profile/forms','refresh'); 
    } 


} 

function check_pass($password){ 
    $session_data = $this->session->userdata('logged_in'); 
    $data['id'] = $session_data['id']; 
    $password = $this->input->post('password'); 
    $this->load->model('forms_model'); 
    $result = $this->forms_model->val_password($data['id'],$password); 
     if($result){ 
      return true; 
     }else{ 
      $this->form_validation->set_message('check_pass', "Invalid Password"); 

      return false; 
     } 
}  

だとこちらのモデルは

function val_password($id,$password){ 
     $this->db->select('id,password'); 
     $this->db->from('tbl_st_account'); 
     $this->db->where('id', $id); 
     $this->db->where('password', $password); 
     $this->db->limit(1); 

     $query = $this->db->get(); 

      if($query->num_rows()==1){ 
       return $query->result(); 
      }else{ 
       return false; 
      }  
     } 
だのです
+0

こんにちは、フォームを再投入するには、このフォーム[doc](https://www.codeigniter.com/userguide3/libraries/form_validation.html#re-populating-the-form)をフォーム持っているが、あなたがロードページなしでフォームを送信する場合は、ああ、AJAXを使用する必要があり、それとフォームの値を再投入 – elddenmedio

答えて

1

サーバーが検証を実行する前にページがリロードされています。 AJAXを使用する必要があります。リクエストAJAX。検証に失敗した場合、AJAXコールバックにユーザーにメッセージをポップさせます。検証が成功したら、AJAXコールバックでユーザーを目的のページに誘導させます。

0

値を保持する場合は、set_value()関数を使用して値を再設定できます。次のコードを試してください:

<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /> 

ここでset_value()パラメータとテキストボックス名は同じである必要があります。

関連する問題