热门关键字:  博客  博客入门  博客创建  新浪博客  css

ASP快速建站全过程

来源:51cto 作者:佚名 时间:2008-04-01 点击:

 

第5章 文章的发布与管理

学习导读

文章的发布与管理是属于后台管理的一部分,是管理员操作的内容。网站的信息主要是通过文章来表现的,而大量文章的添加、修改、更新及删除必须要有一个统一的管理系统,这样才会使网站的管理更科学,网站的更新才会更容易。本章所要讲述的就是为管理者搭建一个文章管理平台,保证管理员快捷、高效地管理网站。

掌握新知:ASP脚本语言的基本用法和VBScript函数的应用。
操作重点:缩写各类表单、设计好数据库并建立连接和建立各页面间的联系。
难点把握:网页间传值及向数据库中添加数据。

做每一步前先有个规划,最好有个草图,添加数据时要一步一步测试,这样才是通向成功的最佳途径。

 

5.2  操作实录

每个网站都有大量的文章,网上的信息主要由这些文章发布出去。通过这一部分内容的学习,大家将会掌握文章发布和管理的基本方法。这一部分内容很重要,希望大家认真学习,不仅仅要掌握,而且要学会应用。下面我们先从网站管理入口讲起。

5.2.1  网站管理入口

       网站中大量的文章是怎样添加、删除与更新的呢?如果手动向网页添加,每次都要对网页进行编辑,这个量是可想而知的,而且也增加了网站的管理难度。如果直接向数据库中输入,那么每更改一篇文章都要打开数据库,这既不科学,也缺少安全性。因此必须采用一种方法,使文章的添加、删除与更新更加简单,而且管理也更方便和科学。这就是要向大家介绍的文章发布与管理系统。从安全角度考虑,这个系统只有管理员才能进入,管理员可以对网站的信息进行处理:发表文章、修改文章、更新文章与删除文章。其他用户无权对文章进行处理。

文章管理页面的预览效果如图5-3所示。

 
图5-3

在文章管理系统中有添加文章、编辑文章、上传图片等功能,以后还将有不同版块的管理项添加到这里,使这个管理系统的功能更全面。单击不同的文字,将进入到不同的链接页面。为了减少网页的数量,可以把链接内容写在同一个页面中,只要传递的变量值不同,即可实现不同的编辑结果。

       添加文章就是向数据库中写入数据。一般添加文章应该包括文章的标题、作者、类别、内容及发布时间等,这些内容是通过表单的提交写入数据库中的。所以在建立页面时一定要先设计好表格,再嵌入表单,通过表单填写数据,然后提交给下一个URL页面处理,完成向数据库写入数据。

根据前面的分析,首先要进入管理页面。管理页面的入口文件是admin.asp,其代码构成如下。

1.<body >
2.<!--#include file="include/up.htm"-->
3.<table align="center" cellpadding="0"  bgcolor="#003300"cellspacing="0"
height="550"
4.width="756">
5.<tr><td height="50"></td></tr>
6.<tr>
7.<td  colspan=4  align="center"><font size="5" color="#FFCC00" face="华文彩云
8."  >网站管理入口</font></td>
9.</tr>
10.<tr>
11.<td colspan=4  align="center"><table width=200 align="center">
12.<tr>
13.<td><hr align="center"></td>
14.</tr>
15.</table></td>
16.</tr>
17.<tr>
18.<td  align="center"><a href="edit.asp?jhf=add" target="mody" >添加文章
19.</a></td>
20.<td  align="center"><a href="edit.asp?jhf=edit" target="mody">编辑文章
21.</a></td>
22.<td  align="center"><a href="edit.asp?jhf=photo" target="mody">上传图片
23.</a></td>
24.<td  align="center"><a href="edit.asp?jhf=mody"target="mody" >修改留言
25.</a></td>
26.</tr>
27.<tr>
28.<td colspan="4">
29.<table  align="center" cellpadding="0"  cellspacing="0"  width="700"
30.height="400">
31.<tr><td align="center"  width="100%"  height="100%">
32.<iframe frameborder=0  width=100%  height=100%  scrolling=auto 
33.src="edit.asp"name="mody"></iframe>
34.</td></tr>
35.</table>
36.</td>
37.</tr>
38.</table>
39.<!--#include file="include/down.htm"-->
40.</body>

 

