• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSVの読み込みと表示)

CSVの読み込みと表示

このQ&Aのポイント
  • CSVのデータを読込み表示する方法についてわからない
  • data.csvの内容を正しく表示する方法を教えて欲しい
  • http://cartown.jp/のような?carid=hogeでCSVのデータを表示させたい

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

  • ベストアンサー
回答No.6

$image_file_path = "car/car$data[0]/op"; の$data[0]が、10で、 $ataiが10で、$iが1のときは > $file = sprintf("%s/%010d%03d.gif", $image_file_path, $atai, $i ); の結果の、$fileは "car/car10/op/0000000010001.gif" となります。 しかし、$data[0]は、1なのに、$ataiは、10になっているのに、$data[0]は1にずれていれば、当然狂ってきますし、 car9のためのフォルダーにcar10の画像を入れているとか だと、それもおかしくなります。 ですので、デバックの手順としては、この$fileの中身がどうなっているか echo "\$file = $file <BR>"; などど、てみて、変数にきちんとセットされているかを確かめます。 そして、そのファイルが実際に存在しているか ブラウザのURL欄に直接、記述してみて表示されるかを確認したり、 ftpソフトなどで、ファイルの存在や、サイズやパーミッションを 確認してみます。 表示されないというだけで、闇雲にプログラムだけを疑って テストするのではなく、多角的に解析するようにしなければ 解決への糸口が見つかりませんので。

noname#65793
質問者

お礼

最後までご丁寧に教えて頂きまして本当にありがとうございます。 テストを繰り返した結果おかげ様で思うような仕様にする事が できました。 まだ始めたばかりではありますがこれからも勉強し頑張って いきたいと思います!

その他の回答 (5)

回答No.5

・文字列は" "か ' ' で括ります。 ・絶対パスは / で始まります。 ・このの表示の仕様のためインデントのためのブランクを全角で記述していますが、全角ブランクは削除してご自分でインデントされてください それから・・・これは、お気を悪くされないで頂きたいのですが、 PHPを始めたばかりということで、仕方がないところもあるのかもしれませんが、 PHP以前に、プログラムそのものの、かなり基本的なところが理解されていないように見受けられます。 ご自分で解決する努力をしないまま、このような掲示板のやりとりだけで、そのシステムを全て開発することは不可能ですし、 結果として、このような開発体制は、あなたやシステムの利用者にとって不幸なことになります。 ですので、ここに上げたソースは、あくまでもアルゴリズムのアイデア程度として受け止めて そのままコピーしないで、どういうアルゴリズムなのか命令の1つづつを 確認し、納得しながら ご自分のシステムの仕様にあわせて、コーディングしなおされるのが よいかと思います。 そうやって、試行錯誤することで、皆さん自分の力にされておられますから。

noname#65793
質問者

補足

お返事ありがとうございます。遅くなってしまい申し訳ございません。 あれから自分なりに調べてテストを繰り返した結果なんとか 動作させることまでたどり着きました! >それから・・・これは、お気を悪くされないで頂きたいのですが、・・・ 始めたばかりで知識もなく高すぎるハードルでした。仰る通りで 返すお言葉もありません。 最後にどうしてもわからないことがあるのですが・・・ ?carid=1であれば画像の名前を0000000001001.gif ?carid=2であれば画像の名前を0000000002001.gif ・・・ ?carid=9であれば画像の名前を0000000009001.gif の連番で画像は表示されるのですが?carid=10~は画像が 表示されません。 画像の名前を 0000000010001.gif とし表示されなかったので0を足したり消したりしてみたのですが 10以上の画像は全く表示されません。 ※オプション画像のフォルダはroot/car/carここにcarid/op ソースは以下の通りです。 $max = 100; $image_file_path = "car/car$data[0]/op"; $doc_root_path = "/home/httpd/vhosts/hoge.com/httpdocs/op"; for ( $i = 1 ; $i < $max ; $i++ ) { $file = sprintf("%s/%010d%03d.gif", $image_file_path, $atai, $i ); if ( file_exists("$doc_root_path/$file") ) { print "<img src=\"$file\" width=\"17\" height=\"17\" alt=\"\" /> "; } else { break; } }

回答No.4

