我有这段代码:
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()
提前致谢
答案 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
运行的其他内容。