PHP $ _GET留给我url插件 - 如何摆脱它?

时间:2012-09-11 12:48:32

标签: php redirect get refresh

按下按钮时:

<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");
} 

但首先加载index.php?act=run,而不是将浏览器重定向到index.php,这样可以刷新2页。

如何以漂亮的方式做到这一点?

3 个答案:

答案 0 :(得分:1)

而不是使用刷新标头,请使用

header("Location: $page");

答案 1 :(得分: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");
}

这将执行 POST 请求,而不是 GET 请求。但请注意,您仍应在POST请求后重定向用户(Post/Redirect/Get)。仍然,请求参数被隐藏。

注意不要在生产环境中使用这些脚本,它们远非安全!

答案 2 :(得分:-1)

这真是最好的方式。你可以取消设置$_GET['act']变量,这样它就不会影响控制流的其余部分,或者像正常一样呈现页面的其余部分(即你不需要重定向,只需渲染页面的其余部分)好像从未设置$_GET['act']变量。)