$serial 變數為獨一無二的字串,程序先亂數產生獨特的字串,再用 md5 編碼,將字串弄亂,形成類似雜湊處理后的無意義字串。由于字串長,又變得很亂,可防止使用者,尤其是駭客或飛客利用序號來戳系統。
$ref 變數目前是無效的。$id 變數為使用者認證用,若在程序開始處有加入使用者認證的程序,則 $php_auth_user 會變成使用者的帳號,傳入 $id 變數中。
至于使用者寫的字串,為了防止資料庫或處理時的復雜性甘脆將它用 base64 編碼。可以讓中文字的奇怪字元一字消失,當然這是鋸箭法,不過對 web 程序而言,執行快速、修改方便才是最重要的,實在沒有必要再浪費精力去處理這些中文的沖碼問題了。值得注意的是使用 base64 編碼,會讓字串膨脹大約 1/3,若資料庫的儲存空間有限,可能就不適合用這個方法了,話又說回來,現在硬碟便宜,隨便就是十幾 gb 以
上,應該不會考慮資料庫空間有限的問題才對。
最后,將變數整理成 $query 字串,供資料庫執行 sql 指令使用就可以了。
ora_parse($cursor, $query) or die;
ora_exec($cursor);
ora_close($cursor);
ora_logoff($handle);
要執行 oracle 的 sql 指令前,要先經過 parse 的動作。若在前面加上 @ (如: @ora_prase();),可以不讓使用者看到錯誤訊息。在執行 query 指令后,就可以關閉與 oracle 之間的連線了。
header("location: ./index.php");
exit;
這二行讓瀏覽器重導到 index.php。讓使用者看到他的新留言,就完成了留言的動作。
之后來看看留言的內容顯示程序。
<html>
<head>
<meta content="text/html; charset=gb2312"
http-equiv=content-type>
<title>留言版</title>
</head>
<body bgcolor=ffffff>
<?php
file://---------------------------
// 留言顯示程序 index.php
// author: wilson peng
// copyright (c) 2000
file://---------------------------
$webmasteriparray =
ay(
"10.0.1.30", // 管理人員甲的機器 ip
"10.0.2.28" // 管理人員乙的機器 ip
);
$webmasterip=false;
for ($i=0; $i<count($webmasteriparray); $i++) {
if ($remote_addr == $webmasteriparray[$i]) $webmasterip=true;
}
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("[email protected]","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 "<a href=addmsg.php>新增留言....</a><p>/n";
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."<a
href=index.php?".($page-1)."><上頁</a> - ";
$pagestr=$pagestr."[第 ";
for ($i=0; $i<$totalpage; $i++)
if ($i!=$page)
$pagestr = $pagestr."<a href=index.php?$i>".($i+1)."</a> ";
} else
$pagestr = $pagestr.($i+1)." ";
}
}
$pagestr=$pagestr." 頁] ";
if ($page<($totalpage-1)) $pagestr=$pagestr."- <a
href=index.php?".($page+1).">下頁></a> ";
$pagestr="<div align=center>$pagestr</div>";
echo "<p>".$pagestr."<hr><p>/n";
for ($i=$start; $i<$end; $i++)
echo "<p><hr><p>/n";
echo "<p>/n<font color=e06060>".$guestbook[$i][5]."</font>
";
if ($guestbook[$i][6]!="") echo "<a
href=mailto:".$guestbook[$i][6].">";
echo "<strong>".$guestbook[$i][3]."</strong>";
if ($guestbook[$i][6]!="") echo "</a>";
echo "<br>/n";
if ($webmasterip) echo "<a
href=erase.php?".$guestbook[$i][0].">刪除本篇!!</a> (".$guestbook[$i][2].")
";
echo "<font size=-1 color=c0c0c0>from:
".$guestbook[$i][4]."</font><p>/n";
$msg=base64_decode($guestbook[$i][7]);
$msg=nl2br($msg);
echo $msg;
echo "<p>/n";
}
echo "<p><hr><p>/n";
echo $pagestr;
?>
</body>
</html>
在顯示留言的部份,考慮到留言內容若很多,加上網路慢的話,可能會讓使用者在線路慢的時候拖累整個資料庫,因此,盡快的連上資料庫,取得需要的資料后,馬上關閉資料庫,再慢慢送給使用者,應是最好的對策。
新聞熱點
疑難解答