Codeigniter 3:不要在表单验证错误时重新加载表单

Posted

技术标签:

【中文标题】Codeigniter 3:不要在表单验证错误时重新加载表单【英文标题】:Codeigniter 3: Don't reload form on form validation error 【发布时间】:2018-03-23 07:01:58 【问题描述】:

我是 codeigniter 的新手。我有这个表格,在表格的最后,用户必须重新输入他的密码以确认,但是,如果密码不正确并且用户在输入字段中键入的所有数据都消失了,页面会重新加载。有没有办法在不重新加载页面的情况下输出validation_error?

这是我的视图表单 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;
                
      

【问题讨论】:

嗨,如果您想重新填充表单,您可以使用您拥有的表单执行此操作doc,但是如果您想在没有加载页面的情况下发送表单,您需要使用 ajax,并使用它重新填充表单值 【参考方案1】:

在服务器执行验证之前页面正在重新加载。您需要使用 AJAX。 AJAX 请求。在验证失败时,让 AJAX 回调向用户弹出一条消息。验证成功后,让 AJAX 回调将用户定向到所需的页面。

【讨论】:

【参考方案2】:

如果您想保留该值,您可以使用 set_value() 函数重新填充它。试试下面的代码:

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

这里的 set_value() 参数和文本框名称应该相同。

【讨论】:

以上是关于Codeigniter 3:不要在表单验证错误时重新加载表单的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 表单验证,无法获取验证错误

翻译 CodeIgniter 的表单验证错误消息

使用表单验证配置文件设置CodeIgniter错误消息

如何使 CodeIgniter 可调用为空的复选框,自定义表单验证错误

是我做错了,还是在使用数组作为字段名时 CodeIgniter 表单验证库中存在错误?

codeigniter 覆盖表单助手中的 set_value 函数,使用 MY_helper 在获取时重新填充字段,同时发布