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 に答える