代码释义:

       当管理员单击添加文章或编辑文章的超链接时,将跳转到不同的页面。这个页面既可以重新打开一个新的窗口,也可以在本页内实现。作为网站管理,一般都是在本页内打开为宜。而且根据页面的构成来看,在本页内打开也最为合理。怎样才能在本页打开链接的页面呢?那就是建立一个内部框架,当单击不同的链接时,由于变量传递的值不同,即问号后面的值不同,可以显示不同的链接页面,也就会在框架内显示不同的内容,即起到对文章的管理效果。

第2和39行,是两个包含文件,即网页的头、脚文件。

第3~38行,这是一个大表格,在表格内嵌套了两个表格,即第11~15行和29~35行,这两个表格分别是加入的水平线及框架,嵌入表格能使所添加的内容易于确定位置。如果一时找不到位置,可多看几遍。

标记的就是一个表格。只要找到头尾,还是比较容易确定的。另外大家可以把草图画在纸上进行分析,这样就相对容易些。

第18~24行,这是该页的一个主体部分,即文字链接。每个链接的网页后都有参数,而且打开的目标均为target="mody",即内部框架内。

第32行,是一个内部框架,默认的源文件是edit.asp,即打开网页时显示的文字内容。那么,大家可能会有疑惑,因为添加或编辑等链接的都是同一个网页,为什么刚打开网页时却没有出现任何编辑或添加的内容,而是出现了一句文字呢?其实这就是在edit.asp页面的代码中进行了条件设置,也就是当没有参数传递,即刚打开该网页时,网页应该显示的效果。框架的名称为name="mody",只要其他网页所设置的目标是这个名称,那么该网页就可以在框架内打开。当需要在新的窗口打开时,可以把目标设为target="_blank"。

 

5.2.2  添加文章

文章的添加和编辑内容都写在了edit.asp网页中,首先看一下添加文章的实际效果,如图5-4所示。

图5-4
前面已经分析了添加文章的具体思路,现在看预览的实际效果。不难发现,在添加文章的表单中包括了两个本文框、一个下拉列表框及一个多行文本框,另外还包括两个按钮,这两个按钮的代码即可以用一个单独的表格来写,也可以写在合并的单元格内(合并表格的列),中间采用空格的形式。根据这样的分析,在没有看代码的情况下,大家可以试着写一下,看看能不能达到实际的运行效果。其实学习的过程就是在这种分析、实践中不断提高的。
在edit.asp文件中,有关添加文章的代码如下。
1.<style>
2.Body{
3.SCROLLBAR-FACE-COLOR:red;
4.SCROLLBAR-HIGHLIGHT-COLOR:blue;
5.SCROLLBAR-SHADOW-COLOR: green;
6.SCROLLBAR-ARROW-COLOR:yellow;
7.SCROLLBAR-BASE-COLOR:black;
8.SCROLLBAR-DARK-SHADOW-COLOR: white;
9.margin-left: 0px;
10.margin-top: 0px;
11.background-color:  #003300;
12.}
13.textarea {
14.background-color: #006633;
15.}
16..jt2 {
17.background-color: #9999FF;
18.color: #006633;
19.font-weight: bold;
20.}
21.option {
22.background-color: #9999FF;
23.border:#006699;
24.border-style:double;
25.}
26.td {
27.font-size: 12px;
28.font-weight: bold;
29.color: #FF3300;
30.}
31.a:link {
32.text-decoration: none;
33.color: #0033FF;
34.}
35..cys {
36.border: thin dotted #00CCFF;
37.}
38.a:visited {
39.text-decoration: none;
40.color: #0000FF;
41.}
42.a:hover {
43.text-decoration: none;
44.color: #CCFF00;
45.}
46.a:active {
47.text-decoration: none;
48.color: #CCFF00;
49.}
50.-->
51.</style>
52.<!--#include file="include/conn.asp"-->
53.<%
54.dim jhf
55.jhf=request.QueryString("jhf")
56.if jhf="" then
57.%>
58.<table width="500" height="300" cellpadding="0"
cellspacing="0" align=
"center">
59.<tr>
60.<td align="center"><b><font face="华文彩云" size="6">
欢迎进入后台管理系
61.统! </font></b></td>
62.</tr>
63.</table>
64.<%
65.elseif jhf="add" then
66.%>
67.<table cellspacing=0   width="500" height="260"
cellpadding=4 align="center">
68.<form action="add.asp?jhf=add" method="post" name="aticle">
69.<tr>
70.<td >文章标题:</td>
71.<td><input type="text" class="jt2" name="t_topic" size=20 /></td>
72.</tr>
73.<tr>
74.<td>文章作者:</td>
75.<td><input type="text" class="jt2" name="t_writer"  size=20/></td>
76.</tr>
77.<tr>
78.<td>文章类别:</td>
79.<td><select name="t_leibie">
80.<option value="青春诗行">青春诗行</option>
81.<option value="星光灿烂">星光灿烂</option>
82.<option value="事事关心">事事关心</option>
83.</select></td>
84.</tr>
85.<tr>
86.<td >文章内容:</td>
87.<td><textarea  name="t_content" class="jt2" rows="10"
88.cols="35"></textarea></td>
89.</tr>
90.<tr>
91.<td colspan=2  align="center" ><input type="submit"
class="jt2" value="       提交">
92.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
93.<input type="reset" class="jt2" value="重置"></td>
94.</tr>
95.</form>
96.</table>

