0

ボタンを押したとき:

<form action="index.php" method="get">
  <input type="hidden" name="act" value="run">
  <input type="submit" value="Truncate map">
</form>

if (!empty($_GET['act'])) {
  mysql_query("TRUNCATE TABLE mapinfo");
} 

それは私をにリダイレクトしますindex.php?act=run

私はそれを取り除きたいので追加しましたheader("Refresh: 0; url=$page");::

if (!empty($_GET['act'])) {
  mysql_query("TRUNCATE TABLE mapinfo");
  $page = $_SERVER['PHP_SELF'];
  header("Refresh: 0; url=$page");
} 

ただし、2ページの更新を行うindex.php?act=runブラウザをリダイレクトするよりも最初にロードされます。index.php

それをうまくやる方法は?

4

3 に答える 3

1

更新ヘッダーを使用する代わりに、

header("Location: $page");

于 2012-09-11T12:52:59.047 に答える
1

このスクリプトを使用すると、いくつかの主要なセキュリティ問題が発生します。以下を使用してみませんか。

<form action="index.php" method="post">
  <input type="hidden" name="act" value="run">
  <input type="submit" value="Truncate map">
</form>

if (!empty($_POST['act'])) {
    mysql_query("TRUNCATE TABLE mapinfo");
}

これにより、 GETリクエストの代わりにPOSTリクエストが実行されます。ただし、POSTリクエスト( Post / Redirect / Get )の後にユーザーをリダイレクトする必要があることに注意してください。それでも、リクエストパラメータは非表示になっています。

これらの種類のスクリプトは、実稼働環境では使用しないでください。安全とは言えません。

于 2012-09-11T12:57:16.713 に答える
-1

これは本当にそれを行うための最も良い方法です。変数の設定を解除して$_GET['act']、制御フローの残りの部分に影響を与えないようにするか、ページの残りの部分を通常のようにレンダリングすることができます(つまり、リダイレクトは必要ありません。$_GET['act']変数がそうであるかのようにページの残りの部分をレンダリングするだけです。設定しない)。

于 2012-09-11T12:51:44.820 に答える