oracle|分页|数据|数据库|显示
再来就是整理资料,以便置入 oracle 资料库中
$serial=md5(uniqid(rand()));
$ref=;
$id=$php_auth_user;
$ip=$remote_addr;
$msg=base64_encode($msg);
$flag=1;
$query=insert into guestbook(serial, ref, id, alias, ip, msgdate,
email, msg, flag) values('$serial', '$ref', '$id', '$alias', '$ip', sysdate,
'$email', '$msg', '$flag'); $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).>$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>
在显示留言的部份,考虑到留言内容若很多,加上网路慢的话,可能会让使用者在线路慢的时候拖累整个资料库,因此,尽快的连上资料库,取得需要的资料后,马上关闭资料库,再慢慢送给使用者,应是最好的对策。