質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

11140閲覧

PHP foreachを使うとエラーが出る(値がNULLのとき)

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/04/19 23:51

PHPで、Q&Aコーナーのようなものを作成しています。
foreach文を使って、質問に対する回答を表示しようとしています。
回答がデータベースにあるときは問題なく表示できますが、回答がNULLのときは次の二つのエラーが生じます。
0. Warning: Invalid argument supplied for foreach() in
0. Notice: Undefined variable: answers in

そこでググったところ、
foreach ((array)$array as $elem) {
// hogehoge.
}

上述のように、強制的に配列でキャストすればいい、という記事を見つけたので実行してみましたが、やはり次のようなエラーが出ます。
0. Notice: Undefined variable: answers in

コードは次のようになります。

PHP

1<?php 2 $sql ='SELECT * FROM `answers` WHERE `id`=?'; 3 $data = array($_GET['id']); 4 $stmt = $dbh->prepare($sql); 5 $stmt->execute($data); 6 while ($record = $stmt->fetch(PDO::FETCH_ASSOC)) { 7 $answers[] = array( 8 "answer_id"=>$record['answer_id'], 9 "name"=>$record['name'], 10 "id"=>$record['id'], 11 "answer"=>$record['answer'], 12 "created"=>$record['created'] ); 13 } 14?>

PHP

1<h2 class="fh5co-heading">ANSWER</h2> 2 <?php foreach ((array)$answers as $answer_each) { ?> 3 <span><b><?php echo $answer_each["name"]; ?></b></span> / 4 <span><b><?php echo $answer_each["created"]; ?></b></span><br><br> 5 <b><p class="content"><?php echo $answer_each["answer"]; ?></p></b><hr style="border:0;border-top:1px solid;"> 6 <?php } ?> 7

何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

$answersを空配列で初期化しておけばキャストの必要もありませんし、変数未定義の警告も出ません。

php

1$answers = []; 2while ($record = $stmt->fetch(PDO::FETCH_ASSOC)) {

投稿2019/04/20 00:10

yhg

総合スコア2161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/04/20 00:16

無事にできました!!!本当にありがとうございました。
guest

0

Undefined variable: answersとあるので、NULLの場合に、条件分岐して初期値を設定してあげると良いです。

投稿2019/04/20 00:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/04/20 00:17

前の方が回答してくださった方法で無事にできました!!! ご丁寧にご回答してくださりありがとうございます。次回の参考にさせていただきます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問