こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

テキストデータから指定行の削除

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>";
}
?>
こうすると、テキストデータが白紙になってしまいます。
よろしくお願いします。

投稿日時 - 2008-10-05 13:07:27

QNo.4378929

すぐに回答ほしいです

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

余計なことが多いわりに、必要なことをやってない感じですね。
前半部分を直すならこんな感じでどうでしょう?
(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);
}

投稿日時 - 2008-10-05 14:42:18

お礼

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

投稿日時 - 2008-10-06 23:22:38

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問