分享
 
 
 

留言簿(带Oracle数据库分页的显示功能)

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

(摘自CCU新闻组,本来出处可能是台湾出版的一本关于PHP的书:PHP宝典)

大部份的网站,都会考虑到和使用者之间的互动关系。这时,用留言版的功能,可让使用者留下到此一游,或者是一些和网站的互动讯息。

在设计上,可以很简单的只留下使用者的短篇留言,也可以设计到依性质分门别类很复杂的 Web BBS 系统。当然,要如何打造一个属于自己网站的留言版,就端赖网站的性质以及 Web 网站开发人员的巧思了。

在这里介绍的范例,是简单的列示所有留言的内容。供使用者可以一次看到多笔留言的资料。系统的后端存放留言是用 Oracle 7.x 版的资料库系统。范例中的资料库(database) 名称为 WWW,连线的使用者帐号为 user38、密码为 iam3849。要直接使用本例,必须先执行下面的 SQL 指令,建立 guestbook 的资料表格。

CREATE TABLE guestbook (

serial varchar2(255) not 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 各栏位说明及具体资料见下表

序号 栏位 名称 资料形态 资料长度 栏位说明 限制 Key

0 流水号 serial varchar2 255 NN PK

1 参照流水号 ref varchar2 255 暂保留。供回

覆留言功能用

2 帐号 id char 8 使用者帐号 NN

3 匿名 alias 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: 显示 (内定)

在本节的留言版相关程式中,若加入了使用者认证功能,则可以在 guestbook资料表的帐号栏中留下使用者的认证帐号,方便 Webmaster 日后找寻不当的发信者。在这儿先留下栏位,让需要的读者们实习了。

要使用本节的程式,首先要先装好 Oracle 7.x 版,并确定 Web Server 端的SQL*net 可以顺利连上 Oracle 资料库。之后还要在编译 PHP 时加

--with-oracle=/home/oracle/prodUCt/7.3.2 的选项,当然改成其它的路径也没关系,只要该路径真的是 Oracle 的路径即可。有关 Oracle 装设及使用上的细节请参考相关书籍。

下面的程式是将使用者的留言资讯加到 guestbook 留言资料表中。若要设定使用者认证功能,可在程式刚开始时检查,发留言者就可以确认身份,而读取留言就不必身份检查。这种设定可以防止不当发言,却又不会让留言功能只有少数人使用。

<?PHP

file://---------------------------

// 新增留言程式 addmsg.PHP

// Author: 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") or die;

$cursor=ora_open($handle);

ora_commitoff($handle);

$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')";

ora_parse($cursor, $query) or die;

ora_exec($cursor);

ora_close($cursor);

ora_LOGOff($handle);

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

exit;

} else {

?>

<Html>

<head>

<title>填写留言</title>

</head>

<body bgcolor=ffffff>

<form method=POST action="<? echo $PHP_SELF; ?>">

<table border=0 cellpadding=2 width=395>

<tr>

<td nowrap><font color=004080>代号小名</font></td>

<td width=20%><input type=text name=alias size=8></td>

<td nowrap><font color=004080>电子邮件</font></td>

<td width=50%><input type=text name=email size=18></td>

</tr>

<tr>

<td nowrapvalign=top><font color=004080>内容</font></td>

<td width=80% colspan=3><textarea rows=5 name=msg

cols=33></textarea></td>

</tr>

<tr>

<td width=100% colspan=4 align=center>

<input type=submit value="送出留言">

<input type=reset value="擦掉留言">

</td>

</tr>

</table>

</form>

</body>

</HTML>

<?PHP

}

?>

上面的程式在执行时,先检查变数 alias 和 msg 是否有资料,若无资料则送出填写留言的表格到使用者端,供使用者填写留言。

若使用者填好留言,按下 "送出留言" 的按钮后,则执行程式的前半部份。

程式大概分成五部份

1.. 设定 Oracle 需要的环境变数

2.. 连上 Oracle 资料库

3.. 整理资料,送入 Oracle 中

4.. 结束与 Oracle 的连线

5.. 结束程式,显示最新的留言资料

在设定 Oracle 环境的部份,用 PHP 的函式 putenv(),可设定作业系统层的环境变数。要使用中文要记得加入下面这行

putenv("NLS_LANG=american_taiwan.zht16big5");

之后就使用 Oracle 函式库的功能: ora_LOGOn() 等等。详见 Oracle 资料库函式库。利用这个函式库,可以很轻易的操作 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();),可以不让使用者看到错误讯息。在执行 qu

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有