• ベストアンサー

CSVデータベース

PHPを使い CSVのデータを表示させる事ができました。 がっ見た目がどうも汚いですよね・・・ もっとすっきりする方法はあるんでしょうか? あとCSVのデータを検索させるようにしたいのですが何かサンプルとかありませんでしょうか? 注文多くて申し訳ないですが、是非ともご教授よろしくお願い致します。 <table width="550" class="table01"> <tr> <td width="32" height="18"><div align="center"><strong>画像</strong></div></td> <th width="123"><strong>情報1</strong></th> <th width="58"><strong>情報2</strong></th> <th width="56"><strong>情報3</strong></th> <th width="53"><strong>情報4</strong></th> <th width="55"><strong>情報5</strong></th> <th width="56"><strong>情報6</strong></th> <th width="81"><strong>対象</strong></th> </tr> <?php $csv = fopen ("./data/new.csv", "r") or die(print "ファイルを開く事が出来ませんでした"); while ($items = fgetcsv ($csv, 1000,",")) { print "<tr>\n"; print "<td height='40' rowspan='2'><img src='$items[0]'/></td>\n"; print "<td><center>$items[1]<center></td>\n"; print "<td>$items[2]</td>\n"; print "<td>$items[3]</td>\n"; print "<td>$items[4]</td>\n"; print "<td>$items[5]</td>\n"; print "<td>$items[6]</td>\n"; print "<td>$items[7]</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height='16' colspan='7'><div align='left'>$items[8]</div></td>\n"; print "</tr>\n"; } fclose($csv); ?> </table>

  • PHP
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

単純にprint文の羅列がきにいらないのであれば ヒアドキュメントで処理することもできます print<<<eof <tr> <td height='40' rowspan='2'><img src='{$items[0]}'/></td> <td><center>{$items[1]}<center></td> <td>{$items[2]}</td> <td>{$items[3]}</td> <td>{$items[4]}</td> <td>{$items[5]}</td> <td>{$items[6]}</td> <td>{$items[7]}</td> </tr> <tr> <td height='16' colspan='7'><div align='left'>{$items[8]}</div></td> </tr> eof;

その他の回答 (1)

回答No.1

んー、汚いといっても、これ以上何を、、、 CSVの方に、データの見出し項目もあるのなら、1行分取得したところで何個のデータがあるか見て、その分だけループ回して処理することで見出し部分も含めて一発で処理してしまうということも考えられますがどうでしょう。 「ソースの見た目の綺麗さ」にこだわって、処理の可読性が低くなるのは(個人的趣味でそうするのならともかく)あまりおススメできないですね。 多少冗長でも、どんな処理をしているのかが理解し易い方が、後々メンテもしやすいかと。 ちなみに検索ですが、CSVデータベースなので先頭からしか処理できません。よって、fgetcsvで1行取ったら、その値が検索条件に一致するかどうか判定して、一致したものを配列にドンドンと突っ込んでおいて、読み終わったらその配列を全部出力するのが一番手っ取り早そうです。

