最好的PHP练习显示错误

时间:2012-06-30 10:52:06

标签: php

在视图上执行控制器操作期间是否有关于显示错误的最佳做法?我的意思是,当“在数据库中找不到登录”或“输入值格式不正确”或“字段需要值”时,如何显示错误?

是否有错误或其他任何数组?现在我的代码看起来像:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $siteName = isset($_POST['SiteName']) ? trim($_POST['SiteName']) : null;
    $siteUrl = isset($_POST['SiteUrl']) ? trim($_POST['SiteUrl']) : null;

    if(IsNullOrEmptyString($siteName) || IsNullOrEmptyString($siteUrl)) {
        exit('Site name or site url could not be empty');
    } elseif (!preg_match('/^http\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?$/', $siteUrl)){
        exit('Site url has wrong format');
    }

    $filters = array('SiteName' => $siteName, 'SiteUrl' => $siteUrl);
    if($sitesRepository->select($filters)) {
        exit('Site is already exist');
    }
}

但如果我使用退出,我的页面不会继续显示。

3 个答案:

答案 0 :(得分:1)

如果您的意思是要存储所有错误并继续处理,可以将它们放入数组中。在您处理定义数组然后将每个错误添加到该数组之前。例如:

$arrErrors = array();

然后将退出语句替换为:

$arrErrors[] = 'The error text goes here...';

完成处理后,您可以检查并输出任何错误:

for ($i=0; $i<count($arrErrors); $i++)
{
    echo $arrErrors[$i].'<br />'; 
}

echo implode('<br />', $arrErrors);

答案 1 :(得分:0)

如您所说,exit()(和die())终止输出。它也是一种确保代码在出现问题时不会被执行的懒惰方式,但是有更好的,更具可扩展性的方法。

一种方法是将任何错误提交到变量中,然后在执行任何以尚未出现的错误为条件的代码之前检查它。然后,当我们进行输出时,我们将错误转发给用户。

//let's say some error just occurred
$error = 'some error!';

//some code that should happen only if there's no error yet
if (!isset($error)) doSomething();

//then, when we get to output, display any error
if (isset($error)) echo "<h3 class='error'>".$error."</h3>";

编辑 - 正如sk00V正确地说的那样,您可能还想记录多个错误,将其推入阵列。我的例子假设你想要在第一个错误时退出,这是你的代码所建议的。

答案 2 :(得分:0)

实际显示系统出错的情况绝不是最好的做法。

//let's say some error just occurred
$error = 'some error!';

//some code that should happen only if there's no error yet
if (!isset($error)) doSomething();

//then, when we get to output, display any error
if (isset($error)) header("Location: error.html");

如果代码出现任何问题,而不是显示错误,只需将用户重定向到自定义错误页面,并显示一些消息,不会让用户担心问题。而不是向他展示他的记录在数据库中找不到,这可能会让他感到害怕。

只需将他重定向到错误页面,然后告诉他,你知道出了什么问题,你的团队正在努力解决这个问题。

(显示一些幽默的错误消息可能会帮助你)

相关问题