3

如何获取 CodeIgniter 表单验证以验证$_SESSION是否没有传递表单数据?我尝试手动设置$_REQUEST变量,但它似乎不起作用。

即,我在控制器中有一个函数search,它验证传递的表单输入,或者将您返回到有错误的上一页,或者将您移到下一页。但是,如果您之前填写了此页面,并且信息存储在$_SESSION变量中,我希望此功能也可以工作。

function search () {
    $this->load->library("form_validation");
    $this->form_validation->set_rules("flightID", "Flight Time", "required|callback_validFlightID");
    $this->form_validation->set_rules("time", "Flight Time", "required|callback_validFlightTime");

    $this->setRequest(array("flightID", "time"));

    // adding session check allows for inter-view navigation
    if ($this->form_validation->run()) {

        // some application logic here

        $this->load->view("seats", $data);
    } else {
        $this->logger->log($_REQUEST, "request");
        // redirect back to index
        $this->index();
    }   
}
function setRequest () {
    // make sure none of the parameters are set in the request
    foreach ($vars as $k) {
        if (isset($_REQUEST[$k])) {
            return;
        }   
    }   

    foreach ($vars as $k) {
        if (isset($_SESSION[$k])) {
            $_REQUEST[$k] = $_SESSION[$k];
        }   
    }   

}
4

3 回答 3

1

您可以使用以下 codeigniter 函数将表单发布信息存储在会话中

$formdata = array(
                    'flightID' => $this->input->post('flightID'),
                    'time' => $this->input->post('time')
                );
                $this->session->set_userdata($formdata);

并且可以通过以下方式检索信息

$this->session->userdata('flightID')
$this->session->userdata('time')
于 2013-08-01T12:47:57.573 回答
0

您要做的是手动设置 Post 值,CodeIgniter 本身不支持。所以我们首先要做的是扩展核心。创建一个新文件(MY_Input.php)并将以下内容粘贴到其中:

class MY_Input extends CI_Input{

    function set_post($key, $value)
    {
        $_POST[$key] = $value;
    }

}

这是您的目的的一个非常基本的实现,但足以进行测试。您可能想要扩展它以使其适合您的需求(fe 允许输入数组)。

所以现在。在您的控制器中,您可以检查用户是否发布了某些内容。如果不是,您只需使用 Input 类的新方法手动设置 post 变量。

class Some_Controller extends CI_Controller{

    public function index()
    {
        // The user hasn't filled out a field?
        if(!$this->input->post('a_key'))
        {
            // Let's set the postfield to the value of a session key
            $this->input->set_post('a_key', $this->session->userdata('mystoredkey'));
        }
    }

}

在手动设置您的 postfield 之后,它可以由表单验证库按原样处理。

这应该是你要走的路:) 如果你不害怕破解核心,你真的可以做一些漂亮的事情。很多人,不要成为他们中的一员!

快乐编码

于 2013-08-01T14:52:11.747 回答
0

form_validation直接与 一起使用$_POST,因此请使用它而不是$_REQUEST.

于 2013-07-23T17:38:07.767 回答