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 email 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%">&nbsp;</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);
  //ログファイルの区切文字(",")と区別するために文字コード(&#44)に書き換える。
  $comment = str_replace(",", "&#44;",$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連携チャット 前へ

HOME

次へ DB連携掲示板スペシャル