0

我有这段代码:

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

4 回答 4

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;
    }
}
于 2012-09-17T11:55:39.353 回答
0

而不是使用包含,做你想做的事,使用重定向,如:

header(index.php);

对,除此之外,重定向 on 错误是一件非常糟糕的事情。您为什么不将其错误捕获,了解代码发生了什么,并以某种方式编写它,使其一开始就不会产生该错误?

于 2012-09-17T11:53:19.447 回答
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;
}
于 2012-09-17T11:53:56.307 回答
0

我只是猜测这会parent::displayMessage终止当前的脚本执行,因此foreach不会使用无效参数执行以下操作。您include_once不会终止脚本并且foreach正在运行...

return从函数中,die()或者做一些其他的事情来阻止foreach运行。

于 2012-09-17T11:54:15.467 回答