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

http://cartown.jp/
のような?carid=hogeでCSVのデータを読込み表示させたいと思っております。

方法はhttp://blog.loaferz.com/?eid=255653のサイトを参考にしてみたのですが
なぜかCSVのデータが表示されません。

phpは始めたばかりで自信がないのですがdata.csvの内容は
以下のようになっております。

   A   B     C     D     E    F
---------------------------------------------------------------
1 |  1  車種名1  価格1  走行距離1  年式1  車検1  
2 |  2  車種名2  価格2  走行距離2  年式2  車検2
・・・以下同様

サイトの説明を見ると
>商品1のリンクをクリックしたときは、商品1のデータがテンプレートに渡され、上の場合だと$data[1]の商品名がprintされます。

とあるのですがお恥ずかしながらどこがおかしいのかが全くわからずです。
是非アドバイスなどお願い致します。

A 回答 (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ソフトなどで、ファイルの存在や、サイズやパーミッションを
確認してみます。

表示されないというだけで、闇雲にプログラムだけを疑って
テストするのではなく、多角的に解析するようにしなければ
解決への糸口が見つかりませんので。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/14 13:12

・文字列は" "か ' ' で括ります。


・絶対パスは / で始まります。
・このの表示の仕様のためインデントのためのブランクを全角で記述していますが、全角ブランクは削除してご自分でインデントされてください

それから・・・これは、お気を悪くされないで頂きたいのですが、
PHPを始めたばかりということで、仕方がないところもあるのかもしれませんが、
PHP以前に、プログラムそのものの、かなり基本的なところが理解されていないように見受けられます。
ご自分で解決する努力をしないまま、このような掲示板のやりとりだけで、そのシステムを全て開発することは不可能ですし、
結果として、このような開発体制は、あなたやシステムの利用者にとって不幸なことになります。

ですので、ここに上げたソースは、あくまでもアルゴリズムのアイデア程度として受け止めて
そのままコピーしないで、どういうアルゴリズムなのか命令の1つづつを
確認し、納得しながら
ご自分のシステムの仕様にあわせて、コーディングしなおされるのが
よいかと思います。
そうやって、試行錯誤することで、皆さん自分の力にされておられますから。

この回答への補足

お返事ありがとうございます。遅くなってしまい申し訳ございません。
あれから自分なりに調べてテストを繰り返した結果なんとか
動作させることまでたどり着きました!

>それから・・・これは、お気を悪くされないで頂きたいのですが、・・・

始めたばかりで知識もなく高すぎるハードルでした。仰る通りで
返すお言葉もありません。

最後にどうしてもわからないことがあるのですが・・・
?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;
}

}

補足日時:2008/04/13 19:29
    • good
    • 0

> 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もあるなら、それなりにアルゴリズムの修正は必要ですが)

この回答への補足

お返事ありがとうございます。

画像をおくフォルダ名を./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,
ここにエラーがあるとなっているのですが%でしょうか?

補足日時:2008/04/12 17:38
    • good
    • 0

No.1です。



No.2の方も書かれていますが、CSVファイルを
テキストエディターで開いてみて
きちんとカンマ区切りの構造になっているかを確認してみて下さい。


それと、
http://blog.loaferz.com/?eid=255653
のPHPにはコーディングミス(というか説明用に記述したときの修正漏れ)があるようです。

result.php?product=1
でリンクしているのに、$atai でそれを参照してます。

$atai = $_GET['product'];
の一行を
をresult.php の <?php の直後にいれてみて下さい。

この回答への補足

お返事ありがとうございます。
おかげ様で何とか表示できるようになりました!

ひとつアドバイスを頂きたいのですが・・・
車の詳細情報のページに行くと下部にオプションの画像が
表示されます。(もちろん車によって違います。)
CSVに<img src...>と表示したい画像のパスをべた書きすれば
表示されるとは思うのですがオプションが多い時などは結構な
手間に感じてしまいます。
効率のいい方法としてどのような方法があるのでしょうか?

また、これはサイトの仕様なのですが値段の表示は
<td>$data{1}</td>となり<td>100万円</td>となるのですが
車が売れた場合は
<td class="soldout"><img src...></td>と価格が表示されている
画像に変更になります。

ここの切り替えがスマートにできると素晴らしいのですが
このようなことは可能でしょうか?

補足日時:2008/04/11 19:53
    • good
    • 0

情報不足ですね。



プログラムソースは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
のような構造より、実際の内容を貼り付けてください。
    • good
    • 0

読み込もうとしているCSVファイルと言われているファイルが、


実際にはCSVフォーマットになってないので、fgetcsv() では正常に読み込めないからでしょう。

準備するデータファイルのフォーマットを変更するか
fgetcsv()を使わずに、このフォーマットのままでも読めるように、プログラムするかのどちらかになるでしょう。

この回答への補足

お返事ありがとうございます。
.xlsで一度保存したものを
http://www.vector.co.jp/soft/win95/business/se40 …
のフリーソフトで.csvに変換しているので大丈夫かとは
思うのですが・・・

また、ソースの変更は一切しておりません。

サンプルなどがあればダウンロードし研究してみたいと思い
探してみたのですがなかなか見つからずで質問させて頂きました。
宜しくお願い致します。

参考サイトに基づきcsvのデータは以下の通りです。

  | A | B | C |
---------------------------------
1 | 1  商品1 product1.jpg
2 | 2  商品2 product2.jpg

補足日時:2008/04/11 18:49
    • good
    • 0

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