Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP$\u GET leaves me url插件-如何摆脱它?_Php_Redirect_Get_Refresh - Fatal编程技术网

PHP$\u GET leaves me url插件-如何摆脱它?

PHP$\u GET leaves me url插件-如何摆脱它?,php,redirect,get,refresh,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"); } 但它首先加载

按下按钮时:

<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
,然后将浏览器重定向到
index.php
,这样可以刷新两个页面


如何以好的方式做这件事?

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

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


标题(“位置:$page”)

除了使用此脚本存在一些主要的安全问题外,为什么不使用以下内容:

<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['act'])){
mysql_查询(“截断表mapinfo”);
}
这将执行POST请求,而不是GET请求。但是,请注意,您仍然应该在POST请求()之后重定向用户。尽管如此,请求参数仍然是隐藏的


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

您需要显示表单本身的代码。根据您的请求添加表单代码。让用户仅使用GET请求清除表是一个非常糟糕的主意。最好只处理数据。这只是对我来说,厌倦了只处理数据这很公平,但即使如此,你可能有一天单击“刷新”会丢失一周的数据。。。在提交请求之前,请使用“您确定吗?”警报明确并进行验证。-1 URL将与此相同。若你们在浏览器中点击“后退”,你们将截断表,阿加尼并没有想到在这种情况下。在任何情况下,作为一个
$\u GET
请求进行破坏性操作都是一个非常非常糟糕的主意…@Lee:关于安全性,你是绝对正确的,POST请求是不安全的;但请注意,它并不是为了安全而设计的,它是为了回答user1656447的问题。@user1656447如果我知道您的Web服务器的URL/地址,我可以导航到…com/index.php?act=运行并删除您服务器上的整个数据库。据我所知,在您的代码中,没有验证请求是否来自您自己的服务器,或者我是否有足够的权限执行此类操作。这是为了我的生产力,这是为了本地主机,数据库每隔几分钟就会被截断一次。无论如何,我可以向您展示
echo
isntead的
TRUNCATE
以避免这种混乱
<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");
}