0

KevinYankの本「PHPandMySQLNovice to Ninja 5th edition」を読んでいて、コードにエラーが見つかりました。誰かに手伝ってもらいたいのですが、ばかげたタイプミスかもしれません...?

私は、ジョークのデータベースを作成してアクセスするという作者の例に従おうとしています。2つのデータベースを結合して、すべてのジョークのリストをphpで表示する方法を学んでいます。私は2つのデータベースのジョークと作者を持っています。私はこれを持っています:

try{ 
    $sql = 'SELECT joke.id, joketext, jokedate, name, email
    FROM joke INNER JOIN author
    ON authorid = author.id';
    $result = $pdo->query($sql);
}
catch (PDOException $e)
{
    $error = 'Error: ' . $e->getMessage();
    include 'error.html.php';
    exit();
}

foreach ($result as $row)
{
    $jokes[] = array(
    'id' => $row['id'], 
    'text' => $row['joketext'], 
    'date' => $row['jokedate'],
    'name' => $row['name'],
    'email' => $row['email']
    );
}
include 'jokes.html.php';

これで、1つのテーブルからデータベース情報を選択する単純なコードをINNER JOINコードに置き換えるまで、すべてが正常に機能していました。これは私が従った本のコードです。

jokes.html.phpファイルに、これがあります(これが、エラーの原因だと思います)。

    foreach($jokes as $joke): 
      <form action="?deletejoke" method="post">
  <?php 
      echo 'id. ';
  echo htmlspecialchars($joke['id'], ENT_QUOTES, 'UTF-8');
  echo htmlspecialchars($joke['date'], ENT_QUOTES, 'UTF-8');
  echo htmlspecialchars($joke['text'], ENT_QUOTES, 'UTF-8'); 
  echo htmlspecialchars($joke['name'], ENT_QUOTES, 'UTF-8');
      echo htmlspecialchars($joke['email'], ENT_QUOTES, 'UTF-8');
  ?>
  <input type="hidden" name="id" value="<?php echo $joke['id'];?>">
  <input type="submit" value="Borrar">
  ?>
  <br></form>
<?php endforeach; ?>

今、私をスローするエラーは次のとおりです。

注意:未定義の変数:10行目のC:\ xampp \ htdocs \ worksheet1\jokes.html.phpのジョーク

警告:10行目のC:\ xampp \ htdocs \ worksheet1 \ jokes.html.phpのforeach()に無効な引数が指定されました

jokes.html.phpの10行目は次のとおりです。

foreach($jokes as $joke):

foreach()に関する詳細情報を取得しようとしていますが、エラーを見つけることができません...誰かが私を少し助けてくれるなら(または手がかりになるかもしれません!)、私は非常に感謝しています。ありがとう!!!ロザムンダ

アップデート:

クエリの結果(phpmyadminから直接試行)はゼロであったため、そのクエリのデータベース結果はありませんでした。これを行うことで、1つの結果を手動で追加することにしました。

INSERT INTO joke SET
joketext = 'this is a new joke....',
jokedate = '2012-01-01',
authorid = 1;

これで、エラーが消え、その1つの結果が表示されます。

私が理解していないのは:

これらのエラーの代わりに、結果が表示されなかったのはなぜですか?

これらの状況をどのように管理しますか?つまり、クエリの結果がまったくない場合がありますが、これらのエラーが発生するのは一般的ですか?

役立つコメントの1つは、$ resultが空であると言っています...では、クエリがゼロでない場合、これらのエラーが表示されないのはなぜですか?

助けてくれてありがとう!!! ロザムンダ

4

1 に答える 1

1

私はSitePointフォーラム(本のフォーラム)で答えを見つけました。誰かが疑問に思った場合や、誰かが同じことをした場合に備えて、ここに質問を投稿するとよいと思いました。問題。

通知と警告を表示するのは、PHP設定が原因です。値を宣言/割り当てる前に$jokes変数を使用しようとしたため、通知/警告は有効です。$jokes = array();これは、 PHPコードの前に置くことで解決できます。

foreach ($result as $row) 
{ 
    $jokes[] = array( 
    'id' => $row['id'],  
    'text' => $row['joketext'],  
    'date' => $row['jokedate'], 
    'name' => $row['name'], 
    'email' => $row['email'] 
    ); 
}  

結果がゼロの場合、少なくとも$jokes変数を宣言します。

したがって、結論(ここで間違っている場合は訂正してください!)は、結果が得られない場合に備えて、使用するふりをする変数を常に宣言する必要があるということだと思います。それが空の場合、それはあなたを驚かせる厄介なエラーメッセージを表示するからです。

そして、変数を宣言するには、を使用します$variablename = array()

于 2012-07-12T00:21:37.847 に答える