ここから本文です

xanpp PHP掲示板作成について 掲示板の構成は <?php header('Content-type:text...

kod********さん

2014/6/2814:41:05

xanpp PHP掲示板作成について
掲示板の構成は
<?php
header('Content-type:text/html; charset="utf-8"')
?>

<form method="post" action="">
お名前: <input type="text" name="name"><br>
メール: <input type="text" name="mail"><br>
題 名: <input type="text" name="title"><br>
<textarea name="contents" cols="60" rows="5"></textarea><br>
<input type="submit" name="write" value="送信">
</form>
<hr>
<?php
$lines = file('bbs1.txt');

if (isset($_POST['write'])) {
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'utf-8');
$mail = htmlspecialchars($_POST['mail'], ENT_QUOTES, 'utf-8');
$title = htmlspecialchars($_POST['title'], ENT_QUOTES, 'utf-8');
$contents = htmlspecialchars($_POST['contents'], ENT_QUOTES, 'utf-8');
$contents = str_replace("\r\n", "<br>", $contents);
$contents = str_replace("\r", "<br>", $contents);
$contents = str_replace("\n", "<br>", $contents);
$time = date("Y/m/d H:i:s");
$data = "$name\t$mail\t$title\t$contents\t$time\n";
array_unshift($lines, $data);
}

foreach($lines as $line) {
$line = rtrim($line);
$items = explode("\t", $line);
print "<b>{$items[2]}</b> 投稿者:";
if ($items[1]) print "<a href='mailto:{$items[1]}'>";
print $items[0];
if ($items[1]) print "</a> ";
print "投稿時間:{$items[4]}";
print "<p>{$items[3]}</p><hr>\n";
}

$fp = fopen('bbs1.txt', 'w');
foreach($lines as $line) fputs($fp, $line);
fclose($fp);

?>

記事番号:<input type="text" name="delno">
削除キー: <input type="password" name="delkey2">
<input type="submit" name="delete" value="記事削除">
</form>
<hr>
</body>

としていますが 記事削除機能を付けたのですが「記事削除」を押しても何も起こらないので
「記事削除」を押したら l投稿者により削除されました。l と表示させたいのですが
この場合どうすればいいのですか?

・掲示板過去ログから直接メッセージ「記事」を消すとエラーが出ますがこの場合どうすればいいいのですか? ソースコードの編集ですか?

回答宜しくお願いします。

閲覧数:
96
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

agu********さん

2014/6/2901:00:05

>記事削除機能を付けたのですが

記事削除のform要素がありません(input要素とform要素の「閉じタグ」だけがある)。またスクリプトに削除機能が見当たりません。そもそも記事番号が表示されないんですが、記事番号には何を入力させるのでしょうか。また記事投稿時に(あとで削除するときのための)削除キーの入力・保存がありません。

なお記事番号は記事データの登録時に付番しておかないといけません(表示した並びだと表示~削除の間に他の端末から削除処理されると番号が変わるので)。

というか、ファイルロックをしていないんですが・・。array_unshiftで先頭に割り込ませるならファイルロックして読み込み→先頭に挿入→全行を書き戻してロック解除でないとマズイです。

まぁ悪いことはいいませんからデータベースを使いましょう(MySQLが使えない環境で実運用するということならSQLiteでもいいです)。そうすれば保存時にhtmlspecialcharsしたり改行をbr要素に置換したりということはしなくていいです(表示するときにnl2br(htmlspecialchars($str, ENT_QUOTES))だけすればいい)。次善の策としてはCSV形式(fgetcsv/fputcsvを使う)でしょうか。こちらも「改行を含む文字列」をそのまま扱えます。

  • 質問者

    kod********さん

    2014/6/2912:36:09

    具体的なソースコードを書いてくれるとありがたいです

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2014/6/29 22:07:55

驚く まだまだ未解決ですが 回答うりがとうございます。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる