在CodeIgniter中验证失败时,针对特定错误重定向页面

时间:2018-07-31 10:17:42

标签: php codeigniter validation

我正在创建具有不同部分的单页网站,然后其中之一是注册页面。当我提交表单而不输入值时,它显示错误,但该页面未加载该页面,页面卡在上面。我想当验证失败时,页面需要针对该特定错误进行重定向。

示例:如果我没有填写名字而是填写姓氏,则页面需要直接重定向到名字。

 // Controller
 if($this->form_validation->run() == false) 
    {
            $data=array();
            $base = array();
            $data['whatsinside']=$this->load->view(codeg_front_version('whatsinside'), '', true);
            $data['signup']= $this->load->view(codeg_front_version('signup'), '', true);
            $base['custom'] = 'home';
            codeg_base($data,$base,true,true,true); 
}
else
{
   Redirect to thank you page
}

查看

<div class="form-group col-md-6">
<label class="form-control-placeholder" for="fname">First Name</label>
<input type="text" id="fname" name="fname" class="form-control form-text" value="<?=set_value('fname')?>" required />
<div class="error-msg"><?php echo form_error('fname'); ?></div>
</div>
<div class="form-group col-md-6">
<label class="form-control-placeholder" for="lname">Last Name</label>
<input type="text" id="lname" name="lname" class="form-control form-text" value="<?=set_value('lname')?>" required />
<div class="error-msg"><?php echo form_error('lname'); ?></div>                                                         
</div>
<div class="form-group col-md-6 clear">
<label class="form-control-placeholder" for="pnric">NRIC</label>
<input type="text" id="pnric" name="pnric" class="input-nric form-control form-text" value="<?=set_value('pnric')?>" maxlength="9" required />
<div class="error-msg"><?php echo form_error('pnric'); ?></div>
</div>                                              
<div class="form-group col-md-6 gender">
<label class="col-md-2 gsb-label-light" for="pnric">Gender</label>
<div class="col-md-10">
    <div class="row">
        <label class="gsb-radios">Male
          <input class="form-check-input gsb-radio" type="radio" name="gender" id="male" value="Male" <?php echo set_radio('gender', 'Male'); ?> />
          <span class="checkmark"></span>
        </label>
        <label class="gsb-radios">Female
          <input class="form-check-input gsb-radio" type="radio" name="gender" id="female" value="Female" <?php echo set_radio('gender', 'Female'); ?> />
          <span class="checkmark"></span>
        </label>                                                                
    </div>
</div>
<div class="error-msg clear"><?php echo form_error('gender'); ?></div>

enter image description here 当遇到失败情况时,然后重定向到同一页面,但遇到特定错误。

1 个答案:

答案 0 :(得分:1)

您需要这样的东西:

// check form validation only on POST action
if ($this->input->post('submit') == 'save') {
    if ($this -> form_validation -> run() == TRUE) {
        // form is valid
        // save data and redirect to thank you page
        redirect('thank_you_page');
    } else {
        // we have errors
        // redirect to specific page section
        redirect('same_page#error_section');
    }

}

您需要具有以下操作按钮:

<button type="submit" name="submit" value="save">
    Save
</button>

编辑2

在验证错误时,您需要获取第一个无效输入并重定向此特定输入ID

// check form validation only on POST action
if ($this->input->post('submit') == 'save') {
    if ($this -> form_validation -> run() == TRUE) {
        // form is valid
        // save data and redirect to thank you page
        redirect('thank_you_page');
    } else {
        // we have errors
        // redirect to specific error section
        // get first error element
        $ordered_required_inputs = array(
            'fname', 'lname', 'pnric'
        );
        $section_err = '';
        foreach ($ordered_required_inputs as $key => $input_name) {
            if (form_error($input_name) != ''){
                $section_err = '#'.$input_name;
                break;
            }
        }
        redirect('same_page'.$section_err);
    }

}

编辑3

请注意,重定向后set_value将不起作用,因为 set_value 要求表单验证在相同的上下文中运行...在重定向时会丢失此上下文。 / p>

要转到特定的输入部分而不丢失先前输入的数据,您需要使用客户端验证而不是服务器端验证。 jQuery Validation Plugin可以帮助您在提交页面之前进行验证。