PHPゲストブック(Oracleデータベースのページング表示機能付き)

WBOY
リリース: 2016-06-21 09:15:15
オリジナル
1099 人が閲覧しました

oracle|ページネーション|データ|データベース|表示

ほとんどの Web サイトでは、ユーザーとのインタラクティブな関係が考慮されています。現時点では、メッセージ ボード機能を使用して、ユーザーが訪問に関するメッセージや Web サイトとの対話型メッセージを残すことができます。
デザインの面では、ユーザーからの短いメッセージを残すだけの非常にシンプルなものもあれば、性質に応じて分類された非常に複雑な Web BBS システムにデザインすることもできます。もちろん、自分の Web サイトに掲示板を作成する方法は、Web サイトの性質と Web 開発者の創意工夫によって異なります。

ここで紹介した例は、すべてのメッセージの内容を単純にリストしたものです。ユーザーは複数のメッセージの情報を一度に表示できます。システムのバックエンドは、Oracle バージョン 7.x データベース システムを使用してメッセージを保存します。この例のデータベース名は WWW、接続されたユーザー アカウントは user38、パスワードは iam3849 です。この例を直接使用するには、まず次の SQL コマンドを実行してゲストブック データ テーブルを作成する必要があります。

CREATE TABLE ゲストブック (
serial varchar2(255) null ではありません、
ref varchar2(255) null、
id char(8) not null、
alias varchar2(32) not null、
ip varchar2(1024) null、
msgdate date not null、
email varchar2(1024) null、
msg varchar2(2000) not null、
flag char(1) default 1、
primary key(serial)
);



上記の SQL フィールドを参照してください。説明と詳細については、以下の表を参照してください

シリアル番号フィールド名 データ形式 データ長 フィールドの説明 制限キー
0 シリアル番号 Serial varchar2 255 NN PK
1 シリアル番号を参照 ref varchar2 255 一時的に予約されています。メッセージ返信用
2 アカウント ID char 8 ユーザーアカウント NN
3 匿名エイリアス varchar2 32 表示名 NN
4 ウェブサイト ip varchar2 1024 インターネット IP
5 時刻 msgdate date NN
6 電子メール email varchar2 1024
7 メッセージコンテンツ msg varchar2 2000 NN
8 表示フラグ flag char 1 0: 表示しない
1: 表示する(デフォルト)


本節の掲示板関連プログラムでは、ユーザー認証機能を追加すると、ゲストブックで利用できるようになります ユーザーの認証アカウントウェブマスターが今後不適切な送信者を見つけやすくするために、データ テーブルのアカウント列に残されます。練習が必要な読者のためにここにスペースを残しておきます。

このセクションのプログラムを使用するには、まず Oracle バージョン 7.x をインストールし、Web サーバー上の SQL*net が Oracle データベースに正常に接続できることを確認する必要があります。後で、PHP をコンパイルするときに

--with-oracle=/home/oracle/product/7.3.2 オプションを追加する必要があります。もちろん、別のパスに変更しても問題ありません。 path は実際には Oracle のパスです。 Oracle のインストールと使用方法の詳細については、関連する書籍を参照してください。

次のプログラムは、ユーザーのメッセージ情報をゲストブックのメッセージ データ テーブルに追加します。ユーザー認証機能を設定したい場合は、プログラムの開始時にチェックを入れることでメッセージを送信した本人であることを確認することができ、メッセージを読む際に本人確認を行う必要はありません。この設定により、不適切なコメントを防止できますが、メッセージ機能の利用が一部の人に限定されるわけではありません。


file://--------------------------
// メッセージプログラム追加 addmsg.php
//著者: Wilson Peng
// Copyright (C) 2000
file://--------------------------
//
// あなたここに本人確認機能を追加できます
//
if (($alias!="") and ($msg!="")) {
putenv("ORACLE_SID=WWW");
putenv("NLS_LANG =american_taiwan. zht16big5");
putenv("ORACLE_HOME=/home/oracle/product/7.3.2");
putenv("LD_LIBRARY_PATH=/home/oracle/product/7.3.2/lib");

putenv("ORA_NLS) =/home/oracle/product/7.3.2/ocommon/nls/admin/data");

putenv("ORA_NLS32=/home/oracle/product/7.3.2/ocommon/nls/admin/data ");

$handle=ora_logon("user38@WWW","iam3849") または死ぬ
$cursor=ora_open($handle);

$serial=md5(rand ()); );
$id=$PHP_AUTH_USER;
$msg=base64_encode($msg);シリアル、ref、id、エイリアス、ip、
msgdate、電子メール、msg、フラグ)values('$serial', '$ref', '$id', '$alias', '$ip',
sysdate, ' $email', '$msg', '$flag')";

