3

$_SESSION渡されたフォームデータがない場合にCodeIgniter フォーム検証を取得するにはどうすればよいですか? 変数を手動で設定しようと$_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

あなたがしようとしているのは、CodeIgniter でネイティブにサポートされていない Post 値を手動で設定することです。そのため、最初に行っているのはコアの拡張です。新しいファイル (MY_Input.php) を作成し、次の内容を貼り付けます。

class MY_Input extends CI_Input{

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

}

これは目的の非常に基本的な実装ですが、テストするには十分です。必要に応じて拡張することもできます (配列の入力を許可する場合)。

だから今。コントローラーで、何かがユーザーによって投稿されたかどうかを確認できます。そうでない場合は、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 に答える