|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
[XhTML+asp+access]教程 [6.26更新]
[b]写个[菜鸟篇 XhtML+asp+access]做的信息输入,管理,高级显示,等教程供菜鸟学习:[/b]可是说是小综合吧!
原xml的说法有误,不好意思,我修正一下吧!
当然,首先先建站点,这个我不说了,怕被人砍!哈哈
1.第一是建立一个data.mdb了,我做了4张表【每张表里面有id为主建,我在下面省掉不写】多谢狼哥提示,表名要加前缀*_,防止和关键字重复出现问题!由于我的已经做到一般狼哥才提示,就还是老样子,以后菜鸟应该用()里面的命名,这次例外。
表1:admin(szd_admin): szd_name szd_password szd_jibie[0表示一般用户,1表示管理员]
表2:lanmu( szd_lanmu): szd_lanmu[这是栏目分类,以后要写在那个栏目下,就用到了]
表3:news(szd_news): szd_title[标题] szd_lanmu[在那个栏目下,存栏目的id号,方便以后修改] szd_content【内容】 szd_hits【点击】 szd_jibie[0表示不置顶,1表示置顶,2表示推荐,3表示归档]
表4:nodown 防下载的表【呵呵,有点安全的观念】数据类型是 OLE 对象 ,然后添加一条记录:<%'p'-9%>自己想办法添加,可以copy的,^_^
现在就是链接数据库了,还是老办法
[html]
<%
option explicit
dim rootdir,myLocation,dbPath,conn,connStr
On Error Resume Next
Dim db
'更改数据库名字
db="data.mdb"
set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
if Err.Number <> 0 then '如果有错误发生
response.write "<b>提示:</b>建立数据库连接错误,请联系管理员。"
conn.close
set conn=nothing
response.end
end if
%>
<%
'SQL注入式攻击防范
dim squery,sURL,allquery
squery=lcase(Request.ServerVariables("QUERY_STRING"))
sURL=lcase(Request.ServerVariables("HTTP_HOST"))
allquery=squery+sURL
if InStr(allquery,"%20")<>0 or InStr(allquery,"%27")<>0 or InStr(allquery,"'")<>0 or InStr(allquery,"%a1a1")<>0 or InStr(allquery,"%24")<>0 or InStr(allquery,"$")<>0 or InStr(allquery,"%3b")<>0 or InStr(allquery,";")<>0 or InStr(allquery,":")<>0 or InStr(allquery,"%%")<>0 or InStr(allquery,"%3c")<>0 or InStr(allquery,"<")<>0 or InStr(allquery,">")<>0 or InStr(allquery,"--")<>0 or InStr(allquery,"sp_")<>0 or InStr(allquery,"xp_")<>0 or InStr(allquery,"exec")<>0 or InStr(allquery,"\")<>0 or InStr(allquery,"delete")<>0 or InStr(allquery,"dir")<>0 or InStr(allquery,"exe")<>0 or InStr(allquery,"select")<>0 or InStr(allquery,"Update")<>0 or InStr(allquery,"cmd")<>0 or InStr(allquery,"*")<>0 or InStr(allquery,"^")<>0 or InStr(allquery,"(")<>0 or InStr(allquery,")")<>0 or InStr(allquery,"+")<>0 or InStr(allquery,"copy")<>0 or InStr(allquery,"format")<>0 or not(isnumeric(request("id"))) then%>
<script Language="JavaScript">window.top.location.href="Error.asp?allquery=<%=allquery%>"</script>
<%Response.End
end if
dim startime,rs
startime=timer()
On Error Resume Next '防止暴库处理
db="data.mdb" '数据库路径
set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "数据库连接出错,请检查连接字串。防止暴库处理。"
Response.End
End If
%>
[/html]
ps:原先计划是新闻系统,现在我想改为更加确切的这个标题,呵呵。
|
[菜鸟篇 xml+asp+access]做的新闻系统教程
[b][color=red]相关的 CSS样式表;[/color]
[/b]
^_^,样式表今天看了一下,经典blog群的不错,就选它吧[由于本片文章献给经典,应该不会是侵权,^/^]
[html]*{
margin:0;
padding:0;
}
body{
text-align:center;
margin:0;
background-color:#E0E6D9;
font-size:90% !important;
font-size:88%;
font-family:tahoma,verdana,arial;
}
img{
border-width:0;
}
form{
margin:0;
}
i{
display:none;
}
u{
display:none;
}
a{
color:#333399;
}
.highlight{
background-color:#0e0;
font-weight:bold;
padding-left:2px;
padding-right:2px;
}
.caption{
display:none;
}
.notice{
border:1px dotted #ccc;
background-color:#ffc;
padding:5px;
font-size:.9em;
}
/* base element *********************************************************/
#top{
text-align:left;
width:750px;
margin:auto;
overflow:hidden;
}
/* head *****************************************************************/
#header{
background-position:10px center;
height:22px;
margin:9px;
}
#header #title{
display:none;
}
#header #subtitle{
font-weight:bold;
font-size:70% !important;
font-size:80%;
font-family:verdana,arial;
margin:5px 10px 0 10px;
float:right;
color:#666677;
}
/* navigation ***********************************************************/
#navigation{
height:25px;
padding:6px 10px 0 10px;
background-color:#667799;
background-image:url(mxna/navbg.gif);
}
#navigation a{
font-size:85%;
color:#ffffff;
text-decoration:none;
padding-right:15px;
padding-left:15px;
border-right:1px solid #778899;
height:50px;
}
#navigation a:hover{
color:#ccccff;
}
#navigation #search{
float:right;
}
#navigation #search form{
margin:0;
}
#navigation #q{
font-size:80%;
border-width:1px;
font-weight:bold;
padding-left:5px;
}
#navigation .button{
font-size:80%;
border-width:1px;
}
#navigation .selected{
border-bottom:3px solid #ffffff;
}
/* category ********************************************************/
#category{
margin-top:20px;
background-color:#ffffff;
background-image:url(mxna/topRounded.gif);
background-repeat:no-repeat;
padding:7px 10px 5px 10px;
}
#category a{
font-size:75%;
margin-right:10px;
color:#333366;
text-decoration:none;
}
#category a:hover{
text-decoration:underline;
}
#category .selected{
border-bottom:3px solid #00dd00;
font-weight:bold;
}
/* news aggregator *************************************************/
#aggregator{
background-color:#ffffff;
padding:5px;
font-size:100% !important;
font-size:98%;
}
#aggregator .feedCount{
float:right;
font-size:70%;
margin-top:-51px;
}
#aggregator .message{
margin:2px;
margin-left:26px;
margin-bottom:15px;
font-size:90%;
color:#003366;
}
#aggregator .news{
margin-bottom:20px;
}
#aggregator .news .title{
margin:0;
margin-bottom:10px;
background-color:#f3f3f3;
padding-top:1px !important;
padding:0 5px 2px 23px;
font-weight:bold;
background-image:url(mxna/newEntryIcon.gif);
background-repeat:no-repeat;
background-position:2px center;
}
#aggregator .news .title a{
color:#000066;
text-decoration:none;
font-size:85% !important;
font-size:80%;
}
#aggregator .news .title a:hover{
text-decoration:underline;
}
#aggregator .news .creator{
font-size:85%;
font-weight:normal;
float:right;
clear:both;
margin:-43px 0 0 0 !important;
margin-top:-33px;
padding-right:5px;
}
#aggregator .news .creator a{
text-decoration:none;
color:#888888;
}
#aggregator .news .creator a:hover{
text-decoration:underline;
}
#aggregator .news .creator .name{
font-size:70%;
display:block;
}
#aggregator .news .floatLeft{
margin:0 13px 0 0;
float:left;
padding:5px;
width:auto;
}
#aggregator .news .summary{
font-size:88%;
margin:3px;
margin-top:25px;
line-height:160%;
}
#aggregator .news .pubDate{
font-size:80%;
color:#999999;
padding-left:3px;
float:left;
margin-top:-18px !important;
margin-top:-4px;
}
#aggregator .news .related{
padding-left:2px;
}
#aggregator .news .related a{
margin-right:10px;
color:#999999;
font-size:95% !important;
font-size:85%;
text-decoration:none;
}
#aggregator .news .related a:hover{
text-decoration:underline;
}
#aggregator .news .related .search,
#aggregator .news .related .similar{
background-image:url(mxna/searchIcon.gif);
background-repeat:no-repeat;
background-position:left center;
height:16px;
padding:2px 0 2px 20px;
}
#aggregator .news .related .permaLink{
display:none;
}
#aggregator .blog{
}
#aggregator .blog{
margin-bottom:10px;
}
#aggregator .blog .title{
background-image:url(mxna/newEntryIcon.gif);
background-repeat:no-repeat;
background-position:2px center;
padding-left:26px;
display:block;
font-size:90%;
}
#aggregator .blog a{
color:#333366;
text-decoration:none;
}
#aggregator .blog a:hover{
text-decoration:underline;
}
#aggregator .blog dd{
margin-left:26px;
}
#aggregator .blog .lastUpdate{
display:block;
color:#000033;
}
#aggregator .blog .lastUpdate i{
font-style:normal;
display:inline;
}
#aggregator .categoryCaption{
display:block;
background-color:#f3f3f3;
margin-bottom:10px;
padding-left:2px;
}
#aggregator .code{
display:block;
background-color:#f6f6f3;
padding:9px;
margin:5px 0px 5px 0px;
color:#000000;
font-family:'Courier New',Courier;
}
/* pager ***********************************************************/
#pager{
font-family:fixedsys,system,tahoma,verdana,arial;
margin-bottom:10px;
padding:0 15px 15px 15px;
background-color:#ffffff;
background-image:url(mxna/bottomRounded.gif);
background-repeat:no-repeat;
background-position:left bottom;
}
#pager a{
margin-right:5px;
color:#333366;
}
#pager .selected{
font-weight:bold;
}
/* links ***********************************************************/
#links{
font-size:80%;
float:right;
padding:10px;
}
#links a{
font-size:90%;
color:#333366;
text-decoration:none;
}
#links a:hover{
text-decoration:underline;
}
#links .caption{
display:inline;
font-weight:normal;
}
/* footer **********************************************************/
#footer{
padding:10px;
font-size:75%;
color:#333333;
}
[/html]
[url=http://www.5do8.com/blueidea/css.css]css点击这里下载
[url=http://www.5do8.com/blueidea/data.mdb]上面的数据库点击这里下载
[b][color=red]简单数据库链接;[/color]
[/b]
:[html]<%
On Error Resume Next
dim db
db="data.mdb"
set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "数据库连接出错,请检查连接字串。防止暴库处理。"
Response.End
End If
%>
[/html]
|
[菜鸟篇 xml+asp+access]做的新闻系统教程
好! |
[菜鸟篇 xml+asp+access]做的新闻系统教程
[b][color=red]我的一点xml的看法和注意事项;[/color] 谢谢狼哥的指点[/b]
先认识一下xml,他的什么发展历程呀的,我不说了,单说主要的,呵呵,我的体会:
xml其实可以说是html的老爹,他的道术高在他的可扩展型
比如:<top>
<left>Lin</left>
</top>更加可视,便于开发和维护,是不是简明了好多?
利用xml的这些标签可以生成xhtml文件,这方面我还不成熟,以后在研究一下。
就是说,用户可以自定义元素,抽个例子:
首先在css上定义:
[html]#footer{
padding:10px;
font-size:75%;
color:#333333;
}
'在asp文件中这样用:
<div id="footer">
copy; 2004 w3.org.cn www.blueidea.com
Powered 耕耘村 [www.5do8.com]
</div>
[/html]
反正就这么回事!
首先当然管理员登陆拉,干什么?去添加新闻呀!记住,我的标题上有个xml,呵呵,你存asp文件的时候要这样做:
在第一行开始【当然在code上】添加下面的话或者要出现相似语句:
[html]
<!--#include file="conn.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Generator" content="BXNA/V0.05a" />
<meta name="author" content="LeXRus" />
<meta name="keywords" content="耕耘村 编的菜鸟新闻[xml+asp+access] by老农" />
<meta name="robots" content="all" />
<title>耕耘村 编的菜鸟新闻[xml+asp+access] by老农</title>
<style type="text/css" title="MXNA">@import "style/css.css";</style>
</head> [/html]
不按照要求可能出现未知错误,
当前生成的地址:http://www.5do8.com/blueidea/
[b][color=red]请在最所有页面上面加上<%Session.CodePage=65001%> 杜绝乱码[/color][/b] |
[菜鸟篇 xml+asp+access]做的新闻系统教程
太好了。加分~~~~~这种精神实在感动~~~~~~~~~~~`````` |
[菜鸟篇 xml+asp+access]做的新闻系统教程
关注,支持,请继续
+U,要一鼓作气 |
[菜鸟篇 xml+asp+access]做的新闻系统教程
多谢布鲁斯狼的鼓励!
[b][color=red] 这是显示新闻的页面,查找数据,并且显示[/color]
[/b]
先打开记录集,然后查找:SELECT * From news order by id DESC
这里你可以随便选择记录数:像 SELECT top 6* From news order by id DESC选择前6条,而我们前面设置的news表里面有个szd_jibie,可以order by szd_jibie DESC 显示结果一般<置顶<推荐<归档排序,还可以随机选取n条记录,相关的技术我打算这个问题讲完了细谈。
[html]<%
SQLStr="SELECT * From news order by id DESC "
Set Rs=Server.CreateObject("adodb.recordset")
Rs.Open SQLStr,Conn,1,3
%>
[/html]
上面的打开了记录集,先确定是不是有数据,rs.eof[记录结尾] and rs.bof[记录开始]当这2个值返回真,开始=结尾。没有数据,输出
[code] <%
If rs.bof and rs.eof Then
response.write "<SCRIPT language=JavaScript>alert('数据查找结果是空);"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
%> [/code]
当有数据时打印数据:
[html]
<% If Not (Rs.Bof And Rs.Eof) Then %>
<%
dim lanmu_id
lanmu_id=rs("szd_lanmu")
sqla="Select * from lanmu where id="&lanmu_id
set szda=conn.execute(sqla)
do while not szda.eof
lanmu=szda("szd_lanmu")
%>
<dl>
<dd>
<h5 class="title">
<a target="_blank" href="#"><%=rs("szd_title").value%></a>
</h5>
<small class="pubDate">
<i>Publish date: </i><%=rs("szd_times").value%></small>
<small class="creator">
<i>Posted in </i>
<%=lanmu%>
</small>
<div class="summary">
<%=rs("szd_content").value%>
</div>
<small class="related">
<a class="hits" >点击次数:<%=rs("szd_hits").value%></a>
<a class="similar"></a>
</small>
<%szda.MoveNext
Loop
set szda=nothing
%>
<%
Rs.MoveNext
RS.Close
end if
Set RS=Nothing
%>
</dd>
</dl>
[/html]
里面有个嵌套查询,请注意。
所有的页面生成源码为[html]<!--#include file="conn0.asp"-->
<%Session.CodePage=65001%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Generator" content="BXNA/V0.05a" />
<meta name="author" content="LeXRus" />
<meta name="keywords" content="耕耘村 编的菜鸟新闻[xml+asp+access] by老农" />
<meta name="description" content="Blueidea XML News Aggregator. Aggregates Your Ideas." />
<meta name="robots" content="all" />
<title>耕耘村 编的菜鸟新闻[xml+asp+access] by老农</title>
<style type="text/css" title="MXNA">@import "style/css.css";</style>
<link rel="alternate stylesheet" type="text/css" title="Blueidea General" href="style/default.css" />
<link rel="alternate stylesheet" type="text/css" title="Plain Text" href="style/plaintext.css" />
</head>
<body>
<div id="bxna">
<div id="header">
<h1 id="title">XML News Aggregator</h1>
<sup id="subtitle">耕耘村 编的菜鸟小新闻系统[xml+asp+access]</sup>
</div>
<p id="category">
<a href="http://www.5do8.com" class="selected">耕耘村首页
</a>
<a href="#">管理登陆</a>
<a href="#">管理登陆</a>
<a href="#">管理登陆</a>
<a href="#">管理登陆</a>
<a href="#">管理登陆</a>
<a href="#">管理登陆</a>
<a href="#">管理登陆</a>
</p>
<div id="aggregator">
<h4 class="caption">Aggregated News</h4>
<p class="feedCount">仅做个人研究</p>
<div class="news">
<%
SQLStr="SELECT * From news order by id DESC "
Set Rs=Server.CreateObject("adodb.recordset")
Rs.Open SQLStr,Conn,1,3
%>
<%
If rs.bof and rs.eof Then
response.write "<SCRIPT language=JavaScript>alert('数据查找结果是空);"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
%>
<% If Not (Rs.Bof And Rs.Eof) Then %>
<%
dim lanmu_id
lanmu_id=rs("szd_lanmu")
sqla="Select * from lanmu where id="&lanmu_id
set szda=conn.execute(sqla)
do while not szda.eof
lanmu=szda("szd_lanmu")
%>
<dl>
<dd>
<h5 class="title">
<a target="_blank" href="#"><%=rs("szd_title").value%></a>
</h5>
<small class="pubDate">
<i>Publish date: </i><%=rs("szd_times").value%></small>
<small class="creator">
<i>Posted in </i>
<%=lanmu%>
</small>
<div class="summary">
<%=rs("szd_content").value%>
</div>
<small class="related">
<a class="hits" >点击次数:<%=rs("szd_hits").value%></a>
<a class="similar"></a>
</small>
<%szda.MoveNext
Loop
set szda=nothing
%>
<%
Rs.MoveNext
RS.Close
end if
Set RS=Nothing
%>
</dd>
</dl>
</div>
<p id="pager">
<strong class="caption">Page:</strong>
<a href="#">1 2 3 4 5 </a>
</p>
<p id="links">
<strong class="caption">Links:</strong>
<a href="http://www.5do8.com" target="_blank">web home</a>
<a href="#" target="_blank">Forum</a>
<a href="http://www.5do8.com/blog" target="_blank">
<acronym title="Macromedia XML News Aggregator">blog</acronym>
</a>
<a href="http://www.5do8.com/links" target="_blank">friend link</a>
</p>
<div id="footer">
<div id="copyright">© 2004 w3.org.cn www.5do8.com
Powered 耕耘村 [老农]</div></div>
</div>
</div>
</body>
</html>[/html]
这里查看调试结果:http://www.5do8.com/blueidea/index.asp
|
[菜鸟篇 xml+asp+access]做的新闻系统教程
[b][color=red] 这是页面提交,即新闻数据插入的讲解[/color]
[/b]
先建表单,填写name名称,这里有个栏目属性,是选择了lanmu表单的szd_lanmu的id号,这个下拉的对应asp文件是:
[code]
<select name="fenlei" >
<% sqlfen="select * from lanmu order by id asc"
set rsfen=conn.execute(sqlfen)
do while not rsfen.eof
%>
<option value=<%=rsfen("id")%>>
<%=rsfen("szd_lanmu")%>
</option>
<%rsfen.MoveNext
Loop
set rsfen=nothing
%>
</select>
[/code]
添加数据的时候 有时候出现莫明的错误,经过我的查证,问题出现在提交处理的页面,[color=red]那个asp页面不能存为UFT-8,必须存为default,我用editplus写的,很方便改的[/color]废话不说了,看看处理页面的文件:我用的是rs.addnew插入数据,这个我感觉效率不错,简洁,菜鸟就用它(先用request获取表单数据,然后插入):[html]
<% @LANGUAGE = VBScript %>
<!--#include file="conn0.asp"-->
<%
title=replace(trim(request.form("title")),"'","")
lanmu=request.form("lanmu")
content=replace(trim(request.form("content")),"'","")
jibie=request.form("jibie")
if title="" then
response.write "<SCRIPT language=JavaScript>alert('title is worry!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
if content="" then
response.write "<SCRIPT language=JavaScript>alert('content is worry!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
%>
<%
set rs=server.createobject("adodb.recordset")
sql="select * from news"
rs.open sql,conn,1,3
rs.addnew
rs("szd_title")=title
rs("szd_content")=content
rs("szd_jibie")=jibie
rs("szd_lanmu")=lanmu
rs.update
rs.close
conn.close
set conn=nothing
%>
<meta http-equiv="refresh" content="2;URL=index.asp">
<div align="center">ok,plese wait 2 min!
</div>
<p> </p>
<div align="center">
<p><a href="index.asp">ok!</a></p>
<p><a href="index.asp">to home</a></p>
</div>
[/html]
我还是把insert into 的句子也写出,>麻雀的鸟鸟可以用这个
[code]
<%
exec1="insert into blog(szd_title,szd_lanmu,szd_jibie,szd_content)
values('"+title+"','"+lanmu+"','"+jibie+"','"+content+"')"
conn.execute exec1
conn.close
set conn=nothing%>
[/code]
[url=http://www.5do8.com/blueidea/add.asp]
点击这里查看插入数据的add.asp文件
[b]
强烈建议菜鸟自己动手做,碰见问题就说,或者pm我[/b]
|
[菜鸟篇 xml+asp+access]做的新闻系统教程
[b][color=red] 这是现在说一下分页的思路[/color]
[/b]
网上很多的高效分页,其实都是一个思路:
1.设置每页记录数目pagesize。
2.获得总数rs.recordcount
3.用总数除以pagesize,得到所有的页数 Rs.pagecount
4.获取用户提交的Rs.pageno,乘以pagesize判断有没有记录,然后指针移至指定页的第一条记录
5.循环显示页数
我简明的说,就这些。当然验证pageno[cint转换为数字]符合条件最关键。
[code]
dim RsCount,ReSQL,pmcount,pageno
pmcount=6'这里我们设置为6,还可以在数据库定义,这里取参。
SQLStr="SELECT * From news order by id DESC "
Set Rs=Server.CreateObject("adodb.recordset")
Rs.Open SQLStr,Conn,1,1
If rs.eof and rs.bof Then %>
<% else
'分页开始了,请注意!!
rcount=rs.recordcount
if pmcount="" or isempty(pmcount) or pmcount<1 then
pmcount=10
end if
rs.pagesize=pmcount '设置每页数
mpage=rs.pagecount '得到总页数
pageno=request("pageno")
pageno=CInt(Pageno)
If pageno = "" Then
pageno=1
End If
If (pageno-Rs.pagecount) > 0 Then
pageno=Rs.pagecount
End If
if pageno < 1 Then
pageno = 1
End If
rs.absolutepage=pageno'将指针移至指定页的第一条记录
j=rs.recordcount
j=j-(pageno-1)*pmcount
i=0
[/code]
[b]
loop的条件:[/b]
[code]<%
Do While Not rs.Eof and i<pmcount %>[/code]
最后的循环显示:[code]<%
i = i+1
rs.movenext
loop
End If
%>[/code]
[b]for循环显示的页数:[/b]
[code]<p id="pager">
<strong class="caption">all:</strong>
All:<%=Rs.recordcount%> Have <%=Rs.pagecount%> pages
To:<%for i=1 to Rs.pagecount %>
<%response.Write("<a href='?pageno="&i&"'>"&i&"</a> ") %>
 <%next%>
</p>[/code]
[b]现在生成的文件完整为 index.asp:[/b][html]<%
dim startime
startime=timer()
%>
<!--#include file="conn0.asp"-->
<%Session.CodePage=65001%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Generator" content="BXNA/V0.05a" />
<meta name="author" content="LeXRus" />
<meta name="keywords" content="耕耘村 编的菜鸟新闻[xml+asp+access] by老农" />
<meta name="robots" content="all" />
<title>耕耘村 编的菜鸟新闻[xml+asp+access] by老农</title>
<style type="text/css" title="MXNA">@import "style/css.css";</style>
</head>
<body>
<div id="bxna">
<div id="header">
<h1 id="title">XML News Aggregator</h1>
<sup id="subtitle">耕耘村 编的菜鸟小新闻系统[xml+asp+access]</sup>
</div>
<p id="category">
<a href="http://www.5do8.com" class="selected">耕耘村首页</a>
<a href="index.asp">该系统首页</a>
<a href="add.asp">添加新闻</a>
</p>
<div id="aggregator">
<h4 class="caption">Aggregated News</h4>
<p class="feedCount">仅做个人研究</p>
<div class="news">
<% conn.execute("update news set szd_hits=szd_hits+1")
dim RsCount,ReSQL,pmcount,pageno
pmcount=pagesize
SQLStr="SELECT * From news order by id DESC "
Set Rs=Server.CreateObject("adodb.recordset")
Rs.Open SQLStr,Conn,1,1
If rs.eof and rs.bof Then %>
<% else
'分页开始了,老农请注意!!
rcount=rs.recordcount
if pmcount="" or isempty(pmcount) or pmcount<1 then
pmcount=10
end if
rs.pagesize=pmcount '设置每页数
mpage=rs.pagecount '得到总页数
pageno=request("pageno")
pageno=CInt(Pageno)
If pageno = "" Then
pageno=1
End If
If (pageno-Rs.pagecount) > 0 Then
pageno=Rs.pagecount
End If
if pageno < 1 Then
pageno = 1
End If
rs.absolutepage=pageno '将指针移至指定页的第一条记录
j=rs.recordcount
j=j-(pageno-1)*pmcount
i=0
%>
<%
Do While Not rs.Eof and i<pmcount %>
<dl>
<dd>
<h6 class="title">
<a ><%=rs("szd_title").value%></a>
</h6>
<small class="pubDate">
<i>Publish date: </i><%=rs("szd_times").value%></small>
<small class="creator">
<%
dim lanmu_id
lanmu_id=rs("szd_lanmu")
sqla="Select * from lanmu where id="&lanmu_id
set szda=conn.execute(sqla)
do while not szda.eof
lanmu=szda("szd_lanmu")
%>
<i>Posted in </i>
<%=lanmu%>
<%szda.MoveNext
Loop
set szda=nothing
%>
</small>
<div class="summary">
<%=rs("szd_content").value%>
</div>
<small class="related">
<a class="hits" >点击次数:<%=rs("szd_hits").value%></a>
<a class="similar"></a>
</small>
<%
i = i+1
rs.movenext
loop
End If
%>
</dd>
</dl>
</div>
<p id="pager">
<strong class="caption">all:</strong>All:<%=Rs.recordcount%> Have <%=Rs.pagecount%> pages
To:<%for i=1 to Rs.pagecount %> <%response.Write("<a href='?pageno="&i&"'>"&i&"</a> ") %> <%next%>
</p>
<p id="links">
<strong class="caption">Links:</strong>
<a href="http://www.5do8.com" target="_blank">web home</a>
<a href="#" target="_blank">Forum</a>
<a href="http://www.5do8.com/blog" target="_blank">
<acronym title="Macromedia XML News Aggregator">blog</acronym>
</a>
<a href="http://www.5do8.com/links" target="_blank">friend link</a>
</p>
<div id="footer">
<div id="copyright">© www.5do8.com Powered by tillage home
<%
dim endtime
endtime=timer()
%>
Time out:<%=FormatNumber((endtime-startime)*1000,3)%>
</div></div>
</div>
</div>
</body>
</html>
[/html]
演示在:http://www.5do8.com/blueidea/index.asp
待续ing,下一讲是分类显示新闻和调用讲解。
|
请教一个问题,关于asp的session
我曾经用asp做过一个系统,每个界面都有一个用户名及权限的判断,把这两个值保存在session变量中,如果session变量中没有值的话,就转到登录界面,我把这个程序放到网上嘛,偶尔有登录过后,session变量就为空了,我把每句代码也检查了一下,对session变量名没有重复,在此等待大家的好消息啦,谢谢 |
[菜鸟篇 xml+asp+access]做的新闻系统教程
好好看了下流程和步骤,不错,很适合初学者的学习和应用
说几个自己的看法:
1,数据库表名称的注意点:admin和news由于SQL关键字的缘故,尽量少用,若在查询时,尽量用[],即 select * form [news] 。当然推荐改名,比如我喜欢加cn_为前缀,即“cn_news”。
这是03年我写教程时,经典的热心朋友给我指出的,今天我继续指出给你:)
2,楼主说的XML+……,看了你近3/4内容(我想应该差不多了吧),涉及到XML就是这里看到:
你的意思是说这个是XML么?
如果这个结构,说是ASP+ACCESS最终生成的XHTML+CSS才适当,当然还要检查你的XHTML、CSS的规范性。
总的感觉,楼主写得比较的详细,无论如何都值得大家静下心来一看。
辛苦了。
|
[菜鸟篇 XML+asp+access]做的新闻系统教程
数据表的命名我忘了,谢谢指点。
狼哥说的确实很对,我现在正在学习xml,计划这个写到最后才全部用xml准确定位,再说了,我的xml概念还不是很明确,学习中,不过,我绝对会完成这个教程的,终极目标是XML+asp+access,哈哈,如果菜鸟看的话,先逐渐会掌握asp和access的,然后在啃xml。 |
[菜鸟篇 XML+asp+access]做的新闻系统教程
继续:[b][color=red] 今天说如何验证用户添加数据,和用户登陆,加密问题讲解[/color][/b]
验证用户登陆就是验证他的机器是不是和系统产生的验证一样,一般用session和cookie,今天我只说session的简单操作,以后有空再说cookie,至于基本概念,请查看书籍,我只说怎么用,当用户验证成功的时候,同时写入session:
[code]
Session("szd_admin")="True"
Session("szd_name")=uid
[/code]
当我们要限制页面的时候,就在前面写上
[code]
<%
if Session("szd_admin")="True" Then
else
Response.Redirect ("login.asp")
End If
%>[/code]当验证seeion不成功的时候,转到登陆页面,
例子为:
[code]<%If Session("szd_admin")="True" Then%>
<a href="LOGOUT.ASP">退出</a>
<%End If%>
[/code]
这里可以把这个code另存为一个一个单独文件,我们这里存为szd_chk.asp,在限制的页面add.asp最上面加上<!-- #include file="szd_chk.asp"-->就包含了,验证是不是合法用户了。
退出的时候把seeion的参数写为空即可
[code]
<%
Session("szd_admin")=""
Response.Redirect ("index.asp")
%>
[/code]
可以把这个文件另存为logout.asp做一个超级一个链接,就是退出登陆:
[code]
<%If Session("szd_admin")="True" Then%>
<a href="LOGOUT.ASP">退出</a>
<%End If%>
[/code]
加密用户密码是这么回事:用户输入密码,表单获取这个password,然后用一个函数把这个password转换成另一个字符串,保存这个字符串到数据库,登陆的时候,比较转化后的密码和数据库是不是一样,判断是不是正确。最上面包含加密函数的文件:
我的加密文件是:md5.asp你可以把里面得算法自己改改,这样算法变了,生成得密码就不一样了
[html]<%
Private Const BITS_TO_A_BYTE_NET=8
Private Const BYTES_TO_A_WORD_NET=4
Private Const BITS_TO_A_WORD_NET=32
Private m_lOnBits_NET(30)
Private m_l2Power_NET(30)
m_lOnBits_NET(0)=CLng(1)
m_lOnBits_NET(1)=CLng(3)
m_lOnBits_NET(2)=CLng(7)
m_lOnBits_NET(3)=CLng(15)
m_lOnBits_NET(4)=CLng(31)
m_lOnBits_NET(5)=CLng(63)
m_lOnBits_NET(6)=CLng(127)
m_lOnBits_NET(7)=CLng(255)
m_lOnBits_NET(8)=CLng(511)
m_lOnBits_NET(9)=CLng(1023)
m_lOnBits_NET(10)=CLng(2047)
m_lOnBits_NET(11)=CLng(4095)
m_lOnBits_NET(12)=CLng(8191)
m_lOnBits_NET(13)=CLng(16383)
m_lOnBits_NET(14)=CLng(32767)
m_lOnBits_NET(15)=CLng(65535)
m_lOnBits_NET(16)=CLng(131071)
m_lOnBits_NET(17)=CLng(262143)
m_lOnBits_NET(18)=CLng(524287)
m_lOnBits_NET(19)=CLng(1048575)
m_lOnBits_NET(20)=CLng(2097151)
m_lOnBits_NET(21)=CLng(4194303)
m_lOnBits_NET(22)=CLng(8388607)
m_lOnBits_NET(23)=CLng(16777215)
m_lOnBits_NET(24)=CLng(33554431)
m_lOnBits_NET(25)=CLng(67108863)
m_lOnBits_NET(26)=CLng(134217727)
m_lOnBits_NET(27)=CLng(268435455)
m_lOnBits_NET(28)=CLng(536870911)
m_lOnBits_NET(29)=CLng(1073741823)
m_lOnBits_NET(30)=CLng(2147483647)
m_l2Power_NET(0)=CLng(1)
m_l2Power_NET(1)=CLng(2)
m_l2Power_NET(2)=CLng(4)
m_l2Power_NET(3)=CLng(8)
m_l2Power_NET(4)=CLng(16)
m_l2Power_NET(5)=CLng(32)
m_l2Power_NET(6)=CLng(64)
m_l2Power_NET(7)=CLng(128)
m_l2Power_NET(8)=CLng(256)
m_l2Power_NET(9)=CLng(512)
m_l2Power_NET(10)=CLng(1024)
m_l2Power_NET(11)=CLng(2048)
m_l2Power_NET(12)=CLng(4096)
m_l2Power_NET(13)=CLng(8192)
m_l2Power_NET(14)=CLng(16384)
m_l2Power_NET(15)=CLng(32768)
m_l2Power_NET(16)=CLng(65536)
m_l2Power_NET(17)=CLng(131072)
m_l2Power_NET(18)=CLng(262144)
m_l2Power_NET(19)=CLng(524288)
m_l2Power_NET(20)=CLng(1048576)
m_l2Power_NET(21)=CLng(2097152)
m_l2Power_NET(22)=CLng(4194304)
m_l2Power_NET(23)=CLng(8388608)
m_l2Power_NET(24)=CLng(16777216)
m_l2Power_NET(25)=CLng(33554432)
m_l2Power_NET(26)=CLng(67108864)
m_l2Power_NET(27)=CLng(134217728)
m_l2Power_NET(28)=CLng(268435456)
m_l2Power_NET(29)=CLng(536870912)
m_l2Power_NET(30)=CLng(1073741824)
Private Function LShift(lValue,iShiftBits)
If iShiftBits=0 Then
LShift=lValue
Exit Function
ElseIf iShiftBits=31 Then
If lValue And 1 Then
LShift=&H80000000
Else
LShift=0
End If
Exit Function
ElseIf iShiftBits<0 Or iShiftBits>31 Then
Err.Raise 6
End If
If (lValue And m_l2Power_NET(31-iShiftBits)) Then
LShift=((lValue And m_lOnBits_NET(31-(iShiftBits+1)))*m_l2Power_NET(iShiftBits)) Or &H80000000
Else
LShift=((lValue And m_lOnBits_NET(31-iShiftBits))*m_l2Power_NET(iShiftBits))
End If
End Function
Private Function RShift(lValue,iShiftBits)
If iShiftBits=0 Then
RShift=lValue
Exit Function
ElseIf iShiftBits=31 Then
If lValue And &H80000000 Then
RShift=1
Else
RShift=0
End If
Exit Function
ElseIf iShiftBits<0 Or iShiftBits>31 Then
Err.Raise 6
End If
RShift=(lValue And &H7FFFFFFE)\m_l2Power_NET(iShiftBits)
If (lValue And &H80000000) Then
RShift=(RShift Or (&H40000000\m_l2Power_NET(iShiftBits-1)))
End If
End Function
Private Function RotateLeft(lValue,iShiftBits)
RotateLeft=LShift(lValue,iShiftBits) Or RShift(lValue,(32-iShiftBits))
End Function
Private Function AddUnsigned(lX,lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult
lX8=lX And &H80000000
lY8=lY And &H80000000
lX4=lX And &H40000000
lY4=lY And &H40000000
lResult=(lX And &H3FFFFFFF)+(lY And &H3FFFFFFF)
If lX4 And lY4 Then
lResult=lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult=lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult=lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult=lResult Xor lX8 Xor lY8
End If
AddUnsigned=lResult
End Function
Private Function F(x,y,z)
F=(x And y) Or ((Not x) And z)
End Function
Private Function G(x,y,z)
G=(x And z) Or (y And (Not z))
End Function
Private Function H(x,y,z)
H=(x Xor y Xor z)
End Function
Private Function I(x,y,z)
I=(y Xor (x Or (Not z)))
End Function
Private Sub FF(a,b,c,d,x,s,ac)
a=AddUnsigned(a,AddUnsigned(AddUnsigned(F(b,c,d),x),ac))
a=RotateLeft(a,s)
a=AddUnsigned(a,b)
End Sub
Private Sub GG(a,b,c,d,x,s,ac)
a=AddUnsigned(a,AddUnsigned(AddUnsigned(G(b,c,d),x),ac))
a=RotateLeft(a,s)
a=AddUnsigned(a,b)
End Sub
Private Sub HH(a,b,c,d,x,s,ac)
a=AddUnsigned(a,AddUnsigned(AddUnsigned(H(b,c,d),x),ac))
a=RotateLeft(a,s)
a=AddUnsigned(a,b)
End Sub
Private Sub II(a,b,c,d,x,s,ac)
a=AddUnsigned(a,AddUnsigned(AddUnsigned(I(b,c,d),x),ac))
a=RotateLeft(a,s)
a=AddUnsigned(a,b)
End Sub
Private Function ConvertToWordArray(sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray()
Dim lBytePosition
Dim lByteCount
Dim lWordCount
Const MODULUS_BITS=512
Const CONGRUENT_BITS=448
lMessageLength=Len(sMessage)
lNumberOfWords=(((lMessageLength+((MODULUS_BITS-CONGRUENT_BITS)\BITS_TO_A_BYTE_NET))\(MODULUS_BITS\BITS_TO_A_BYTE_NET))+1)*(MODULUS_BITS\BITS_TO_A_WORD_NET)
ReDim lWordArray(lNumberOfWords-1)
lBytePosition=0
lByteCount=0
Do Until lByteCount >=lMessageLength
lWordCount=lByteCount\BYTES_TO_A_WORD_NET
lBytePosition=(lByteCount Mod BYTES_TO_A_WORD_NET)*BITS_TO_A_BYTE_NET
lWordArray(lWordCount)=lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage,lByteCount+1,1)),lBytePosition)
lByteCount=lByteCount+1
Loop
lWordCount=lByteCount\BYTES_TO_A_WORD_NET
lBytePosition=(lByteCount Mod BYTES_TO_A_WORD_NET)*BITS_TO_A_BYTE_NET
lWordArray(lWordCount)=lWordArray(lWordCount) Or LShift(&H80,lBytePosition)
lWordArray(lNumberOfWords-2)=LShift(lMessageLength,3)
lWordArray(lNumberOfWords-1)=RShift(lMessageLength,29)
ConvertToWordArray=lWordArray
End Function
Private Function WordToHex(lValue)
Dim lByte
Dim lCount
For lCount=0 To 3
lByte=RShift(lValue,lCount*BITS_TO_A_BYTE_NET) And m_lOnBits_NET(BITS_TO_A_BYTE_NET-1)
WordToHex=WordToHex & Right("0" & Hex(lByte),2)
Next
End Function
Public Function MD5_NET(sMessage)
Dim x
Dim k
Dim AA
Dim BB
Dim CC
Dim DD
Dim a
Dim b
Dim c
Dim d
Const S11=7
Const S12=12
Const S13=17
Const S14=22
Const S21=5
Const S22=9
Const S23=14
Const S24=20
Const S31=4
Const S32=11
Const S33=16
Const S34=23
Const S41=6
Const S42=10
Const S43=15
Const S44=21
x=ConvertToWordArray(sMessage)
a=&H67452301
b=&HEFCDAB89
c=&H98BADCFE
d=&H10325476
For k=0 To UBound(x) Step 16
AA=a
BB=b
CC=c
DD=d
FF a,b,c,d,x(k+0),S11,&HD76AA478
FF d,a,b,c,x(k+1),S12,&HE8C7B756
FF c,d,a,b,x(k+2),S13,&H242070DB
FF b,c,d,a,x(k+3),S14,&HC1BDCEEE
FF a,b,c,d,x(k+4),S11,&HF57C0FAF
FF d,a,b,c,x(k+5),S12,&H4787C62A
FF c,d,a,b,x(k+6),S13,&HA8304613
FF b,c,d,a,x(k+7),S14,&HFD469501
FF a,b,c,d,x(k+8),S11,&H698098D8
FF d,a,b,c,x(k+9),S12,&H8B44F7AF
FF c,d,a,b,x(k+10),S13,&HFFFF5BB1
FF b,c,d,a,x(k+11),S14,&H895CD7BE
FF a,b,c,d,x(k+12),S11,&H6B901122
FF d,a,b,c,x(k+13),S12,&HFD987193
FF c,d,a,b,x(k+14),S13,&HA679438E
FF b,c,d,a,x(k+15),S14,&H49B40821
GG a,b,c,d,x(k+1),S21,&HF61E2562
GG d,a,b,c,x(k+6),S22,&HC040B340
GG c,d,a,b,x(k+11),S23,&H265E5A51
GG b,c,d,a,x(k+0),S24,&HE9B6C7AA
GG a,b,c,d,x(k+5),S21,&HD62F105D
GG d,a,b,c,x(k+10),S22,&H2441453
GG c,d,a,b,x(k+15),S23,&HD8A1E681
GG b,c,d,a,x(k+4),S24,&HE7D3FBC8
GG a,b,c,d,x(k+9),S21,&H21E1CDE6
GG d,a,b,c,x(k+14),S22,&HC33707D6
GG c,d,a,b,x(k+3),S23,&HF4D50D87
GG b,c,d,a,x(k+8),S24,&H455A14ED
GG a,b,c,d,x(k+13),S21,&HA9E3E905
GG d,a,b,c,x(k+2),S22,&HFCEFA3F8
GG c,d,a,b,x(k+7),S23,&H676F02D9
GG b,c,d,a,x(k+12),S24,&H8D2A4C8A
HH a,b,c,d,x(k+5),S31,&HFFFA3942
HH d,a,b,c,x(k+8),S32,&H8771F681
HH c,d,a,b,x(k+11),S33,&H6D9D6122
HH b,c,d,a,x(k+14),S34,&HFDE5380C
HH a,b,c,d,x(k+1),S31,&HA4BEEA44
HH d,a,b,c,x(k+4),S32,&H4BDECFA9
HH c,d,a,b,x(k+7),S33,&HF6BB4B60
HH b,c,d,a,x(k+10),S34,&HBEBFBC70
HH a,b,c,d,x(k+13),S31,&H289B7EC6
HH d,a,b,c,x(k+0),S32,&HEAA127FA
HH c,d,a,b,x(k+3),S33,&HD4EF3085
HH b,c,d,a,x(k+6),S34,&H4881D05
HH a,b,c,d,x(k+9),S31,&HD9D4D039
HH d,a,b,c,x(k+12),S32,&HE6DB99E5
HH c,d,a,b,x(k+15),S33,&H1FA27CF8
HH b,c,d,a,x(k+2),S34,&HC4AC5665
II a,b,c,d,x(k+0),S41,&HF4292244
II d,a,b,c,x(k+7),S42,&H432AFF97
II c,d,a,b,x(k+14),S43,&HAB9423A7
II b,c,d,a,x(k+5),S44,&HFC93A039
II a,b,c,d,x(k+12),S41,&H655B59C3
II d,a,b,c,x(k+3),S42,&H8F0CCC92
II c,d,a,b,x(k+10),S43,&HFFEFF47D
II b,c,d,a,x(k+1),S44,&H85845DD1
II a,b,c,d,x(k+8),S41,&H6FA87E4F
II d,a,b,c,x(k+15),S42,&HFE2CE6E0
II c,d,a,b,x(k+6),S43,&HA3014314
II b,c,d,a,x(k+13),S44,&H4E0811A1
II a,b,c,d,x(k+4),S41,&HF7537E82
II d,a,b,c,x(k+11),S42,&HBD3AF235
II c,d,a,b,x(k+2),S43,&H2AD7D2BB
II b,c,d,a,x(k+9),S44,&HEB86D391
a=AddUnsigned(a,AA)
b=AddUnsigned(b,BB)
c=AddUnsigned(c,CC)
d=AddUnsigned(d,DD)
Next
MD5_NET=UCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
End Function
%>
[/html]
<!--#include file="md5.asp"-->
先获取用户输入的密码:[code] pwd_net=replace(trim(Request("password")),"'","")[/code]
把它转换为新的验证密码[code] pwd_net=MD5_NET(MD5_NET(pwd_net))[/code]
和数据库里面的比较[code] If rs("szd_password")=pwd_net Then[/code]
这就是加密的部分!
登陆表单不说了,code是[code]
<form name="form" method="post" action="loginresult.asp">
用户:<input name="user" type="text" id="user" size="16" />
密码: <input name="password" type="password" size="16" />
<input name="Submit" type="submit" class="01" value="login in" />
</form>
[/code]
处理的文件先取得密码和用户名,转化密码,
循环查找用户名,若不存在,提示错误,结束返回
若用户名正确,验证密码,写入seeion:[code]
If rs("szd_password")=pwd_net Then
Session("szd_admin")="True"
Session("szd_name")=uid
[/code]
验证的整体文件是:
[html]<% @LANGUAGE = VBScript %>
<!--#include file="conn0.asp"-->
<!--#include file="md5.asp"-->
<%
Dim sql,uid,pwd,expTime,date_last
uid=Trim(Request.Form("user"))
uid=replace(uid,"'","")
pwd_net=replace(trim(Request("password")),"'","")
pwd_net=MD5_NET(MD5_NET(pwd_net))
set rs=server.createobject("adodb.recordset")
sql="select * from admin where szd_name='"&uid&"'"
rs.open sql,conn,1,3
If not rs.Eof Then
If rs("szd_password")=pwd_net Then
Session("szd_admin")="True"
Session("szd_name")=uid
Response.Redirect ("index.asp")
else response.write "<SCRIPT language=JavaScript>alert('用户名和密码错误,请勿非法登陆!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
End If
else
response.write "<SCRIPT language=JavaScript>alert('用户名和密码错误,请勿非法登陆!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
End If
%>
<meta http-equiv="refresh" content="2;URL=index.asp">
<div align="center">ok,plese wait 2 min!
</div>
<p> </p>
<div align="center">
<p><a href="index.asp">ok!</a></p>
<p><a href="index.asp">to home</a></p>
</div>
[/html]
好了,现在这快登陆验证得讲完了,可以这里测试:
http://www.5do8.com/blueidea/login.asp
明天我们说修改新闻和分类显示,待续ing
|
[菜鸟篇 XML+asp+access]做的新闻系统教程
[b][color=red] 现在说管理员编辑新闻和删除新闻操作[/color][/b]
这2个操作一般只有管理员有权限,所以在相关的页面上面包含文件:
[code] <!-- #include file="szd_chk.asp"-->[/code]为什么在上一讲李很清楚。
关于这2个操作和插入数据其实没有什么2样,都是sql语句的变化而已。
编辑新闻的关键的sql语句是:
[code]
exec="select * from news where id="&request.form("id")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,3
'这是一个查找编号id的新闻,并且打开与数据库的连接
[/code]
然后是把数据库里面的数据[color=red]临时[/color]替换为表单修改的结果
:[code]rs("szd_title")=request.form("title")
rs("szd_lanmu")=request.form("lanmu")
rs("szd_content")=request.form("content")
rs("szd_jibie")=request.form("jibie") [/code]
then判断数据的合法性,如果不合法,结束返回,
:[code]
if rs("szd_title")="" then
response.write "<SCRIPT language=JavaScript>alert('title is worry!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
if rs("szd_content")="" then
response.write "<SCRIPT language=JavaScript>alert('content is worry!!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
if rs("szd_jibie")="" then
response.write "<SCRIPT language=JavaScript>alert('jibie is worry!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
if rs("szd_lanmu")="" then
response.write "<SCRIPT language=JavaScript>alert('lanmu is worry!!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if
[/code]
如果合法,更新数据,更新时牵扯到另一个关键的sql语句:
[code]rs.update'更新数据
rs.close‘关闭连接
set rs=nothing’清空保存
conn.close
set conn=nothing‘释放内存
<meta http-equiv="refresh" content="2;URL=index.asp">
<div align="center">mad is ok, wait a little!
</div>
<p> </p>
<div align="center"><a href="index.asp">click here go home</a></div>
[/code]
然后是删除新闻,这里只用一个关键语句,id是用户提交的id号,这个id是在页面显示的时候链接上的:
[code]
exec="delete * from news where id="&request.querystring("id")
conn.execute exec
<meta http-equiv="refresh" content="2;URL=index.asp">
<div align="center"> delete this data succeed
</div>
<p> </p>
<div align="center">
<a href="index.asp">click here go home</a></div>
[/code]
现在我们可以看到2个操作都有id这个参数,怎么的来的呢?
在首页循环显示页面的地方,如果是管理员,显示编辑和删除的链接
[code]
<%If Session("szd_admin")="True" Then%>
<a href="del.asp?id=<%=rs("id")%>"
onClick="{if(confirm('are you sure del this data?'))
'这是一个js控制的确认操作的过程,很有用的。相关请查confirm的用法
{return true;}return false;}">delete</a> 
<a href="edit.asp?id=<%=rs("id")%>">edit</a>
<%End If%>
[/code]
上面的edit.asp文件表单和添加新闻没什么2样,只是sql语句上多了一条查询的条件,查找用户提交的新闻编号:
[code]exec="select * from news where id="&request.querystring("id")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn
[/code]
还有,表单的初始值要变为原先当前的数据库数据,这样利于编辑
[code] 新闻标题:
<input name="title" type="text" id="title"
value="<%=rs("szd_title").value%>">
新闻内容:<textarea name="content" id="content"
cols=70% rows=8><%=rs("szd_content").value%></textarea>[/code]
关键不要忘了id参数,这是链接提交页面的关键,设置为隐藏
[code] <input name="id" type="hidden" id="id"
value="<%=request.querystring("id")%>"> [/code]
好了,现在好了,整个过程就是这样的,相关的测试在:
http://www.5do8.com/blueidea/
请先登陆,然后可以看见每条新闻最右面有2个链接,删除和添加新闻的链接,你可以试试。
现在所有文件我打包了,你可以下载研究:http://www.5do8.com/down/blueidea/xmlaspaccess.rar
刚看了一下,所有文件才27k,爽!
明天还要考英语,想起就麻烦呀。 呵呵,待续ing。
|
[菜鸟篇 XML+asp+access]做的新闻系统教程
[b][color=red]这一节我们专门说一下ubb的用法和实例;[/color] [/b]
现在英语考完了,可以松口气了,哈哈哈,好了,继续说吧!
下面是我的体会,不知在理论上对不对,反正在实际中好用。
页面处理的话,提交的新闻默认支持的是html的格式,这就是说,任何有html标签的东东都会被执行,在一般情况下,这点很糟,因为js也会被执行掉,严重的破坏了可视性。我们必须要对输出进行处理,当然代码的处理最后结果还是在本事上转换为html,注意,这是在数据层传输的,在页面处理的前台,不能让浏览器直接看到html标签,那会被转换掉的,这里就要用ubb代换掉html,浏览器虽然不认识,但是如果我们在后台悄悄的告诉浏览器,这是一个什么标签,怎么转换为html,它还是会接受的。现在关键的技术是在于如何把html转换为ubb,答案是正则,正则就是查找匹配,(\[b\])(.[^\[]*)(\[\/b\]),这是转换加粗的用法,详细的请理论请访问: http://bbs.blueidea.com/viewthread.php?tid=303249
这里详细讲了正则在ubb的用法,我们这一节主要讲怎么插入,怎么使用,我也不罗嗦了[其实正则我也不是太明白],直接讲思路:
页面添加的时候,为了让用户输入方便,可以用js代码定义一些edit菜单:
[code]<IMG onclick=Cbold() alt=粗体
src="Images/Ubbpic/bold.gif" border=0>[/code]
意思就是说当用户点击这个图片的时候,发生 onclick=Cbold() 事件:
[code]function Cbold() {
fontbegin="[B]";
fontend="[/B]";
fontchuli();
[/code]
其他的全部相似的,这里包含的js代码是
[html]
var Quote = 0;
var Bold = 0;
var Italic = 0;
var Underline = 0;
var Code = 0;
var Center = 0;
var Strike = 0;
var Sound = 0;
var Swf = 0;
var Ra = 0;
var Rm = 0;
var Marquee = 0;
var Fly = 0;
var fanzi=0;
var text_enter_url = "请输入连接网址";
var text_enter_txt = "请输入连接说明";
var text_enter_image = "请输入图片网址";
var text_enter_sound = "请输入声音文件网址";
var text_enter_swf = "请输入FLASH动画网址";
var text_enter_ra = "请输入Real音乐网址";
var text_enter_rm = "请输入Real影片网址";
var text_enter_wmv = "请输入Media影片网址";
var text_enter_wma = "请输入Media音乐网址";
var text_enter_mov = "请输入QuickTime音乐网址";
var text_enter_sw = "请输入shockwave音乐网址";
var text_enter_email = "请输入邮件网址";
var error_no_url = "您必须输入网址";
var error_no_txt = "您必须连接说明";
var error_no_title = "您必须输入首页标题";
var error_no_email = "您必须输入邮件网址";
var error_no_gset = "必须正确按照各式输入!";
var error_no_gtxt = "必须输入文字!";
var text_enter_guang1 = "文字的长度、颜色和边界大小";
var text_enter_guang2 = "要产生效果的文字!";
function commentWrite(NewCode) {
document.Post.Content.value+=NewCode;
document.Post.Content.focus();
return;
}
function storeCaret(text) {
if (text.createTextRange) {
text.caretPos = document.selection.createRange().duplicate();
}
if(event.ctrlKey && window.event.keyCode==13){i++;if (i>1) {alert('帖子正在发出,请耐心等待!');return false;}this.document.form.submit();}
}
function AddText(text) {
if (document.Post.Content.createTextRange && document.Post.Content.caretPos) {
var caretPos = document.Post.Content.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
text + ' ' : text;
}
else document.Post.Content.value += text;
document.Post.Content.focus(caretPos);
}
function inputs(str)
{
AddText(str);
}
function Curl() {
var FoundErrors = '';
var enterURL = prompt(text_enter_url, "http://");
var enterTxT = prompt(text_enter_txt, enterURL);
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (!enterTxT) {
FoundErrors += "\n" + error_no_txt;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[URL="+enterURL+"]"+enterTxT+"[/URL]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cimage() {
var FoundErrors = '';
var enterURL = prompt(text_enter_image, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[IMG]"+enterURL+"[/IMG]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cemail() {
var emailAddress = prompt(text_enter_email,"");
if (!emailAddress) { alert(error_no_email); return; }
var ToAdd = "[EMAIL]"+emailAddress+"[/EMAIL]";
commentWrite(ToAdd);
}
function Ccode() {
if (Code == 0) {
ToAdd = "{code2}";
document.form.code.value = " 代码 ";
Code = 0;
}
commentWrite(ToAdd);
}
function Cquote() {
fontbegin="[QUOTE]";
fontend="[/QUOTE]";
fontchuli();
}
function Cbold() {
fontbegin="[B]";
fontend="[/B]";
fontchuli();
}
function Citalic() {
fontbegin="[I]";
fontend="[/I]";
fontchuli();
}
function Cunder() {
fontbegin="[U]";
fontend="[/U]";
fontchuli();
}
function Ccenter() {
fontbegin="[center]";
fontend="[/center]";
fontchuli();
}
function Cstrike() {
fontbegin="[strike]";
fontend="[/strike]";
fontchuli();
}
function Csound() {
var FoundErrors = '';
var enterURL = prompt(text_enter_sound, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[SOUND]"+enterURL+"[/SOUND]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cswf() {
var FoundErrors = '';
var enterURL = prompt(text_enter_swf, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[FLASH]"+enterURL+"[/FLASH]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cra() {
var FoundErrors = '';
var enterURL = prompt(text_enter_ra, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[RA]"+enterURL+"[/RA]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Crm() {
var FoundErrors = '';
var enterURL = prompt(text_enter_rm, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[RM=500,350]"+enterURL+"[/RM]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cwmv() {
var FoundErrors = '';
var enterURL = prompt(text_enter_wmv, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[MP=500,350]"+enterURL+"[/MP]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cfanzi() {
fontbegin="[xray]";
fontend="[/xray]";
fontchuli();
}
function Cwma() {
var FoundErrors = '';
var enterURL = prompt(text_enter_wma, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[wma]"+enterURL+"[/wma]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cmov() {
var FoundErrors = '';
var enterURL = prompt(text_enter_mov, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[QT=500,350]"+enterURL+"[/QT]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cdir() {
var FoundErrors = '';
var enterURL = prompt(text_enter_sw, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[DIR=500,350]"+enterURL+"[/DIR]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cmarquee() {
fontbegin="[move]";
fontend="[/move]";
fontchuli();
}
function Cfly() {
fontbegin="[fly]";
fontend="[/fly]";
fontchuli();
}
function paste(text) {
if (opener.document.Post.Content.createTextRange && opener.document.Post.Content.caretPos) {
var caretPos = opener.document.Post.Content.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
text + ' ' : text;
}
else opener.document.Post.Content.value += text;
opener.document.Post.Content.focus(caretPos);
}
function showsize(size){
fontbegin="[size="+size+"]";
fontend="[/size]";
fontchuli();
}
function showfont(font){
fontbegin="[face="+font+"]";
fontend="[/face]";
fontchuli();
}
function showcolor(color){
fontbegin="[color="+color+"]";
fontend="[/color]";
fontchuli();
}
function fontchuli(){
if ((document.selection)&&(document.selection.type == "Text")) {
var range = document.selection.createRange();
var ch_text=range.text;
range.text = fontbegin + ch_text + fontend;
}
else {
document.Post.Content.value=fontbegin+document.Post.Content.value+fontend;
document.Post.Content.focus();
}
}
function Cguang() {
var FoundErrors = '';
var enterSET = prompt(text_enter_guang1, "255,red,2");
var enterTxT = prompt(text_enter_guang2, "文字");
if (!enterSET) {
FoundErrors += "\n" + error_no_gset;
}
if (!enterTxT) {
FoundErrors += "\n" + error_no_gtxt;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[glow="+enterSET+"]"+enterTxT+"[/glow]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
function Cying() {
var FoundErrors = '';
var enterSET = prompt(text_enter_guang1, "255,blue,1");
var enterTxT = prompt(text_enter_guang2, "文字");
if (!enterSET) {
FoundErrors += "\n" + error_no_gset;
}
if (!enterTxT) {
FoundErrors += "\n" + error_no_gtxt;
}
if (FoundErrors) {
alert("错误!"+FoundErrors);
return;
}
var ToAdd = "[SHADOW="+enterSET+"]"+enterTxT+"[/SHADOW]";
document.Post.Content.value+=ToAdd;
document.Post.Content.focus();
}
ie = (document.all)? true:false
if (ie){
function ctlent(eventobject){if(event.ctrlKey && window.event.keyCode==13){this.document.Post.submit();}}
}
function DoTitle(addTitle) {
var revisedTitle;
var currentTitle = document.Post.subject.value;
revisedTitle = currentTitle+addTitle;
document.Post.subject.value=revisedTitle;
document.Post.subject.focus();
return; }
function insertsmilie(smilieface){
document.Post.Content.value+=smilieface;
}
[/html]
这个页面包含到添加信息的表单前面,
[code]Function HTMLEncode(Str)
if not isnull(Str) then
Str = replace(Str, ">", ">")
Str = replace(Str, "<", "<")
Str = Replace(Str, CHR(32), " ")
Str = Replace(Str, CHR(9), " ")
Str = Replace(Str, CHR(34), """)
Str = Replace(Str, CHR(39), "'")
Str = Replace(Str, CHR(10) & CHR(10), "</P><P> ")
Str = Replace(Str, CHR(10), "<BR> ")
HTMLEncode = Str
end if
End Function
[/code]
而在页面输入信息的内容写为:
[html] <TABLE>
<TBODY>
<TR>
<TD vAlign=top>
<TABLE class=Tborder border=0 align=center cellPadding=5 cellSpacing=1>
<TBODY>
<TR>
<TD height=2>内 容::</TD>
</TR>
<TR>
<TD> <P><font>
</font></P>
<TD colSpan=2><IMG onclick=Cbold() alt=粗体
src="Images/Ubbpic/bold.gif" border=0><IMG onclick=Citalic() alt=斜体 src="Images/Ubbpic/italicize.gif" border=0><IMG onclick=Cunder() alt=下划线
src="Images/Ubbpic/underline.gif" border=0><IMG
onclick=Ccenter() alt=居中 src="Images/Ubbpic/center.gif" border=0><IMG onclick=Curl() alt=超级连接
src="Images/Ubbpic/url1.gif" border=0><IMG src="Images/Ubbpic/email1.gif" alt=Email连接 width="23" height="22" border=0 onclick=Cemail()><IMG onclick=Cimage() alt=图片 src="Images/Ubbpic/image.gif" border=0><IMG onclick=Cswf() alt=Flash图片
src="Images/Ubbpic/swf.gif" border=0><IMG onclick=Cdir() alt=Shockwave文件 src="Images/Ubbpic/Shockwave.gif"
border=0><IMG onclick=Crm() alt=realplay视频文件
src="Images/Ubbpic/rm.gif" border=0><IMG onclick=Cwmv() alt="Media Player视频文件" src="Images/Ubbpic/mp.gif"
border=0><IMG onclick=Cmov() alt=QuickTime视频文件
src="Images/Ubbpic/qt.gif" border=0><IMG onclick=Cquote() alt=引用 src="Images/Ubbpic/quote1.gif" border=0><IMG
onclick=Cfly() alt=飞行字 src="Images/Ubbpic/fly.gif"
border=0><IMG onclick=Cmarquee() alt=移动字
src="Images/Ubbpic/move.gif" border=0><IMG onclick=Cguang() alt=发光字 src="Images/Ubbpic/glow.gif" border=0><IMG
onclick=Cying() alt=阴影字 src="Images/Ubbpic/shadow.gif" border=0> <BR>
字体:
<SELECT onchange="if(this.options[this.selectedIndex].value!=''){showfont(this.options[this.selectedIndex].value);this.options[0].selected=true;}else {this.selectedIndex=0;}"
name=font>
<OPTION value=宋体 selected>宋体</OPTION>
<OPTION
value=楷体_GB2312>楷体</OPTION>
<OPTION value=新宋体>新宋体</OPTION>
<OPTION
value=黑体>黑体</OPTION>
<OPTION value=隶书>隶书</OPTION>
<OPTION
value="Andale Mono">Andale Mono</OPTION>
<OPTION
value=Arial>Arial</OPTION>
<OPTION value="Arial Black">Arial Black</OPTION>
<OPTION value="Book Antiqua">Book Antiqua</OPTION>
<OPTION value="Century Gothic">Century Gothic</OPTION>
<OPTION
value="Comic Sans MS">Comic Sans MS</OPTION>
<OPTION
value="Courier New">Courier New</OPTION>
<OPTION
value=Georgia>Georgia</OPTION>
<OPTION value=Impact>Impact</OPTION>
<OPTION value=Tahoma>Tahoma</OPTION>
<OPTION
value="Times New Roman">Times New Roman</OPTION>
<OPTION
value="Trebuchet MS">Trebuchet MS</OPTION>
<OPTION
value="Script MT Bold">Script MT Bold</OPTION>
<OPTION
value=Stencil>Stencil</OPTION>
<OPTION value=Verdana>Verdana</OPTION>
<OPTION value="Lucida Console">Lucida Console</OPTION>
</SELECT> 字体大小
<SELECT
onchange="if(this.options[this.selectedIndex].value!=''){showsize(this.options[this.selectedIndex].value);this.options[0].selected=true;}else {this.selectedIndex=0;}"
name=size>
<OPTION value=1>1</OPTION>
<OPTION value=2>2</OPTION>
<OPTION
value=3 selected>3</OPTION>
<OPTION value=4>4</OPTION>
</SELECT> <FONT face=宋体 color=#333333>颜色:</FONT>
<SELECT
onchange="if(this.options[this.selectedIndex].value!=''){showcolor(this.options[this.selectedIndex].value);this.options[0].selected=true;}else {this.selectedIndex=0;}"
name=color>
<OPTION style="COLOR: #f0f8ff; BACKGROUND-COLOR: #f0f8ff"
value=#F0F8FF>#F0F8FF</OPTION>
<OPTION
style="COLOR: #faebd7; BACKGROUND-COLOR: #faebd7"
value=#FAEBD7>#FAEBD7</OPTION>
<OPTION
style="COLOR: #00ffff; BACKGROUND-COLOR: #00ffff"
value=#00FFFF>#00FFFF</OPTION>
<OPTION
style="COLOR: #7fffd4; BACKGROUND-COLOR: #7fffd4"
value=#7FFFD4>#7FFFD4</OPTION>
<OPTION
style="COLOR: #f0ffff; BACKGROUND-COLOR: #f0ffff"
value=#F0FFFF>#F0FFFF</OPTION>
<OPTION
style="COLOR: #f5f5dc; BACKGROUND-COLOR: #f5f5dc"
value=#F5F5DC>#F5F5DC</OPTION>
<OPTION
style="COLOR: #ffe4c4; BACKGROUND-COLOR: #ffe4c4"
value=#FFE4C4>#FFE4C4</OPTION>
<OPTION
style="COLOR: #000000; BACKGROUND-COLOR: #000000"
value=#000000>#000000</OPTION>
<OPTION
style="COLOR: #ffebcd; BACKGROUND-COLOR: #ffebcd"
value=#FFEBCD>#FFEBCD</OPTION>
<OPTION
style="COLOR: #0000ff; BACKGROUND-COLOR: #0000ff"
value=#0000FF>#0000FF</OPTION>
<OPTION
style="COLOR: #8a2be2; BACKGROUND-COLOR: #8a2be2"
value=#8A2BE2>#8A2BE2</OPTION>
<OPTION
style="COLOR: #a52a2a; BACKGROUND-COLOR: #a52a2a"
value=#A52A2A>#A52A2A</OPTION>
<OPTION
style="COLOR: #deb887; BACKGROUND-COLOR: #deb887"
value=#DEB887>#DEB887</OPTION>
<OPTION
style="COLOR: #5f9ea0; BACKGROUND-COLOR: #5f9ea0"
value=#5F9EA0>#5F9EA0</OPTION>
<OPTION
style="COLOR: #7fff00; BACKGROUND-COLOR: #7fff00"
value=#7FFF00>#7FFF00</OPTION>
<OPTION
style="COLOR: #d2691e; BACKGROUND-COLOR: #d2691e"
value=#D2691E>#D2691E</OPTION>
<OPTION
style="COLOR: #ff7f50; BACKGROUND-COLOR: #ff7f50"
value=#FF7F50>#FF7F50</OPTION>
<OPTION
style="COLOR: #6495ed; BACKGROUND-COLOR: #6495ed" value=#6495ED
selected>#6495ED</OPTION>
<OPTION
style="COLOR: #fff8dc; BACKGROUND-COLOR: #fff8dc"
value=#FFF8DC>#FFF8DC</OPTION>
<OPTION
style="COLOR: #dc143c; BACKGROUND-COLOR: #dc143c"
value=#DC143C>#DC143C</OPTION>
<OPTION
style="COLOR: #00ffff; BACKGROUND-COLOR: #00ffff"
value=#00FFFF>#00FFFF</OPTION>
<OPTION
style="COLOR: #00008b; BACKGROUND-COLOR: #00008b"
value=#00008B>#00008B</OPTION>
<OPTION
style="COLOR: #008b8b; BACKGROUND-COLOR: #008b8b"
value=#008B8B>#008B8B</OPTION>
<OPTION
style="COLOR: #b8860b; BACKGROUND-COLOR: #b8860b"
value=#B8860B>#B8860B</OPTION>
<OPTION
style="COLOR: #a9a9a9; BACKGROUND-COLOR: #a9a9a9"
value=#A9A9A9>#A9A9A9</OPTION>
<OPTION
style="COLOR: #006400; BACKGROUND-COLOR: #006400"
value=#006400>#006400</OPTION>
<OPTION
style="COLOR: #bdb76b; BACKGROUND-COLOR: #bdb76b"
value=#BDB76B>#BDB76B</OPTION>
<OPTION
style="COLOR: #8b008b; BACKGROUND-COLOR: #8b008b"
value=#8B008B>#8B008B</OPTION>
<OPTION
style="COLOR: #556b2f; BACKGROUND-COLOR: #556b2f"
value=#556B2F>#556B2F</OPTION>
<OPTION
style="COLOR: #ff8c00; BACKGROUND-COLOR: #ff8c00" | |