如果$ _GET ['错误']获取值并生成变量

时间:2016-06-10 06:12:33

标签: php error-handling

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

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

1)用户在登录时忘记密码

  • 将网址重定向到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加载正确的错误

1 个答案:

答案 0 :(得分:0)

您可以使用会话而不是依赖$_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']已设置且为真,您可以继续并以某种方式显示错误消息

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类,那么

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