アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問します。

DBにID,NAME,IMGと言うカラム名があります。


ID NAME IMG
0001 PHP1 PHP1
0002 PHP2 PHP2
0003 PHP3 PHP3

データを取得し、ブラウザにて横に表示するように
したいのですが、うまくいきません…。

ブラウザーイメージ
0001 0002 0003
PHP1 PHP2 PHP3
画像 画像 画像



以下がサンプルです。


<?php
//DB接続
if((!$db = mysql_connect("","",""))){
die;
}

//DB選択
if((!mysql_select_db(""))){
die;
}
if(!mysql_query('set names sjis')){
echo "sjis 設定エラー";
die;
}
$SQL = "SELECT * FROM video_data";

if(!($rs = mysql_query($SQL))){
print mysql_error();
die;
}
?>


<table border="0">
<TR>
<?php
$count = 0;
  
  while($item = mysql_fetch_array($rs)){
//ID表示
print "<TD>".$item['ID']."</TD>";
//名前表示
print "<TD>".$item['NAME']."</TD>";
//改行
    if($count == 4){
      print "</TR>";
  $count = 0;
    }

    //IMG表示
print "<TD><img src='./test/".$item['ID'].".jpg'/></TD>";
$count++;
}
print "<TR>";
//コネクションクローズ
mysql_close();
?>
</TABLE>

どこを修正したらいいのかわかりません…
色々やっているんですが…。

わかる方が居たらヒントでもいいので
教えて下さい。よろしくお願いします。

「DBから取得した内容を横表示」の質問画像

A 回答 (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構造はあまり良くないのでオススメしません。
また、画像で示されたサイトなんですが、こちらのソースを見てみたら、何かヒントが得られませんか?
    • good
    • 0
この回答へのお礼

メッセージありがとうございます。
何度も教えて頂き、本当申し訳ないです…。

テーブルの入れ子に関しては、あまり良くないって言うのは
ネットで見たんですが、画像のサイトや、似たようなサイトも
TABLEタグを使っていたので、いいのかなぁ…なんて疑問を
思っていたりしました。

質問する前は、ソースを見て
解読していたのですが、今はソースを参考に
PHPEclipseで実行し、どのように動作するのか
確認しています。
ソースを確認する事はやっていましたが、ソースを実行する
事までは考えになかったです…。

教えて頂いたCSS,TABLEタグ
両方を作って見ようと思います。

何度も教えて頂き、ありがとうございました。

お礼日時:2009/07/04 07:27

foreachの部分を、whileに読み替えていただければ良いかと思います。



<?php while($data = mysql_fetch_array($rs)):?>
//HTML部分
<?php endwhile;?>
    • good
    • 0
この回答へのお礼

メッセージありがとうございます。
質問する前に教えていただいたコードも試したのですが
どうやら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>

上記のようなコードでは横並びにて
表示する事は出来ないですよね?


もしよろしければアドバイスお願い致します。

お礼日時:2009/07/03 21:07

まずは実際どういうHTMLが出力されるとよいか、又はさせたいかを明確にした方がよいでしょう。


PHPのコードはそれに沿って考えればよいと思います。
    • good
    • 0
この回答へのお礼

メッセージありがとうございます。

イメージとしては画像のようなイメージは沸いているのですが
PHP、HTMLでごちゃごちゃになってまして…。

お礼日時:2009/07/03 21:08

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>
    • good
    • 0
この回答へのお礼

メッセージありがとうございます。

教えていただいたサンプルで
出来たのですが、質問があります。

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>


自分でもやってみますが、もしよろしければ
アドバイスよろしくお願い致します。

お礼日時:2009/07/02 09:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!