oracle|分页|数据|数据库|显示
再来就是整理资料,以便置入 Oracle 资料库中
$serial=md5(uniqid(rand()));$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("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 "<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 "
".$pagestr."
n";
for ($i=$start; $i<$end; $i++)
echo "
n";
echo "
n".$guestbook[$i][5]."
";
if ($guestbook[$i][6]!="") echo "<a
href=mailto:".$guestbook[$i][6].">";
echo "".$guestbook[$i][3]."";
if ($guestbook[$i][6]!="") echo "</a>";
エコー「
ん」;
if ($WebmasterIP) echo "<a
href=erase.php?".$guestbook[$i][0].">删除本篇!!</a> (".$guestbook[$i][ 2]。")
";
echo "from:
".$guestbook[$i][4]."
n";
$msg=base64_decode($guestbook[$i][7]);
$msg=nl2br($msg);
$msg をエコー;
エコー「<p>n」;
}
echo "
n";
echo $pagestr;
?>
</body>
</html>
在显示留言的部份,考虑到留言内容若很多,加上网路ゆっくり的话,可能会让使用者在線上路ゆっくり的時候拖蓄積整个资料库したがって、上側の供給源ができるだけ早く、必要な供給源を入手した後、上側の供給源を停止し、さらにゆっくりと使用者に届けるのが最善の策である。