用文件替换错误消息

时间:2012-09-17 11:49:33

标签: php foreach

我有这段代码:

private function grabCurrentUser() {

    $this->id = parent::secure($_GET['cid']);

    $params = array( ':user_id' => $this->id );
    $stmt   = parent::query("SELECT * FROM users WHERE user_id = :user_id;", $params);

    if( $stmt->rowCount() < 1 ) parent::displayMessage("<div class='alert alert-error'>"._('No such user!')."</div>");

    foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $field => $value)
        $this->options[$field] = $value;

}

我想替换它上面的错误消息,所以不要出现此错误消息:

parent::displayMessage("<div class='alert alert-error'>"._('No such user!')."</div>

我想像这样包含index.php:

include_once(cINC . 'index.php');

那么如何将其替换为显示错误消息,只包括index.php?

我试过了:

private function grabCurrentUser() {

    $this->id = parent::secure($_GET['cid']);

    $params = array( ':user_id' => $this->id );
    $stmt   = parent::query("SELECT * FROM users WHERE user_id = :user_id;", $params);

    if( $stmt->rowCount() < 1 ) include_once(cINC . 'index.php');

    foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $field => $value)
        $this->options[$field] = $value;

}

但得到了这个错误:

Warning: Invalid argument supplied for foreach() 

提前致谢

4 个答案:

答案 0 :(得分:2)

你在应用程序逻辑中有错误,如果你没有任何记录并希望包含一些文件,那么你就不会遍历空记录列表。

private function grabCurrentUser() {

    $this->id = parent::secure($_GET['cid']);

    $params = array( ':user_id' => $this->id );
    $stmt   = parent::query("SELECT * FROM users WHERE user_id = :user_id;", $params);

    if( $stmt->rowCount() < 1 ){
        include_once(cINC . 'index.php');
    } else {
        foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $field => $value)
            $this->options[$field] = $value;
    }
}

答案 1 :(得分:0)

不要使用include来做你想做的事情,而是使用像:

这样的重定向
header(index.php);

是的,在此之后,重定向on错误是真的很糟糕。为什么不将错误捕获出来,了解代码发生了什么,并以某种方式编写它以便不能首先生成该错误?

答案 2 :(得分:0)

当用户ID未知时,您必须尝试捕获错误,因此您可以执行以下操作

if( $stmt->rowCount() < 1 ) 
{
include_once(cINC . 'index.php');
exit();
}
else {
foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $field => $value)
$this->options[$field] = $value;
}

答案 3 :(得分:0)

我只是猜测parent::displayMessage会终止当前的脚本执行,因此以下foreach没有使用无效参数执行。您的include_once未终止该脚本,foreach正在运行...

来自函数return

die()或执行阻止foreach运行的其他内容。