ora_parse($cursor, $query) or die;
ora_exec($cursor);

ora_close($cursor);
ora_logoff( $handle) ;

Header("Location: ./index.php");

} else {

; <br></head> <br><body bgcolor=ffffff> <br><form method=POST action="<? echo $PHP_SELF; ?>"> 395> <br><tr> <br><td nowrap><font color=004080>コード名</font></td><入力タイプ= テキスト名=エイリアスサイズ=8></td><td nowrap><font color=004080>メール</font></td> <br><td width=50%><input type=text name=email size=18></ td> <br/> ;<textarea rows=5 name=msg <br/>cols=33></textarea></td> <br><tr> <br><td width=100%colspan=4 align=センター> <br><入力タイプ=送信値> <br></td> <br></テーブル> <br></form> <br></html> <br><?php <br/>?> <br><br><br> 上記のプログラムが実行されると、まず変数 alias と msg にデータがあるかどうかが確認されます。データがない場合は、メッセージを入力するためのフォームがユーザー側に送信され、ユーザーがメッセージを入力します。 <br><br>ユーザーがメッセージを入力して「メッセージ送信」ボタンをクリックすると、プログラムの前半が実行されます。 <br><br>プログラムは大きく5つの部分に分かれています<br><br>1..Oracleが必要とする環境変数を設定します<br>2..Oracleデータベースに接続します<br>3..データを整理してOracleに送信します<br>4..接続を終了しますwith Oracle <br>5.. プログラムを終了し、最新のメッセージデータを表示します <br>Oracle の環境設定セクションでは、PHP 関数 putenv() を使用して、オペレーティング システム層で環境変数を設定します。中国語を使用するには、必ず次の行を追加してください <br><br>putenv("NLS_LANG=american_taiwan.zht16big5"); その後、Oracle ライブラリの関数 ora_logon() などを使用します。詳細については、「Oracle データベース ライブラリ」を参照してください。この関数ライブラリを利用することで、Oracleデータベースを簡単に操作することができます。 <br><br>次のステップは、データを整理して Oracle データベースに入れることです <br><br>$serial=md5(uniqid(rand())); <br>$id=$PHP_AUTH_USER; $REMOTE_ADDR; <br>$msg=base64_encode($msg); <br>$flag="1"; <br>$query="ゲストブック (シリアル、参照、ID、エイリアス、IP、メール、メッセージ、フラグ) に挿入します。 ('$serial', '$ref', '$id', '$alias', '$ip', sysdate, <br>'$email', '$msg', '$flag')"; <br><br>$serial変数は一意である プログラムは最初に一意の文字列をランダムに生成し、次に md5 エンコーディングを使用して文字列を混乱させ、ハッシュに似た意味のない文字列を形成します。文字列は長くて乱雑であるため、ユーザー、特にハッカーやハッカーがシリアル番号を使用してシステムを侵入するのを防ぎます。 <br><br>$ref 変数は現在無効です。 $id 変数はユーザー認証に使用されます。プログラムの先頭にユーザー認証用のプログラムがある場合、$PHP_AUTH_USER がユーザーのアカウントとなり、$id 変数に渡されます。 <br><br>ユーザーが記述した文字列については、データベースや処理の複雑さを避けるために、BASE64でエンコードすることをお勧めします。もちろん、これは鋸と矢の方法ですが、高速な実行と簡単な変更が最も重要です。エネルギーを無駄にする必要はありません。これらの中国語コードの処理に問題があります。 BASE64 エンコードを使用すると、文字列が約 1/3 拡張されることに注意してください。データベースのストレージ容量が限られている場合、この方法は適さない可能性があります。また、現在、ハードディスクはわずか 12 GB ベースで安価です。上記では、限られたデータベーススペースの問題を考慮する必要はありません。 <br><br>最後に、データベースが SQL 命令を実行するために使用できるように、変数を $query 文字列に編成します。 <br><br>ora_parse($cursor, $query) または die; <br>ora_exec($cursor); <br>ora_logoff($handle); Oracle の SQL 命令を実行する前に、まず解析アクションを実行する必要があります。 。 @ を先頭に追加すると (例: @ora_prase();)、ユーザーにエラー メッセージが表示されないようにすることができます。 query コマンドの実行後、Oracle への接続を閉じることができます。 <br><br>Header("Location: ./index.php"); <br>exit; <br><br>これらの 2 行により、ブラウザは Index.php にリダイレクトされます。ユーザーに新しいメッセージの表示を許可すると、メッセージ アクションが完了します。 <br><br>メッセージ内容表示プログラムについては後ほど見てみましょう。 <br><br><html> <br><meta content="text/html; charset=gb2312" <br/><title>メッセージボード /head>

file://-------------------------------------
//メッセージ表示プログラムindex.php
// 著者: Wilson Peng
// Copyright (C) 2000
file://---------------------- -- ---

$WebmasterIPArray =
ay(
"10.0.1.30", // マネージャー A のマシン IP
"10.0.2.28" // マネージャー B のマシン IP

$WebmasterIP=
for ($ i=0; $iif ($REMOTE_ADDR == $WebmasterIPArray[$i])
}

putenv("ORACLE_SID=WWW");
putenv("NLS_LANG=american_taiwan.zht16big5");
putenv("ORACLE_HOME=/home/oracle/product/7.3.2");
putenv("LD_LIBRARY_PATH=/home/oracle/product/7.3.2/lib");
putenv("ORA_NLS=/home/oracle/product/7.3.2/ocommon/nls/admin/data");
putenv("ORA_NLS32=/home/oracle/product/7.3.2/ocommon/nls/admin/data");

$handle=ora_logon("user38@WWW","iam3849") or die;
$cursor=ora_open($handle);
ora_commitoff($handle);

$query="SELECT serial, ref, id, alias, ip, TO_CHAR(msgdate, 'yyyy/mm/dd hh:mi:ss'), email, msg FROM guestbook where flag='1' order by msgdate desc";
ora_parse($cursor, $query) or die;
ora_exec($cursor);
$i=0;
while(ora_fetch($cursor)) {
$guestbook[$i][0] = ora_getcolumn($cursor,0);
$guestbook[$i][1] = ora_getcolumn($cursor,1);
$guestbook[$i][2] = ora_getcolumn($cursor,2);
$guestbook[$i][3] = ora_getcolumn($cursor,3);
$gu
estbook[$i][4] = ora_getcolumn($cursor,4);
$guestbook[$i][5] = ora_getcolumn($cursor,5);
$guestbook[$i][6] = ora_getcolumn($cursor,6);
$guestbook[$i][7] = ora_getcolumn($cursor,7);
$i++;
}
ora_close($cursor);
ora_logoff($handle);

echo "新增留言....

";

if ($QUERY_STRING!="")

$page = $QUERY_STRING;
} else

$page = 0;
}

