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

但它首先加载index.php?act=run而不是重定向浏览器,index.php这会刷新 2 个页面。

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

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

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

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

于 2012-09-11T12:57:16.713 回答
-1

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

于 2012-09-11T12:51:44.820 回答