> CSVに<img src...>と表示したい画像のパスをべた書きすれば > 表示されるとは思うのですがオプションが多い時などは結構な > 手間に感じてしまいます。 > 効率のいい方法としてどのような方法があるのでしょうか? 規則性があるなら、変化するところだけCSVに書いて、固定部分はphpで決め打ちにするとか、 CSVには画像ファイル名を書かずに、用意する画像ファイル名に規則性をもたせて(たとえばベースとなる番号+シリアル番号)そのファイルが存在すれば表示するようにするとか。 後者だと $max = 100; $image_file_path = 画像ファイルをおくフォルダー名; $doc_root_path = サーバー上のDocumentRootとなる絶対パス; for ( $i = 1 ; $i < $max ; $i++ ) {  $file = sprintf("%s/%010d%03d.jpg", $image_file_path, $atai, $i );  if ( file_exists("$doc_root_path/$file") ) {   echo "<img src=\"$file\" border=\"0\">";  } else {   break;  } } という感じかな。 この場合、1番用の画像ファイルとして、 0000000001001.jpg 0000000001002.jpg 0000000001003.jpg を該当するフォルダーに入れておけばそれが表示されます。 (gifやpngもあるなら、それなりにアルゴリズムの修正は必要ですが)

noname#65793
質問者

補足

お返事ありがとうございます。 画像をおくフォルダ名を./img/sold/とし 絶対パスをhome/httpd/vhosts/hoge.com/httpdocsとし 以下のように試してみたのですが $max = 100; $image_file_path = ./img/sold/; $doc_root_path = home/httpd/vhosts/hoge.com/httpdocs; for ( $i = 1 ; $i < $max ; $i++ ) {  $file = sprintf("%s/%010d%03d.jpg", $image_file_path, $atai, $i );  if ( file_exists("$doc_root_path/$file") ) {   echo "<img src=\"$file\" border=\"0\">";  } else {   break;  } } Parse error: syntax error, unexpected '@' とエラーがでてしまいます。 $file = sprintf("%s/%010d%03d.jpg", $image_file_path, $atai, ここにエラーがあるとなっているのですが%でしょうか?

回答No.3

No.1です。 No.2の方も書かれていますが、CSVファイルを テキストエディターで開いてみて きちんとカンマ区切りの構造になっているかを確認してみて下さい。 それと、 http://blog.loaferz.com/?eid=255653​ のPHPにはコーディングミス(というか説明用に記述したときの修正漏れ)があるようです。 result.php?product=1 でリンクしているのに、$atai でそれを参照してます。 $atai = $_GET['product']; の一行を をresult.php の <?php の直後にいれてみて下さい。

noname#65793
質問者

補足

お返事ありがとうございます。 おかげ様で何とか表示できるようになりました! ひとつアドバイスを頂きたいのですが・・・ 車の詳細情報のページに行くと下部にオプションの画像が 表示されます。(もちろん車によって違います。) CSVに<img src...>と表示したい画像のパスをべた書きすれば 表示されるとは思うのですがオプションが多い時などは結構な 手間に感じてしまいます。 効率のいい方法としてどのような方法があるのでしょうか? また、これはサイトの仕様なのですが値段の表示は <td>$data{1}</td>となり<td>100万円</td>となるのですが 車が売れた場合は <td class="soldout"><img src...></td>と価格が表示されている 画像に変更になります。 ここの切り替えがスマートにできると素晴らしいのですが このようなことは可能でしょうか?

  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.2

情報不足ですね。 プログラムソースはhttp://blog.loaferz.com/?eid=255653から変更してますか? 変更してるようでしたら、ソースも公開してください。 CSVファイルも >   A   B     C     D     E    F >--------------------------------------------------------------- >1 |  1  車種名1  価格1  走行距離1  年式1  車検1   >2 |  2  車種名2  価格2  走行距離2  年式2  車検2 のような構造より、実際の内容を貼り付けてください。

回答No.1

読み込もうとしているCSVファイルと言われているファイルが、 実際にはCSVフォーマットになってないので、fgetcsv() では正常に読み込めないからでしょう。 準備するデータファイルのフォーマットを変更するか fgetcsv()を使わずに、このフォーマットのままでも読めるように、プログラムするかのどちらかになるでしょう。

noname#65793
質問者

補足

お返事ありがとうございます。 .xlsで一度保存したものを http://www.vector.co.jp/soft/win95/business/se401741.html のフリーソフトで.csvに変換しているので大丈夫かとは 思うのですが・・・ また、ソースの変更は一切しておりません。 サンプルなどがあればダウンロードし研究してみたいと思い 探してみたのですがなかなか見つからずで質問させて頂きました。 宜しくお願い致します。 参考サイトに基づきcsvのデータは以下の通りです。   | A | B | C | --------------------------------- 1 | 1  商品1 product1.jpg 2 | 2  商品2 product2.jpg