【问题标题】:Redirect page on particular error when validation failed in CodeIgniter在 CodeIgniter 中验证失败时重定向特定错误的页面
【发布时间】:2018-07-31 10:17:42
【问题描述】:

我正在创建具有不同部分的单页网站,其中一个是注册页面,当我在未输入值的情况下提交表单时,它会显示错误但页面未加载到该部分,页面卡在上面。我想当验证失败时页面需要重定向那个特定的错误。

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

 // 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>

当遇到失败情况时,然后重定向到同一页面,但出现特定错误。

【问题讨论】:

  • 请添加示例代码:视图和控制器
  • 不,我已经阅读了那篇文章。谢谢@vasilenicusor
  • 使用 if($this->form_validation->run() == false) { redirect('same_page#anchor'); } 并且在你看来
  • 我也试过这个,但重定向卡在循环 ERR_TOO_MANY_REDIRECTS

标签: php codeigniter validation


【解决方案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 要求表单验证在相同的上下文中运行...当您重定向时会丢失此上下文。

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

【讨论】:

  • 我的方法完全一样,但是当表单获得多个空白值时,如何在重定向中一一传递该 id,以便表单加载特定部分和输入。
  • 请添加页面逻辑、表单内容、部分查看逻辑
  • 请查看描述
  • 是的..非常感谢您的回答。它起作用了:) 真的很适合你的努力@vasilenicusor
猜你喜欢
  • 1970-01-01
  • 2011-02-24
  • 2020-03-23
  • 2013-03-24
  • 2012-11-10
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多