代码释义:
这是一个在内部框架中嵌入的网页,所以对网页无用的代码可全部删除,否则容易造成页面出现错误。这段代码整体上很长,根据传递的变量值不同,可以将它分成几个部分,这样再分析每一部分的代码就相对容易些。下面分别进行解释。
第1~51行,定义的样式表,在CSS中完成的。每部分的具体作用如下。
? 第3~8行,定义滚动条的颜色。
? 第3行,立体滚动条凸出部分的颜色。
? 第4行,滚动条空白部分的颜色。
? 第5行,立体滚动条阴影的颜色。
? 第6行,按钮上箭头的颜色。
? 第7行,滚动条的基本颜色。
? 第8行,立体滚动条强阴影的颜色。

关于这些颜色的设定及其实际效果,只有在制作过程中具体设置和浏览以后才能感知,不经过实践是很难想象其结果的。

第13~15行,定义文本框的背景。
第16~20行,定义了一个类,可以在任何标签中引用。
第38~48行,定义的链接效果,包括是否有下画线,以及链接的颜色等。
第54~59行,定义变量,并从上个网页中获取变量的值,这个值就是上一个网页问号后边的jhf的值。根据不同的值才能确定链接的是哪种处理文章的方式。如果是空,则说明刚进入登录文章管理页面,或者还没有单击过任何链接,这时就会显示一句话“欢迎进入后台管理系统”,即第60行的效果。
第65行的效果为当变量不为空时的几种情况。
第67~96行,文章的添加功能,其实就是一个嵌入在表格中的表单,具体内容如下。
? 第67行,定义一个表格,设置了表格的宽、高值,边框与内部空间的距离,对齐方式。
? 第68行,表单标记,设置了传递数据的方式,表单的提交网页及表单的名称。
? 第71行,定义文章标题输入框。
? 第75行,定义文章作者输入框。
? 第79~83行,定义下拉列表框。
? 第87~88行,定义文章内容输入框。
? 第91~93行,合并表格的列,并把表单的两个按钮放在合并的列中,这样的好处是,可以把它们放在表格的中间,如果它们之间的距离较近,可以采用添加空格的方法使它们隔开。
当与添加文章的有关内容填写完毕后,单击【提交】按钮,则将链接到add.asp页面(网页代码第68行)。add.asp页面要处理的工作是把刚刚写好的内容存入数据库中,因此要用到Insert into…values…where…语句。其代码构成如下。

1.<body>
2.<!--#include file="include/conn.asp"-->
3.<%
4.dim jhf,t_topic,t_writer,t_leibie,t_content
5.jhf=request.QueryString("jhf")
6.t_topic=request.form("t_topic")
7.t_writer=request.form("t_writer")
8.t_leibie=request.form("t_leibie")
9.t_content=request.form("t_content")
10.if jhf="add" then
11.sql="INSER  TINTO  mody
12.(t_topic,t_writer,t_leibie,t_content)
13.VALUES('"&t_topic&"','"&t_12writer&"','"&t_leibie&"','13"&t_content&"')"
14.conn.execute sql
15.%>
16.<script>
17.alert("操作成功!")
18.location.href="edit.asp?jhf=add";
19.</script>
20.<%end if%>
21.</body>

