在PHP中传递错误消息

时间:2013-03-26 10:46:30

标签: php redirect

我的网站上有一个登录表单,用于检查提交的用户名/密码。如果没有匹配,则将用户发送回登录页面并显示相应的错误消息。对此重定向的调用是:

header("location:../login.php?error_message=$error_message");

这很好用,但在浏览器的地址栏中看起来很麻烦(特别是描述性的错误信息)。有没有办法在不使用$ _GET变量的情况下进行自动重定向?我曾考虑使用$ _SESSION变量,但这似乎不是最好的编码实践。

感谢阅读。

5 个答案:

答案 0 :(得分:6)

如果有一个更简单的GET变量呢?

// something.php
header ("Location: foo.php?err=1");

然后在处理错误的页面中:

// foo.php
$errors = array (
    1 => "Hello, world!",
    2 => "My house is on fire!"
);

$error_id = isset($_GET['err']) ? (int)$_GET['err'] : 0;
if ($error_id != 0 && in_array($error_id, $errors)) {
    echo $errors[$error_id];
}

希望这有帮助。

答案 1 :(得分:1)

如果您不想使用会话,则可以使用错误代码:

header('Location: ../login.php?error=' . urlencode($error_code));

然后,在login.php内:

if (isset($_GET['error'])) {
    switch ($_GET['error']) {
        case 123: // ...
            break;
    }
}

您可以使用查找数组来代替错误消息(可以依赖于语言),而不是使用庞大的开关。

顺便说一句,建议不要在标题重定向中使用相对URI,首选绝对值(例如/login.php)或完全限定的URI(例如http://example.org/login.php)。

答案 2 :(得分:1)

对于表单验证,您有3个选项:

  1. 使用AJAX进行验证 - 因此,根本不需要重定向。
  2. 使用重定向和会话将错误消息一起存储在输入的数据中。
  3. 将重定向用作POST/Redirect/GET patterm
  4. 的一部分

    我个人会为我的表格实施(1)和(3)。 (1)为了方便普通用户和(3)向后兼容像我这样的偏执狂。

    使用会话确实是基于redirec的验证的最简洁方法,因为在任何情况下它都不会在历史记录中留下任何POSTed页面。但是,在存在基于AJAX的验证的情况下,似乎有点矫枉过正

答案 3 :(得分:0)

您可以使用基于会话的Flash消息。

请看这个例子:http://mikeeverhart.net/php/session-based-flash-messages/

答案 4 :(得分:-3)

使用会话是一个不错的选择。显示错误后,您可以立即清除会话值。但是如果您不想使用会话,您可以修改您的网址,如下所示。

// login failed
header("location:../login.php?status=0");

我更喜欢使用会话。