2017-10-11 21 views
0

我是codeigniter的新手。我有这种形式,在表格末尾,用户必须重新输入密码才能确认,但是,如果密码不正确,用户输入的所有数据消失,页面将重新加载。有没有一种方法可以在没有页面重新加载的情况下输出validation_error?Codeigniter 3:不要在窗体验证错误上重新载入表单

这是我的看法形式SHIFTER.HTML

<?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();?> 

这里的控制器

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()参数和textbox的名字应该是一样的。