【问题标题】:redirect to URL and bring errors in PHP?重定向到 URL 并在 PHP 中带来错误?
【发布时间】:2011-12-20 21:37:08
【问题描述】:

我怀疑这行不通,但它没有 - 但我似乎无法在任何地方找到类似的问题,所以我们开始吧。我有一个 if else 语句检查他们是否无法登录它会显示原因(错误),如果有,它们会被回显,否则,$_SESSION 将被分配一个用户 ID(已经已预先启动)从一个变量中检索到,该变量相当于一个查询 mySQL 数据库的函数。该页面将重定向到帐户页面,如下所示:

if (!empty($errors)) {
    foreach ($errors as $error) {
        echo $error . '<br />'; .
    }
} else {
    $_SESSION['user_id'] = $login;
    header('Location: you/default.php');
    exit();
}

问题是这个登录表单在主页的下拉菜单中(而不是它自己的页面),如果他们无法登录(密码错误、未填写的字段等),我想要重定向到 login.php 页面然后显示错误,所以我尝试在 foreach 语句之前添加header('Location: login.php');,但它只是重定向到 login.php,就像我预期的那样,并没有带来错误。

我怀疑这可能是 AJAX 的工作或 PHP 以外的其他东西......想法?

【问题讨论】:

    标签: php redirect verification


    【解决方案1】:

    您需要先启动会话,然后再向其中添加变量。还要确保在这段代码之前没有输出任何内容。

    if (!empty($errors)) {
        foreach ($errors as $error) {
            echo $error . '<br />'; // notice i've replaced the comma in your code with a colon.
        }
    } else {
        session_start();
        $_SESSION['user_id'] = $login;
        header('Location: you/default.php');
        exit();
    }
    

    http://ca3.php.net/manual/en/session.security.php http://ca3.php.net/manual/en/function.session-start.php

    另外,在需要访问会话的所有其他页面中,您必须调用 session_start();在输出任何东西之前。

    【讨论】:

    • 抱歉,我的措辞很糟糕 - 一个会话在初始化文件中的启动时间要早得多,我被告知不需要再次声明它。但是仍然不能解决我的问题。
    • 好的,那么到底是什么不起作用?它只是不重定向,抛出任何错误吗?
    • 如果遇到解析错误,请删除 $error 和
      ? 之间的逗号我不知道这是否只是您的问题的拼写错误,还是您的代码中也有。
    • 我已经改写了我的问题 - 如果他们无法登录,我想重定向到另一个页面 (login.php) 并向他们显示这些错误。我希望这是有道理的?
    • 我想我仍然不清楚你目前的结果是什么。它是否抛出任何错误,它只是停留在页面上吗?或者会发生什么?你确定你的代码正在执行吗?例如您是否尝试过将 die('abc') 放在 if 语句中作为调试方法?
    【解决方案2】:

    您必须将错误传递到您的新页面。你可以这样做:

    header('Location: login.php?error[]="'.$error1.'"&error[]="'.$error2.'"); 
    

    当然,那么你必须在 login.php 中检查这些 :)

    【讨论】:

      【解决方案3】:

      实际上,我自己想出了一个办法。在我的情况下,如果有错误 (if (!empty($errors))),我将它们应用到 $_SESSION 超全局作为 $_SESSION['errors']

      然后它将页面重定向到login.php,一个简单的 if 语句将它们回显在那里:

          if (isset($_SESSION['lqerrors'])) {
          $lqerrors = $_SESSION['lqerrors'];
              foreach ($lqerrors as $lqerror) {
                  echo $lqerror, '<br />'; 
              }
          unset($lqerrors,$lqerror,$_SESSION['lqerrors']);
      } 
      

      简单!

      【讨论】:

        猜你喜欢
        • 2018-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 2021-07-19
        • 2020-07-07
        • 2021-04-14
        相关资源
        最近更新 更多