【问题标题】:if $_GET['error'] get value and make a variableif $_GET['error'] 获取值并创建一个变量
【发布时间】:2016-06-10 06:12:33
【问题描述】:

我想做的是我认为会很简单的事情,如果我执行以下操作,但它只是为一个已经很大的项目添加了更多代码行,我认为我犯了一个错误.php 页面存储了用户可能遇到的所有错误类型,这将使​​错误系统变得简单,但事实并非如此。

让我举个例子来解释一下。

1) 用户登录时忘记密码

  • URL 被重定向到login?error=wpu
  • error.php 页面有以下内容

    <?php $denyaccess_nosession = "Sorry you tried to access a page that requires you to be login."; $wpu = "You have either entered a wrong email address, password or both. Please try again! <a href='forgot' title='ISOTE Forgot Details'>Click here if you forgot your login details</a>";?>

但我必须将以下内容放入 index.php 才能使其正常工作

if($_REQUEST['error']){
        extract($_GET);
        switch ($error) {
          case 'wpu':
              $smarty->assign('error',$wpu);
          break;

          default:
            $smarty->assign('error',$denyaccess_nosession);
          break;
        }

      }
      else{
        $smarty->assign('error',$denyaccess_nosession);
      }

肯定有我们只是有 $error 并且它从 error.php 加载正确的错误

【问题讨论】:

  • 我建议你实现一个 class ErrorMessage 或类似的,将这些消息实现为常量。这样您就可以简单地包含类实现(或自动包含它)并通过ErrorMessage::MESSAGE_WPU 或类似方式访问消息。
  • 在我看来,您希望 error.php 成为所创建目录的索引文件。情况并非如此,但可以使用包含以下内容的 .htaccess 文件进行配置:DirectoryIndex error.php 然而,这将导致登录页面也不是默认页面。完全链接到 /login/error.php?error=wpu 可能会更好

标签: php error-handling


【解决方案1】:

您可以使用会话而不是依赖$_GET。例如,如果用户输入了错误的电子邮件或密码,您可以执行以下操作:

$access = functionThatChecksEmailAndPassword($email, $password);
if($access)
{
    //Access Granted
}
else
{
    //Redirect the user to an error page
    $_SESSION['error'] = true;
    $_SESSION['errMsg'] = "You have either entered a wrong email address, password or both. Please try again!"
    header("Location: <path to error.php>");
    exit();
}

然后,在error.php中你可以检查是否发生了错误。

session_start();
if(!$_SESSION['error'])
{
    //Show a generalized error message
}

这是在用户手动输入错误页面的 url 或意外错误的情况下。通常是您无法控制且无需提供任何详细信息的事情

如果$_SESSION['error'] 设置为true,您可以继续并以某种方式显示错误消息

else
{
   $msg = $_SESSION['errMsg'];
   unset($_SESSION['error'];
   unset($_SESSION['errMsg']);
}

请注意,您可以更进一步,创建一个类来存储您的所有错误消息,如下所示:

class ErrorMessages
{
    const WRONG_EMAIL_PASSWORD = 'You have either entered a wrong email address, password or both. Please try again!';
    const NO_ACCESS = 'You have no permission to view this page';
}

编辑

然后您可以像这样使用该类:

$_SESSION['error'] = true;
$_SESSION['errMsg'] = ErrorMessage::WRONG_EMAIL_PASSWORD;
header("Location: <path to error.php>");
exit();

前提是您在处理用户登录的文件开头包含 ErrorMessage

这完全取决于您。不要忘记您不应显示可能被恶意用户用作漏洞利用的详细错误。

【讨论】:

  • 请问如何调用类 const ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 2012-10-20
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多