みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テーブルの情報が一部しか表示されません。(php)

すべてのID分の提出状況を表示させたい("○"か"×")のですが、
id=1の提出状況しか表示されません。
テストデータはid=5までの5件を入力しています。

$recordSet2 = mysql_query('SELECT * FROM report');
をwhileにいれてみたり試行錯誤してみたのですが、上手くいきません。

ご指摘よろしくお願い致します。


プログラム

<table width="70%">
<tr>
<th scope="col"><bl>ID</bl></th>
<th scope="col"><bl>教科名</bl></th>
<th scope="col"><bl>課題名</bl></th>
<th scope="col"><bl>担当教員</bl></th>
<th scope="col"><bl>提出期限</bl></th>
<th scope="col"><bl>再提出</bl></th>
<th scope="col"><bl>再提出期限</bl></th>
<th scope="col"><bl>提出状況</bl></th>
</tr>
<?php
$recordSet = mysql_query('SELECT * FROM exercise ORDER BY id');
while ($table = mysql_fetch_assoc($recordSet)){
?>
<tr>
<td><?php print(htmlspecialchars($table['id'])); ?></td>
<td><?php print(htmlspecialchars($table['lessonname'])); ?></td>
<td><?php print(htmlspecialchars($table['name'])); ?></td>
<td><?php print(htmlspecialchars($table['teacher'])); ?></td>
<td><?php print(htmlspecialchars($table['presentday'])); ?></td>
<td><?php print(htmlspecialchars($table['represent'])); ?></td>
<td><?php print(htmlspecialchars($table['representday'])); ?></td>
<td><?php
$recordSet2 = mysql_query('SELECT * FROM report');
$report = mysql_fetch_assoc($recordSet2);
if ($table['lessonname'] == $report['lessonname'] && $table['name'] == $report['exercisename']) {
if(eregi($member['name'], $report['upfile'])) {
echo "○";
}else {
echo "×";
}
}
?></td>
</tr>
<?php
}
?>
</table>

投稿日時 - 2012-02-05 20:03:58

QNo.7287405

すぐに回答ほしいです

質問者が選んだベストアンサー

テーブル構造がどうなっているかは分かりませんが、まず二つのSQLを投げていることがおかしいですね。
exerciseとreportをjoinして一つのSQLにまとめてみてはいかがでしょうか?
もしそれが出来ないとしたらテーブル設計を見直す必要があります。

これは質問とは関係がありませんがereg関数使用は避けた方が良いです。
eregは非推奨であり、セキュリティ脆弱性があるので必ずpreg_matchを
使用して下さい。

[関数とバイナリセーフ]
http://itpro.nikkeibp.co.jp/article/COLUMN/20070402/267126/

投稿日時 - 2012-02-05 22:25:12

お礼

回答ありがとうございます。

exerciseとreportをjoinして、提出済みのみを一覧で表示させるということはできたので、
それを使う方向で考えようと思います。

知りませんでした。リンク先ありがとうございます。preg_match()で代用しますね。

投稿日時 - 2012-02-06 18:16:14

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

まず、×すら echo されていないって事は ↓の時点で蹴られてるということ。

> if ($table['lessonname'] == $report['lessonname'] && $table['name'] == $report['exercisename']) {

んで、#1の方も言っているように、ここは本来SQLでやらせたほうが良さげ。

あと、これ ↓、何度繰り返そうとも、reportテーブルから取ってきたものの1行目しか処理してません。

> $recordSet2 = mysql_query('SELECT * FROM report');
> $report = mysql_fetch_assoc($recordSet2);

なので、これの次の行の if で蹴られているんじゃないかなと思ったりしました。

投稿日時 - 2012-02-06 15:27:38

お礼

回答ありがとうございます。

指摘をいただいたところを見直して変えてみたりして、
提出済みのみを一覧で表示させることはできました。

これを使う方向で考えようと思います。

投稿日時 - 2012-02-06 18:18:32

あなたにオススメの質問