関連するQ&A

  • データ)表示件数について

    PHPとCSVでデータを表示させる事は出来ました。 希望は、 Pagerを使い1ページに表示する件数を10件としたいのですが、うまくいきませんでした。 よろしければ修正 or ご教授よろしくお願い致します。 <?php require("Pager/Pager.php"); $params = array( 'mode' => 'sliding', 'perPage' => 20, 'delta' => 5, 'urlVar' => 'p', 'separator' => ' |', 'curPageSpanPre' => '', 'curPageSpanPost' => '', 'prevImg' => '&lt;前の20件', 'nextImg' => '次の20件&gt;', 'firstPageText' => '最初', 'firstPagePre' => '[', 'firstPagePost' => ']', 'lastPageText' => '最後', 'lastPagePre' => '[', 'lastPagePost' => ']', 'spacesBeforeSeparator' => 0, 'spacesAfterSeparator' => 1, 'totalItems' => 1000, 'altFirst' => '最初のページへ移動', 'altPrev' => '前のページへ移動', 'altNext' => '次のページへ移動', 'altLast' => '最後のページへ移動', 'altPage' => 'ページ', ); $pager =& Pager::factory($params); $links = $pager->getLinks(); if ($links['pages'] != '') { echo $links['first'], $links['back'], ' | ', $links['pages'], ' | ', $links['next'], ' ', $links['last']; } print<<<eof <table width="550" class="table01"> <tr> <td width="32" height="18"><div align="center"><strong>画像</strong></div></td> <th width="123"><strong>名前</strong></th> <th width="58"><strong>材料</strong></th> <th width="56"><strong>時間</strong></th> <th width="53"><strong>費用</strong></th> <th width="55"><strong>美味しさ</strong></th> <th width="56"><strong>日</strong></th> <th width="81"><strong>詳細ページ</strong></th> </tr> eof; $csv = fopen ("item.csv", "r") or die(print "ファイルを開く事が出来ませんでした"); while ($items = fgetcsv ($csv, 1000,",")) { print "<tr>\n"; print "<td height='40' rowspan='2'><img src='$items[0]'/></td>\n"; print "<td><center>$items[1]<center></td>\n"; print "<td>$items[2]</td>\n"; print "<td>$items[3]</td>\n"; print "<td>$items[4]</td>\n"; print "<td>$items[5]</td>\n"; print "<td>$items[6]</td>\n"; print "<td>$items[7]</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height='16' colspan='7'><div align='left'><a href="$items[8]"></a></div></td>\n"; print "</tr>\n"; } fclose($csv); ?>

    • ベストアンサー
    • PHP
  • HTMLでテーブルを縦に並べたい!

    基本的な質問でお恥ずかしいのですが、困っています。 テーブルを二つ、縦に並べたいのですが、何故か横に並んでしまいます。 どこが悪いのでしょうか?初心者ですみません…お知恵をお貸しください(T_T)。 <caption><font color="#ff0000">●</font>A <font color="#0000ff">●</font>B</font></caption> <table bgcolor="#80ffff" border="1"cellspacing="0" bordercolor="#0000ff" align="left"> <tr><th width="30"><font size="+5"><font color="#ff0000">●</font></th> <th width="150"> <font size="+4"><strong><big>C</big></strong></font></th> <td><font size="+2">D<br>E</font></td></tr> <tr><td></td><td><div align="center"> <font size="4" color="#8080ff"> 準備中</font></div></td><td></td></tr></table> </p></div> <p></p> <table align="center" bgcolor="#80ffff" height="20" width="250" border="1" cellspacing="2" cellpadding="0"> <tr><td><blink>HOME</blink></td></tr> </table> </body>

    • ベストアンサー
    • HTML
  • 複数のCSVファイルを1つの表にして出したい

    あるCSVファイルを、Perl+HTMLで、プラウザに「表」で表示させるようにしました。 しかし、追加で複数のCSVファイルを読み込ませて、同じ表に入れることができません。(今ある表のなかの、$r1,2,3と番号が存在してる以外の空欄になっている表に入れたいのです) どのようにすればいいのか、どなたかお教え下さい!>< ちなみに、今作ってあるものはこんなかんじです。 動作確認済み。 #!/usr/local/bin/perl #----------------------------------- $file = "a.20090504.csv"; #----------------------------------- print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "<br><br>\n"; print "<center>\n"; print "<table border=1 >\n"; $days = $file; $days =~ s/a.//g; $days =~ s/.csv//g; open(IN,"$file"); @kasou = <IN>; close(IN); foreach $line (@kasou){ ($r1, $r2, $r3, $r4, $r5, $r6, $r7) = split (/,/, $line); print "<tr>\n"; print "<td>$days</td>\n"; print "<td>$r1</td>\n"; print "<td></td>\n"; print "<td>$r2</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r3</td>\n"; print "<td></td>\n"; print "<td></td>\n"; print "<td>$r4</td>\n"; print "<td>$r5</td>\n"; print "<td>$r6</td>\n"; print "<td>$r7</td>\n"; print "</tr>\n"; } print "</table>\n"; print "</body>\n"; print "</html>\n"; ※ちなみに、これですとCSVファイル名の20050504だけがtrに入るようになっています。これは、こうしたいのでこうしているのですが、繰り返しtrに投入されるようになっているのも気になります。 どうしたら直るでしょうか。

  • css テーブルについて

    よろしくお願いします。 2だけを300pxと100pxに2分割にできないでしょうか。 <div class="aa"> <table> <tr> <th>1</th> <td>2</td> </tr> <tr> <th>1</th> <td>1</td> </tr> </table> </div> .aa table { width: 500px; height: 100px; border: 1px #000000 solid; border-collapse: collapse; } .aa th { width: 100px; border: 1px #000000 solid; } .aa td { width: 400px; border: 1px #000000 solid; }

    • ベストアンサー
    • CSS
  • CSVファイルより自動でHTML形式で表示したい。

    CSVファイルより自動でHTML形式で表示したいのです。 たとえば、csv ファイルの中身が、 room.csv 部屋名,温度,湿度,料金 101,23.5,40,15000 102,23.2,40,16000 103,23.0,40,17000 104,23.4,40,19000 となっているとします。 room.htmlでもroom.cgi 等で表示させ ブラウザのソースを見たときには、 <table border=4 width=250 align=center> <tr bgcolor="#cccccc"> <th>部屋名</th> <th>温度</th> <th>湿度</th> <th>料金</th> </tr> <tr align=center> <td>101</td> <td>23.5</td> <td>40</td> <td>15000</td> </tr> <tr align=center> <td>102</td> <td>23.2</td> <td>40</td> <td>16000</td> </tr> <tr align=center> <td>103</td> <td>23.0</td> <td>40</td> <td>17000</td> </tr> <tr align=center> <td>104</td> <td>23.4</td> <td>40</td> <td>19000</td> </tr> </table> のように、したいのですが、 可能でしょうか? perl等のプログラムの知識は、ほとんどありません。 作ってあるものをアップロードして動くようにすることは、出来ます。

  • 表の作成

    いつもお世話になっています。 下記の構文で表を作成した際に、セルの幅がずれてしまいます。 <TABLE border="1" cellspacing="0" width="940"> <TBODY> <TR> <TH height="17" width="790" colspan="5">A</TH> <TH height="17" width="75" rowspan="2">G</TH> <TH height="17" width="75" rowspan="2">H</TH> </TR> <TR> <TH height="17" width="150">B</TH> <TH height="17" width="80" >C</TH> <TH height="17" width="220">D</TH> <TH height="17" width="280">E</TH> <TH height="17" width="60" >F</TH> </TR> </TBODY> </TABLE> <TABLE border="1" cellspacing="0" width="940"> <COLGROUP> <col width="150"> <col width="80" > <col width="220"> <col width="280"> <col width="60" > <col width="75" > <col width="75" > </COLGROUP> <TBODY> <TR height="30"> <TD><FONT SIZE="-1">○</FONT></TD> <TD><FONT SIZE="-1">×</FONT></TD> <TD><FONT SIZE="-1">△</FONT></TD> <TD><FONT SIZE="-1">□</FONT></TD> <TD><FONT SIZE="-1">◆</FONT></TD> <TD align="center"> <INPUT type="button" value="◎" style="width:55px;height:27px" onClick=""> <!-- ж --> </TD> <TD align="center"> <INPUT type="button" value="Δ" style="width:55px;height:27px" onClick=""> <!-- ☆ --> </TD> </TR> </TBODY> </TABLE> どなたか解決方法を教えていただけないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 簡易データベースについて

     ___________________ |画像|詳細       | |● |詳細をみる    | |● |詳細をみる    | |● |詳細をみる    | 上記のようなイメージにしたいのですが、下のコードだと 新たにテーブルを作り ________ |画像|詳細   |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |● |詳細を見る|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ________ |画像|詳細   |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |● |詳細を見る|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ________ |画像|詳細   |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |● |詳細を見る|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ のようになってしまいます。どうぞよろしくお願いします <form action="search.php" method="GET"> <input type="text" name="key"> <input type="submit" name="submit" value="検索"> </form> <p> <!--ここから検索結果--> <?php if($_GET["key"]!=""){ $KeyWord=$_GET["key"]; $KeyWord=htmlspecialchars($KeyWord); $Data=file("item.csv"); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); if(mb_eregi($KeyWord,$lines)){ $line=explode(",",$Data[$i]); ?> </p> <table width="500" height="249" border="1"> <tr> <th width="161" scope="col">画像</th> <th width="323" scope="col">詳細</th> </tr> <tr> <th scope="row"><?=$line[3]?></th> <td><div align="center"><a href="item.php?id=<?=$line[0]?>">詳細を見る</a></div></td> </tr> </table> <p> <?php } } } ?> </th> </tr> </table>

    • ベストアンサー
    • PHP
  • borderが1のテーブル

    ボーダーが1ピクセルくらいの表を作りたいので、tableの入れ子で作ったのですが「tableの入れ子は良くない」ととあるサイトで読んだので、入れ子にしないでtableを作りたいのですが何か良い方法はありますでしょうか? 私が書いたのはこんなかんじです。 <table width="400" border="0" cellpadding="0" cellspacing="0"> <tr> <td bgcolor="#000000"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="1"> <tr bgcolor="#999999"> <th><div align="center"><font size="2">名称</font></div></th> <th><div align="center"><font size="2">模型材質</font></div></th> <th><div align="center"><font size="2">生産材質</font></div></th> </tr> <tr bgcolor="#FFFFFF"> <td bgcolor="#999999"><div align="center"><font size="2">本体</font></div></td> <td><div align="center"><font size="2">発泡塩ビ板</font></div></td> <td><div align="center"><font size="2">プラスチック</font></div></td> </tr> </table></td> </tr> </table> CSSで「style="border-width :1px 1px 1px 1px;border-style : solid solid solid solid ;border-color :#000000 #000000 #000000 #000000 ;"」というのを入れてやってみたのですが、これだと外側にしかラインが表示されませんでした。 よろしくおねがいします。

  • スタイルシートでのデザイン

    HTMLを組む際、今までレイアウトはtableタグで組んでいたのですが、CSSで組もうと思っています。 例えば、 <table align="center"> <tr> <td colspan="2" width="500" height="80">aaa</td> <td rowspan="2" width="300" height="200">bbb</td> </tr> <tr> <td colspan="2" width="500" height="20">ccc</td> </tr> <tr> <td width="200" height="100">ddd</td> <td width="300" height="100">eee</td> </tr> </table> をスタイルシートで配置しようと思い、 <div align="center" style="width:800px"> <div style="float:left;width:500px;height:80px;background-color:#ff9999">aaa</div> <div style="float:right;width:300px;height:200px;background-color:#9ff999">bbb</div> <div style="float:left;width:500px;height:20px;background-color:#9999ff">ccc</div> <div style="float:left;width:200px;height:100px;background-color:#99ffff">ddd</div> <div style="float:center;width:300px;height:100px;background-color:#ffff99">eee</div> </div> としたのですが、センタリングされないのと、eeeの箇所がdddの隣に来ないで次の行に移ります。 うまく出来ないので、どなたか教えて下さい。お願いします。

    • ベストアンサー
    • CSS
  • 不明の「1」が出る。

    CGIファイルを実行させると必ずといっていいほど、最後に「1」が表れます。 これは一体何なのでしょうか? なぜ出てくるのでしょうか? 現在以下のようなものを作成したのですが、 if条件であってたばあい、表示されたときに、1が複数出てしまって見栄えが悪いです。 これを消す方法を教えてください。 print "<TABLE CELLSPACING=1>\n"; print "<TR>\n"; print "<TD CLASS=TD1 WIDTH=100>名前</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>ふりがな</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>内線番号</TD>\n"; print "</TR>\n"; for ($i=0;$i<$gyou;$i++){ @log = split(/&/,$FILES[$i]); foreach(@log){ ($key,$value) = split(/=/,$_); $FORM{$key} = $value; $FORM{'SYOZOKU'} =~ s/\n$//g; } if ($searchkey eq $FORM{'SYOZOKU'}){ print &ok;} } sub ok{ print "<TR>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'NAME'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'KANA'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'BANGOU'}</TD>\n"; print "</TR>\n"; } print "</TABLE>\n"; print "</BODY>\n"; print "</HTML>\n";

    • ベストアンサー
    • CGI

専門家に質問してみよう