【发布时间】:2016-04-05 07:36:56
【问题描述】:
我有一个页面secured.php,其 URL 包含一个来自 index.php 的 GET 参数,使用 form method="post" 在处理脚本后,用户 ID 将存储在 SESSION 中并添加为通过重定向到secured.php?u=12345的标头函数获取参数u=12345。
通过检查if isset($_GET['u']){ GET 参数u 可用,一切都很好。我可以验证它等等......
现在的问题是,即使在这里通过在secured.php?u=12345 上使用form method="post" 提交表单时,GET 参数u 将用于标头,但在执行标头函数时,GET 参数u 用于某些理由将不再存在,if ( !isset($_GET['u']) ){会做一些实际上不应该做的事情。
if ( !isset($_GET['u']) ){
some stuff
}
if (isset($_POST['something']) === true){
header("Location: secured.php?u=12345&b=example");
}
如果有人可以帮助我,我将不胜感激。提前致谢。
【问题讨论】:
-
您向我们描述了您想要发生的事情,但绝对没有看到它发生的如何。 Something 在您的实施中有错误,但您没有向我们展示您的实施。现有信息我们无能为力。
-
无论如何,在 POST 请求中
$_GET['u']可能不会被设置并被执行。分别使用$_SERVER['REQUEST_METHOD']=="GET"。=="POST"检查是否设置了与请求方法对应的参数。 -
!正在讲述类似is not的内容。因此,if()语句中的所有内容都将在没有 URL 中的参数的情况下执行。如果您删除!,您的脚本将仅在您的 URL 中找到参数u时执行 -
@syck 取决于...您可以完美地 POST 到
action="foo.php?u=1234"... -
@deceze 好的...添加了一个“可能”=)但这不是重点...许多人检查是否存在一些变量,他们应该检查请求方法然后进入更改代码时遇到麻烦。