1

POST を使用してあるページから次のページに移動する codeigniter フォームがあります。各ステージでは、ユーザー送信データが使用されます。私は読みました:

https://stackoverflow.com/a/13559805/1021360

戻るボタンを機能させるには、get-post-get メソッド (GPG) を使用する必要があります。

追跡されているセッション変数に多くのデータがあります。セッションは、ホームページに戻ったとき、または 1 時間後にのみ期限切れになるように設定されているため、戻るボタンは機能するはずです。これは、すべてのコア データが保存される場所でもあります。(戻るボタンのキャッシュを作成する方法を知っていると仮定すると、戻るページはセッションからすべてを読み戻すことができるため、POSTはそれほど重要ではありません)。

現在、戻るボタンを押すと、「このドキュメントは利用できなくなりました」というメッセージが表示されます。エラーページ。

私のビューには、「/nextquestion」という関数への呼び出しを含むフォームがあります。

この関数は、フォームの検証を行い、フォームの値を CI_session に保存し、フォームが検証チェックに合格すると次のページをレンダリングします。

これを3番目の「ファイル」に渡し(codeigniterはphpファイルではなく関数呼び出しを使用するため)、そこから読み取る方法がわかりません...?

私が達成したいのは、戻るボタンが意図したとおりに機能することだけです。つまり、レンダリングされた方法で前のページが表示されるはずです。

ブラウザーのキャッシュを codeigniter のフォーム送信でうまく機能させる方法についてのヒントやヘルプは大歓迎です!

ありがとう。

4

1 に答える 1

1

私が一般的に行う方法は、フォームを同じページに送信することです。そのページで、$_POST 配列が存在するかどうかを確認します。存在しない場合は、ページが送信されていないと想定し、セッションに存在する可能性のあるデータを確認します。

このコードは次のようになります。

// Check if we have any post data (form was submitted or not)
if(count($_POST) > 0) {

    // Save post array to the session
    $this->session->set_userdata('post_data', $_POST );

    // Redirect to the same page (REMOVES POST FROM HTTP HEADERS)
    redirect('/form/page1','location');

} else {

    // There is no $_POST array, but we have the POST data in session 
    // I.E. RETURNING TO FORM VIA BACK BUTTON
    if($this->session->userdata('post_data')) {

        // Set POST array from session data
        $_POST = $this->session->userdata('post_data');

        // Clear the session
        $this->session->unset_userdata('post_data');
    }
}


// Your other code, validation rules, etc, etc

// VALIDATION FAILS - Validation fails
if ($this->form_validation->run() == FALSE) {

    // Load view
}

// VALIDATION SUCCEEDS - Proceed to confirmation  
else {
    redirect('/form/page2', 'location', 303);
}

送信されたデータが検証ルールに合格すると仮定すると、上記の一般的なフローは次のようになります。

  • ユーザーが を参照し/form/page1、フォームに入力して送信します。
  • フォームはそれ自体に POSTED され、$_POST 配列はセッションに保存されます
  • 次に、ユーザーは同じページにリダイレクトされます。このページでは/form/page1、$_POST 配列は空であり、POST ヘッダーは HTTP 要求から削除されています。
  • 次に、$_POST 配列がセッション データから復元され、フォームが にリダイレクトされ/form/page2ます。ユーザーはこのステップに気付かないでしょう。
  • ここで、ユーザーが戻るボタンを押した場合。前のページには技術的にデータが投稿されていないため、エラーは発生しません。
于 2013-03-25T04:44:24.130 に答える