$i=count($guestbook);
$msgnum=20; // 每页二十笔
$start = $page * $msgnum;
$end = $start + $msgnum;
if ($end > $i) $end=$i;
$totalpage=$i/$msgnum;

$pagestr="";
if ($page>0) $pagestr=$pagestr."href=index.php?".($page-1)."><上页 - ";
$pagestr=$pagestr."[第 ";
for ($i=0; $i<$totalpage; $i++)

if ($i!=$page)

$pagestr = $pagestr."".($i+1)." ";
} else

$pagestr = $pagestr.($i+1)." ";
}
}
$pagestr=$pagestr." 页] ";
if ($page<($totalpage-1)) $pagestr=$pagestr."- href=index.php?".($page+1).">下页> ";

$pagestr="

$pagestr
";
echo "

".$pagestr."


";

for ($i=$start; $i<$end; $i++)

echo "< ;p>


";
echo "

".$guestbook[$i][5]." ($guestbook[$i][6]!="") echo "href=mailto:".$guestbook[$i][6].">
echo ""; .$guestbook[$i][3]."";
if ($guestbook[$i][6]!="") echo "
"; br> ";
if ($WebmasterIP) echo "href=erase.php?".$guestbook[$i][0].">この記事を削除します!! $guestbook[$i][2].")
";
echo "from:
".$guestbook[$i][4]."

";
$msg=base64_decode($guestbook[$i][7]);
$msg=nl2br($msg);
echo "


}

echo "


";
echo $pagestr;

?>
メッセージ内容が多くネットワークが遅い場合、回線が遅いとデータベース全体が遅くなる可能性がありますので、必要なデータを取得したらすぐにデータベースを閉じてください。

プログラムは 4 つの部分に分かれています

1.. 初期化
2.. データベース内のデータを取得します
3.. 必要なページ数を計算します。表示されます
4..データを送信します
このプログラムはBIGLOBE上で実施されており、設定中に
接続または専用線にダイヤルした会員のみが閲覧できます。 アカウントとパスワードを入力する必要があります。入る前に。ご興味がございましたら、参考までに BIGLOBE
ダイヤルアップ アカウントを購入してみてはいかがでしょうか。コメント投稿者のプライバシー保護のため、メッセージにはモザイク処理をしております。


