Codeigniter表单验证:如果发现任何验证错误,如何重定向到上一页?

Codeigniter表单验证:如果发现任何验证错误,如何重定向到上一页?,codeigniter,codeigniter-2,Codeigniter,Codeigniter 2,我正在使用Codeigniter的验证类来验证我的表单。如果发现任何验证错误,请告诉我如何从控制器重定向到上一页 在我的控制器中: if ($this->form_validation->run() == FALSE){ //**** Here is where I need to redirect } else { // code to send data to model... }

我正在使用Codeigniter的验证类来验证我的表单。如果发现任何验证错误,请告诉我如何从控制器重定向到上一页

在我的控制器中:

if ($this->form_validation->run() == FALSE){

  //**** Here is where I need to redirect  

} else  {
     // code to send data to model...           

  }                             

通常,您应该这样做(目前为伪代码):

  • 如果表单_validation==false-->表单尚未提交或验证失败-->加载表单视图
  • 如果form_validation==true-->则执行处理
这意味着您必须呆在同一个控制器内。您的代码应该已经在执行此行为,这是预期的行为

如果您仍有重定向的冲动,请调用相应的函数:

redirect('updatebatch/get/40','refresh');
// assuming 'updatebatch' is the name of your controller, and 'sundial' just a folder
$this->load->library('functions'); //you can put it in the autoloader config
$this->functions->generateRedirectURL();

更新

您希望发布表单,对其进行验证,如果验证失败,则再次显示带有验证错误的表单,或者如果验证通过,则显示完全不同的内容

最好的方法是将表单发回自己。因此,表单的操作将是
action=“”
。这样,在您的方法中,您可以检查表单是否已提交,并确定在那里执行的操作:

// in my form method
if ($this->input->post('submit')) // make sure your submit button has a value of submit
{
     // the form was submitted, so validate it
     if ($this->form_validation->run() == FALSE)
     {
         $this->load->view('myform');
 }
 else
 {
         $this->load->view('formsuccess');
 }
}
else
{
    // the form wasn't submitted, so we need to see the form
    $this->load->view('myform');
}
旧答案

您始终可以在以下表单中的隐藏字段中传递当前URI:

<input name="redirect" type="hidden" value="<?= $this->uri->uri_string() ?>" />
也可以在flashdata会话变量中设置重定向url:

// in the method that displays the form
$this->session->set_flashdata('redirect', $this->uri->uri_string());
然后在验证失败时重定向:

redirect($this->input->post('redirect'));
redirect($this->session->flashdata('redirect'));

我在库中创建了一个函数,用于在需要重定向时创建重定向

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

class Functions {

public function generateRedirectURL()
{
$CI =& get_instance();
$preURL = parse_url($_SERVER['REQUEST_URI']);
$redirectUrl = array('redirectUrl' => 'http://' . $_SERVER['SERVER_NAME'] . $preURL['path']);
$CI->session->set_userdata($redirectUrl);
}

}

//End of the file
那么你只需要打电话:

redirect($this->session->userdata['redirectUrl']);

我为此扩展了URL帮助程序

在控制器中:

$this->load->helper('url');
redirect_back();

只要把
MY\u url\u helper.php
放在
application/helpers
中就可以了。

谢谢你的回复。很抱歉,我应该在前面说明-“40”部分是可变的。它可能会不时改变。那样的话,我该怎么办?为了清楚起见,这里的40是表中特定行的id号。我只是使用id来获取数据。非常感谢你的帮助:)谢谢你的回复。您发布的前两个代码完全可以用于显示验证错误。因此,我试图使用您发布的后两个代码,但由于我对PHP/codeigniter知之甚少,我不确定在哪里使用这些代码。我应该将这个“$this->session->set_flashdata('redirect',$this->uri->uri_string());”粘贴到我上面发布的控制器上还是以我提到的形式粘贴?再次感谢:)对不起,我问了个愚蠢的问题(无论如何,除非你也通过了验证错误,否则你不会得到验证错误。我将更新我的答案,以反映你需要显示验证错误。一点反馈:这个URL帮助器对我来说非常适合。非常感谢。在我看来,最好为类似的事情提供帮助。@AlexSpencer谢谢!只想在这里写一条说明http是在第17行硬编码的(这不是一个大问题,但仍然是)。这应该得到修复,它对拉请求是开放的。