代码释义:

第2行,包含数据库连接页面。
第4行,定义几个变量,用来获取表单中的信息。
第5~9行,变量分别获得由表单所传递过来的值。
第11~14行,向数据库中添加数据。添加数据时,要注意单、双引号及连接符的使用,其规则是字符型的变量一定要加定界符。
第16~19行,当数据存入数据库后,弹出一个窗口,这个窗口是用JavaScript写的,显示的是“操作成功!”。当单击【确定】按钮时,网页将返回到添加文章时的页面。
至此,文章的添加功能全部完成。

 

5.2.3  编辑文章

编辑文章包括编辑与删除两种功能。编辑文章与添加文章的不同之处在于:编辑文章要显示所编辑的内容,显示编辑内容则必须先从数据库中提取有关的内容,通过修改再次提交,这一次的提交是对数据库的更新;而删除文章则要传递文章的ID号,这样才能只删除目标文章。另外,当网站的文章较多时,为了便于编辑,必须采用分页形式来显示文章列表。
编辑文章页面的预览效果如图5-5所示。

图5-5
在Dreamweaver中,打开admin.asp页面,代码的第97~117行如下所示。
97.<%
98.elseif jhf="edit" then
99.sql="select * from mody order by t_time desc"
100.rs.open  sql,conn,1,1
101.%>
102.<table class="cys" cellpadding="0" cellspacing="10"
width="600" align=    "center">
103.<%
104.do while not rs.eof
105.%>
106.<tr>
107.<td><%=rs("t_topic")%></td>
108.<td><%=rs("t_writer")%></td>
109.<td><%=rs("t_time")%></td>
110.<td><a href="renew.asp?id=<%=rs("id")%>">编辑</a></td>
111.<td><a href="del1.asp?id=<%=rs("id")%>">删除</a></td>
112.</tr>
113.<%
114.rs.movenext
115.loop
116.%>
117.</table>

代码释义:

第97~117行代码实现的是文章的编辑功能,既然是对文章的编辑,就要先把文章列出来,然后再进行修改或者删除。而列出文章就是从数据库中把文章提取出来,所以必然要用到SQL语句的查询功能,同时查询文章应该按降序排列,也就是越晚发表的文章,排列得越靠前,具体解释如下。
? 第99、100行,查询语句,从mody表中按t_time字段降序排列。
? 第102行,建立一个表格,把文章排列在表格中,便于控制位置。
? 第104~115行,建立一个循环,从表的开始部分查起一直到结尾,其中107~109行分别显示文章的标题、作者及发布时间;110和111行分别显示编辑及删除的链接,而且这两个链接分别进行了文章ID号的传递,这样就会有针对性地对文章进行编辑和处理。
在设计分析中已经提到过,当网站有多篇文章时,应该做成分页的形式,便于浏览,这时需要对上面的代码进行修改,修改后的代码如下。

1.elseif jhf="edit" then
2.dim pages
3.pages=request.QueryString("page")
4.if pages="" then
5.pages=1
6.end if
7.sql="select * from mody order by t_time desc"
8.rs.open  sql,conn,1,1
9.rs.pagesize=8
10.if int(pages)>rs.pagecount then
11.pages=rs.pagecount
12.end if
13.if not rs.eof then
14.rs.absolutepage=int(pages)
15.end if
16.%>
17.<table class="cys" cellpadding="0" cellspacing="10"
width="600" align=        "center">
18.<%
19.for i=1 to rs.pagesize
20.%>
21.<tr>
22.<td><%=rs("t_topic")%></td>
23.<td><%=rs("t_writer")%></td>
24.<td><%=rs("t_time")%></td>
25.<td><a href="renew.asp?id=<%=rs("id")%>">编辑</a></td>
26.<td><a href="del1.asp?id=<%=rs("id")%>">删除</a></td>
27.</tr>
28.<%
29.rs.movenext
30.if rs.eof then
31.exit for
32.end if
33.next
34.%>
35.<tr><td colspan="5" align="center" >
36.<%if int(pages)>1 then%>
37.<a href="edit.asp?page=1&jhf=edit"> 第一页</a>
38.<a href="edit.asp?page=<%=pages-1%>&jhf=edit"> 上一页</a>
39.<% end if%>
40.<% if int(pages)<rs.pagecount then%>
41.<a href="edit.asp?page=<%=pages+1%>&jhf=edit">下一页</a>
42.<a href="edit.asp?page=<%=rs.pagecount%>&jhf=edit">最后一页</a>
43.<% end if%>
44.</td></tr>

