phpな休日 BBS sitemap
返信用フォームを表示

[16] の最後で作成した 返信用フォームへのリンクを受け取った場合

if (bbs.php が $_GET["resformno"] を受け取ったら) {
返信対象記事と返信用フォームを表示
}
else {
ログファイルを読み込んで表示(前回 [16] での処理)
}

という処理になります。
以下 if (bbs.php が $_GET["resformno"] を受け取ったら) { の場合のソースです。

if (isset($_GET["resformno"])) { //もし $_GET["resformno"] があれば
$resformno = $_GET["resformno"]; //GETで渡された番号を $resformno に代入
$resline = file ("./bbslog.cgi"); //データを開いて
for ($i = 0; $i < count($resline); $i++) {
$list = explode("<>", $resline[$i]);
if ($resformno == $list[1]) { //ここが返信対象の親記事
$retitle = $list[5]; //返信タイトルを設定
if ($list[0] == $list[1]) { //親記事なら
print $list[5] . " ";;
print $list[2] . " ";
if ($list[4]){
print "<a href='" . $list[4] . "' target='_blank'>url</a> ";
}
print $list[7] . " [" . $list[0] . "]<br>";
print $list[6];
print "<hr>"; //記事の最後に線を表示
}
else { //返信記事なら
print "<span style='margin-left:60px;'>" . $list[5] . " "; //先頭に60ピクセルの空きを作る
print $list[2] . " ";
if ($list[4]){
print "<a href='" . $list[4] . "' target='_blank'>url</a> ";
}
print $list[7] . " [" . $list[0] . "]</span><br>";
print "<div style='margin-left:60px;'>" . $list[6] . "</div>";
print "<hr style='margin-left:60px;'>"; //記事の最後に線を表示
}
if ($resformno != $list[1]) { //次の親記事
break;
}
}
}
print "<br>"; //改行
?>
※このフォームは返信用です。上記の書き込みに対して返信できます。<br>
※メールアドレスを入力しても画面表示はされません。(管理人には伝わります)<br>
※ url は頭の h を抜かして ttp~ 書いてください。<br>
※コメント内にURLを記入すると投稿できません。(スパム対策)
<form action="./bbs.php" method="POST">
<table border="0" cellspacing="0" cellpadding="2">
<tr>
<td>name</td>
<td><input size="40" name="name"></td>
</tr>
<tr>
<td>email</td>
<td><input size="68" name="email"></td>
</tr>
<tr>
<td>url</td>
<td><input size="68" name="url"></td>
</tr>
<tr>
<td>title</td>
<td><input size="68" name="title" value="<?php print "Re:" . $retitle; ?>"></td>
</tr>
<tr>
<td>comment </td>
<td><textarea name="comment" rows="6" cols="66"></textarea></td>
</tr>
</table>
<input name="bbsresno" type="hidden" value="<?php print $resformno; ?>">
<input type="submit" value="送信">
</form>
<?php
}

$_GET["resformno"] を受け取ったらログファイルを上から走査していき、項目2が $_GET["resformno"] と同じなら表示して、違った時(次の親記事)に break で処理を終了しています。

赤文字部分ですが、受け取った resformno を hidden で隠して(表示する必要もないので)名前を bbsresno としてPOSTしています。

実行

Fatal error: Uncaught Error: Undefined constant "Y.n.j" in /home/users/2/secret.jp-final/web/phpholiday/17/index.cgi:101 Stack trace: #0 /home/users/2/secret.jp-final/web/phpholiday/index.php(334): include() #1 {main} thrown in /home/users/2/secret.jp-final/web/phpholiday/17/index.cgi on line 101