新闻管理系统的设计-软件工程课程设计报告及新闻发布管理系统设计报告书_第1页
新闻管理系统的设计-软件工程课程设计报告及新闻发布管理系统设计报告书_第2页
新闻管理系统的设计-软件工程课程设计报告及新闻发布管理系统设计报告书_第3页
新闻管理系统的设计-软件工程课程设计报告及新闻发布管理系统设计报告书_第4页
新闻管理系统的设计-软件工程课程设计报告及新闻发布管理系统设计报告书_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

评分:软件工程课程设计报告新闻管理系统的设计专业_计算机科学与技术_姓名____班级__学号___完成日期__指导教师_1题目新闻管理系统设计与实现2系统分析2.1问题定义为了实现网站新闻的动态管理,使得对信息的管理更加及时、高效,提高工作效率同时随着Internet的普及,越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,发布最新动态,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等。其中新闻管理系统是构成企业网站的一个重要组成部分,它担负着双层作用,一方面可以用来动态发布有关新产品或新开发项目,另一方面又可以及时向顾客公告企业经营业绩、技术与研发进展、特别推荐或优惠的工程项目、产品和服务,从而吸引顾客,扩大顾客群。2.2可行性分析通用的新闻管理系统对于快速建设新闻类网站可以起到事半功倍的效果,它能够减少投资成本,使企业和个人不需要什么专业的技术就可以轻松架设属于自己的网站,市场发展前景广阔。一个优秀的新闻管理系统对于促进我国互联网产业的发展,提高我国的网络化建设水平等方面,具有长期的经济效益和社会利益传统的网站新闻管理方式有两种,一是静态HTML页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,这种方式因为效率太低已不多用。二是基于ASP和脚本语言,将动态网页和数据库结合,通过应用程序来处理新闻,这是目前较为流行的做法。但是由于ASP本身的局限性使得系统有一些不可克服的缺陷,而采取了ASP.NET技术的系统性能上有了很大的改善,其主要表现在以下几方面:

1.由于ASP页面每次打开都必须经过先编译后解释的过程,所以页面在反复打开时速度没有任何提升,而ASP.NET页面只需要一次编译后不需要重新编译,直到该页面被修改或Web应用程序重新启动。这使得在多次访问时速度有了极大的提升。

2.由于ASP没有提供任何输出数据为内容的元件,所以在使用ASP撰写数据库页面时只能借助ADO的RecordSet对象逐笔读取记录,而ASP.NET通过ADO.NET提供的DataGrid等数据库元件可以直接和数据库联系。

3.ASP.NET支持应用程序的实时更新。管理员不必关掉网络服务器或者甚至不用停止应用程序的运行就可以更新应用文件。应用程序文件永远不会被加锁,因此甚至在程序运行时文件就可以被覆盖。当文件更新后,系统会温和地转换到新的版本。

4.ASP.NET采取"code-behind"方式编写代码使得代码更易于编写,结构更清晰,降低了系统的开发与维护的复杂度和费用。作为微软.NET战略的重要组成部分,ASP.NET引入了许多激动人心的新技术。这些具有革新意义的新特性,必将使其得到广泛的支持和应用。中国互联网络中心的最新调查结果显示,在网民最常使用的网络服务中浏览新闻占据第一位,使用率为67.9%。因此一个完整健全的新闻管理系统对企业或对个人都是有其显著的作用,为其他各方面的发展都起到了很大的推动效果,无需过于担忧系统的开发成本在其经济效益之上。该新闻管理系统可以使企业通过网站可以展示产品,发布最新动态,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等,其中包括新闻的动态更新,新闻的检索,热点问题追踪,行业信息,供应信息,需求信息的发布等,又可以作为公司的活动年表向社会公布,它及时向顾客公告企业经营业绩,技术与研发进展,特别推荐或优惠的工程项目,产品和服务,从而吸引顾客,建立并保持顾客的忠诚度。2.3需求分析2.3.1功能需求分析新闻管理信息系统对企业加强新闻管理有着极其重要的作用,就一般的大型企业来说,它的设计内容非常复杂而且繁多,比如拥有新闻计算功能,新闻统计功能,报表输出功能等等,针对公司需要而言,确定了新闻管理系统的设计方案,该新闻管理系统的主要功能实现如下:·····新闻发布管理·····新闻类别管理·····新闻评论管理·····新闻阅读查询·····用户管理2.3.2数据需求分析根据对新闻管理工作的调查和用户需求分析,该系统的数据流图如图1.1所示。用户设定新闻设定用户设定新闻设定SHAPE1.1系统的数据流图新闻发布及管理系统用户使用流程如图1.2所示,分为系统管理员使用流程和客户端用户使用流程。流程一登录新闻管理系统登录新闻管理系统创建新闻一级分类创建新闻二级分类发布管理新闻内容流程二阅读新闻内容阅读新闻内容发布新闻评论1.2用户使用流程2.3.3性能要求分析该新闻管理系统达到以下四个方面的系统功能特点1)操作简单、界面友好:完全控件式的页面布局,使得新闻的录入工作更简便;许多选项包括新闻类别、来源部门等只需要点击鼠标就可以完成;另外,跟踪出现的提示信息也让用户随时清楚自己的操作情况。

