基于PHP的校园二手信息网站的设计与开发
引 言
课题的背景
随着Internet 爆炸式的发展,中国自加入WTO以来,电子商务在国内也迅速的发展了起来,现在互联网上各种电子商务网站更是迅速的增长。还在校园的我也深受其中的影响,开发一个对在校学生适用的网站,希望能给大家提供方便的服务。
作为一个大学生,深有体会,从身上的衣服到大家所用的书籍、文具以至各种生活常用品,用上一段时间就会被淘汰,有的同学干脆扔掉,很是浪费还污染了环境。也有的同学想到卖掉,苦于难寻买家,将其卖给收费品的。这样就造成了物不能尽其用。
为了解决这种资源的浪费,所以开发了校园二手信息网站,借助于低交易成本的Internet。为大家提供一个低成本、快速迅捷的信息发布平台。新系统开发过程中严格按照系统开发步骤进行,在系统调研、分析、设计到系统的实施的全过程中,力求其科学性和合理性。
可行性分析
可行性分析的任务是从技术上、经济上、社会上、法律上分析需要解决的问题是否存在可行的解。
技术可行性
该系统采用BS模式设计,在高校的校园网上运行。学生可以通过接入校园网的计算机,访问二手信息网站。本系统是一个比较普通的BS模式的信息发布系统,在技术上具有可行性。
经济可行性
现在,计算机的价格已经十分低廉,性能却有了长足的进步。而本系统的开发,为大家节约了大量的资源,为此主要表现有以下几个方面:
本系统的运行可以代替废物买卖贴示,避免一些不必要的麻烦;
本系统的运行可以节省许多资源;
本系统的运行可以大大的提高废物再利用;
本系统可以使敏感文档更加安全,等等。
所以,本系统在经济上是可行的。
运行可行性
系统为一个小型的信息管理系统,所耗费的资源非常的小,一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。
法律可行性
系统纯为私人设计,在开发过程中没有涉及合同、责任等与法律相抵触的方面。因此,本系统在法律上是可行的。
理论基础知识介绍
PHP简介
PHP是一种简单的、面向对象的、解释型的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。PHP具有和Java类似的Class关键字。因为不需要虚拟机,以致速度比Java快5倍。PHP正迅速变成一种标准的、多用途的、面向对象的脚本语言。PHP不仅可用来开发Web应用程序,也可以开发普通应用程序。
PHP是Hypertex tPre-Processor(超文本预处理器)的缩写,它是一种服务器端的HTML脚本编程语言。PHP语法上与C相似,可运行在Apache, Netscape/iPlanet,和Microsoft IIS Web服务器上。PHP作为一种工具,可以让你创建动态的Web页面。应用PHP的网页与常规的HTML页面并无二致,你可以用同样的方式来创建、编辑它们。PHP允许你直接在HTML文件里写入简单的脚本,这一点与JavaScript非常相似。而不同的是,PHP不依赖于浏览器,是服务器端的语言,而JavaScript却是一种客户端的嵌在HTML中的语言。概念上,PHP与Netscape的LiveWirePro产品,Microsoft的ASP以及Sun Microsystem的JSP相似。
1. PHP的强劲之处在于:
PHP是一项最优秀的技术。其它技术,如PERL,Python,VB Script,ASP相对来说,都是陈旧低劣的。即使是Java/JSP,也在PHP之下。其特点如下:
兼容性:PHP5.0程序可与旧版本兼容;
易学易用:PHP的语法类似C及Per,所以有程序编写经验者很快即可上手;
开放的来源:PHP的原始码及编译后文件可免费下载;
可扩充:使用者可新增模块以扩充PHP引擎之功能;
跨平台:PHP程序可在数种主要作业平台及Web服务器上执行。
支持多种数据库:PHP支持十余钟数据库,且编写存取数据库资料的程序相当容易。
PHP是最好的,因为它面向对象,并且吸收了C/C++/Java/PERL的精华。PHP可以替代PERL,Python,Java,C,C++,AWK,Unix Shell脚本,Visual Basic和其它语言。PHP直接运行,而且是由C写成的。PHP可以运行在Apache,Microsoft IIS等多种Web服务器上。PHP太容易使用了,你可以用它在非常短的时间里,非常迅速的开发出非常复杂的Web。
PHP最大的优势在于PHP自身完全是由C语言写成的,因此可广泛运行于各种平台之上,如BeOS,UNIX,MS Windows,Apple Macintosh,IBMOS/2以及其它更多的操作系统。而Windows下开发的PHP代码也可以不经过任何改变,就用于UNIX/Linux上。
2. PHP网页执行流程
PHP与传统网页不同,一般的HTML网页在加载时,会直接将网页全部传到使用者的计算机中,然而在使用者的计算机上执行程序,展示内容;PHP则是刚好相反,它主要的用途是在网站服务器端的网页开发,程序员可以通过程序的控制,让网站与访问者交互,进而设计出迷人的动态网页。例如:会员登录、资料认证网页等。如下图:
图1 PHP网页执行流程
PHP安装
1、下载PHP安装程序 http://www.php.net/downloads.php最新版的为PHP5.1 ,Windows的PHP安装分为两种方式,一种是源代码安装方式,一种是EXE安装方式,双击即可安装。本文主要说一下源代码安装过程。
下载“PHP-5.0.3-Win32.rar”。然后解压缩下载到的 RAR文件到c:\php
2、复制 c:\php\php5ts.dll 到 c:\windows\system32。(有时候为了方便,在PHP文件夹中点击搜索*.dll把搜索到的所有文件夹都复制到system32中也可以)复制 c:\php\php.ini-recommended(或者是php.ini-dist)为 c:\windows\php.ini然后打开 c:\windows\php.ini修改如下几个地方:
如果是在生产服务器上,可以不用修改下面这两行
error_reporting=E_ALL & ~E_NOTICE
display_errors = On(这里是修改PHP的错误提示,OFF为不提示,有些数据库链接非错误信息也会被PHP当做错误信息输出,建议用作Web服务器的关闭!)
指示 PHP 扩展库所在文件夹。
extension_dir="c:\php\ext
以下两个是超时时间:一般是60-120。
max_execution_time=90
max_input_time=90
post_max_size=8M(6-10M最佳)
upload_max_filesize=8M(上传附件大小最大)
default_socket_timeout=90(端口时间60-120)
session.gc_maxlifetime=3600(session默认存活时间,秒)
session.save_path="c:\php\sessiondata"(Session的存储目录)
extension=php_mysql.dll(支持MySQL数据库)
extension=php_gd2.dll(支持生成真彩图片)
3. 验证安装
用记事本写几行代码:
<?
phpinfo();
?>
保存为网站根目录下为phpinfo.php文件。然后启动浏览器,访问http://localhost/phpinfo.php,如果看到如下画面就证明PHP安装成功了!
图2 PHP信息页面
MySQL 简介
MySQL是一个广受Linux社区人们喜爱的半商业的数据库。MySQL是可运行在大多数的Linux平台(i386,Sparc,etc),以及少许非Linux甚至非Unix平台。
1、安装
可以在MySQL站点上获得大多数主要的软件包格式(RPM、DBE、TGZ、RAR)。RAR格式的安装没有多大麻烦,并且无需初始配置;直接解压缩运行安装文件即可进行安装。MySQL的守护进程(mysqld)消耗很少的内存并在只有在执行真正的查询时才装载到处理器上,这意味着对小型数据库来说,MySQL可以相当轻松地使用而不会对其他系统功能有太大的影响。
2、数据类型
字段支持大量数据类型是件好事。通常的整数、浮点数、字符串和数字均以多种长度表示,并支持变长的BLOB(Binary Large Object)类型。对整数字段由自动增量选项,日期时间字段也能很好的表示。
3、SQL兼容性
它也缺乏一些常用的SQL功能,没有子选择(在查询中的查询)。视图(View)也没了。当然大多数子查询可以用简单的连接子句重写,但有时用两个嵌套的查询思考问题比一个大连接容易。同样,视图仅仅为程序员隐蔽where子句,但这正是程序员们期望的另一种便利。
4、存储过程和触发器
MySQL没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制。多语句SQL命令必须通过客户方代码来协调,这种情形是借助于相当健全的查询语言和赋予客户端锁定和解锁表的能力,这样才允许的多语句运行。
5、参考完整性
MySQL的主要的缺陷之一是缺乏标准的RI机制;然而,MySQL的创造者也不是对其用户的愿望置若罔闻,并且提供了一些解决办法。其中之一是支持唯一索引。Rule限制的缺乏(在给定字段域上的一种固定的范围限制)通过大量的数据类型来补偿。不简单地提供检查约束(一个字段相对于同一行的另一个字段的之值的限制)、外部关键字和经常与RI相关的“级联删除”功能。有趣的是,当不支持这些功能时,SQL分析器容忍这些语句的句法。这样做目的是易于移植数据库到MySQL中。这是一个很好的尝试,并且它确实未来支持该功能留下方便之门;然而,那些没有仔细阅读文档的人可能误以为这些功能实际上是存在的。
6、安全性
自始至终我对MySQL最大的抱怨是其安全系统,它唯一的缺点是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。通常的SQL GRANT/REVOKE语句到最近的版本才被支持,但是至少他们现在有了。 MySQL的编写者广泛地记载了其特定的安全性系统,但是它确实需要一条可能是别无它法的学习过程。
7、备份和恢复、数据导入/导出
强制参考一致性的缺乏显著地简化备份和恢复,单靠数据导入/导出就可完美复制这一功能。LOAD DATA INFILE命令给了数据导入很大的灵活性。Select INTO命令实现了数据导出的相等功能。另外,既然MySQL不使用原始的分区,所有的数据库数据能用一个文件系统备份保存。数据库活动能被记载。与通常的数据库日志不同(存储记录变化或在记录映像之前/之后),MySQL记载实际的SQL语句。这允许数据库被恢复到失败前的那一点,但是不允许提交(commit)和回卷(rollback)操作。
8、连接性
MySQL客户库是客户/服务器结构的C语言库,它意味着一个客户能查询驻留在另一台机器的一个数据库。然而MySQL真正的强项处于该库中的语言“包装器(wrapper)”,Perl、Pathon和PHP只是一部分。Apache的Web服务器也有许多模块例如目录存取文件等允许各种各样的Apache配置信息(例如目录存取文件)使用MySQL,应用程序接口简单、一致并且完整。
数据库引擎
MyISAM强调了快速读取操作,这是为什么MySQL受到了Web开发如此青睐的主要原因:在Web开发中所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和Internet平台提供商(InternetPresenceProvider,IPP)只允许使用MyISAM格式。
MyISAM存储格式自版本3.23以来是MySQL中的缺省类型,它有下列特点:
如果操作系统自身允许更大的文件,那么文件比ISAM存储方法的大。
数据以低字节优先的机器独立格式存储。这表示可将表从一种机器拷贝到另一种机器,即使它们的体系结构不同也可以拷贝。
数值索引值占的存储空间较少,因为它们是按高字节优先存储的。索引值在低位字节中变化很快,因此高位字节更容易比较。
AUTO_INCREMENT处理比ISAM的表更好。
减少了几个索引限制。例如,可对含NULL值的列进行索引,还可以对BLOB和TEXT类型的列进行索引。
为了改善表的完整性检查,每个表都具有一个标志,在myisamchk对表进行过检查后,设置该标志。可利用myisamchk-fast跳过对自前次检查以来尚未被修改过表的检查,这样使此管理任务更快。表中还有一个指示表是否正常关闭的标志。如果服务器关闭不正常,或机器崩溃,此标志可用来检测出服务器起动时需要检查的表。
Apache简介
Apache是世界使用排名第一的Web服务器,它可以运行在几乎所有广泛使用的计算机平台上。
Apache源于NCSAhttpd服务器。经过多次修改,他成为了世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazon.com、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。
Apache服务器拥有以下特性:
支持最新的HTTP/1.1通信协议;
拥有简单而强有力的基于文件的配置过程;
支持通用网关接口;
支持基于IP和基于域名的虚拟主机;
支持多种方式的HTTP认证;
集成Perl处理模块;
集成代理服务器模块;
支持实时监视服务器状态和定制服务器日志;
支持服务器端包含指令(SSI);
支持安全Socket层(SSL);
提供用户会话过程的跟踪;
支持Fast CGI;
通过第三方模块可以支持Java Servlets。
系统分析与数据库设计
根据一般电子商务系统功能分析,将系统分为管理员、用户两大模块。系统管理员模块包括:系统配置管理、会员信息管理、网站新闻管理、物品信息管理、管理员管理、登录日志管理。用户模块包括:安全登录、找回密码、查询信息、发布信息、会员注册、物品类别、物品信息管理、会员信息修改。刚进入网站的非会员能够在此网站浏览和搜索信息,不仅能浏览二手信息还能浏览到热门信息。经过注册成为会员便能发布信息。此系统还考虑到用户利用穷举法破解密码,专门设置了用户和管理员登录日志,以便及时了解和防范。
根据系统功能需求建立的模块关系图如下图:
图3 系统模块关系图
本实例根据上面的模块关系图规划出的实体有管理员、二手信息机及新闻、用户、会员实体、各实体的E-R图及其关系描述如下(带下划线的为主键):
图6 新闻实体E-R图
图7 管理员实体E-R图
超级管理远实体E-R图同管理员实体E-R图类似,无权限属性(省略)。
各实体的关系E-R图描述如下:
8 实体和实体之间的关系E-R图
数据库设计
数据库表之间的关系
表1 数据库表
序号 |
数据库表 |
数据库存储内容 |
1 |
ershou_adminstage |
存储管理员和会员的登录日志 |
2 |
ershou_class |
存储二手信息的类别信息 |
3 |
ershou_pinglun |
存储会员对物品信息的评论 |
4 |
ershou_news |
存储新闻 |
5 |
ershou_user |
存储会员的相关信息 |
6 |
ershou_wupin |
存储以发布的物品信息 |
7 |
ershou_manager |
存储管理员的信息 |
数据表关系图如下:
图9 数据表关系图
数据表结构的详细设计
表2 用户资料表(ershou_user)
序号 |
字段名 |
字段类别 |
说明 |
备注 |
1 |
user_name |
varchar(20) |
用户的账号名称 |
主键 |
2 |
user _pass |
varchar(20) |
用户的帐号密码 |
|
3 |
user _question |
varchar(50) |
找回密码提问 |
|
4 |
user _angser |
varchar(50) |
找回密码答案 |
|
5 |
user _mphone |
varchar(12) |
移动电话 |
|
6 |
user _phone |
varchar(12) |
座机 |
|
7 |
user _school |
varchar(60) |
所在学校 |
|
8 |
user _email |
Varchar(80) |
电子邮箱 |
|
9 |
user _date |
datetime |
注册时间 |
|
10 |
user _qq |
Int |
QQ号 |
|
11 |
user _kt |
Int |
标志 |
默认为0 |
表3 类别信息表(ershou_class)
序号 |
字段名 |
字段类别 |
说明 |
备注 |
1 |
class_name |
varchar(20) |
类别名称 |
主键 |
2 |
class_order |
int |
大类顺序标记小类为默认的0 |
默认值为0 |
3 |
class_cid |
int |
小类顺序标记大类为默认的0 |
默认值为0 |
表4 用户与管理员登录日志信息表(ershou_ adminstage)
序号 |
字段名 |
字段类别 |
说明 |
备注 |
1 |
manager_name |
varchar(20) |
登录名 |
主键 |
2 |
manager_action |
varchar(50) |
登录动作 |
|
3 |
manager_ip |
varchar(30) |
登录ip |
|
4 |
manager_time |
datetime |
登录时间 |
|
5 |
manager_state |
int |
登录状态 |
默认为0 |
6 |
manager_if |
Int |
判断为管理员还是用户 |
默认为0 |
表5 评论表(ershou_pinglun)
序号 |
字段名 |
字段类别 |
说明 |
备注 |
1 |
pid |
int |
Id |
主键 |
2 |
pinglun_wid |
int |
物品id |
默认值为0 |
3 |
user_name |
varchar(20) |
会员名 |
|
4 |
pinglun_nr |
varchar(200) |
内容 |
|
5 |
Pinglun_time |
datetime |
时间 |
表6 网站新闻表(ershou_news)
序号 |
字段名 |
字段类别 |
说明 |
备注 |
1 |
nid |
tinyint(6) |
设置新闻编号 |
|
2 |
news_title |
varchar(100) |
设置新闻标题 |
|
3 |
news_class |
varchar(20) |
设置新闻类别 |
|
4 |
news_ly |
varchar(30) |
新闻来源 |
|
5 |
news_jishu |
int |
浏览次数 |
默认值为0 |
6 |
news_nr |
text |
新闻内容 |
|
7 |
news_time |
datetime |
设置添加时间 |
|
8 |
news_guoqi |
Char(2) |
设置是否过期 |
默认值为1 |
9 |
news_name |
varchar(20) |
发表新闻的管理员帐号 |
主键 |
表7 物品信息表(ershou_wupin)
序号 |
字段名 |
字段类别 |
说明 |
备注 |
1 |
wid |
int |
物品id |
主键 |
2 |
bclass_name |
varchar(20) |
所属大类别 |
|
3 |
class_name |
varchar(20) |
所属小类别 |
|
4 |
wuping_name |
varchar(40) |
物品名称 |
|
5 |
wuping_jishu |
int |
浏览次数 |
默认设置为0 |
6 |
wuping_nr |
text |
物品介绍 |
|
7 |
user_name |
varchar(20) |
用户帐号 |
|
8 |
wuping_time |
datetime |
发表时间 |
|
9 |
wuping_guoqi |
int |
交易状态 |
默认设置为1 |
表8:管理员信息表(ershou_manager)
序号 |
字段名 |
字段类别 |
说明 |
备注 |
2 |
manager_name |
varchar(20) |
管理员名称 |
主键 |
3 |
manager_pass |
varchar(20) |
管理员密码 |
|
4 |
manager_sup |
int |
标志为管理员权限 |
默认值为0 |
系统安全
MD5是在Web应用程序中最常用的密码加密算法。由于MD5是不可逆的,因而经过MD5计算得到后的密文,不能通过逆向算法得到原文。
所谓MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。
在Web应用程序中使用MD5加密文本密码的初衷,就是为了防止数据库中保存的密码不幸泄露后被直接获得。但攻击者不但拥有数据量巨大的密码字典,而且建立了很多MD5原文/密文对照数据库,能快速地找到常用密码的MD5密文,是破译MD5密文的高效途径。然而,MD5密文数据库所使用的是最常规的MD5加密算法:原文-->MD5-->密文。因此,使用字符串次序干涉MD5算法,使现成的MD5密文数据库无所作为。此函数是把MD5运算后的密文字符串的顺序调转后,再进行一次MD5运算。函数代码如下:
function md5_5($psw)
{ //得到数据的密文
$ psw = md5($psw);
//再把密文字符串的字符顺序调转
$ psw = strrev($psw);
//最后再进行一次MD5运算并返回
return md5($psw);
}
系统的实现
系统的主要功能
归纳起来,系统的功能大约有以下几点:用户注册,信息查询,发布信息,找回密码等。
注册
为了实现不同地域的学生通过网络、不择时间地自主填写并上传自己的基本档案(不合要求的档案可以由管理员及时清除),需要录入基本的个人信息。
1.步骤:
(1)开始注册;
(2)填写个人信息;
(3)提交(如失败返回填写页面重填写;如果重名错误,显示提示信息);
(4)进入登录界面;
(3)登录成功,进入主界面。
2.主要验证代码:
//值存在则继续执行
if(($_GET["ac"]=="in")and(isset($_POST["user_name"])))
{ //判断验证码是否正确
if($_POST["ac_uthnum"]==$_SESSION["user_authnum"])
{
$user_name=$_POST["user_name"];
$user_name=trim($user_name);
$user_pass1=$_POST["user_pass"];
$user_pass1=trim($user_pass1);
$user_pass=md5_5($user_pass1);//密码进行MD5加密
$user_question=$_POST["user_question"];
$user_angser1=$_POST["user_angser"];
$user_angser1=trim($user_angser1);
$user_angser=md5_5($user_angser1);//密码进行MD5加密
$user_school=$_POST["user_school"];
$user_phone=$_POST["user_phone"];
$user_mphone=$_POST["user_mphone"];
$user_qq=$_POST["user_qq"];
$user_email=$_POST["user_email"];
$user_kt="1";
//查询是否存在当前注册用户名
$query="select count(*) count from ershou_user where user_name='$user_name'";
$result=mysql_query($query);
while($info=mysql_fetch_array($result))
{ $count=$info["count"]; }
if($count==0){//不存在才执行注册
$sqladd = "INSERT INTO ershou_user SET user_name='$user_name',
user_pass='$user_pass',
user_question='$user_question',
user_angser='$user_angser',
user_school='$user_school',
user_phone='$user_phone',
user_mphone='$user_mphone',
user_qq='$user_qq',
user_email='$user_email',
user_kt='$user_kt',
user_date=NOW()";
else{//存在相同用户名则重新填写
echo '<table width="100%" border="0" cellPadding="0" cellSpacing="0">
<tr>
<td height="300" align="center"><img src="images/warning.gif" border="0" /> 该会员已存在 <a href="javascript:history.back()">返回</a>重新填写
</td>
</tr>
</table>';}
}
3.主要窗口如下图:
图10 用户注册窗口
搜索信息
为了实现快速浏览网站信息,各用户可以根据所须信息类别并填写查询关键字,很快的找出需要的信息。
1.步骤:
(1)填写信息类别;
(2)修改或删除信息类别;
(3)浏览信息类别。
2.主要代码:
$sql ="select count(*) count from ershou_wupin where bclass_name='$bclass_name' and wupin_name like '%$searchcontent%'";
$result=mysql_query($sql) or die(mysql_errno().": ".mysql_error()."\n");
$rs=mysql_fetch_object($result);
$recountCount=$rs->count;
$show=20;
$totalPage=ceil($recountCount/$show);
$page = (isset($_GET['page']) && $_GET['page']>=0)? $_GET['page']: 0;
$isLast = ($page==($totalPage-1))? true: false;
$hasNoPre = ($page==0)? true: false;
$hasNoNext = ($page==$totalPage-1)? true: false;
$isFirst = ($page==0)? true:false;
$start = $page*$show;
if($recountCount==0){ //搜索结果不为0则显示未找到
echo '<tr><td height="25" align="center">未找到!</td></tr>';}
else{
$sqlwupin="select * from ershou_wupin where bclass_name='$bclass_name' and wupin_name like '%$searchcontent%' ORDER BY wupin_time desc limit $start,20";
$resultwupin = mysql_query($sqlwupin) or die(mysql_errno().": ".mysql_error()."\n");
while($rswupin=mysql_fetch_object($resultwupin)){
$wupin_name=$rswupin->wupin_name;
$wupin_time=$rswupin->wupin_time;
$date_format=date("m/d",strtotime($wupin_time));
$wid=$rswupin->wid;
echo '<tr><td height="25">
<font color="#333333">['.$rswupin->class_name.']</font>
<a href="wupin.php?wid='.$wid.'" target="_blank">
<font color="#333333">'.TrimChinese($wupin_name,"80").'</font></a>
<font color="#666666"> ('.$date_format.') </font></td></tr>';}}
3.主要窗口如下图:
图11 搜索窗口
发布信息
实现用户发布二手信息,建立一个简单易操作的信息发布平台。
1.步骤:
(1)输入标题;
(2)选择类别;
(3)输入内容;
(4)选择有效标志。
2.主要代码:
<?
//处理内容提交
if(($_GET["ac"]=="in")&&(isset($_POST["wupin_name"]))){
$wupin_name=$_POST["wupin_name"];
$class_name=$_POST["class_name"];
$wupin_nr=$_POST["wupin_nr"];
$wupin_img=$_POST["wupin_img"];
$user_name=$_POST["user_name"];
$wupin_time=$_POST["wupin_time"];
$wupin_guoqi=$_POST["wupin_guoqi"];
//查询所属大类的id号
$sqlbclass="select * from ershou_class where class_name='$class_name'";
$resultbclass=mysql_query($sqlbclass);
while($infobclass=mysql_fetch_array($resultbclass))
{ $class_cid=$infobclass["class_cid"];}
//根据大类的id号 查询出大类名称
$sqlbclass1="select * from ershou_class where cid='$class_cid'";
$resultbclass1=mysql_query($sqlbclass1);
while($infobclass1=mysql_fetch_array($resultbclass1))
{ $bclass_name=$infobclass1["class_name"];}
$sqlup = "INSERT INTO ershou_wupin SET
bclass_name='$bclass_name',
wupin_name='$wupin_name',
class_name='$class_name',
wupin_nr='$wupin_nr',
user_name='$user_name',
wupin_guoqi='$wupin_guoqi',
wupin_time=NOW()";
if(@mysql_query($sqlup)) {
msg("增加成功!","#ff0000");
echo '<meta http-equiv ="Refresh" content = "1 ; URL=wupin_manager.php">';
}
else {
echo"<p>Error: ".mysql_error()."</p>";
}
}?>
3.窗口如下图:
图12 发布信息窗口
实现找回密码,大意丢失密码的拥护根据所须填写注册时的问题答案,就能更改密码。
1.步骤:
(1)填写用户名;
(2)填写答案跟新密码;
(3)提交密码。
2.主要代码如下:
<?
$user_name1=$_POST["user_name"];//前页隐藏表单提交过来的的当前用户名
$user_angser2=$_POST["user_angser"];
$user_name1=trim($user_name1);
$user_angser2=trim($user_angser2);
$user_angser1=md5_5($user_angser2);//填写的答案进行加密 以去和数据库的值对比
$user_pass2=$_POST["user_pass1"];//读取新密码
$user_pass2=trim($user_pass2);
$user_pass1=md5_5($user_pass2);//加密
$sql="select * from ershou_user WHERE user_name='$user_name1'";
$result = mysql_query($sql) or die(mysql_errno().": ".mysql_error()."\n");
$rs=mysql_fetch_object($result);
$user_angser=$rs->user_angser;
if($user_angser!=$user_angser1){//数据库答案与输入的不相同 就提示
echo '<tr bgcolor="#f3f3f3">
<td height="50" align="center">答案错误!请<a href="user_repw.php"><font color="#ff0000">返回</font></a></td></tr>';}
//输入的答案正确和输入了新密码就提交修改的用户密码
elseif($user_angser1==$user_angser)
{
$sqlup="UPDATE ershou_user SET user_pass='$user_pass1' where user_name='$user_name1'";
if(@mysql_query($sqlup)) {
echo '<img src="images/success.gif" border="0" />';
msg("修改成功,返回登录","#ff0000");
echo '<meta http-equiv ="Refresh" content = "1 ; URL=user_login.php">';
}
else {
echo"<p>Error: ".mysql_error()."</p>";
}
}
?>
3.主要窗口如下:
密码找回
实现找回密码,大意丢失密码的拥护根据所须填写注册时的问题答案,就能更改密码。
1.步骤:
(1)填写用户名;
(2)填写答案跟新密码;
(3)提交密码。
2.主要代码如下:
<?
$user_name1=$_POST["user_name"];//前页隐藏表单提交过来的的当前用户名
$user_angser2=$_POST["user_angser"];
$user_name1=trim($user_name1);
$user_angser2=trim($user_angser2);
$user_angser1=md5_5($user_angser2);//填写的答案进行加密 以去和数据库的值对比
$user_pass2=$_POST["user_pass1"];//读取新密码
$user_pass2=trim($user_pass2);
$user_pass1=md5_5($user_pass2);//加密
$sql="select * from ershou_user WHERE user_name='$user_name1'";
$result = mysql_query($sql) or die(mysql_errno().": ".mysql_error()."\n");
$rs=mysql_fetch_object($result);
$user_angser=$rs->user_angser;
if($user_angser!=$user_angser1){//数据库答案与输入的不相同 就提示
echo '<tr bgcolor="#f3f3f3">
<td height="50" align="center">答案错误!请<a href="user_repw.php"><font color="#ff0000">返回</font></a></td></tr>';}
//输入的答案正确和输入了新密码就提交修改的用户密码
elseif($user_angser1==$user_angser)
{
$sqlup="UPDATE ershou_user SET user_pass='$user_pass1' where user_name='$user_name1'";
if(@mysql_query($sqlup)) {
echo '<img src="images/success.gif" border="0" />';
msg("修改成功,返回登录","#ff0000");
echo '<meta http-equiv ="Refresh" content = "1 ; URL=user_login.php">';
}
else {
echo"<p>Error: ".mysql_error()."</p>";
}
}
图13 找回密码窗口
<?
######MySQL数据库信息######
$DBhost = "localhost"; //主机名
$DBuser = "root"; //用户名
$DBpass = ""; //密码
$DBname = "ershou"; //数据库名
mysql_connect($DBhost,$DBuser,$DBpass) or die("无法连接到数据库!");
mysql_query("SET NAMES GBK");
mysql_select_db ($DBname);
?>
1.首页:
网站首页是用户进入系统的第一个界面,因此,简洁、友好、清晰醒目是设计时要考虑的风格。样式如图所示:
图14 系统首页
2.管理员管理主界面:
管理员输入正确地用户名和口令后,就可进入管理主界面。管理主界面是管理员维护网站使用的界面,因此要求简单明了,容易操作。样式如下图:
图15 管理员管理界面
本系统是基于Windows平台,在PHP、MYSQL、Apache的环境下运行的;启动Apache应用服务器,打开Internet Explorer,在URL地址中输入http://localhost,即可打开系统首页。经过测试,本系统已经能够顺利完成系统要求的基本功能,达到预期目标。
在Linux、PHP、MYSQL、Apache的环境下;用户远程访问此系统,页面会出现乱码。就此问题经过如下分析,并给出解决方案:
系统显示信息时出现了中文文字显示的问题。系统文件乱码的出现是由于编码(charset)设置错误,导致浏览器以错误的编码来解析。
此系统测试时遇到的主要是数据库连接编码,指的是进行数据库操作时以哪种编码与数据库传输数据,由于Linux操作系统上数据库采用UTF8编码,而网页的页面申明编码是GB2312。这时候在PHP脚本里面直接SELECT数据出来的就是乱码,需要在查询前先使用:
Mysql_query ("SET NAMES GBK");
来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。
此问题解决后,继续测试系统。能够顺利完成系统要求的基本功能,系统在远程服务器上运行成功。