1

在庫リストへのフィルターとして機能するフォームがあります。フォームはうまく機能しますが、ユーザーがページをめくるために get を使用しています。次に例を示します。

<a href="http://website.com/index.php?page_id=6&pos=<?php echo $i;?>&q=<?php echo $q;?>&srt=<?php echo $sort;?>">Next page</a>
 <?php } ?>

私は XML からデータを取得していますが、これが最も効果的であることがわかった方法です。ただし、フィルタリングするフォームは POST であり、ユーザーが次のページをクリックして後でフィルターを使用しようとすると (ドロップ ボックスの束)、リンクから URL に渡された get-parameters も使用されます。

フォームが送信されず、すべてのパラメーターがリセットされる方法はありますか?

http://www.website.com/used-cars/?pos=10&q=Model-Corolla%2C&srt=KMDfr

これはプリフォームの送信であり、フォームが送信されると、次のようになります。

http://www.website.com/used-cars/

また、ページが取得する GET 変数はなくなります。

4

2 に答える 2

2

はい、処理が完了したら、電話してください

header("Location: /used-cars/");
die();

そして、ユーザーを目的のページにリダイレクトします。

于 2012-07-03T19:11:40.097 に答える
0

まず第一に、デフォルトだけを使用しないでください。これは、 (以前は : と呼ばれていた) 応答header("Location...")を送信するためです。これは、実際の動作について「嘘をつく」ようなものです ( 「要求されたリソースが別の URI の下に一時的に存在する」ことを意味するため)。 )。さらに悪いことに、フォームが使用している場合(ほとんどの場合)、 HTTP 1.1 に従って、準拠しているブラウザーはリダイレクトする前に許可を求める必要さえあります。302 FoundMoved TemporarilyPOST

その ため、この目的のために特別に追加された を代わりに使用して、フォーム URI を適切にリセットします。GET303 See Other

(フォームの送信が成功し201 Createdたことを確認するための応答と組み合わせるのも良いので、結果ページにa を追加するの も良い方法です。)header("HTTP/2.0 201 Created")

しかし、あなたの古いコメントに対処するために、「このphpコードをどこに追加しますか?どこに配置すればよいかわかりません。フォーム送信は現在のページをリロードします。」(おそらくそれ以来、あなたはそれを理解しました;)):

2 つだけでなく、少なくとも 3 つ、さらには 4 つのケース (条件分岐) を処理する必要があります。

  1. 表示+送信用のフォームを送信します。
  2. フォーム データを受け取り、それをどこかに保存し (つまり、「新しいリソースを作成する」、背後にある考え方201 Created)、クリーンな URI にリダイレクトします。
  3. 何も起こらなかったかのようにフォームを再表示する (または同じページに永久にリダイレクトする) ことを避けるために、自分自身にリダイレクトしたかどうかを検出する必要があります... しかし、URI からすべての入力を削除したので、状態を追跡するには、他の手段を使用する必要があります。そのためのいくつかの簡単な方法:

a) 別の URI にリダイレクトします。

b) PHP セッションを使用します。

  1. 最後に、必要に応じて、新しい入力のためにフォームをリセットして再度表示します。

以下に例を示します (簡単にするために、3/b と一種の「偽の」4 を使用)。

session_start();

if (isset($_GET['some_input'])) // Case 2: We got data!
{
    file_put_contents("result", $_GET['some_input']);

    $_SESSION['redir'] = true;
    header("Location: /used-cars/", true, 303);
    exit;
}
else if (isset($_SESSION['redir'])) // Case 3: We have redirected!
{
    unset($_SESSION['redir']);

    http_response_code(201); // Acknowledge receiving the form data.

    echo "OK, we have happily processed the last submitted data: ",
        file_get_contents("result"), "<br>";
    echo "Reload the page to fill the form again!"; // Case 4: Reset...
}
else // Case 1: Send the form...
{
    echo <<<_
    <form>
    <input type="text" name="some_input">
    <input type="submit">
    </form>
_;
}
于 2018-10-10T23:23:51.663 に答える