一个动态网站自动生成发布系统
爹蒸j》■予期篇蔫篇萱国盛潮馏镛名蜃謦;||“;jji!;|一}}i÷It;i;;;ijj』|。『|s
。i;ii誊雾萋磐萋9||
i茸多磐霪雾季
摘要本文以新闻网页为例,介绍了一个简单而实用(正在实际使用)的网页自动生成发布系统,特别适用于具有相同数据
格式、数量大、更新快的场合。操作简单、使用方便,具有动态性。而且,网站文件系统特别精巧,所有的消息都放在数据库中,一个主体文件(程序)就能发布成千上万条消息。
关键字动态网站,PHP,MysQL,web,数据库
几经风雨几度春秋,网站建设者们日趋成熟和理性。不再只追求页面有多么靓,风格有多么酷,个性有多么张扬,而是把注意力转向了动态和交互网站的建设上。于是,各种技术也就应运而生。这里,笔者想要介绍的是一个新闻网站自动生成发布系统。该系统由两大部分组成,一是数据提交,其操作是基于客户端的浏览器。授权用户在任何联网的计算机上,用浏览器打开一个Web页面,通过简单的操作界面,按图所囊似的填写数据。二是数据发布,按照设计好的模版自动生成和发布页面。新闻采编人员可以不受时间、地点和数量的限制,不经网页设计者的二传,直接将消息上网,而且不管有多少条新闻,其内容的发布仅用一个文件就能对付,可谓以一当万。
器发送请求,由sQL语句select选择库中的记录,PHP函数读取数据,按设计好的HTML模版将结果返回到客户端,如图1所示。
二、数据采编
图2是一个提供给采编人员的示意页面。
一、工作原理
我们采用被誉为天衣无缝的黄金组合PHP+MYsQL实现,它们的特点以及安装方法想必已经为大家耳熟能详了。工作原理是:被授权的新闻采编人员,通过浏览器,以填写HTML表单的方式,录入新闻,由sQL语句insen插入一个记
。
录到数据库中;因特网上的用户,也通过浏览器向web服务
客户
图2、新闻采编示意页面
去掉所有的修饰,主体的H删L语句如下,文件取名in—
put.htmo<htmI><bodV>
<center>新闻采编
<form
method=”POST”
action=insert.php>
标题:<inputtype="text”n砌e=”titlel”><br>
内容:<textarea
<p><input
name=”contentl”></textarea><br>
type=”submit”value=”提;乏“name=”
B1”>&nbsp:&nbsp:
<input
type=”reset”value=”清除”name=“B2”></p>
</fOrm></Center></bodv></htm』>
点击“提交”按钮后就获得了两个变量¥titlel和¥con—
图l工作原理示意图
tentl,然后自动执行insert.php,当前提交的数据就录进了数
据表everyday中。in8ert.php的主体语句就是PHP操纵MySQL的四个函数如下:
<7
¥conn=@mysql—jonnect(”IocaIhost”,”user”,”password”)or
die{”无法连接MySQL数据库服务器!”):
¥sele=mysqbeIect』b(”news”,¥conn)ordie(不能连接数据库):
¥result=mysqI—query{”insert
into
怒拍鞲
◆◆
◆◆
二Oo一年十大新闻评出
全国高校实验物理教学研讨会召开第二届原创歌曲大赛落幕’工学部举办第二届英语演讲比赛
图3新闻标题示意页面
everyday(tItle,
content)
vaIues(’¥t…e17,’¥contentl7)”)ordie(不能打开数据表):mvsqI—jIose{¥conn):
7>
为了方便读者实验,现对这四个函数简要解释一下。
▲连接数据服务器函数mysqbonnect()
上例中的10calhost为默认的主机名,如果你的web服务器和MySQL数据库服务器在同一机器上,就取默认名即可;user为用户名,默认的用户名为mot,pas8word为密码,默认密码为空。为了安全起见,建议你用GRANT为MysQL数据库新增别的用户名和密码。函数前加符号@,是为了抑制该函数引起的系统错误信息,而显示程序指定的提示信息。若连接成功,该函数返回一个连接号。
的示意页面(图3)。
该页的源码如下(文件名sh01^『title.php):
<htmI>
<bodybgcOIor=”样FFFFFF”<Center><p><img72”></D><tableCenter><7
src=”newslogo
>
glf”wIdth=”270”height=”
width=”50%“border=”1”ce|Ispacing=”O”align=
▲选择数据库函数mys吐JelecUb()
程序中,news是本例用的数据库名,设计时应以实际的数据库名取而代之,¥conn为函数mysql』onnect返回的连接号。若能与指定的数据库连接上,返回真值。
▲向数据库服务器发送sQL语句请求函数mysql-quer()本例是发送insert语句。为了设计和浏览方便,通常都会将新闻分门别类。我们在NEws库中建立了若干个数据表,everyday为其中之一。为简单起见,现假定它只有3个字段“标题”、“内容”和“序号”(title,content,idno),
“序
¥dbname=”everyday”:
¥conn=@mysqI—Connect(”locaIhost”,”user”,”password“)or
die(”无法连接MySQL数据库服务器!“):
¥sele=mysqbelectJb(”news”,¥conn)ordie(不能连接数据库):
¥result=mysql-query{”seIect¥from¥dbnameorderbyid—no“)ordle{不能打开数据表):
whiIe(¥data=mysqljetch—舅rray{¥result)){
echO”<tr>”:echo
”<td
width=7
10%’><img
src=’dOtgif
width=’12height=7127></td>”:
号”字段是为了方便程序设计,其值自增1,不必输入。从表单获得的变量¥tidel和¥conteml的值就顺理成章地写进了ev—eryday的相应字段中。
<a
echo”<tdwidth=’90%7>
php7
href=shownewsIdno=¥data【1dno)&dbname=
¥dbname’)>¥data[tjtJe]</a></td>”:
echO”</tr>“:
▲关闭连接函数mysqblose()
本函数关闭由mysqbonnect()建立的连接。虽然使用
mysql』onnect()函数,当数据库操作结束之后,会自动关闭已建立的连接,但用完后关闭是好习惯。
}
7、
</tabIe></cente
r>
</bodv></html>
三、标题页面生成
呈现在客户机上的页面一般分两步,先显示新闻标题,单击标题打开相应的内容。本文按这种模式设计。
页面生成相对而言就复杂一些,既要从数据库读数据,又要考虑到版面的布局和美工。在实际设计时,有捷径可走,那就是先按一般页面进行制作,在需要的地方安插PHP。对没有亲自做过的人也许仍然是一头雾水。让我们首先来看一个简单
在程序中用了while()语句控制循环,用mysql量tcn一跗ay()函数读取数据,当读完全部数据,变量¥data返回
蹦se,结束循环。
函数Ⅱlysql』etcb掣ay()返回一个数组,保存当前一个记
录的数据。该数组既可使用数组下标(¥data[i])来读取数据,也可以使用字段名下标(¥data[tme】)读取数据。每读出一个记录,就由echo语句产生表格的1行2列,一列显示前
导图dot.gif,一列显示带有链接的新闻标题,并携带2个参数idno和dbname,当点击新闻标题时,打开shownews.php文件。
程序中保留了HTML语言是为了说明PHP是怎样嵌入其中的,其实是可以变通的。
(上接第20页)
PAINTSTRUCTHDChdc:
Ds:
RECT
rt:
LPCTSTRszHelIo=“HeIIo
Wlndows!”:
swltch(message)(
四、打开内容页面
程序shownews.php用来打开新闻的内容,核心语句如
下:
<7
case
WM
PAINT:
hdc=Be91nPaInt(hWnd,&ps):GetCllentRect(hWnd,&rt):
DrawTe×t(hdc,szHeIIo,strIen《szHe}Io),&rt,DT』ENTER
EndPaInt(hWnd,&ps):
break:
case
Echo”<paIign=7center’><b><fontcolor=7井FFO000’>显
示内容</font></b></p>”:
¥conn=@mysqI—』onnect《”locaIhost”,”user“.”password”)or
WM
DESTROY:
PostQ嘶Message(0):
break:
defauIt:return
die(“无法连接MySQL数据库服务器!”):
¥sele=mvsqIjeIect』b(“news“,¥conn)ordie(不能连接数据
库):
¥resuJt=mysql_query(”.select
¥from
DefWindowProc{hVVnd,message,wParam,
IParanl
¥dbnamewhe
reid—
)
retum0:
no=’¥Idno’’7)ordie(不能打开数据表):¥data=mysqljetch—array(¥result):
)
echo”标题:¥data【tltle】<br>”:echo”内容:¥data【content]<br>”:
7>
这个简单程序演示了Gcc编译win32应用程序的能力。正如预期出现一个窗口,在其客户区输出一行文本:
“HeUo
windows!”。但与sDK不同的是,编译后的可执行程序先出
参数¥idno是定位与“标题”相应的“内容”,j}dbname是为了打开对应的数据表。
现一个D0s窗口,然后才出现应用程序窗口。编译过程中对源程序的要求也有一点不同:Gcc要求在函数开始处将所有变量都定义,而不能像sDK一样在需要时才定义。另外不能直接连接上有些函数所属库,需要复杂的编译选项,不再赘
上述4个程序,虽然简陋,但是绝对正确无误。若不嫌寒碜,只要依样画瓢,修改用户名、密码、数据库名和表名,就可以拿来用。
调试时,4个程序必须发送到服务器上,然后在浏览器的地址栏内用域名或IP地址以及正确的路径打开input.htm(采编)或sho叭itle.php(显示)。当然你应确认下列运行环境是0K的,并且建立了数据库表。
▲RedHat7.1
五、运行环境、调试与技巧
述。
本文通过六个例子演示了在windows环境下进行GCC编程的能力。可以看出,利用CygnusCygwin32套件,GCC不仅能编译标准的c/c++程序,而且可以编译运行“nu)【/unix源程序,甚至win32应用程序,适用范围非常广泛。对于在windows环境下学习c/c++编程,cyglluscygwin32套件实在是不可多得的工具。本文中的所有程序都在windows98下编译通过。运行界面如图2所示。
▲MySQL
▲Apache
2.23.361.3.19
▲PHP4.0.4
细心的读者也许已经发现了什么,“几个程序文件中都有
相同的语句行,能简化吗?”因此,真正要粉墨登场还要做一番乔装打扮,抛开美工不说,还有一些技术问题要加以处理。例如,翻页,显示的次序,新闻图片插入,新闻采编的安全,不得允许他人向数据库提交新闻。文中若用到符号“<”、“>”、换行等,要分别处理成“<”、
“&昏;”、
“<
br>”。有兴趣的话可以浏览我们的新闻网站http://
news.whu.edu.cn。
(收稿日期:2002年11月12日)
(收稿日期:2002年11月6日)
图2运行界面
一个动态网站自动生成发布系统
作者:作者单位:刊名:英文刊名:年,卷(期):
李勇, 蔡利军
电脑编程技巧与维护
COMPUTER PROGRAMMING SKILLS & MAINTENANCE2003(1)
本文读者也读过(10条)
1. 何清林. 张本成. HE Qing-lin. ZHANG Ben-cheng 基于ASP.NET的区乡农业网站自动生成[期刊论文]-计算机技术与发展2007,17(1)
2. 王莉 信息门户网站自动生成系统的研究[学位论文]20043. 尹忠华 JSP网页自动生成工具的设计[期刊论文]-科技风2010(9)
4. 刘洁. LIU Jie 网站自动生成系统应用研究[期刊论文]-河北省科学院学报2006,23(3)
5. 甘秋歌. 李纯英. 刘明华. 纪娜. GAN Qiu-ge. LI Chun-ying. LIU Ming-hua. JI Na 利用ASP对象机制开发静态页面自动生成技术[期刊论文]-杨凌职业技术学院学报2007,6(3)
6. 田敬军. 杜学东. TIAN Jing-jun. DU Xue-dong 网站自动生成系统的开发[期刊论文]-唐山师范学院学报2009,31(2)
7. 何清林. 李柳柏. 陈华 一个语义网站自动生成系统的设计和实现[期刊论文]-计算机系统应用2005(4)8. 龙民. 黄剑华. 李琰. 赵志强 案例推理在智能化网站自动生成系统中的应用[期刊论文]-微处理机2005,26(5)9. 梁一子. LIANG Yi-zi 用数据库技术构建一个自动生成网站[期刊论文]-黑龙江水专学报2005,32(1)10. 郭刚 电子商务模拟系统的研究与开发[学位论文]2002
本文链接:http://d.g.wanfangdata.com.cn/Periodical_dnbcjqywh200301005.aspx