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

掲示板の管理画面の様な感じで、
PHPでCSVファイル内の一行を編集するフォームを作りたいと思っています。

フォームには新規投稿と、編集用のボタンがあり、
編集用で送られてきたものを受け取るPHPプログラムは以下の通りです。

if($mode == "edit"){
foreach($csv as $val){
list($li_id, $li_date, $li_comment) = split("\t",$val);
$fp = fopen(csv' , 'w');
if($li_id == $info_no){
$csv[$li_id] = "$li_id\t$date_y/$date_m/$date_d\t$comment\t\n";
}else{
$csv[$li_id] = "$li_id\t$li_date\t$li_comment\t\n";
}
}
$fp = fopen('csv' , 'w');
fputs ($fp, $csv[$li_id]);
for ($i=0; $i<1000; $i++){
fputs ( $fp,$csv[$i]);
}
fclose($fp);
}

としたのですが、うまくいきませんでした。
なぜか、編集した文章と、最後に新規で追記した文章が追加されてしまいます・・・・。
「あいうえお」を新規で追記した後、

1. あいうえお
2. かきくけこ
3. さしすせそ
4. たちつてと

の2を編集すると

1.あいうえお
1.あいうえお
2.かきくけこ(編集した)
3.さしすせそ
4.たちつてと

となってしまいます。。。。
新規で追記されたものがない場合は
空行が追記されてしまいます。

いろいろ試行錯誤したのですが、さっぱりわかりません。
教えて下さい。

A 回答 (1件)

こんにちわ。


私の場合ですが・・・
CSVでの編集だと、一度全てのデータを配列に格納し、CSVを空にします。
配列から該当するデータの変更を行い
CSVに全て書き込む手順で行っています。
ある特定の行のみ書き換えるってことはできなかったと思います。
参考ソースがなくてすみません・・・。

蛇足ですが、
CSVで何かをするときはファイルにロックを欠けるようにしたほうがいいですよ。
タイミングによっては、変更されてないなんてこともあるかもしれませんので・・・
    • good
    • 0
この回答へのお礼

ありがとうございます。
一度すべてを空にして、、、、、
というのはわかるのですが、
自分なりにソースを記入してみたのが、上記のソースなんです。。。。

それでもうまくいかないので、
詳しく教えていただけたらと思ったのですが、、、。

お礼日時:2009/02/03 14:05

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