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

phpでサイトを作っています。
テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか?
-- data.txt --
aaa,data1,
bbb,data1,
ccc,data1,
ddd,data1,

-- php --
<?php
$del=$_POST['del_no'];
if($del!=""){
$data_all = file("data.txt");
for($i=0;$i<count($data_all);$i++){
$data_array = explode(",",$data_all[$i]);
if($data_array[0]!=$del){//削除データ以外を再書き込み
$txt="$data_array[0],$data_array[1],\n";

$fp = fopen("data.txt", "w");
flock($fp,1);

foreach ($txt as $line) {// 1行ずつファイルへ書き込み?
fwrite($fp, $line);
}
fclose($fp);
break;
}
}
}
?>
<b>data list</b>
<?
$data_all = file("data.txt");
for($i=0;$i<count($data_all);$i++){
$data_array = explode(",",$data_all[$i]);
echo "$data_array [0]<br />";
echo "<form method=\"post\">";
<input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST
echo "<input type=\"submit\" value=\"削除\" />";
echo "</form>";
}
?>
こうすると、テキストデータが白紙になってしまいます。
よろしくお願いします。

A 回答 (1件)

余計なことが多いわりに、必要なことをやってない感じですね。


前半部分を直すならこんな感じでどうでしょう?
(csv系の関数でやったほうが見やすくなるとは思いますが
一応原文を最大限いかしてみました)

$fname="data.txt";
$del=isset($_POST['del_no'])?$_POST['del_no']:"";
if($del!=""){
$data_all = file($fname);
$fp = fopen($fname, "w");
for($i=0;$i<count($data_all);$i++){
$data_array = explode(",",$data_all[$i]);
if($data_array[0]!=$del){
$txt="$data_array[0],$data_array[1],\n";
fwrite($fp, $txt);
}
}
fclose($fp);
}
    • good
    • 2
この回答へのお礼

yambejpさん、ありがとうございます。
余計なことが多いわりに、必要なことをやってないとは・・。
なるほど。教えていただいた内容を見るととまさにその通りですね。おはずかしい。
ちなみにcsv系の関数でやった場合はどのように書くのでしょうか。
ご教授いただけたら幸いです。

お礼日時:2008/10/06 23:22

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