プロが教える店舗&オフィスのセキュリティ対策術

先日より質問に対しコメントありがとうございます。
教えていただいた内容と自分でやった結果3つのSQLでデータを出力し出力順を揃えた方法で表ができました。
これをCSV形式で出力したいのですがこのまま出力できるのでしょうか?それとも別途方法をとる必要があるのでしょうか。
自分の中で今ひとつまとまらないので改めて質問させていただきます。
ソースへの指摘併せコメントよろしくお願いします。

※現ソース
<HTML>
<BODY>
<?PHP
//DB接続部省略
$sql="SELECT I.ITEM_ID,I.ITEM_NAME FROM ITEMS AS I,LIST AS L・・・(略)";

$sql2="SELECT A.SHOP_ID,A.SHOP_NAME,A.ITEM_NAME,
IF(L.ITEM_ID=A.ITEM_ID,'○','') FROM・・・(略)";

$sql3="SELECT S.SHOP_ID,S.SHOP_NAME FROM SHOP AS S ・・・(略)";

$rs=mysql_query($sql,$db);
$rs2=mysql_query($sql2,$db);
$rs3=mysql_query($sql3,$db);

$line=mysql_num_rows($rs);
$line2=mysql_num_rows($rs2);
$line3=mysql_num_rows($rs3);

print("<TABLE border=1>");
print("<TR>");
print("<TD>店舗名</TD>");

for($i=0;$i<$line;$i++)
{
$row=mysql_fetch_row($rs);
print("<TD>".$row[1]."</TD>");
}
print("</TR>");
print("<TR>");

for($i=0;$i<$line3;$i++)
{
$row3=mysql_fetch_row($rs3);
print("<TD>".$row3[2]."</TD>");

for($j=0;$j<$line;$j++)
{
$row2=mysql_fetch_row($rs2);
if($row2[3] == "")
{
print("<TD width=25> </TD>");
}
else
{
print("<TD width=25>".$row2[3]."</TD>");
}
}
print("</TR>");
}
print("</TABLE>");
mysql_free_result($rs);
mysql_free_result($rs2);
mysql_free_result($rs3);
mysql_close($db);
?>
</BODY>
</HTNL>

A 回答 (2件)

下記URLにマニュアルがありますが、PHPにはfputcsvという便利な関数があります。

文字通りCSV形式で配列を出力してくれます。

PHPのバージョンにもよりますので、まずは下記URL内のサンプルが動くかどうか試してはいかがでしょうか。


それができればこのような感じでしょうか、(試したコードではないので、間違っていたらすみません。)
$fp = fopen('file.csv', 'w');
foreach (mysql_fetch_row($rs) as $item) {
fputcsv($fp, $item);
}
fclose($fp);
のようにすれば、$itemをaaa,vvv,fgfgg,ghhh\r\nのように書き出してくれるようです。

参考URL:http://php.plus-server.net/function.fputcsv.html …

この回答への補足

ありがとうございます。
PHPが5.1.4、MySQLが5.0.21です。
PHPのバージョンがどうかが原因かわからないのですが、
教えていただいたページの例のソースだけをファイルに
書いてPHPファイルに保存し、IEで呼び出しましたが動きませんでした。
テスト方法が誤っているのか使えないのかどちらでしょうか?

補足日時:2006/10/12 09:22
    • good
    • 0
この回答へのお礼

補足後の経過ですが、サンプルは以下のソースで動きましたが
数点不明な動きがあります。
※ソース
<?PHP
Header("Content-Disposition: attachment");
Header("Content-Type: application/octet-stream; filename=test.csv");
$list = array ('aaa,bbb,ccc,dddd','123,456,789','"aaa","bbb"');
$fp = fopen('test.csv', 'w');
foreach ($list as $line) {
fputcsv($fp, split(',', $line));
}
fclose($fp);
?>

この状態でPHPから呼び出すと、
1.開く/保存のポップに表示されるファイル名がソースのPHPファイル名になっている。(例えばdownlord.php)

2.上記で開く/保存すると、空のようなファイルが開く。
 また、開いたファイルのファイル名が「download[1].php」のようになる。

3.サーバ側にはtest.csvが作成されている。

どうしたらファイルをローカル側に作成できるのでしょうか。
※できればサーバにファイルを残したくない。

よろしくお願いします。

お礼日時:2006/10/12 15:35

動作しないとのことですが、エラーメッセージが出たのでしょうか。


$fp = fopen('file.csv', 'w');
とありますので、このスクリプトを実行した同じフォルダ(ディレクトリ)にファイルを保存します。
ttp://localhost/test/testcsv.php を実行した場合
ttp://localhost/test/file.csv というファイルが生成されるということになります。
Linux/Unixの場合は、ディレクトリに書き込み権限がないと書き込みができません。

この回答への補足

ありがとうございます。
機能はしたのですが、 #1 のお礼に書いているような問題が発生しています。
ちなみにOSはWindowsです。

また、不安な点ですが、CSVの場合HTMLのTableのように
何列目から出力というような事ができるのか・・・。

ご存知でしたら併せてご意見よろしくお願いします。

補足日時:2006/10/12 16:00
    • good
    • 0

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