代码释义:

制作分页网页时,要了解分页的3个属性,即pagesize、pagecount、absolutepage,它们分别代表每页显示的数量、总的页数、当前页。因为分页效果是在查询语句里显示的,所以都应以rs.pagesize、rs.pagecount、rs.absolutepage形式来表示。其实分页就是对一个变量的判断,根据变量值的不同,分别显示第几页,而这个变量是从网页本身所传递的变量值获得的,每页显示的文章数则由pagesize来决定。
第2行,先定义一个变量,这个变量就是用来判断显示第几页的。
第3行,为变量赋值,这里的request.QueryString("page")是获取链接第几页时传递的变量值,比如第一页,则page=1。
第4、5行,当变量为空时,即刚进入页面时,还没有进行翻页,这时的页面定义为第一页。
第9行,定义每页显示的文章数,这里定义为8,即列出8行。
第10、11行,当页数大于总的页数时,让它等于总的页数。当页数大于1时,就会出现分页的效果,但如果单击下一页时,可以一直单击下去,当达到总页数时还可继续单击,很显然这是不对的,为此加上这一句进行判断处理,使页面更加准确。在书写程序代码时,要切记注意语句的严密性,否则就会出现意想不到的错误。
第13、14行,如果循环还没有到达尾部,则当前页即是现在获取的页。
第30~32行,如果遍历到末尾,则直接退出for循环。这条语句是很重要的,如果不加,就会出现错误。
第37~42行,显示分页页码,在什么情况下显示第一页、下一页、上一页及最后一页等。在此要特别注意的是,一定要加上jhf=edit变量,因为这是当jhf=edit的情况下显示的页面,所以必须传递这个变量,否则一经分页,这个变量就会失效,也就不能显示编辑页面了。

从上面的页面中可见,第25和26行又链接了两个页面,要对文章进行下一步的编辑处理,必须单击链接文字所链接的页面才能完成。编辑文章所链接的网页名称是renew.asp。在这个链接页面传递了一个变量id=<%=rs("id")%,这个变量很重要,只有确定了具体的文章ID号,才能对所选择的文章进行编辑,因为每个文章的ID是唯一的,所以获得了变量的值,也就获得了所编辑的文章。

当单击“编辑文章”超链接时出现的界面如图5-6所示。

图5-6
图5-6是没加分页前的预览效果,加了分页后就会在文章显示列表下出现页码,如图5-7所示。
图5-7
当单击“编辑”超链接时,则出现编辑文章页面,如图5-5所示。
在图5-5中显示了文章的标题、作者、类别及文章内容,对其修改后单击【提交】按钮,可以更新数据表中的信息,这样就可更新文章。其renew.asp页面的代码如下。
1.<style>
2.Body{
3.SCROLLBAR-FACE-COLOR:red;
4.SCROLLBAR-HIGHLIGHT-COLOR:blue;
5.SCROLLBAR-SHADOW-COLOR: green;
6.SCROLLBAR-ARROW-COLOR:yellow;
7.SCROLLBAR-BASE-COLOR:black;
8.SCROLLBAR-DARK-SHADOW-COLOR: white;
9.margin-left: 0px;
10.margin-top: 0px;
11. background-color:  #003300;
12.}
13.textarea {
14.background-color: #006633;
15.}
16..jt2 {
17.background-color: #9999FF;
18.color: #006633;
19.font-weight: bold;
20.}
21.option {
22.background-color: #9999FF;
23.border:#006699;
24.border-style:double;
25.}
26.td {
27.font-size: 12px;
28.font-weight: bold;
29.color: #FF3300;
30.}
31.a:link {
32.color: #0033FF;
33.text-decoration: none;
34.}
35.a:visited {
36.text-decoration: none;
37. color: #66FFFF;
38.}
39.a:hover {
40.text-decoration: none;
41.}
42.a:active {
43.text-decoration: none;
44.}
45.-->
46.</style>
47.<!--#include file="include/conn.asp"-->
48.<%
49.dim id
50.id=request.QueryString("id")
51.sql="select * from mody where id="&id
52.s.open sql,conn,1,1
53.%>
54.table align="center" cellpadding="0"  bgcolor="#003300" cellspacing="0"
55.height="300" width="500">
56.<form action="gengxin.asp?id=<%=id%>" method="post" name="aticle">
57.<tr>
58.<td >文章标题:</td>
59.<td><input type="text" class="jt2" name="t_topic" value="<%=rs("t_topic")%>"
60.size=20 /></td>
61.</tr>
62.<tr>
63.<td>文章作者:</td>
64.<td><input type="text" class="jt2" name="t_writer" value="<%=rs
   ("t_writer")%>"
