我正在创建具有不同部分的单页网站,然后其中之一是注册页面。当我提交表单而不输入值时,它显示错误,但该页面未加载该页面,页面卡在上面。我想当验证失败时,页面需要针对该特定错误进行重定向。
示例:如果我没有填写名字而是填写姓氏,则页面需要直接重定向到名字。
// 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>
答案 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可以帮助您在提交页面之前进行验证。