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

log.txt ファイル の中身が下の様になっていた場合、削除したい記事番号を選び削除キーを押したら
選んだ記事番号の記事を削除するにはどうしたらよいでしょうか?

◆ log.txtファイルの中身
1 あああ君 おはよう

3 かかか君 良い天気ですね


6 そそそ君 明日は晴れるでしょ

※ 記事番号($no) 名前($name) 内容($body)と配列がなっています。(全角の空白で区切ってます)

◆ 削除したい記事番号を選ぶ所のファイル名は 「file01.php」 としています。
  「file01.php」では次ぎの様に削除キーを設定しています。

<table><tr><td>
<form name="form" action="file02.php" method="POST">
<input type="text" name="delkey" size="8">
<input name="Submits" type="submit" value="削除"></form>
</td></tr></table>

◆ 「file01.php」からのデーターの受け取りファイル名は 「file02.php」としています。
  「file02.php」では次ぎの様にしてデーターを受け取る様にしています。

<?php
$delkey = $_REQUEST["delkey"];
$data = file("log.txt");
for($i=0; $i<sizeof($data); $i++){
list($no,$name,$body) = explode( " " , $data[$i]);
if($no == $delkey){
//・・・記事削除処理
}
}



?>


◆ 書込みは次ぎの様にしています。
$fp = fopen("log.txt","w");
$ndata = implode( " " , array($no,$name,$body."\n") );
fputs($fp,$ndata);
fclose($fp);

ここまではやってみましたが、ここから、どのような仕組みで選んだ記事番号の記事を削除したらよいのか分らないので教えて下さい?

また、記事削除の処理をした場合、ログファイルを元のと書きかえるいはどうしたらよいのでしょうか教えて下さい?

例えば、選んだ削除番号が「3」だった場合など・・・記事削除処理のところはどうしたらよいのでしょうか?
if の所では、記事番号($no)が選んだ削除したい記事番号($delkey)と等しいなら、・・・記事削除処理
と言う様にしています。
記事削除処理のところは、記事削除の仕組み仕方が分らないので空白となっています。

以上、出来れば詳しく教えて頂けると助かります。宜しくお願い致します。

A 回答 (2件)

あなたの記述を合わせただけです。


$delkey = $_REQUEST["delkey"];
$data = file("log.txt");
$fp = fopen("log.txt","w");
for($i=0; $i<sizeof($data); $i++){
if($no != $delkey){
$ndata = implode( " " , array($no,$name,$body."\n") );
fputs($fp,$ndata);
}
}
fclose($fp);

この回答への補足

でわ、20pt(良回答)は ANo.2 の方に付けさせて頂きます。

本当に有り難う御座いました。

補足日時:2007/12/15 13:46
    • good
    • 0
この回答へのお礼

taketan_mydns_jpさんからの ANo.2 のご説明を参考に選んだ記事番号の記事を削除する事が出来ました!

私の望むご回答下さり感謝と共に本当に有り難う御座います。
すごく助かりました。とても嬉しく思っています。

また、私が何かPHPの事で質問すると想いますので、私の質問を見かけた際は、是非また宜しくお願い致します。

今回は、本当に的を得たご回答下さりまして有り難う御座いました。

お礼日時:2007/12/15 13:43

#1です。

微妙に誤りが。。。。


$delkey = $_REQUEST["delkey"];
$data = file("log.txt");
$fp = fopen("log.txt","w");
for($i=0; $i<sizeof($data); $i++){
list($no,$name,$body) = explode( " " , $data[$i]);
if($no != $delkey){
fputs($fp,$data[$i]);
}
}
fclose($fp);

file()でメモリ上に全データを読込み、$no != $delkeyのとき、だけlog.txtに上書きします(一致する場合はスルー)。そうすれば結果的に削除された物は記録されません。

この回答への補足

この度は、ご回答下さり有り難う御座います。

上書きについては理解できました。
一つ質問なんですが、もし~の条件のところは…
「if($no != $delkey)」と「if($no == $delkey)」これは同じ意味なのでしょうか?

意味が違うとすれば「if($no != $delkey)」は、どう言う意味なのでしょうか?
もし宜しければ教えて頂けると助かります。

補足日時:2007/12/15 11:21
    • good
    • 0
この回答へのお礼

「if($no != $delkey)」の質問につきまして…
$no と $delkey が等しくないならば…と言う意味ですね。

改めて、上書きについては有り難う御座いました。

お礼日時:2007/12/15 11:50

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