在PHP中传递错误消息

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

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

这工作正常,但它在浏览器的地址栏中显得杂乱无章(尤其是描述性错误消息)。 有没有办法做到这一点,而不使用$ _GET变量自动重定向? 我曾考虑过使用$ _SESSION变量,但这看起来并不是最好的编码习惯。

谢谢阅读。


如何有一个更简单的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];
}

希望这可以帮助。


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

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 )是首选。


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

  • 使用AJAX进行验证 - 因此,根本不需要重定向。
  • 使用重定向和会话将错误消息与输入的数据一起存储。
  • 将重定向用作POST / Redirect / GET patterm的一部分
  • 就我个人而言,我会为我的表格实施(1)和(3)。 (1)为了方便普通用户和(3)为了向后兼容像我这样的偏执狂。

    使用会话确实是基于重定向的验证的最干净的方式,因为它在任何情况下都不会在历史记录中留下任何已发布的页面。 但是,在基于AJAX验证的情况下,似乎有点矫枉过正

    链接地址: http://www.djcxy.com/p/70267.html

    上一篇: Passing error messages in PHP

    下一篇: NOINTERFACE on C#