- ベストアンサー
DBからデータを取得しブラウザに横表示したいがうまくいかない
- DBから取得したデータをブラウザに横に表示したいが、うまくいかない状況です。
- 以下のコードを使用してDBからデータを取得し、ブラウザにテーブル形式で表示していますが、修正点が分かりません。
- コードを調べて試行錯誤していますが、どこを修正すればいいのかわかりません。教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
最初に回答させていただいたものは、CSS部分がきもになります。 CSSを書き換えれば、データ量が大きくても意図したものになると思います。 またテーブルの入れ子の方法に関しましては以下。 <table border="1"> <?php $i=0; $max = 4; foreach($data as $datum): $i++; ?> <?php if($i == 1):?> <tr> <?php endif;?> <td> <table border="2"> <tr> <td><?php echo $datum['ID']?></td> </tr> <tr> <td><?php echo $datum['NAME']?></td> </tr> <tr> <td><img src="./test/<?php echo $datum['ID']?>.jpg" /></td> </tr> </table> </td> <?php if($i == $max):?> </tr> <?php $i=0; ?><?php endif;?> <?php endforeach;?> </table> フラグを立てて、4回に一回、<tr>が出現するようにすれば良いと思います。 ただ、昨今テーブルを入れ子にするHTML構造はあまり良くないのでオススメしません。 また、画像で示されたサイトなんですが、こちらのソースを見てみたら、何かヒントが得られませんか?
その他の回答 (3)
- hogehoge78
- ベストアンサー率80% (433/539)
foreachの部分を、whileに読み替えていただければ良いかと思います。 <?php while($data = mysql_fetch_array($rs)):?> //HTML部分 <?php endwhile;?>
お礼
メッセージありがとうございます。 質問する前に教えていただいたコードも試したのですが どうやらDBに登録するデータによって表示がおかしく なっていたようで、データを変更すれば 私がやりたかった事が出来そうです。 何度も申し訳ないのですが、もう一つ質問があります。 教えていただいた案の一つに <TABLE>タグを入れ子にすると書かれていたのですが ループでデータを取得する場合、 IDに対して一つのループ、NAMEに対して 一つのループと、一つのループに対してID,NAMEを取得 する事は出来るのでしょうか? <TABLE border="1"> <?php while($data = mysql_fetch_array($rs)):?> <TABLE border="2"> <TR><TD>$data['ID']</TD></TR> <TR><TD>$data['NAME']</TD></TR> </TABLE> <?php endwhile; ?> </TABLE> 上記のようなコードでは横並びにて 表示する事は出来ないですよね? もしよろしければアドバイスお願い致します。
- UmJammer
- ベストアンサー率58% (115/196)
まずは実際どういうHTMLが出力されるとよいか、又はさせたいかを明確にした方がよいでしょう。 PHPのコードはそれに沿って考えればよいと思います。
お礼
メッセージありがとうございます。 イメージとしては画像のようなイメージは沸いているのですが PHP、HTMLでごちゃごちゃになってまして…。
- hogehoge78
- ベストアンサー率80% (433/539)
tableタグを一つでどうにかするのが困難と思いますので、 tableを入れ子にするか、ulタグやdlタグなどで、データ一覧を作ってみてはいかがでしょうか。 後はCSSで「float:left;」とかしてやれば、ある程度上手く行くと思います。 --例----------------------------------------------- <?php $data = array( array( 'ID' => '0001', 'NAME'=> 'PHP1', ), array( 'ID' => '0002', 'NAME'=> 'PHP2', ), array( 'ID' => '0003', 'NAME'=> 'PHP3', ), array( 'ID' => '0004', 'NAME'=> 'PHP4', ), array( 'ID' => '0005', 'NAME'=> 'PHP5', ), array( 'ID' => '0006', 'NAME'=> 'PHP6', ), ); ?><html> <head> <title>商品一覧</title> <style> #info{ width:802px; border:1px solid black; } #info dl{ margin:0; padding:0; float:left; width:200px; } #info dl dt{ margin:0; padding:0; background-color:#CCCCCC; } #info dl dd{ margin:0; padding:0; } </style> </head> <body> <div id="info"> <?php foreach($data as $datum):?> <dl> <dt><?php echo $datum['ID']?></dt> <dd><?php echo $datum['NAME']?></dd> <dd><img src="./test/<?php echo $datum['NAME']?>.jpg" /></dd> </dl> <?php endforeach;?> </div> </body> </html>
お礼
メッセージありがとうございます。 教えていただいたサンプルで 出来たのですが、質問があります。 while文で取得した値をarray配列を使って $data配列に設定する事は出来ないのでしょうか? 表示する際に正しく表示されないので…。 ----------------- //配列にセット while($item = mysql_fetch_array($rs)){ $data = array('ID' >= $item['ID'], 'NAME'>= $item['NAME']); } <div id="info"> //$datum変数にセット <?php foreach($data as $datum):?> <dl> <dt><?php echo $datum['ID']?></dt> <dd><?php echo $datum['NAME']?></dd> <dd><img src="./test/<?php echo $datum['ID']?>.jpg" /></dd> </dl> <?php endforeach;?> </div> 自分でもやってみますが、もしよろしければ アドバイスよろしくお願い致します。
お礼
メッセージありがとうございます。 何度も教えて頂き、本当申し訳ないです…。 テーブルの入れ子に関しては、あまり良くないって言うのは ネットで見たんですが、画像のサイトや、似たようなサイトも TABLEタグを使っていたので、いいのかなぁ…なんて疑問を 思っていたりしました。 質問する前は、ソースを見て 解読していたのですが、今はソースを参考に PHPEclipseで実行し、どのように動作するのか 確認しています。 ソースを確認する事はやっていましたが、ソースを実行する 事までは考えになかったです…。 教えて頂いたCSS,TABLEタグ 両方を作って見ようと思います。 何度も教えて頂き、ありがとうございました。