- ベストアンサー
PHPデータの削除と個々の時間を書き出す
- PHPでプログラムを作成したいのですが、個々の時間を書き出すログアウト機能が実装できません。
- リクエストから受け取ったデータに基づいてログインフォームを表示し、メールアドレスや名前などを記録することができます。
- また、リクエストから受け取った削除データに基づいて、記録されたデータから指定した名前を削除することもできます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
次のような方法でデータ削除するようにプログラムを作っては如何でしょうか? 【処理1】 履歴ファイル(rireki.data)を読み込みでオープン 【処理2】 対象データ削除後のファイル(rireki.tmp)を書き込みでオープン 【処理3】 履歴ファイル(rireki.data)のデータを1行読み込む。(データがない場合は処理6へ) 【処理4】 削除対象の名前を持つデータ行であれば次の行データを参照する(処理3へ) 【処理5】 削除対象の名前を持つデータ行でなければ 対象データ削除後ファイル(rireki.tmp)に行データを書き込む(処理3へ) 【処理6】 履歴ファイル(rireki.data)を削除 【処理7】 対象データ削除後のファイル(rireki.tmp)を履歴ファイル(rireki.data)のファイル名称に変更 以下は実装サンプルになります。ご参考までに。 <?php //受け渡しデータ //ml:メールアドレスのkey,メールアドレスは半角英数字24桁 //name:名前のkey,名前は半角英数字9桁 //pass(メールアドレスと同じ):パスワードのkey,半角英数字24桁 //パラメータの取得 $ml=trim($_REQUEST['ml']); $name=trim($_REQUEST['name']); $pass=trim($_REQUEST['pass']); $sakujo=trim($_REQUEST["sakujo"]); if (trim($ml)) { $fp=fopen("./rireki.data","at"); $today = date("Y/m/d H:i:s"); fputcsv($fp, array($ml, $name, $pass, $today), ",", "\""); fclose($fp); } else if (trim($sakujo)) { //対象データ削除後の履歴ファイル $newfp = fopen("./rireki.tmp", "a"); //履歴ファイル $fp=fopen("./rireki.data","r"); while(($data = fgetcsv($fp)) !== FALSE) { if ($data[1] == $sakujo) { continue; } //対象データ削除後の履歴ファイルに書き込み fputcsv($newfp, $data); } fclose($fp); fclose($newfp); //履歴ファイル削除 unlink("./rireki.data"); //対象データ削除後の履歴ファイルを履歴ファイルに名前変更 rename("./rireki.tmp", "./rireki.data"); } ?> <html> <head> <title>QNo6564799</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <form action="ninsyo.php" method="post"> 名 前:<input type="text" size="10" name="name" value=""><br> パスワード :<input type="text" size="25" name="pass" value=""><br> メールアドレス:<input type="text" size="25" name="ml" value=""><br> <input type="submit" value="ログイン"><br> </form> <form action="ninsyo.php" method="post"> <input type="text" size="10" name="sakujo"> <input type="submit" value="名前deログアウト"> </form> </html>
お礼
回答ありがとうございます。 参考にさせて頂きました。 #1さん、お礼が遅くなってしまい、申し訳ありません。 rename("./rireki.tmp", "./rireki.data"); ここの所で、Warning: rename(./rireki.tmp,./rireki.data) [function.rename]: Permission denied in のように表示されてしまいます。 パーミッションがrireki.tmpとrireki.data共に777です。 インターネットを使い、調べましたが良く分からない状態です。 ワーニングを表示させないようにするには、どのようにすれば良いのか 分かる方がいましたら、教えて頂けると嬉しいです。