7

これは非常に一般的な質問であることは知っていますが、答えが見つかりませんでした

私は投稿フォームをcontroller.phpに送信するpost.phpです。うまくいくと、コントローラーで次のようになります。

header("Location: ./post?ok=1");

投稿は実際に挿入され、上記の行を通過しますが、ブラウザの URL は変更されていないようで、最後に ok パラメータがありません。

セッション変数を使用してそのような成功/失敗パラメーターを保存できますが、この方法は機能するはずです

post.php:

<form action="controller" method="post">
    <input name="test" value='test' type="text" />
    <input type="submit" value="post"  />
</form>

コントローラー.php:

<?php
    header("Location: ./post?ok=1");
?>

編集1:

header("Refresh:1;url=http://localhost/test/post?ok=1"); //doesn't work better

編集2:

私が入れたpost.phpのトップに

debug("post l ".count($_POST));
debug("get l ".count($_GET));

送信前に 0 を表示し、送信後にも 0 を表示します

edit3: 動作します

によってブロックされました:

if ($success){
    header("Location: ./post?ok=1");
}
header("Location: ./post"); 

それは次のとおりです。

if ($success){
    header("Location: ./post?ok=1");
} else {
    header("Location: ./post");
} 

thxすべて

4

5 に答える 5

3

まず第一に、$_SERVER['HTTP_REFERER']これは安全ではないので使用しないでください。また、クライアントがこのヘッダーを送信しない可能性もあります。今のところ方法はわかりませんが、これがあなたのサイトをハイジャックして何か悪いことをするのに使われる可能性があると確信しています.

フォーム データがどこから来たのかを知り、ユーザーをそこにリダイレクトする必要があります。

ちなみに、URL に既に疑問符が含まれているため、リダイレクトが期待どおりに機能しない可能性があります。&そのため、記号を使用してさらにパラメーターを追加する必要があります。

リダイレクトについては、HTTP302 Found応答ステータスをお勧めします。ただし、前に他のものが送信されていないことを確認する必要があります。この次のheader行の前に、HTML 出力または空の行があってはなりません。

header("Location: http://".$_SERVER['HTTP_HOST']."/your/source.form", true, 302);
于 2012-06-05T06:15:02.607 に答える
3

HTTP ステータス コード 303 を使用してみてください。

header("Location: your/location", true, 303);
于 2012-06-05T05:56:44.913 に答える
1

サーバー側でいくつかの問題がある可能性があります(たとえば、ヘッダーを設定する前にコードが何かを出力します)。これをデバッグするにdisplay_errors = Onは、php.iniで設定するか、コードで。を使用して一時的に有効にする必要がありますini_set('display_errors', 1)

ほとんどの場合、エラーは"Cannot modify header information - headers already sent."です。printPHPの終了タグの後にecho空白や余分な行がないことを確認してください( ?>

于 2012-06-05T06:08:04.927 に答える
1

これは、サーバーによる 2 回目のリダイレクトの問題である可能性があります。

header('Location: post.php?ok=1', true, 303);
exit;

post?ok=1がサーバー (例: htaccess) によってpost.phpにリダイレクトされないように、URL に拡張子.phpを追加してみてください。追加のリダイレクトでは、get パラメータが失われる可能性があります。次に、ヘッダー リダイレクトの後に exit を追加することを忘れないでください。

于 2012-06-05T06:29:02.460 に答える
0

実際には...「exit」で header() 呼び出しに従っていないようです。例:

header( 'location: ' . $location ); exit;

header( 'location: ' . $location, true, 301 ); exit;

呼び出し後に「終了」すると、コードが実行を継続できないため、ブラウザーのアドレス バーで URL が変更されます。それ以外の場合、コードは引き続き実行されるため、URL は変更されません。

于 2014-07-02T21:10:17.643 に答える