$WebmasterIPArray = array(
"10.0.1.30", // マネージャー A のマシン IP
"10.0.2.28" // マネージャー B のマシン IP
); 0; $iif ($REMOTE_ADDR == $WebmasterIPArray[$i]) $WebmasterIP=true;
// 後で Oracle プログラムを初期化します

表示プログラムとメッセージ プログラムは似ていますが、表示プログラムには Web マスターのコンピュータを設定する機能が追加されています。 $WebmasterIPArray 配列変数に Web マスターが使用する IP アドレスを追加すると、メッセージを表示するときにメッセージを削除するための文字列が表示され、不適切なメッセージの処理が容易になります。

$handle=ora_logon("user38@WWW","iam3849") または die;
$cursor=ora_open($handle);

$query="SELECT シリアル、参照、ID、 alias, ip, TO_CHAR(msgdate,
'yyyy/mm/dd hh:mi:ss'), email, msg FROM guestbook where flag='1' order by
msgdate desc";
ora_parse($cursor, $query)または死ぬ;
ora_exec($cursor);
$i=0;
while(ora_fetch($cursor)) {
$guestbook[$i][0] = ora_getcolumn($cursor,0); i][1] = ora_getcolumn($cursor,1);
$guestbook[$i][2] = ora_getcolumn($cursor,2);
$guestbook[$i][3] = ora_getcolumn($cursor,3) );
$guestbook[$i][4] = ora_getcolumn($cursor,4) =
$guestbook[$i][6] = ora_getcolumn($cursor,6);
$guestbook[$i][7] = ora_getcolumn($cursor,7);
ora_close($cursor);初期化後、Oracle データベースに接続し、メッセージ データを $guestbook 配列に取得できます。データを取得したら、すぐにデータベースを閉じて、$guestbook 配列内のデータを処理します。

if ($QUERY_STRING!="") {
$page = $QUERY_STRING;
} else {
$page = 0;

このプログラムは、どのページを表示するかを決定します。 .ページ。 3 番目のページを表示するには、http://xxxxxx/index.php?2 の形式を使用する必要があります。つまり、$QUERY_STRING などを渡す必要があります。表示されるページ番号とペン番号のデータを処理するために、次の数行のプログラムが使用されます。

$msgnum=20; // ページごとに 20 個のペン

ページごとに表示されるペンの数を変更するには、$msgnum 変数を変更します。プログラムのデフォルトは 20 トランザクションです。

for ($i=$start; $i<$end; $i++) {
echo "


";
echo "

;".$guestbook[$i][5]." ";
if ($guestbook[$i][6]!="") echo "href=mailto:"。 $guestbook[$i][6].">";
エコー "".$guestbook[$i][3]."";if ($guestbook[$i][6]!="") echo "
";
echo "
";
if ($WebmasterIP) echo "この記事を削除!! (".$guestbook[$i][2].") ";
echo "from:
".$guestbook[$i][4]."

";
$msg=base64_decode($guestbook[$i][7] );
$msg=nl2br($msg);
echo $msg;
}

このプログラムは、ユーザーにメッセージ データを表示するプログラムです。 for ループを使用して、設定されたページ数に従って $guestbook 配列からデータを抽出し、ユーザーに表示します。メッセージを読み取るマシンの IP が $WebmasterIPArray 変数配列の要素である場合、メッセージ送信者の匿名名の後に「この記事を削除します!!」という文字列が表示され、管理者が不適切な記事を削除できることに注意してください。メッセージ。

以下はメッセージを削除するプログラムです。


file://--------------------------
// メッセージ削除プログラムerase.php
/ /著者: Wilson Peng
// Copyright (C) 2000
file://-------------------------------------
putenv("ORACLE_SID = WWW");
putenv("NLS_LANG=american_taiwan.zht16big5");
putenv("ORACLE_HOME=/home/oracle/product/7.3.2");
putenv("LD_LIBRARY_PATH=/home/oracle/product/7.3 . 2/lib");

putenv("ORA_NLS=/home/oracle/product/7.3.2/ocommon/nls/admin/data");

putenv("ORA_NLS32=/home/oracle/product/7.3 . 2/ocommon/nls/admin/data");

$handle=ora_logon("user38@WWW","iam3849") 死ぬか;
$cursor=ora_open($handle);
ora_commitoff($handle);

$query="UPDATE ゲストブック set flag='0' where
serial='".$QUERY_STRING."'";
ora_parse($cursor, $query) または die

ora_close ( $cursor);
ora_logoff($handle);

Header("Location: ./index.php"); 実際、このプログラムは非常に簡単です。シリアル番号を持つデータのフラグ フィールドを 0 に設定するだけです。実際にデータベースからデータを削除する必要はありません。









関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート