大部份的网站,都会考虑到和用户之间的互动关系。这时,用留言板的功能,可让用户留下到此一游,或者是一些和网站的互动信息。
在设计上,可以很简单的只留下用户的短篇留言,也可以设计到依性质分门别类很复杂的 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,
msgdatedate not null,
email varchar2(1024) null,
msg varchar2(2000) not null,
flagchar(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 留言数据表中。若要配置用户认证功能,可在程序刚开始时检查,发留言者就可以确认身份,而读取留言就不必身份检查。这种配置可以防止不当发言,却又不会让留言功能只有少数人使用。
//---------------------------
// 新增留言程序 addmsg.php
// Author: Wilson Peng
// Copyright (C) 2000
//---------------------------
//
// 可自行在这儿加入身份检查功能
//
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 {
?>
}
?>
上面的程序在执行时,先检查变量 alias 和 msg 是否有资料,若无资料则送出填写留言的表格到用户端,供用户填写留言。
若用户填好留言,按下 "送出留言" 的按钮后,则执行程序的前半部份。
程序大概分成五部份
配置 Oracle 需要的环境变量
连上 Oracle 数据库
整理资料,送入 Oracle 中
结束与 Oracle 的连接
结束程序,显示最新的留言资料
在配置 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();),可以不让用户看到错误信息。在执行 query 指令后,就可以关闭与 Oracle 之间的连接了。
Header("Location: ./index.php");
exit;
这二行让浏览器重定向到 index.php。让用户看到他的新留言,就完成了留言的步骤。
之后来看看留言的内容显示程序。
0
0
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。
616
2026.02.13
本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。
194
2026.02.13
本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。
91
2026.02.13
本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。
20
2026.02.13
本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。
54
2026.02.13
本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。
15
2026.02.12
本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。
598
2026.02.12
本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。
56
2026.02.12
热门下载
相关下载
精品课程