65.size=20/></td>
66.</tr>
67.<tr>
68.<td>文章类别:</td>
69.<td><select name="t_leibie">
70.<option value="青春诗行" <%if rs("t_leibie")="青春诗行" then
71.response.write "selected" end if%>>青春诗行</option>
72.<option value="星光灿烂" <%if rs("t_leibie")="星光灿烂" then
73.response.write "selected" end if%>>星光灿烂</option>
74.<option value="事事关心" <%if rs("t_leibie")="事事关心" then
75.response.write "selected" end if%>>事事关心</option>
76.</select></td>
77.</tr>
78.<tr>
79.<td >文章内容:</td>
80.<td><textarea  name="t_content" class="jt2"  rows="10"
81.cols="35"><%=rs("t_content")%></textarea></td>
82.</tr>
83.<tr>
84.<td colspan=2  align="center" ><input type="submit"
class="jt2" value        ="提交">
85.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
86.<input type="reset" class="jt2" value="重置"></td>
87.</tr>
88.</form>
89.</table>

代码释义:

第1~46行,定义样式,主要是表格、文本框及链接的内容,与前面的一样。不过这里的滚动条是多行文本框的滚动条。
第50行,获得文章的ID号。
第51、52行,建立SQL语句并打开该查询。
第54~89行,是用一个表格制作的表单。在这个表单中分别写入了文章的标题、作者、类别及文章内容。
第59行,显示文章的标题<%=rs("t_topic")%>。
第64行,显示文章的作者<%=rs("t_writer")%>。
第69~76行,显示文章的类别,对文章类别进行判断,即当选择某一类别时,就使这个类别处于当前选择状态。即response.write "selected",因为这里的选项较少,所以用了if语句来判断,如果选项较多,用这种方法就稍显复杂些。这时,可以对原代码进行改动,使用另外一种方法实现这种功能,即数组的方法,其代码构成如下。

1.<%
2.Dim jhf
3.jhf=array("A1","A2","A3","A4","An")
4.for i=0 to int(ubound(jhf))
5.response.Write "<option value="&jhf(i)
6.if rs("t_leibie")=jhfr(i) then
7.response.write " selected"
8.end if
9.response.write ">"&jhf(i)&"</option>"
10.next%>

代码释义:

第2、3行,定义一个数组,并把各类别写入数组中。
第3~10行,用一个for语句,形成一个循环,定义数组的索引,ubound(jhf)函数返回一个数组的最大上限。如果查询的类别与数组中的值相等,就把这个类别作为当前类别加以选择,并显示出来。这种写法,对于类别较多时相对要简单些,而第一种使用if语句,则较容易理解。
第81行,显示文章的内容。
文章修改完成后,就要进行提交处理,提交的表单是action="gengxin.asp?id=<%=id%"。这个提交中参数的目的是保证修改的文章对号入座。
接下来分析gengxin.asp页面。在解读这个网页代码前,提醒读者注意,在制作网页、编写网页代码时,其关键在于自己的思路要清晰。如果思维不集中,则很难完成制作过程。这是因为网页之间的链接一环套一环。如果制作时,不能保证思路一致,或者认识模糊,那么在几个网页之间游走时,稍不注意就会混乱。一旦代码有误,再检查起来就颇费周折。因此,建议大家在写代码时要养成写制作手记的习惯,这样即使停下来,也会在下次制作中很快找到接入点。同时也希望大家每写一段代码就在浏览器中预览一次,否则一旦代码过多,再一起预览时,出错点就不易确定。随时检测,每当实现预期效果时,会有一种成就感,使制作网页成为一种乐趣。


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册