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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
投稿記事を論理削除
-
契約書の訂正の仕方
-
いま、人を電話で起こすのに困...
-
インスタのストーリーで間違え...
-
インスタに水着姿をあげている...
-
インスタグラムで投稿する際に...
-
インスタの通話中でアラームな...
-
インスタのストーリーに芸能人...
-
インスタでストーリーや投稿で...
-
嫌いな異性or興味が全くない異...
-
インスタの投稿を全て消しても...
-
インスタで他校の異性にDMする...
-
知らない番号からSMSが届きまし...
-
卒アルの写真をTwitterのDMで他...
-
インスタにあげる写真を必死に...
-
インスタの写真を長方形のまま...
-
LINEのホーム画をよく変えるの...
-
僕はフェイスブックで本当の生...
-
Yahoo知恵袋での画像無断転載に...
-
インスタで元々あった投稿を一...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
投稿記事を論理削除
-
真摯に回答したのに削除された...
-
口コミを書き換えられた
-
契約書の訂正の仕方
-
なぜ「質問者が求める回答」な...
-
これ削除理由分かりますか?
-
私は、質問をよく削除されます...
-
質問消えた
-
通報してから削除までどのくら...
-
Word目次について
-
回答がついた質問は月に一度な...
-
削除要請
-
教えて!gooについての質問です...
-
質問箱やってて写真のようにき...
-
このサイトでの禁止事項を教え...
-
教えて!good新しく追加して欲...
-
ヤフー知恵袋のIdを削除したら...
-
FC2アクセス解析の一部のアクセ...
-
ウィキペディアで削除依頼の方...
-
削除はどのように行われていま...
おすすめ情報