(2)即时可见:对新闻的处理(包括录入、修改、删除)将立即在主页的对应栏目显示出来,达到"即时发布、即时见效"的功能。(3)功能完善:包括常见网站的新闻管理的各个方面:新闻录入、浏览、删除、修改、检索等各个方面,完整地实现了网站对即时新闻的管理要求。

(4)方便移植:针对不同的企业,只需要稍作修改就可以开发出适合本企业特点的网站新闻管理系统!3系统设计3.1系统总体设计图1.3系统功能模块图3.2系统功能模块设计系统的主要功能是通过几个功能模块来实现的。具体的设计过程如下:

(1)系统登录:该模块负责将用户分为普通用户和注册用户来实现用户权限的管理。

(2)新闻浏览:该模块负责分页列出网站所有新闻的信息,包括标题、类型、来源部门字段及发布日期,每条新闻的标题被做成一个超链接,点击它们就能跳转页面进行新闻阅读。

(3)新闻阅读:在其他页面中点击标题链接即进入新闻阅读页面,此时,每条新闻的详细信息将被取出,包括内容、标题、关键字等,并按照相对固定的格式放置在页面的不同区域,所有新闻使用大致相同的页面布局,只是各字段对应的内容不同而已,另外,页面其它位置,可以动态放置其他元件,如网站标志logo、页面广告banner等链接图片,这样可以很容易地实现图文并茂的阅读效果。

(4)新闻查询:该模块提供了新闻查询功能,输入待查找的内容及选定分类信息可以快速地找到符合条件的新闻,并输出查询结果。

(5)新闻管理:该模块负责分页罗列登录的注册用户曾发布过且未删除的新闻信息,用户可以对该条新闻进行删除、修改。非新闻发布者除系统管理员外不具有对该条新闻的处理权限,所以不同用户进入此页面将显示不同的内容。

(6)新闻录入和修改:注册用户录入一条新闻所需要的内容,包含标题、关键字、类型、来源部门、发布日期等,同时从登录模块得到用户名,这些信息将被写入数据库中保存。该模块还负责编辑状态下的更新,这时,它将根据取得的Title字段值对页面控件初始化。3.3数据库设计3.3.1数据库概念结构设计新闻实体信息ER图新闻信息新闻信息新闻编号新闻题目新闻内容类别编号发布时间分类信息实体ER图分类信息分类信息分类编号分类标题发布时间管理员实体ER图管理员信息管理员信息用户名密码实体之间的联系图用户用户新闻信息分类信息阅读分类mn1n操作管理员1n添加删除修改3.3.2数据库逻辑物理结构设计利用MicrosoftSQLServer2000建立数据库及其存储过程。这里给出必需的数据表。一是数据表新闻表News包含的字段有:编号、姓名、标题、关键字、内容、类型、来源部门和日期。字段说明如下:二是数据表用户Reg包含的字段有:编号、姓名、密码、所属部门、电子邮箱和电话。字段说明如下:

