No.4ベストアンサー
- 回答日時:
>moon_nightさん
フォロー感謝です。
>msnxlさん
#1 のソースで、1つ勘違いされそうなところを見つけましたので、注釈を。
view_item(); // 記事表示関数の呼び出し
これはPHPに用意された関数ではなく、ユーザー定義関数としています。
記事表示部のロジックを省略したかったので、便宜上、ユーザー定義関数として記述しました。
view_item という関数は存在しませんので、ご注意ください。
No.3
- 回答日時:
やりかたのヒントだけ。
<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="deleat" value="消す"></p>
<form method="post" action="subject03-02.php" >
<input type="hidden" name="action" value="delete">
削除キー <input type="password" name="delkey" size=8>(記事の削除用。英数字で8文字以内)
<p>投稿番号:<input type="text" size=10 name=delcode><input type="submit" value="削除"></p>
</form>
</form>
FORMの中にFORMを入れてはいけません。
FORMの中に作るとすると、削除ボタンにNAMEをつけて、そのデータが飛んできた場合は、投稿番号の記事に削除フラグを立てればいいわけです。
削除用のFORMだけ別にできればそれのほうがやりやすいかもしれません。
例えば、
<input type="password" name="delkey" size=8>
<input type="text" size=10 name=delcode>
<input type="submit" name="delete" value="削除">
として、
# 削除ボタンが押されたら
if ($_POST['delete']) {
# パスワード確認
if ($_POST['delkey'] == $PASS) {
# 該当の記事に削除フラグを立てる
}
}
といった感じになるかと思います。
この回答への補足
$flag = 1;
if( $i < 11 ){
if($mail== ""){
# 削除ボタンが押されたら
if ($_POST['delete']) {
# パスワード確認
($_POST["password"] == "0123456789");
if ($_POST["delkey"] == $PASS) {
if( $flag == 1 ){
fwrite($file, "$name\t$mail\t$body\t$num\t$dt\n".implode("", $data));
}else{
}
# パスワード確認
($_POST["password"] == "0123456789");でポストで数字を送るような感じではだめでしょうか?
また、 フラグで1ならばfwrite($file, "$name\t$mail\t$body\t$num\t$dt\n".implode("", $data));
としてみました。素人考えでご迷惑をかけます。
No.2
- 回答日時:
↓で述べたこととかぶりますが、解らない関数を調べてから実践してみませんか?
基本的な事は、#1 で述べたつもりです。
OKWave 投稿番号、投稿削除と投稿修正機能
http://okwave.jp/kotaeru.php3?q=2216874&rev=1
私が手直ししたソースを紹介するのは簡単ですが、それだと覚える機会を失ってしまいます。
やはり、こういうことは自分で試して結果を見て、失敗や成功を乗り越えていった方が覚えが早いと思います。
「他人のソースを見て勉強する」には、ソース内に含まれている関数や仕組みを理解して使わないと応用力がつきませんので。
試してみても、解らなければ質問してください。
長くなるようであれば、この記事をブックマークに入れてチェックしておきます。
No.1
- 回答日時:
ログフォーマットがどのようになっているのか解りませんので、説明が簡単な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の関数名ではなさそうですが…。
この回答への補足
すみません。hiddenとは<input type="hidden"> の隠しデータを送信するHTMLタグのことです。ログを作成しなければならないのですね。
とりあえず、今できているスクリプトを記載します。
<?php
$reset = $_POST["deleat"];
$submit = $_POST["SUBMIT"];
if($submit == "送信"){
$name = $_POST["NAME"];
$mail = $_POST["MAIL"];
$body = $_POST["BODY"];
$hidden = $_POST["action"];
$password = htmlspecialchars($_POST["delkey"]);
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");
$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$num\t$dt\n".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="deleat" value="消す"></p>
<form method="post" action="subject03-02.php" >
<input type="hidden" name="action" value="delete">
削除キー <input type="password" name="delkey" size=8>(記事の削除用。英数字で8文字以内)
<p>投稿番号:<input type="text" size=10 name=delcode><input type="submit" value="削除"></p>
</form>
</form>
';
$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== "" ){
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 2022/05/09 21:17
- YouTube YouTubeで商標権の侵害にあたる可能性のあるアイコン(サッカークラブのロゴ)を使用しコメントをい 2 2022/09/08 18:55
- 教えて!goo 通報時の注意文について 4 2022/09/02 17:46
- その他(SNS・コミュニケーションサービス) ネット掲示板の誹謗中傷について ある掲示板に自身の悩みについて投稿し、回答欄が荒れて私もそれに応戦し 2 2022/12/13 19:20
- Google+ Google workspaceのspaceでメッセージ削除した場合について 投稿後、すぐに削除した 1 2023/02/02 20:00
- 哲学 詐欺を働く、企業をあなた方はどう思いますか?(削除される可能性が高いです。政治ですよ、せ・い・じ) 2 2022/10/28 07:58
- その他(ネットショッピング・通販・ECサイト) 今年購入した制汗クリームで自分の肌には合わなかったのでフリマアプリで出品をしました。 そしたらその日 2 2023/08/09 04:13
- 訴訟・裁判 匿名掲示板に嫌な奴の悪口書いたんが、情報開示されてばれて相手にバレてしまいました。相手弁護士からは、 2 2023/05/28 09:17
- X(旧Twitter) ツイッターを良く利用されている方に質問させて下さい 1 2023/03/20 13:59
- 教えて!goo 知恵袋と教えてgooを比較 7 2022/04/22 13:26
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
投稿記事を論理削除
-
ヤフー知恵袋のIdを削除したら...
-
教えて!gooについての質問です...
-
削除はどのように行われていま...
-
知恵袋って、一回質問を運営に...
-
フェイスブックのいいね
-
インスタのストーリーに芸能人...
-
インスタグラムで投稿する際に...
-
インスタでストーリーや投稿で...
-
Instagramである人を私のストー...
-
いま、人を電話で起こすのに困...
-
インスタで元々あった投稿を一...
-
嫌いな異性or興味が全くない異...
-
ひかりTVの事で質問があります。
-
インスタの通話中でアラームな...
-
Facebookの自己紹介は編集でき...
-
顔見せてと言われたとき。。。
-
インスタで他校の異性にDMする...
-
FaceBookで写真の入れ替え
-
Twitterにおける「タグ」や「片...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
投稿記事を論理削除
-
これ削除理由分かりますか?
-
なにをしたらBANされますか?
-
契約書の訂正の仕方
-
削除はどのように行われていま...
-
なんで削除されたんですか?
-
質問や回答を何度削除されても...
-
知恵袋って、一回質問を運営に...
-
「教えて!goo」って、おも...
-
口コミを書き換えられた
-
通報してから削除までどのくら...
-
Word目次について
-
回答数が4個なのにベストアン...
-
回答がついた質問は月に一度な...
-
教えて!good新しく追加して欲...
-
投稿削除は出来るのでしょうか?
-
教えて!goo での質問の有効期...
-
私は、質問をよく削除されます...
-
質問の削除の仕方が分かりません
-
毎回弁護士が何ちゃらの投稿し...
おすすめ情報