質問: 投稿記事を論理削除 phpで掲示板の機能の一つである論理削除機能を作成しようと思っています。削除キーに削除パスワードを入力して、削除ボタンを入力(または投稿番号を指示)したときに投稿者の記事を削除(物理削除ではありません)するようにしたいのです。投稿番号や削除キー、削除ボタンは作成したのですが、hiddenやif文を使用することまではわかったのですが、肝心のスクリプト部分がどうしてわからないのです。なにか例のようなものでも記述していただけないでしょうか? よろしくお願いいたします。
回答: ログフォーマットがどのようになっているのか解りませんので、説明が簡単なcsv形式だと仮定します。 名前<>本文<>記事no<>削除キー ken<>こんにちは<>100<>1234 という形式のcsvがあるとします。 これにもう1つ、論理削除が行われているかどうかのフラグ用のカラムを追加すればよいと思います。 論理削除フラグ<>名前<>本文<>記事no<>削除キー 1<>ken<>こんにちは<>100<>1234 ログを読み込むときに、論理削除フラグを読み込んで表示するか否かを判定すれば、期待通りの動作になるでしょう。 (上例では、1 なら論理削除されたと見なして表示せず、0なら論理削除されていないと見なして表示する、という動作を想定しています。) カラムを増やしたくないという場合は、削除キーを格納している箇所で「削除キー+削除キー許可していない文字+論理削除フラグ」という連結データにする、という代用法もあります。 例えば、「削除キーに @ は使えない」ようにして、論理削除したときには削除キーを格納している部分を「1@1234」とする。 (削除キー = 1234, 論理削除フラグ = 1 です。) 記事表示時に、削除キーをチェックして論理削除したか否かを判定する。 以下に、「削除キー+論理削除フラグ」の複合型の例を示します。 /* 論理削除処理 */ $dat = "$name<>$msg<>$item_num<>1@".$del_key;// 名前, 本文, 記事no, 削除キー + 論理削除フラグの初期化 /* 通常の記事投稿処理 */ $dat = "$name<>$msg<>$item_num<>0@".$del_key;// 名前, 本文, 記事no, 削除キー + 論理削除フラグの初期化 /* 記事表示部 */ list($name, $msg, $item_num, $delkey_dat) = explode('<>', $dat);// 記事を展開 if(preg_match('/'.'^0@'.'/', $delkey_dat, $match)){// 論理削除フラグが 0 だった時 view_item();// 記事表示関数の呼び出し } > hiddenやif文を使用することまではわかったのですが、肝心のスクリプト部分がどうしてわからないのです。 参考までにお聞きしたいのですが、hidden とは何を指すのでしょう? phpの関数名ではなさそうですが...。