DB連携掲示板U
今度は返信の出来るデータベース連携掲示板スクリプトを作ってみました。まだ一部未完成な所もあるのんですが、一応正常に動いているので、アップしておきましょう(^^ゞ
テーブル構造
通常のPHP掲示板スクリプトと同じで、返信情報を格納する為の項目「ress」を新たに設けました。プライマリーキーは「num」に設定してあります。
[テーブル作成文]
create table komobbs2 (num int,ress int,date varchar,name varchar,email varchar,hp varchar,subject varchar,comment varchar,host varchar,agent varchar,primary key (num));
インデックス番号
列名
データ型
0 num int 1 ress int 2 date varchar 3 name varchar 4 varchar 5 hp varchar 6 subject varchar 7 comment varchar 8 host varchar 9 agent varchar *varchar・・・可変長文字列
プログラム内容
今回のも記事の最大記録数とかは設定していません。尚、記事の表示は10件ずつにしていますが、返信記事との絡みもあり、この辺がまだ不完全です。お許しあれ_(._.)_
<HTML>
<HEAD>
<TITLE>PostgreSQL掲示板U</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFBF0" LINK="red" VLINK="red">
<FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="regist">
<DIV ALIGN="CENTER">
<P><FONT SIZE="6" COLOR="green">PostgreSQL掲示板U</FONT></P>
<P>
<TABLE BORDER="0" CELLSPACING="1" WIDTH="71%">
<TR>
<TD WIDTH="17%">
<P ALIGN="RIGHT">お名前:
</TD>
<TD WIDTH="83%"><INPUT TYPE="TEXT" NAME="name" SIZE="19"></TD>
</TR>
<TR>
<TD WIDTH="17%">
<P ALIGN="RIGHT">E-mail:
</TD>
<TD WIDTH="83%"><INPUT TYPE="TEXT" NAME="email" SIZE="30"></TD>
</TR>
<TR>
<TD WIDTH="17%">
<P ALIGN="RIGHT">HomePage:
</TD>
<TD WIDTH="83%"><INPUT TYPE="TEXT" NAME="hp" SIZE="30"></TD>
</TR>
<TR>
<TD WIDTH="17%">
<P ALIGN="RIGHT">題目:
</TD>
<TD WIDTH="83%"><INPUT TYPE="TEXT" NAME="subject" SIZE="40"></TD>
</TR>
<TR>
<TD WIDTH="17%">
<P ALIGN="RIGHT">コメント:
</TD>
<TD WIDTH="83%"><TEXTAREA NAME="comment" ROWS="5" COLS="52"></TEXTAREA></TD>
</TR>
<TR>
<TD WIDTH="17%"> </TD>
<TD WIDTH="83%">
<?php
if ($flags == 'return') {
echo "<input type=submit value=[" . $return . "]に返信>\n";
echo "<input type=hidden name=ress value=$code>\n";
} else {
echo "<input type=submit name=submit value=書き込み/更新> <input type=reset name=reset value=リセット>\n";
}
?></TD>
</TR>
</TABLE>
</P>
<P>
<FONT SIZE="2" COLOR="red">*記事削除希望者は、記事番号を申告の上、その旨お申し出下さい。こちらで削除させて頂きます。</FONT>
</P>
</DIV>
<HR>
</FORM>通常のHTML部分です。赤色部分が今回、返信機能を付けるために追加したコードです。
フラグを立てて、フォームから送られたその値によって処理を分けています。もし書き込みが返信の場合は、送信データressに親記事の記事番号$codeを持たせてやります。<?php PHPの開始 //==============初期設定================
$password = '****'; //管理者パスワード
$homegif = './home.gif';
$page_view = 10; //1ページの記事表示件数初期設定部分です。基本的な設定のみ。 //==============処理本体================
$d_base = pg_connect("user=***** dbname=*****");まずデータベースと接続しましょう。 if($action == regist){
if($name && $comment){
$num = time(); //アクセス時の秒数
if($ress == ""){
$ress = 0;
}
$today = date("Y/m/d(D) H:i:s"); //アクセス時の時間データ
//ホスト名を取得
$host = getenv("REMOTE_HOST");
$addr = getenv("REMOTE_ADDR");
if($host == "" || $host == $addr){
$host = gethostbyaddr($addr);
}
//訪問者のブラウザを取得
$agent = getenv("HTTP_USER_AGENT");
//コメントの文字列処理
$comment = htmlspecialchars($comment);
$comment = nl2br($comment);
$comment = str_replace("\r", "", $comment);
$comment = str_replace("\n", "", $comment);
//ログファイルの区切文字(",")と区別するために文字コード(,)に書き換える。
$comment = str_replace(",", ",",$comment);
pg_exec($d_base, "insert into komobbs2 values ($num,$ress,'$today','$name','$email','$hp','$subject','$comment','$host','$agent')");
}
}赤色部分が今回、返信機能を付けるために追加したコードです。書き込みが親記事に当たる場合は、変数$ressに「0」を放り込んでやります・・・念の為(^^ゞ if($action == delete){
if($nu && $pass){
if($pass == $password){
pg_exec($d_base, "delete from komobbs2 where num=$nu or ress=$nu");
}
}
}赤色部分が今回、返信機能を付けるために追加したコードです。親記事を削除した時に、その子記事も削除されるようにしました。子記事だけ残っても表示できないし・・・(^^ゞ if($result = pg_exec($d_base, "select * from komobbs2 order by num DESC")){
$row = pg_numrows($result); //検索結果の行数を取得
if($pline == "")
$p_line = 0;
else
$p_line = $pline;
$end_data = $row - 1;
$page_end = $p_line + ($page_view - 1);
if($page_end >= $end_data)
$page_end = $end_data;テーブル名だけ変更になっています。
本当は親記事だけを配列に放り込んで、そちらから10件毎に表示するようにすればいいんでしょうが、今回はちょっと不完全なままで行かせて貰います。ゴメンチャイ_(._.)_for($i=$p_line; $i<=$page_end; $i++){
$arr = pg_fetch_row($result, $i); //検索結果の一行分を配列に格納
if($arr[1] == 0){
echo "<form method=POST action=$PHP_SELF>\n";
echo "<input type=radio name=delcode value=$arr[0]>\n";
echo "[" . $arr[0] . "]\n";
echo " <font size=4 color='blue'><b>$arr[6]</b></font>";
if($arr[5]){
echo " <a href=mailto:$arr[4]><strong>$arr[3]</strong></a>";
} else {
echo " <strong>$arr[3]</strong>";
}
if($arr[5]){
echo " <a href=$arr[5] target=_blank><img src=$homegif border=0></a>\n";
}
echo " <font size=2>$arr[2]</font>\n";
echo "<input type=hidden name=action value=delete>\n";
echo "<input type=hidden name=nu value=$arr[0]>\n";
echo "<font size=2> 削除キー:</font><input type=password size=7 name=pass>\n";
echo "<input type=submit value=削除></form>\n";
echo "<blockquote>$arr[7]<br><br>\n";
echo "<font size=2 color='green'>[" . $arr[8] . "] $arr[9]</font>\n";
echo "<form method=POST action=$PHP_SELF>\n";
echo "<input type=submit value=返信>\n";
echo "<input type=hidden name=code value=" . $arr[0] . ">\n";
echo "<input type=hidden name=return value=" . $arr[6] . ">\n";
echo "<input type=hidden name=flags value=return>\n";
echo "</blockquote></form>\n";赤色部分が今回、返信機能を付けるために追加したコードです。返信の為のデータを送るフォームを追加しています。
又、青色部分は、記事毎に削除機能を付ける為に追加したコードです。これはPHP掲示板でよく使っているものなので、余り解説は要らないと思います。//返信記事の表示
for($j=0; $j<$row; $j++){
$arr2 = pg_fetch_row($result, $j); //検索結果の一行分を配列に格納
if ($arr[0] == $arr2[1]) {
echo "<blockquote>\n";
echo "<form method=POST action=$PHP_SELF>\n";
echo "<input type=radio name=delcode value=$arr2[0]>\n";
echo "[" . $arr2[0] . "]\n";
echo "RE:<font color='blue'><b>$arr2[6]</b></font>\n";
if ($arr2[4] != "") {
echo " <a href=mailto:$arr2[4]><strong>$arr2[3]</strong></a>\n";
} else { echo " <strong>$arr2[3]</strong>\n"; }
if($arr2[5]){
echo " <a href=$arr2[5] target=_blank><img src=$homegif border=0></a>\n";
}
echo " <font size=2>$arr2[2]</font>\n";
echo "<input type=hidden name=action value=delete>\n";
echo "<input type=hidden name=nu value=$arr2[0]>\n";
echo "<font size=2> 削除キー:</font><input type=password size=7 name=pass>\n";
echo "<input type=submit value=削除></form>\n";
echo "<blockquote>$arr2[7]<br><br>\n";
echo "<font size=2 color='green'>[" . $arr[8] . "] $arr[9]</font>\n";
echo "</form></blockquote></blockquote>\n";
}
}
echo "<hr>\n";
}
}ここは全て、返信機能を付けるために追加したコードです。返信記事はどこにあるか分からないので、一応全記事をループ処理で検査します。
又、こちらも記事毎に削除機能を持たせる為、フォーム項目を付加しています。$next_line = $page_end + 1;
if($page_end != $end_data){
echo "<form method=Post action=$PHP_SELF>\n";
echo "<input type=hidden name=pline value=$next_line>\n";
echo "<input type=submit value=次のページ>\n";
echo "</form>\n";
}
}ここは同じ。 ?> PHPの終了 <DIV ALIGN="right"><FONT SIZE="-1">Powered by <A HREF="http://www.komonet.ne.jp/">KOMONET</A></FONT></DIV>
</BODY>
</HTML>HTMLの終わり。
ここにKOMONETへのリンク表示をしています。*上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。
DB連携チャット 前へ
次へ DB連携掲示板スペシャル