PHPで掲示板の機能の一つである論理削除機能を作成しようと思っています。削除キーに削除パスワードを入力,投稿番号を指示したときに投稿者の記事を削除(物理削除ではありません)するようにしたいのです。スクリプトの一部を記述します。全文は補足に記述させていただきます。削除パスワードの送り方、そのパスワードかを確認、投稿番号の指示の仕方などお教えいただけないでしょうか?
流れ的には記事を書くときに、削除キーに削除パスワードを入力、
投稿を送信したあとに、投稿番号を指示して削除キーに入力した
削除パスワードを入力、削除ボタンを押して投稿を削除としたいのです。
$data = file("data.txt");
$i = 1;
foreach($data as $value){
$view = explode("\t", $value);
list($name, $mail, $body, $dt) = explode("\t",$value);
if( $i < 11 ){
if($mail== ""){
# 削除ボタンが押されたら
if($submit =="削除"){
$submit = $_POST["delete"];
}
#このパスワードなら
if($_delkey == "0123456789"){
$_POST["num"];
}
if ( $num == $view[3] && $pass == "0123456789"){
}
echo "お名前:$view[0]$view[3]<br>";
echo "本文:$view[2]<br>";
echo '<hr size="1" width="80%"><br>';
} else {
echo "お名前:<a href=\"mailto:$mail\">$view[0]</a>$view[3]<br>";
echo "本文:$view[2]<br>";
echo '<hr size="1" width="80%"><br>';
}
} $i++;
}
No.2ベストアンサー
- 回答日時:
手順を説明します。
1、投稿時にDELETEキーを送る。
>削除キー <input type="password" name="delkey" size=8>(記事の削除用。英数字で8文字以内)
としているので問題なし。
英数字以外や最大文字数以上、もしくは削除キーなしが送られてきたときの処理とかを考えなくてはいけませんが、その辺は適当に。
2、データを保存する
>fwrite($file, "$name\t$mail\t$body\t$dt\n\t\t$flag=1".implode("", $data));
ここで記録をしているようですが、ココにDELキーや理論削除フラグの項目を追加します。
あと$dt(記事番号?)のところに \n が入っていますが、これだと正常に動きません。
3、記事表示
記事表示と削除は同時にしてもいいですが、分かりにくいので分けたほうがいいかもしれません。
foreach($data as $value){
の中に同じ
foreach($data as $value){
が入っているので、不具合が起こる場合があります。
$valueを変えたほうがいいと思います。
4、削除する。
できれば投稿時のFORMと分けた方がいいです。
できないわけではありませんが、処理が混乱するので。
No.1
- 回答日時:
>削除パスワードの送り方、そのパスワードかを確認、投稿番号の指示の仕方などお教えいただけないでしょうか?
削除機能をつけたいけど、やり方が分からないのでしょうか。
分かるところはどこですか?
$view = explode("\t", $value);
list($name, $mail, $body, $dt) = explode("\t",$value);
で記録されたデータを分割しているのですが、パスワードのデータはありませんね。
ここらへんをいじる。
例えば
list($name, $mail, $body, $dt, $pass) = explode("\t",$value);
として、
if($_delkey == $pass){
$i = 1;
foreach($data as $value){
$view = explode("\t", $value);
list($name, $mail, $body, $dt ,$del_flag) = explode("\t",$value);
if ($_POST["num"] == $dt) {
$value[$i] = "$name\t$mail\t$body\t$dt\t1\n";
}
$i++;
}
とか。
データの型は分からないので予想ですが。
ちなみに、削除パスワードの送り方は、タダ単にFORMを作って送ればいいだけです。
この回答への補足
わかるところは「そのパスワードかを確認」というくらいです。
それも、正解なのかは自信がありませんが。
削除パスワードの送り方はechoとして他のものといっしょに送信しています。
hiddenには投稿番号とその照合などで使おうと思っています。
まだ途中ですが、このような感じで作成しています。
<?php
$hidden = $_POST["NO"];
$text = $_POST["delcode"];
$reset = $_POST["delete"];
$sub = $_POST["DELETE"];
$submit = $_POST["SUBMIT"];
$password =$_POST["delkey"];
if($submit == "送信"){
$num = $_POST["num"];
$name = $_POST["NAME"];
$mail = $_POST["MAIL"];
$body = $_POST["BODY"];
if($name== "" or $body == ""){
header("Location:subject03-02false.php");
exit;
}
#HTML無効
$name = htmlspecialchars("$name");
$mail = htmlspecialchars("$mail");
$body = htmlspecialchars("$body");
#クォートを取り除く
if(get_magic_quotes_gpc()){$neme = stripslashes("$name");}
if(get_magic_quotes_gpc()){$mail = stripslashes("$mail");}
if(get_magic_quotes_gpc()){$body = stripslashes("$body");}
#本文を1000文字まで表示
$body = substr($body, 0, 1000);
$body = str_replace("\r\n","<br>", $body);
$body = str_replace("\t", " ", $body);
$dt = date("y/m/d H:i:s");
$N = "NO";
$data = file("data.txt");
$count = count ($data);
$num = $count++;
#array_shift($data);
$file = fopen("data.txt", "w");
fwrite($file, "$name\t$mail\t$body\t$dt\n\t\t$flag=1".implode("", $data));
fclose($file);
header("Location:subject03-02.php");
exit;
}
# ノーキャッシュヘッダー
header("Expires: Mon,26 Jul 1997 05:00:00 GMT");
header("Last-Modified:".gmdate("D,d M Y H:is")."GMT");
header("Cache-Control: no-cache,must-revaildate");
header("Prodma:no-cache");
echo '
subject03-BBS
<h1>subject-BBS</h1>
<form method="post" action="subject03-02.php" >
お名前 <input type="text" size="20" maxlength="40" name="NAME">
メール <input type="text" size="30" maxlength="60" name="MAIL">
<p>本文<br></p>
<textarea rows="20" cols="80" wrap="soft" name="BODY"></textarea>
<p><input type="submit" name="SUBMIT" value="送信"><input type="reset" name="delete" value="消す"></p>
削除キー <input type="password" name="delkey" size=8>(記事の削除用。英数字で8文字以内)
<p>投稿番号:<input type="text" size=10 name="delcode"><input type="submit" neme="DELETE"value="削除"></p>
<input type="hidden" name="NO" value="$view[3]">
</form>
';
$data = file("data.txt");
$i = 1;
foreach($data as $value){
$view = explode("\t", $value);
list($name, $mail, $body, $dt,$password,$) = explode("\t",$value);
if( $i < 11 ){
if($mail== ""){
#このパスワードならPOSTで送る。
if($_delkey == "0123456789"){
$_POST["num"];
}
$flag = 0;
$flag = 1;
# 削除ボタンが押されたら
if($submit =="削除"){
$sub = $_POST["delete"];//入力された削除キー
$data = file("data.txt");
foreach( $data as $value){
explode("\t",$value);
if($num == $value[3] && $delete == $value[1]){//$value[0]が投稿番号$valet[1]が削除キーと仮定した場合
//削除フラグを1にする処理
if($flag == 1);
}
}
#新しい投稿かつ、そのパスワードが0~9ならPOSTでdeleteを送る。
if ( $num == $view[3] && $pass == "0123456789"){
}
echo "お名前:$view[0]$view[3]<br>";
echo "本文:$view[2]<br>";
echo '<hr size="1" width="80%"><br>';
} else {
echo "お名前:<a href=\"mailto:$mail\">$view[0]</a>$view[3]<br>";
echo "本文:$view[2]<br>";
echo '<hr size="1" width="80%"><br>';
}
} $i++;
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こちらはただの直列処理ですか?
-
PHPでこのコード自体に意味は無...
-
php 入力画面から確認表示画面...
-
PHP8を使うと、大量のWarningが...
-
アップロード画像数でCSSを分け...
-
PHPSpreadsheetを使って関数を...
-
phpでcookieがうまく保存されない
-
ワードプレスサイト PHP8.0.25...
-
入力フォームの空白や改行を制...
-
PHP一覧表示した項目にリンクを...
-
オススメのプログラミングスク...
-
PHPでのパスワード制限のセキュ...
-
htmlのエラーについて(デバッグ)
-
アマゾンのような評価の星を選...
-
SFTPなどは使わないホームペー...
-
ファイルアップロードに関して...
-
Q&Aサイトを作成していてURLの...
-
画像が表示出来ません。
-
phpでPEAR::DBを使っているので...
-
php 確認表示画面で値をSESSION...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ニンテンドーアカウントを削除...
-
質問箱で通知たまってるのに、...
-
VBA実行後、キー入力ができない
-
ニコニコ動画 動画削除につい...
-
メニューをグレー表示でなく非...
-
Excel vba 重複削除、連番に並...
-
Cookieは定期的に削除するべき...
-
ページ番号を削除できない!
-
もう一回質問 3DSを売ります。 ...
-
clientmqueueに溜まったキュー...
-
回答が質問者から拒否されたら...
-
ASUSのLive Updateの削除方法
-
報告・削除の基準がおかしくな...
-
削除依頼の通報を何回かしてい...
-
教えてグーで 回答がつかなくて...
-
質問や回答が削除
-
テキストファイルの重複行を削...
-
2ちゃんねる(PINKちゃんねる...
-
投稿記事を論理削除2
-
スマホの実行中のramを減らしたい
おすすめ情報