【问题标题】:$_GET to access a page?$_GET 访问页面?
【发布时间】: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 好的...添加了一个“可能”=)但这不是重点...许多人检查是否存在一些变量,他们应该检查请求方法然后进入更改代码时遇到麻烦。

标签: php forms url get


【解决方案1】:

让我们检查一下:

1: index.php

<?php 
            session_start(); 
            $_SESSION['U_ID'] = '12345'; 
?>
<html>
    <body>

    <form action="secured.php?u=<?php echo $_SESSION['U_ID']; ?>" method="post">
        Name: <input type="text" name="name"><br>
              <input type="submit">
    </form>

    </body>
</html>

2:secured.php

<?php

    if ( !isset($_GET['u']) ){
        //some stuff
    } else {
        if (isset($_POST["name"]) && $_POST["name"] != ''){
            $re_url = 'secured.php?u='.$_GET['u'].'&b=example';
            header('Location: '.$re_url);
        }
    }
?>

简单回答

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多