三是权限表purview包括的字段有:权限ID,权限名称,备注。字段说明如下:字段名数据类型说明purviewid自动编号权限IDpurviewname字符权限名称note字符备注4结束语该新闻管理系统的开发难点主要是将各个模块有机结合以及公共文件的使用,尤其是显示前台数据的时候,与显示界面很好地融合也是比较困难的问题,需要细心地布置,通过这次软件工程的课程设计,使我所学到的软件工程、数据库相关知识,进行了一次很好的综合提炼,使我对数据库的开发与应用有了更新的认识,这对我今后的工作和学习都是宝贵的经验积累。新闻发布管理系统设计报告目录第一章引言 11.1研究意义 11.2开发环境的搭建与开发工具 1第二章系统分析 22.1需求分析 22.2可行性分析 5第三章概要设计 53.1系统功能结构图 53.2实体关系图 63.3系统功能模块设计 73.5数据库设计 8第四章详细设计 114.1目录结构 114.2模块划分 124.3网站布局的设计 124.4用户登录与验证 134.5用户注册的设计与实现 174.6用户收藏新闻的设计写实现 204.7后台管理员的权限的设计 204.8新闻分类的设计与实现 214.9新闻列表的设计与实现 264.10新闻添加的设计与实现 294.11新闻详细内容的设计与实现 304.12新闻评论的设计与实现 334.13首页图片轮换的设计与实现 344.14投票的设计与实现 344.14新闻搜索的设计与实现 35第五章网站测试 364.1页面的测试 36第六章总结 46第一章引言1.1研究意义随着互连网的进一步发展,网络媒体在人们心中的地位进一步提高,新闻发布管理系统做为网络媒体的核心系统,其重要性是越来越重要:一方面,它提供一个新闻管理和发布的功能;另一方面,现在的新闻发布要求实现与普通的用户实现交互,用户可以很方便地参加一些调查和相关新闻的评论,这一点也是其他一些媒体现在无法做到的(电视,电台等)。新闻发布管理系统就是一个把杂乱无章的新闻信息有效得组织起来并以有序的方式呈现给前端客户的一个信息系统,系统主要实现对新闻的分类,管理,检索,浏览等一系列问题,从而为用户提供一个美观,大方,快速的前台新闻阅读界面。1.2开发环境的搭建与开发工具1.2.1本系统采用php+apache+mysql+PDO技术开发,使用smarty模板引擎,将逻辑代码与外在内容分离。Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。DO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。1.2.2开发环境搭建WampServer,是在windows下将Apache+PHP+Mysql集成环境,拥有简单的图形和菜单安装和配置环境。1.2.3ide的选择Dreamweavercs5,所见即所得网页编辑器。EclipsePHPStudio1.2.2是一个大型PHP项目开发编译器,给予Eclipse底层开发而来,并且集成了JDK,免除处了安装配置的麻烦,一次安装即可使用无需配置。此编译器为PHP编译器,辅助PHP代码的开发和调试,集成了代码高亮,函数跟踪,时时纠错等功能。同时还增加了协作开发版本服务器功能:SVN,CVS。内嵌浏览器可以在调试简单代码时时浏览。1.2.4UML设计工具PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型,可以生成多种客户端开发工具的应用程序,还可为数据仓库制作结构模型,也能对团队设备模型进行控制。系统分析2.1需求分析2.1.1系统需求分析本系统设计的目的是将不同类型的新闻发布到网络上,任何用户都可以通过这个平台来浏览新闻,用户登录后可以对新闻发表评论。管理员管理新闻,新闻栏目,用户信息和评论。将系统需求总结,得出系统需求如下:系统用户分为游客,已登录用户和管理员游客可以浏览新闻,但不能对新闻进行评论游客可以注册,注册后进行登录可以获得更多权限已经登录用户具有游客的所有权限已经登录用户可以对新闻进行评论已经登录用户可以对偏激的评论举报只有超级管理员具有用户所有的权限管理员可以对新闻进行管理管理员可以对新闻分类进行管理管理员可以对用户进行管理管理员可以对评论进行管理2.1.2用例图用例图(UserCase)是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。新闻发布管理系统面向三类用户:管理员,已经登录用户,游客,权限依次递减。管理员管理员拥有最高权限,负责新闻发布管理系统的日常运行和维护,该系统给管理员的主要功能有:管理用户,新闻分类管理,新闻管理,评论管理,管理员角色用例如图2-1所示。图2-1管理员角色用例图2)已经登录用户已经登录用户是新闻发布管理系统的使用者。本系统为他们提供了以下主要功能:用户登录,浏览新闻,搜索新闻,发表新闻评论,举报评论,参加投票、收藏新闻等。已经登录用户的角色用例图如图2-2所示图2-2已经登录用户角色用例图3)游客游客是任何能登录到新闻发布管理系统的的人,但是没有注册,登录验证。所以权限最低。主要有以下几个功能:注册,登录,浏览新闻,搜索新闻,参加投票。游客角色用例图如图2-3所示。图2-3游客角色用例图2.13数据流图数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的传输变换过程。数据流图是结构化系统分析的主要工具,它表示了系统内部信息的流向,并表示了系统的逻辑处理的功能。数据流图的基本图形元素有4种,如图2-4所示图2-4数据流图基本图形符号根据调查材料,明确系统外部项,识别数据输入的来源和输出的去向,自顶向下逐层扩展整个系统的逻辑功能,画出中层数据流图。D1:用户信息存储,D2:评论信息存储,D3:用户收藏新闻信息存储,D4:新闻信息存储,D5:新闻分类信息存储,D6:管理员信息存储图2-5数据流图2.2可行性分析本系统属于数据信息发布与管理系统类。用户对功能上的要求不是很复杂。并且用php开发,php简单,功能强大。新闻发布管理系统后台管理对新闻做了详细的分类,前台以分类形式显示新闻的详细信息,满足了人们浏览新闻时分类查看新闻信息的要求,前台提供新闻搜索功能,方便浏览者查找新闻。新闻发布管理系统后台由管理员进行管理维护,保证了安全性,所以本系统是十分可行的。概要设计3.1系统功能结构图本系统的功能结构图如图3-1所示新闻发布管理系统登录}注册}.注销友情链接管理新闻管理新闻发布管理系统登录}注册}.注销友情链接管理新闻管理后台评论管理前台新闻显示前台新闻评论用户管理新闻分类管理添加新闻分类删除新闻分类修改新闻分类添加新闻修改新闻删除新闻添加链接修改链接删除链接查看评论删除评论浏览新闻搜索新闻发表评论回复评论添加用户删除用户图3-1系统功能结构图3.2实体关系图实体关系图:简记E-R图是指以实体、关系、属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式。管理员管理员账号密码管理员编号创建时间权限编号停用时间发布时间发布时间新闻类别分类名称分类编号发布人新闻类别分类名称分类编号发布人添加新闻新闻标题新闻新闻标题新闻内容所属类别所属类别所属类别浏览浏览发表用户评论所属人编号发表用户评论所属人编号评论内容评论时间用户编号用户编号emailemail用户名密码用户名密码图3-2新闻发布管理系统E-R图3.3系统功能模块设计本系统分为前台和后台两大模块,后台是针对管理员设计的,后台模块主要负责用户的管理,新闻的管理,新闻分类的管理,以及评论的管理。用户管理包括对用户的添加,删除功能;新闻管理包括对新闻的添加,删除和修改功能;新闻栏目管理包括对新闻分类的添加,删除,修改功能;评论管理包括对评论的查找和删除功能;该模块的功能结构图如图3.3所示。前台模块针对游客和已登录用户而设计的,主要负责用户的登录,注册和注销功能以及新闻的浏览和对新闻发表评论的功能,其模块功能图如图34所示。后台添加用户后台添加用户用户管理用户管理添加用户添加用户添加新闻添加新闻修改新闻新闻管理修改新闻新闻管理添加分类删除新闻添加分类删除新闻修改分类新闻分类管理修改分类新闻分类管理删除分类删除分类评论管理删除评论评论管理删除评论图3-3新闻后台功能模块前台前台用户登录/注销用户注册浏览功能浏览新闻发表评论搜索新闻收藏新闻图3-4新闻前台功能模块3.5数据库设计后台用户表:np_admin前台用户表:np_user系统基本配置表:np_config新闻基本表:np_newsbase新闻内容表:np_newscontent新闻分类表:np_newsclass新闻评论表:np_comment投票项目表:np_vote投票选项表:np_item友情链接表:np_link用户收藏表:user_store连接数据用PDO封装的pdo的类pdo.class.php<?php/*********pdo连接数据库的简单继承封装***********/classmypdoextendsPDO{private $dsn="mysql:host=localhost;dbname=newsphp";/******数据库类型,ip,数据库名*****/private $user="root";//用户名private $pass="";/***构造函数,连接数据库**/publicfunction__construct(){ try{PDO::__construct($this->dsn,$this->user,$this->pass,array(PDO::ATTR_PERSISTENT=>true,PDO::MYSQL_ATTR_INIT_COMMAND=>"SETNAMES'utf8';"));parent::setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}catch(PDOException$e){$e->getMessage();}}/*******统计条数*****/publicfunctioncount_row($table){ $rs=$this->query("SELECT*FROM$table");$rs->fetch();return$rs->rowCount(); }?>第四章详细设计4.1目录结构网站总目录前台配置:网站后台目录4.2模块划分系统功能模块的划分,是在需求分析基础上进行的,是把具有复杂功能的系统通过设计分解为具有基本独立,功能简单,易于实现等特点的多个功能模块.模块划分的好处是,由于组成系统的模块基本独立,功能明确,因此便于模块的独立开发、维护和修改,而不会影响系统中的其他模块.本系统主要分为前台和后台2大模块前台主要模块1.1新闻浏览1.2新闻搜索1.3用户登录与注册1.4发表评论1.5收藏文章后台主要模块2.1管理员权限2.2登录,注册2.3发表新闻2.4管理新闻2.4管理用户2.5管理评论4.3网站布局的设计网站前台使用css+div布局,css布局用到了960gridsystem,CSS框架能够节省更多的开发时间,显著提高工作效率。网站的首页4.4用户登录与验证前台和后台操作用到的基本代码设计成函数,在action.php里Action.php代码:<?phpsession_start();define("ALLPS","xu--");/*********显示全部错误***********/error_reporting(E_ALL);ini_set("display_errors","on");/***********屏蔽警告和错误提示*******************//*error_reporting(E_ERROR);ini_set("display_errors","Off");*//********用户登录********/functionuser_login(){$db=newmypdo();$username=str_replace("","",$_POST['username']); $rs=$db->prepare("select*from`np_user`where`username`=?"); $rs->execute(array($username)); $row=$rs->fetch(); $us=is_array($row); $pass=$us?md5($_POST['password'].ALLPS)==$row['password']:false;//验证密码 if($pass){ $_SESSION['uid']=$row['uid']; $_SESSION['shell']=md5($row['username'].$row['password'].ALLPS); $_SESSION['times']=time(); $rs=$db->prepare("UPDATE`newsphp`.`np_admin`SET`last_login`=?WHERE`id`=?"); $rs->execute(array(time(),$row['uid']));//更新登录时间 return$row; }else{ session_destroy(); show_msg("index.php","用户名或密码错误"); } }/***********用户权限判断*************/functionuser_check($uid,$shell){ $db=newmypdo(); $rs=$db->prepare("select*from`np_user`where`uid`=?"); $rs->execute(array($uid)); $row=$rs->fetch(); $us=is_array($row); $pass=$us?$shell==md5($row['username'].$row['password'].ALLPS):false;//验证密码 if($pass){ return$row; }else{ session_destroy(); }}/*******注销********/functionlogout(){ session_destroy(); } /*******超时判断*******/functiontimeout($long="3600"){ $new_time=time(); $onlinetime=$_SESSION['times']; if($new_time-$onlinetime>$long){ session_destroy(); header("Content-Type:text/html;charset=utf-8"); echo"登录超时".'<ahref="index.php"target="_parent">返回登录</a>'; exit(); }else{ $_SESSION['times']=time(); } } /*************PHP中文字符截取***************//*@paramstring$str要截取的字串*@paramint$start截取起始位置*@paramint$length截取长度*@paramstring$charsetutf-8|gb2312|gbk|big5编码*@param$suffix是否加尾缀*/functioncutstr($str,$start=0,$length,$charset="utf-8",$suffix=true){if(function_exists("mb_substr")){if(mb_strlen($str,$charset)<=$length)return$str;$slice=mb_substr($str,$start,$length,$charset);}else{$re['utf-8']="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";$re['gb2312']="/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";$re['gbk']="/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";$re['big5']="/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";preg_match_all($re[$charset],$str,$match);if(count($match[0])<=$length)return$str;$slice=join("",array_slice($match[0],$start,$length));}if($suffix)return$slice."…";return$slice;}/*******操作提示跳转页******/functionshow_msg($url,$show='操作已成功!',$open="self"){ $msg='<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="/1999/xhtml"><head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <scripttype="text/javascript"> setTimeout("goto()",2000); functiongoto(){ '.$open.'.window.location="'.$url.'"; } </script> <title>管理区域</title> </head> <body> <divid="man_zone"> <tablewidth="40%"border="1"align="center"cellpadding="3"cellspacing="0"class="table"style="margin-top:100px;border-collapse:collapse;"> <tr> <thalign="center"style="background:#cef">信息提示</th> </tr> <tr> <td><p><fontcolor=#ff0000>'.$show.'</font><br/> 2秒后返回指定页面!<br/> 如果浏览器无法跳转,<ahref="'.$url.'"target="_'.$open.'">请点击此处</a>。</p></td> </tr> </table> </div> </body> </html>'; echo$msg; exit(); } ?> 4.5用户注册的设计与实现前台用户注册user_register.php<?phpinclude_once("global.php");/********用户注册***********/$db=newmypdo();if(isset($_POST['submit'])){$rs=$db->prepare("INSERTINTO`np_user`(`username`,`password`,`email`)VALUES(?,?,?)");$rs->execute(array($_POST['username'],md5($_POST['password'].ALLPS),$_POST['email']));show_msg("index.php","恭喜您,注册成功,请登录");}$smarty->display("user_register.html");?>用到jquery的插件validate,//JavaScriptDocument$(function(){ //自定义验证 $.validator.addMethod("stringCheck",function(value,element){returnthis.optional(element)||/^[\u0391-\uFFE5\w]+$/.test(value);},"只能包括中文字、英文字母、数字和下划线"); $("#reg").validate({ rules:{ username:{ required:true, minlength:5, stringCheck:true, remote:"user_ajax.php" }, password:{ required:true, minlength:5 }, email:{ required:true, email:true }, password2:{ required:true, minlength:5, equalTo:"#password" } }, messages:{ username:{ required:"请输入用户名", minlength:"用户名太短了点", remote:"该用户名已经被注册了" }, password:{ required:"请输入密码名", minlength:"用户密码太短了点" }, email:{ required:"请输入email", email:"email格式不正确哦" }, password2:{ equalTo:"请输入相同的密码" } }, errorElement:"em", success:function(em){ em.text("").addClass("success") } }) })调用的ajaxuser_ajax.php<?phpinclude_once('./common/pdo.class.php');session_start();$db=newmypdo();if(isset($_GET['username'])){//用户名验证$db=newmypdo();$rs=$db->prepare("SELECT*FROM`np_user`WHERE`username`=?");$rs->execute(array($_GET['username']));$row=$rs->fetch();if(is_array($row)){ echo"false"; }else{ echo"true"; }}if(!empty($_POST['vote_button'])){ foreach(array_filter($_POST['id'])as$id){ $rs_t=$db->prepare("UPDATE`newsphp`.`np_item`SET`hit`=hit+1WHERE`np_item`.`id`=?"); if(@$_COOKIE["$id"]!=$id){ $rs_t->execute(array($id)); setcookie($id,$id,time()+1800); } } }?>实现了如下效果:user_register.php4.6用户收藏新闻的设计写实现未完成4.7后台管理员的权限的设计分五个等级:switch($row['mid']){ case"0": $rule="拥有所有权限"; $level="创始人"; break; case"1": $rule="拥有所有权限"; $level="超级管理员"; break; case"2": $rule="可以对新闻,评论进行管理"; $level="普通管理员"; break; case"3": $rule="可以管理新闻"; $level="新闻管理员"; break; case"4"; $rule="可以管理评论"; $level="评论管理员"; break;/***********用户权限判断*************/functionuser_check($uid,$shell,$mid="100"){ $db=newmypdo(); $rs=$db->prepare("select*from`np_admin`WHERE`id`=?"); $rs->execute(array($uid)); $row=$rs->fetch(); $us=is_array($row); $pass=$us?$shell==md5($row['username'].$row['password'].ALLPS):false;//验证密码 if($pass){ if($mid>=$row['mid']){//权限判断 return$row; }else{ show_msg("admin_main.php","你没用权限操作该页面"); exit(); } }else{ show_msg("index.php","请先登录"); exit(); }}4.8新闻分类的设计与实现本系统最难的地方,要实现无限分类先写个无限分类的类,tree.class.php<?php/***通用无限分类*/classtree{public$data=array();public$cateArray=array();functionTree(){} /***********输入类节点****************/functionsetNode($id,$parent,$value){$parent=$parent?$parent:0;$this->data[$id]=$value;$this->cateArray[$id]=$parent;} /*************获取空值的节点树array()******************/functiongetChildsTree($id=0){$childs=array();foreach($this->cateArrayas$child=>$parent){if($parent==$id){$childs[$child]=$this->getChildsTree($child);}}return$childs;} /**************获得所有分类id**************/functiongetChilds($id=0){$childArray=array();$childs=$this->getChild($id);foreach($childsas$child){$childArray[]=$child;$childArray=array_merge($childArray,$this->getChilds($child));}return$childArray;} /************获得所有父类id***********************/functiongetChild($id){$childs=array();foreach($this->cateArrayas$child=>$parent){if($parent==$id){$childs[$child]=$child;}}return$childs;}/********单线获取父节点id************/functiongetNodeLever($id){$parents=array();if(key_exists($this->cateArray[$id],$this->cateArray)){$parents[]=$this->cateArray[$id];$parents=array_merge($parents,$this->getNodeLever($this->cateArray[$id]));}return$parents;} /*************用'|-'长度来表示类的深度***************/functiongetLayer($id,$preStr=' |-'){returnstr_repeat($preStr,count($this->getNodeLever($id)));} /**********获得类的名称***********/functiongetValue($id){return$this->data[$id];}//endfunc}/***********************************************使用方法$Tree=newTree("请选择分类");//setNode(目录ID,上级ID,目录名字);$Tree->setNode(1,0,'目录1');$Tree->setNode(2,1,'目录2,1');print_r($Tree->getChildsTree(0));print_r($Tree->getChild(0));print_r($Tree->getLayer(2));$category=$Tree->getChilds();//遍历输出foreach($categoryas$key=>$id){echo$id.$Tree->getLayer($id,'-').$Tree->getValue($id)."<br>";}*/?>Admin_news_class.php列出分类的代码:/********分类*********/$db=newmypdo();$rs=$db->query("SELECT*FROM`np_newsclass`");$tree=newtree();$row=$rs->fetch();do{$tree->setNode($row['class_id'],$row['f_id'],$row['name']); }while($row=$rs->fetch());$category=$tree->getChilds();实现增删改很不容易:/***********修改分类******************/if(isset($_GET['up'])){$rs_f=$db->prepare("SELECT*FROM`np_newsclass`WHERE`class_id`=?");$rs_f->execute(array($_GET['class_id']));$row_f=$rs_f->fetch();}if(isset($_POST['up2'])){ $find=$tree->getChilds($_POST['class_id']);//查找更新类的自身子类的id if(!in_array($_POST['f_id'],$find)){//如果更新类的id在自身子类的id里,则不能移动到自身分类 if($_POST['f_id']==$_POST['class_id']){//不能移动到自身类 show_msg("admin_news_class.php","更新失败,你本身已经是".$_POST['name']."类","self"); }else{ $rs_up=$db->prepare("UPDATE`np_newsclass`SET`f_id`=?,`name`=?WHERE`class_id`=?"); $rs_up->execute(array($_POST['f_id'],$_POST['name'],$_POST['class_id'])); show_msg("admin_news_class.php","更新成功","self"); } }else{ show_msg("admin_news_class.php","更新失败,不能移动到自身子类","self");} }/**********删除分类***************/if(isset($_GET['del'])){ $rs_s=$db->prepare("SELECT*FROM`np_newsclass`WHERE`f_id`=?"); $rs_s->execute(array($_GET['del'])); $row_s=$rs_s->fetch();if(is_array($row_s)){ show_msg("admin_news_class.php","删除失败,该分类下还有子分类,请手动删除!","self"); }else{ $rs_del=$db->prepare("DELETEFROM`np_newsclass`WHERE`class_id`=?"); $rs_del->execute(array($_GET['del'])); $rs_s_n=$db->query("selectnidfromnp_newsbasewhereclass_id=$_GET[del]"); $row_s_n=$rs_s_n->fetch(); if(is_array($row_s_n)){ /**********删除分类的新闻**********/ $rs_d_news=$db->prepare("DELETEFROM`np_newsbase`WHERE`class_id`=?"); $rs_d_news->execute(array($_GET['del'])); do{//$nid有很多个,一个类可能有多条新闻,所以要批量删除新闻$nid=$row_s_n['nid']; $rs_del_c=$db->prepare("DELETEFROM`np_newscontent`WHERE`nid`=$nid"); $rs_del_c->execute(); }while($row_s_n=$rs_s_n->fetch()); } show_msg("admin_news_class.php","删除成功","self"); } }/************添加分类***************/if(isset($_POST['name'])){ if($_POST['name']==""){ show_msg("admin_news_class.php","添加失败,分类名不能为空!","self"); }else{$rs_add=$db->prepare("INSERTINTO`newsphp`.`np_newsclass`(`class_id`,`f_id`,`name`)VALUES(NULL,?,?)");$rs_add->execute(array($_POST['f_id'],$_POST['name']));show_msg("admin_news_class.php","添加分类成功","self");}}?>4.9新闻列表的设计与实现Admin_list_news.php<?phpinclude_once("admin_global.php");/******用户权限判断******/$attr=user_check($_SESSION['uid'],$_SESSION['shell'],3);/************新闻列表*************/$db=newmypdo();$total=$db->count_row("np_newsbase");page($total,20);$rs=$db->query("SELECT*FROM`np_newsbase`,`np_newsclass`WHERE`np_newsbase`.`class_id`=`np_newsclass`.`class_id`ORDERBY`date_time`DESClimit$start_page,$page_size");$row=$rs->fetch(PDO::FETCH_ASSOC);/****************删除新闻*****************/if(isset($_GET['del'])&&is_numeric($_GET['del'])){ $sql_base="DELETEFROM`np_newsbase`WHERE`np_newsbase`.`nid`=?"; $rs_del=$db->prepare($sql_base); $rs_del->execute(array($_GET['del'])); $rs_del_c=$db->prepare("DELETEFROM`np_newscontent`WHERE`np_newscontent`.`nid`=?"); $rs_del_c->execute(array($_GET['del'])); /**********删除投票*********/ $nid=$_GET['del']; $rs_v=$db->prepare("SELECT`voteid`FROM`np_vote`WHERE`nid`=?"); $rs_v->execute(array($nid)); $row_v=$rs_v->fetch(); if(is_array($row_v)){ $rs_del_v=$db->prepare("DELETEFROM`np_vote`WHERE`np_vote`.`voteid`=?"); $rs_del_v->execute(array($row_v['voteid'])); } show_msg("admin_list_news.php","删除新闻成功","self"); }/****************批量删除新闻*********************/if(!empty($_POST['delall'])&&!empty($_POST['delbox'])){ $delall=$_POST['delbox']; foreach($delallas$v){ $rs_del_n=$db->prepare("DELETEFROM`np_newsbase`WHERE`np_newsbase`.`nid`=?"); $rs_del_n->execute(array($v)); $rs_del_con=$db->prepare("DELETEFROM`np_newscontent`WHERE`np_newscontent`.`nid`=?"); $rs_del_con->execute(array($v)); } show_msg("admin_list_news.php","批量删除新闻成功","self"); /********批量删除投票********//*$rs_del_v=$db->prepare("");*/ }?><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>无标题文档</title><linkhref="style/css/admin_right.css"rel="stylesheet"type="text/css"/><scripttype="text/javascript"src="style/js/jquery-1.4.2.js"></script><scripttype="text/javascript"src="style/js/admin_list_news.js"></script></head><body><tablewidth="800px"border="1"><tr><tdclass="nav">后台>>新闻管理>>新闻列表</td></tr></table><br/><formaction=""method="post"id="form1"><tablewidth="800"border="1"><tr><td>id</td><td>新闻标题</td><td>所在栏目</td><td>发布时间</td><td>改删</td></tr><?phpdo{?><trclass="last"><tdalign="left"><?phpecho$row['nid'];?></td><tdalign="left"><inputtype="checkbox"name="delbox[]"id="delbox[]"value="<?phpecho$row['nid'];?>"/><?phpecho$row['title'];?></td><tdalign="left"><?phpecho$row['name']?></td><tdalign="left"><?phpechodate("Y-m-dH:i:s",$row['date_time']);?></td><td><ahref="admin_modify_news.php?up=<?phpecho$row['nid']?>&class_id=<?phpecho$row['class_id']?>">修改</a>/<ahref="admin_list_news.php?del=<?phpecho$row['nid']?>"onclick="returnconfirm('是否删除新闻?')">删除</a></td><?php}while($row=$rs->fetch(PDO::FETCH_ASSOC));?></tr><tr><tdcolspan="5"><inputname="selectall"type="button"id="selectall"value="全选"/><inputtype="button"name="selectrev"id="selectrev"value="反选"/><inputtype="button"name="selectno"id="selectno"value="全不选"/><inputtype="submit"name="delall"id="delall"value="批量删除"onclick="returnconfirm('是否删除新闻?如果所删新闻有投票,投票也会被删除')"/><?phpecho$pagenav?></td></tr></table></form></body></html>4.10新闻添加的设计与实现用到了fckeditor<?phpinclude_once("admin_global.php");/******用户权限判断******/@$attr=user_check($_SESSION['uid'],$_SESSION['shell'],3);/************编辑器导入***************/include("fckeditor/fckeditor.php");$eBasePath=$_SERVER['PHP_SELF'];$eBasePath=dirname($eBasePath)."/fckeditor/";$ed=newFCKeditor('content');$ed->BasePath=$eBasePath;$ed->Width="98%";$ed->Height="350px";/**********分类列表**************/$db=newmypdo();$tree=newtree();$rs=$db->query("SELECT*FROM`np_newsclass`");while($row=$rs->fetch()){ $tree->setNode($row['class_id'],$row['f_id'],$row['name']); }$category=$tree->getChilds();/************添加新闻****************/if(isset($_POST['submit'])){if(substr_count($_POST['content'],"<img")==0){@$ifreg==null;}else{@$ifreg=$_POST['ifreg'];};$rs_add=$db->prepare("INSERTINTO`np_newsbase`(`nid`,`class_id`,`title`,`author`,`source`,`date_time`,`hite`,`ifreg`)VALUES(NULL,?,?,?,?,?,0,?);");$rs_add->execute(array($_POST['class_id'],$_POST['title'],$_POST['author'],$_POST['source'],$_POST['date_time'],@$ifreg));$nid=$db->lastInsertId();$rs_add_c=$db->prepare("INSERTINTO`np_newscontent`(`nid`,`keyword`,`content`)VALUES(?,?,?)");$rs_add_c->execute(array($nid,$_POST['keyword'],$_POST['content']));/*******添加投票******/if(!empty($_POST['vote'])&&!empty($_POST['item'])){ $rs_up=$db->prepare("INSERTINTO`np_vote`(`voteid`,`nid`,`vote`,`note`,`stop_time`,`vote_type`)VALUES(NULL,?,?,?,?,?)"); $row_up=$rs_up->execute(array($nid,$_POST['vote'],$_POST['note'],strtotime($_POST['stoptime']),$_POST['vote_type'])); $lastinsertid=$db->lastInsertId(); foreach(array_filter($_POST['item'])as$v){//array_filter()函数用回调函数过滤数组中的元素这里是去除空值 $rs_up_item=$db->prepare("INSERTINTO`newsphp`.`np_item`(`id`,`voteid`,`item`,`hit`)VALUES(NULL,?,?,0)"); $rs_up_item->execute(array($lastinsertid,$v)); } }show_msg("admin_add_news.php","添加新闻成功","self");}?>4.11新闻详细内容的设计与实现要逆向列出当前新闻的所有父类,不好做<?phpinclude_once("global.php");/******显示详细新闻********/@$nid=(int)$_GET['nid'];if(isset($_GET['nid'])){ $rs=$db->prepare("SELECT*FROM`np_newsbase`,`np_newscontent`WHERE`np_newsbase`.`nid`=`np_newscontent`.`nid`AND`np_newsbase`.`nid`=?"); $rs->execute(array($nid)); $row=$rs->fetch(PDO::FETCH_ASSOC); $rs_hit=$db->prepare("UPDATE`newsphp`.`np_newsbase`SET`hite`=1+hiteWHERE`np_newsbase`.`nid`=?"); if(@$_COOKIE["$nid"]!=$nid)//防刷新计数 $rs_hit->execute(array($nid)); setcookie($nid,$nid,time()+1800); } $class_id=$row['class_id'];$smarty->assign("nid",$row['nid']);$smarty->assign("author",$row['author']);$smarty->assign("source",$row['source']);$smarty->assign("date_time",date("Y-m-dH:i:s",$row['date_time']));$smarty->assign("keywords",$row['keyword']);$smarty->assign("hite",$row['hite']);$smarty->assign("class_id",$row['class_id']);$smarty->assign("title",$row['title']);$smarty->assign("websitename",$row['title']);$smarty->assign("content",$row['content']);/**************显示投票*********************/$rs_v=$db->prepare("select*fromnp_votewherenid=?");$rs_v->execute(array($nid));$row_v=$rs_v->fetchA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论