再来就是整理资料,以便置入 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> $webmasteriparray = $webmasterip=false; putenv(“oracle_sid=www”); $handle=ora_logon(“user38@www”,”iam3849″) or die; $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”; echo “<a href=addmsg.php>新增留言….</a><p>\n”; if ($query_string!=””) $page = $query_string; $page = 0; $i=count($guestbook); $pagestr=””; if ($i!=$page) $pagestr = $pagestr.”<a href=index.php?$i>”.($i+1).”</a> “; $pagestr = $pagestr.($i+1).” “; $pagestr=”<div align=center>$pagestr</div>”; for ($i=$start; $i<$end; $i++) echo “<p><hr><p>\n”; echo “<p><hr><p>\n”; ?> |
在显示留言的部份,考虑到留言内容若很多,加上网路慢的话,可能会让使用者在线路慢的时候拖累整个资料库,因此,尽快的连上资料库,取得需要的资料后,马上关闭资料库,再慢慢送给使用者,应是最好的对策。