td> input name=username type="text" maxlength="20"> /td> /tr> tr> td>font size=2>密nbsp;码:/font>/td> td> input type="password" name=password maxlength="20"> /td> /tr> tr> td colspan="2" align=center> input type="submit" value=登录>nbsp; input type="reset" value=重置> /td> /tr> /table> /center> /form> /body> /html> 二,我们在做一个页面来接受这些数据,这个页面就叫checklogin.asp % '-------------------为防止出错我们定义username和password---------------- dim username dim password '--------用request的form方法来接受login.asp页面传来的值,并付值给我们定义的username和password username=request.form("username") password=request.form("password") '---------判断传来的值是不是空值 if username="" then '用response的write的方法输出一个脚本 response.write"script>alert('用户名不能为空')/script>" response.end end if if password="" then response.write"script>alert('密码不能为空')/script>" response.end end if '----------判断用户名和密码是不是一样的,如果一样的输出"登陆成功"并把session的标志给这个用户,否则就输出"登陆失败" if username="admin" and password="admin" then response.write"登陆成功" session("loginok")=username else response.write"登陆失败" '重定向到login.asp response.redirect"login.asp" end if %> 这里我们用到了request.form的方法(接受数据) response的write(输出数据)和redirect(重定向) session的会话,这里我先简单的说说session的作用吧, 就拿我的同学录来说吧!这里会判断用户的级别和权限(如:没有审核同学,通过审核的同学,班级管理员)如果用户登陆成功了, session就和server产生了会话,没有审核同学就付值为session(userlevel)=1,通过审核的同学就付值为session(userlevel)=2 班级管理员就付值为session(userlevel)=3,这样就有效的区别的用户的权限和级别。 类似的做用的还有cookies,它也有这样的作用,不同的是cookise是产生到客户端的。。。。 我在这个例子里主要讲解了request和response的用法,其实他们还有一些属性和方法, 这里我只是讲解了常用的,希望大家有空看看这里我没有提到的属性方法 这个例子我没有把用户和密码放到数据库中是为了方便大家的理解, 下一节我们将讲解怎么样连接数据库和实现操作数据库的。。。。
----------------------------------------------------------------------------------------------------------------------- 5天搞定asp 第二天 今天我们主要讲解ASP中常用的SQL语句,和怎样在页面中执行SQl 语句。。。 其实常用的语句无外乎数据的“增,删,改”好象所有的数据处理程序中都有这几种操作,下面我们先写sql语句,如果您需要了解更多的请 看我的Blog.91time.com中的SQl语句经典或看看SQL的书籍> -----(一)--查询--------- 1,首先我们要做第一个查询>,这是SQl中最基本的语句了, select * from [表名] where [条件] order by [条件] desc 其中,desc降序,默认是asc升序, 例子:select * from news where news_id='"news_id"' order by news_id desc 意思就是查询news表中的"*"代表所有数据,条件是news_id等于 news_id然后按照news_id 的降序排列 在查询里还能用到group by分组排序等等,这里就不系说了。 2,count()函数用来计算记录的行数。 例:select count(*) from news 计算数据库中有多少行 3,sum()函数用来计算表达试中的项目和。 例:select age,sum(number) from person where age>20 group by age 6,top关键字,限制返回记录的行数 -----(二)--插入--------- insert 语句 格式如下: insert into 表名>[字段1>,字段2>……] values[常量1,…………] 例:insert into news(id,news) values(1,'新闻') ---(三)--更新------- update语句 格式: update表名> set 列名>=表达式>,列名1>=表达式1>…… where 条件> 例:update news set content=最新消息 where news_id='"news_id"' -----(四)---删除---------- delete语句 格式:delete from 表名> where 条件 例:delete from news where news_id>20 好了sql语句我们就说这么多吧,下面我们开始创建个数据库,这里我们就用SQL数据库吧 打开" 查询分析器" '创建个数据库叫news create database news use news create table admin ( id int primany key, admin_name varchar(20) not null, admin_pwd varchar(20) not null, ) '然后我们插入一条数据 insert into admin values(1,'admin','admin') '然后我们用select * from 查询一下 select * from admin 就会看到我们的数据了 好了,我们打开昨天做的登陆严整的代码,这里我们回顾一下吧,做天我们用了两个页来实现的会员登陆的验证, 这两个页分别是(登陆页login.asp)和(验证页checklogin.asp), 现在我们没有做数据库验证, (登陆页login.asp)页我们不用改动, 下面我们只需改动(验证页checklogin.asp),就行了, 这里我们要做个连接数据库的页面文件,名字就叫conn.asp吧 代码如下 % dim conn,dbuid,dbpwd,dBName,dbip dbuid="sa" '数据库登陆名 dbpwd="123456" '数据库密码 dBName="news" '数据库名称 dbip="(local)" '可为IP '数据库所在地址,如果是本地数据库则为:(local) '--------------------------------------------------------------------------- set conn=Server.CreateObject("adodb.Connection") Conn.Open "PROVIDER=SQLOLEDB.1;Data Source="dbip";Initial Catalog="dBName";Persist Security Info=True;User ID="dbuid";Password="dbpwd";Connect Timeout=30" If Err Then err.Clear set conn=nothing Response.Write "无法连接MSSQL" Response.End End If %> 打开checklogin.asp代码, 首先在页面上我们要引用数据库连接文件 !--#include file=conn.asp--> % '-------------------为防止出错我们定义username和password---------------- dim username dim password '--------用request的form方法来接受login.asp页面传来的值,并付值给我们定义的username和password username=request.form("username") password=request.form("password") '---------判断传来的值是不是空值 if username="" then '用response的write的方法输出一个脚本 response.write"script>alert('用户名不能为空')/script>" response.end end if if password="" then response.write"script>alert('密码不能为空')/script>" response.end end if '----------判断用户名和密码是不是一样的,如果一样的输出"登陆成功"并把session的标志给这个用户,否则就输出"登陆失败" '------------这里我们就要在数据库里面比较两个值了 set rs=server.cerateobject("adodb.recordset") sql="select * from admin where admin_name='"username"' and admin_pwd='"password"' " rs.open sql,conn,1,1 '如果用户不存在 if rs.eof and rs.bof then response.write"SCRIPT language=javascript>alert('用户名或密码不正确!');" response.write"javascript:history.go(-1)/SCRIPT>" response.end '负责将用session 产生会话 else session("admin")=rs("admin_name") session("password")=rs("admin_pwd") session("aleave")=rs("aleave") response.redirect "admin.asp" end if '---------最后不要忘记关闭数据连接,释放资源 rs.close set rs=nothing %> 这里我们做好了一个简单的登陆严整,比如我们还可以用session来限制登陆的次数,或者登陆人的权限等等, 如有需要来blog看看哦,都有相应的文章.http://blog.91time.com
td> input name=username type="text" maxlength="20"> /td> /tr> tr> td>font size=2>密nbsp;码:/font>/td> td> input type="password" name=password maxlength="20"> /td> /tr> tr> td colspan="2" align=center> input type="submit" value=添加>nbsp; input type="reset" value=重置> /td> /tr> /table> /center> /form> /body> /html> 下面我们做adduser.asp,这个页面就是向数据库中添加值了 !--#include file=conn.asp--> '这里我们添加一个判断,用来判断是不是管理员,只有管理员才有权添加用户 % if isempty(session("admin")) or session("admin")="" then response.redirect"login.asp" end if %> % '-------------------为防止出错我们定义username和password---------------- dim username dim password '--------用request的form方法来接受add.asp页面传来的值,并付值给我们定义的username和password username=request.form("username") password=request.form("password") '---------判断传来的值是不是空值 if username="" then '用response的write的方法输出一个脚本 response.write"script>alert('用户名不能为空')/script>" response.end end if if password="" then response.write"script>alert('密码不能为空')/script>" response.end end if '----------判断用户是不是已经存在了,如存在就提示,并返回。 set rs=server.cerateobject("adodb.recordset") sql="select * from admin where admin_name='"username"'" rs.open sql,conn,3,3 '如果用户存在 if not(rs.eof and rs.bof) then response.write"SCRIPT language=javascript>alert('用户以存在,请重新选择!');" response.write"javascript:history.go(-1)/SCRIPT>" response.redirect"add.asp" '添加用户 else rs.addnews rs("admin_name")=username rs("admin_pwd")=password rs.update response.write"SCRIPT language=javascript>alert('添加成功,请返回');" response.write"javascript:history.go(-1)/SCRIPT>" response.redirect"add.asp" end if '---------最后不要忘记关闭数据连接,释放资源 rs.close set rs=nothing %>
好了,现在我来做“更新”“删除” 这里的重点是要取的要删除的数据的编号,数据编号是唯一的不可重复的 首先我们把所有的用户有取出来 ,并放在一个页面上 先写的是更新哦 呵呵 删除和这个基本一样就是SQL的语句不同,要注意的是新闻的id是怎么样取得的!!!! 这才是本文的重点!!!!!!!!! ---注意数据库中没有权限的字段,自己添上就行了----------呵呵-------- ------------------------------------------------admin_admin.asp显示页--------------------------------- html> head> title>管理系统/title> body> table width="100%" border="0" cellpadding="0" cellspacing="0"> tr> td> table width="100%" border="0" cellspacing="0" cellpadding="0"> tr> td>nbsp;/td> /tr> /table> table width="90%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000"> tr align="center" bgcolor="#ffaaaa"> td width="15%" height="24"> ID/td> td width="15%">用户/td> td width="20%">密码/td> td width="20%">权限/td> td width="15%">修改/td> td width="15%">删除/td> /tr> % Set rs=Server.CreateObject("ADODB.RecordSet") sql="select * from admin order by id" rs.Open sql,conn,1,1 while not rs.eof if rs("aleave")="super" then aleave="超级管理员" end if if rs("aleave")="check" then aleave="普通管理员" end if %> tr align="center"> td height="22">%=rs("id")%>/td> td>%=rs("admin")%>/td> td>%=rs("password")%>/td> td>%=aleave%>/td> td>a href="admin_AdminModify.asp?id=%=rs("id")%>">修改/a>/td> td>a href="admin_AdminDel.asp?id=%=rs("id")%>">删除/a>/td> /tr> % rs.movenext wend rs.close set rs=nothing %> /table> /body> /html> ----------------------编号id的接受页admin_AdminModify.asp-------------------------
% !--#include file=conn.asp--> 'QueryString的方法取得用户id id=request.QueryString("id") set rs=server.createobject("adodb.recordset") sql="select * from admin where id="id rs.open sql,conn,1,1 if rs.eof then response.write"SCRIPT language=javascript>alert('服务器出错,请联系管理员!');" response.write"javascript:history.go(-1)/SCRIPT>" else admin=rs("admin") password=rs("password") aleave=rs("aleave") table> form method="POST" action="admin_adminSave.asp?id=%=id%>">
tr> td colspan=2 align=center>b>修 改 管 理 员 资 料/b>/td> /tr> tr> td width="30%" height="22" align="right">用户名:/td> td width="70%"> input type="text" name="admin" value="%=admin%>" size="20">/td> /tr> tr bgcolor="#FFFFFF"> td width="30%" height="22" align="right">密码:/td> td width="70%"> input type="text" name="password" value="%=password%>" size="20">/td> /tr> tr bgcolor="#FFFFFF"> td width="30%" height="22" align="right">权限:/td> td width="70%" height="22"> select name="aleave" style="font-size:9pt" class="input"> option value=super%if aleave="super" then%> selected%end if%>>超级管理员/option> option value=check%if aleave="check" then%> selected%end if%>>普通管理员/option> /select> /td> /tr> tr align="center" bgcolor="#FFFFFF" height="24"> td height="30" colspan=2> input type="hidden" value="edit" name="act"> input name="cmdok" type="submit" id="cmdok" value=" 修 改 "> nbsp; input name="cmdcance" type="reset" id="cmdcance" value=" 清 除 "> /td> /tr> /form> /table> % end if rs.close set rs=nothing %> %> ----------------------------------------------------------------- 下面我们看看接收页怎么写的吧!这页面就是功能页了! !--#include file=conn.asp--> % admin=request.form("admin") password=request.form("password") aleave=request.form("aleave") if admin="" or password="" then response.write"SCRIPT language=javascript>alert('管理员名称和密码都不能为空!');" response.write"javascript:history.go(-1)/SCRIPT>" Response.End end if set rs=server.CreateObject("ADODB.RecordSet") if request("act")="edit" and request.QueryString("id")>"" then id=request("id") sql="select * from admin where id=" request.QueryString("id") rs.open sql,conn,3,2 if not rs.eof then rs("aleave")=aleave rs("admin")=admin rs("password")=encrypt(password) rs.update end if rs.close elseif request("act")="add" then sql="select * from admin where admin_name='"admin"'" rs.open sql,conn,3,2 if (rs.eof and rs.bof) then rs.addnew rs("aleave")=aleave rs("admin")=admin rs("password")=password rs.update end if rs.close end if set rs=nothing conn.close set conn=nothing response.redirect "admin_admin.asp" %> --------------------------------删除------------------------------------ 有了上面的基础写删除就更简单了,我们继续哦 是不是很简单哦 !--#include file="conn.asp" --> % if isempty(session("admin")) or session("admin")="" then response.redirect"login.asp" end if %> % set rs=server.CreateObject("ADODB.RecordSet") rs.open "delete * from admin where id="request.QueryString("id"),conn,1 set rs=nothing response.redirect "admin_admin.asp" %> 最后我们把今天说的东西在总结一下,今天我们做了增,删,改 这里,增加我们主要是用到了数据库的操作,在写添加的时候用sql的insert语句直接添加也行,我们用的是rs.addnew的方法 喜欢怎么用就怎么用了,,,呵呵 随心情了, 在就是修改和删除,这两个功能最总要的就是怎么样锁定要修改的那条记录, 这里的方法就多了,可以用QueryString的方法取得用户id,也可以用"隐藏域的方法取的id" 我们也可以把增,删,改写在一个页面中 这样显得整洁一些, 呵呵,这个也就看个人爱好了,刚开始学的话就好用多个页实现功能, 等时间常了 熟练了在用一个页面写 下面大家就来看看我是怎么样用隐藏域的方法来实现一页完成这写功能的和怎么样用"隐藏域的方法取的id"的???????
-------------------------------一个页面的增,删,改------------------------------------ !--#include file="conn.asp"--> % info=trim(request("info")) Set rs=Server.CreateObject("ADODB.Recordset") select case info case "add" sql="SELECT * FROM link" rs.Open sql,conn,1,3 rs.Addnew rs("name")=trim(request("webname")) rs("url")=trim(request("url")) rs.Update Response.Redirect"mody.asp" case "mod" sql="SELECT * FROM link where id="trim(request("id")) rs.Open sql,conn,1,3 rs("name")=trim(request("webname")) rs("url")=trim(request("url")) rs.Update Response.Redirect"mody.asp" case "del" sql="delete * FROM link where id="trim(request("id")) rs.Open sql,conn,1,3 Response.Redirect"mody.asp" case else Set rs=Server.CreateObject("ADODB.Recordset") sql="SELECT * FROM link order by id asc" rs.Open sql,conn,1,3 %> table border="1" width="500" align=center cellspacing="0"> tr> td width="33%" align="center">网站名称/td> td width="33%" align="center">网站地址/td> td width="34%" align="center">操作/td>
------------------------------------------------------------------------------------------------------------------- 第三天 上一节我们讲解了ASP中应用最广泛的操作,其实那就是个网站的后台的管理中(用户的管理), 新闻管理,投票管理也都是这样做的,不用的就是他们的功能更复杂,数据更多, 其中留言板就是数据的存储和读取的过程,不过是我们把这个过程复杂化了, 第一天,我们讲解了数据和值的传递过程,用form>来将值传递到下一个页面中,并用Request.form来接受,用response.write的方法来输出 ,这里主要是让大家理解值的传递过程,当然我们也可以在一个页面中传递。 第二天,我们讲解了SQL的常用的语句,和在ASP中怎么样执行SQL语句, 今天我们主要讲一下:SESSION和cookies,回顾以下response,request。 首先,登陆模块的程序都会用到检测是不是用户已经登陆这个步骤。这就用到了SESSION和cookies, 我们还是用代码来说明(在上面的程序中我们已经用到了): --------------------------------------------------- 1>这是session的写法: % '如果用户存在 session("aleave")=rs("aleave") %> ------------------------------------------------ 2>这是cookies的写法: % response.cookies("adminok")=true %> 这样我们就能在我们需要的地方进行判断了 代码如下: % if session("aleave")="" then response.redirect "adminlogin.asp" response.end end if %> 这里是cookies的验证判断: % if request.cookies("adminok")="" then response.redirect"login.asp" end if %> 这样没有session和cookies标志的用户是无法打开这个页面。 最后我们说一下response.redirect,它是重定向的意思, 后面的"login.asp"就是转向的文件。这样没有登陆的管理员是无法看到后面的内容的。 下面总结一下 response常用的就是response.write () , response.redirect() 分别是写字符串和转向的作用 request基本就是request.form(),request.querystring() 分别是接受post,get方法传来的信息 这里我给大家一个常用的(Access)数据库连接代码(Sql的在上面的例子中有哦,我就不写了): 以后大家只要改换“数据库”就可以直接用了, ---------- % '数据库连接程序conn.asp strSQL="DBQ="+server.mappath("db/news.mdb")+";DRIVER={Microsoft Access Driver (*.mdb)};" set conn=server.createobject("ADODB.CONNECTION") conn.open strSQL %> 为了保证数据库的安全呢,我们可以把数据库的扩展名换成.asp的,也可以是asa, 最好把数据库的名字弄的复杂点, 在就是数据库的字段也要弄的复杂点哦,要不然人家用软件猜解也是很容易的哦 并在页面中过滤掉非法的字符,这样能安全点(网站有很多的防SQL注入的代码哦,也有很多的注入工具) 还是自己把网站弄的安全点吧, 并且用例子来演示了怎么样实现整个功能,希望大家能多看看代码,多动手来打打代码,还有就是尽量用“记事本”编写代码, 不要上来就用一些开发工具和代码提示的软件,这样不利于我们对代码的理解和记忆。 今天就到这里,多看看我们第二天讲的东西那是asp数据管理最重要的地方 明天我们讲解asp中的分页 呵呵 大家明天见哦 晚安!
--------------------------------------------------------------------------------------------------- 第四天 利用ASP分页显示实例 这里我们要说的就是ASP中比较复杂的分页技术了,代码有点多,但是不是很复杂, 大家多看几便就能理解了, 首先我们先理解一下分页的原理: 在前几天我们了解了Recordset对象的以上属性和方法后, 我们来考虑一下,如何运用 它们来达到我们分页显示的目的。 我们可以为PageSize属性设置一个值,从而指定从记录组中取出的构成一个页的行数; 然后通过RecordCount属性来确定记录的总数; 再用记录总数除以PageSize就可得到所显示的页面总数; 最后通过AbsolutePage属性就能完成对指定页的访问。 好象很并不复杂呀,下面让我们来看看程序该如何实现呢? 代码主要用到Connection、RecordSet这两个对象,程序中的数据库为Access库, 采用OLEDB方式连接库。 % Set conn = Server.CreateObject("ADODB.Connection") strcon="provider=microsoft.jet.oledb.4.0;data source=" _ server.mappath("mdb.mdb") conn.Open strcon Set rs = Server.CreateObject ("ADODB.Recordset") sql="select * from table order by id desc" rs.Open sql, conn, 1 page=1 ' 设置变量PAGE=1 rs.PageSize = 5 '每页显示记录数 if Not IsEmpty(Request("Page")) then '如果Page已经初始化... Page = CInt(Request("Page")) '接收Page并化为数字型赋给Page变量 if Page > rs.PageCount then '如果接收的页数大于总页数 rs.AbsolutePage = rs.PageCount '设置当前显示页等于最后页 elseif Page = 0 then '如果page小于等于0 Page = 1 '设置PAGE等于第一页 else rs.AbsolutePage = Page '如果大于零,显示当前页等于接收的页数 end if End if Page = rs.AbsolutePage %> % For i = 1 to rs.PageSize if rs.EOF then Exit For end if '利用for next 循环依次读出记录 %> '一个页中显示多少条数据Rs.pagesize=5, 把5改为你想显示的记录数.比如说 改为10.那么每页就是显示10页.还需要修改的是select语句.就是你要检索的数据库了. 也就是说放到任何一个系统中上面的代码只需很小的改动都可以直接拿过来用. 然后:就是要循环读出记录的显示内容了..............比如
%if request("page")>1 then%>a Href="test.asp?Page=% = 1%>">首页/a> a Href="test.asp?Page=% =request("page") -1 %>">上一 页/a>%end if %>%if request("page")>rs.pagecount then %>a Href="test.asp?Page=% =request("page") + 1%>">下一页/a> a Href="test.asp?Page=% = rs.PageCount%>">尾页/a> % end if %> 上面的代码只管复制粘贴.只需把"page.asp"改成你自己的文件名就可以了。 随便把这段代码放在什么地方?就是你想让它出现下一页下一页链接的地方吧. 最后.关闭记录集释放资源: % rs.close Set rs = Nothing conn.close set conn=nothing %> -------------------------------------------------------------------------------- 要克服最后一页中的"下一页"仍处于连接状态有一个办法.就是把程序中稍加改动如下: %if request("page")>rs.pagecount then %> a Href="test.asp?Page=% =request("page") + 1%>">下一页/a> % else response.write"下一页"%> 就是此时把"下一页"设置成非连接状态
For i = 1 to rs.PageSize if rs.EOF then Exit For end if '利用for next 循环依次读出记录 使用的是Do while。 分页代码的示例::: ----------------------------------------------------------------------------------- % db="数据地址.mdb" Set conn = Server.CreateObject("ADODB.Connection") conns="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Server.MapPath(""db"") conn.Open conns Set rs = Server.CreateObject("ADODB.Recordset") sql="Select * from 表名 order by id desc" rs.open sql,conn,1,1 if rs.eof then response.write("没有记录") else Page=Int(Abs(Request("page"))) IF not IsNumeric(Request("page")) Or IsEmpty(Request("page")) Then page=1 rs.pagesize = 10 '每页显示记录数 total = rs.RecordCount mp = rs.pagesize rs.absolutepage = page i=0:k=0 do while not rs.eof and mp>0:k=k+1 response.write("显示第"rs("id")"条记录") i=i+1 mp=mp-1 rs.movenext loop if page>rs.pagecount then Response.redirect("index.asp?page="rs.pagecount) if page>1 then response.Write("a href='index.asp?page=1' title='首页'>首页/a>") response.Write(" a href='index.asp?page="page-1"' title='上一页'>上一页/a> ") end if response.Write("第"page"/"rs.pagecount"页 共"total"条记录 本页显示第"(page-1)*rs.pagesize+1"条到第"(page-1) *rs.pagesize+k"条 ") if pagers.pagecount then response.Write("a href='index.asp?page="page+1"' title='下一页'>下一页/a>") response.Write(" a href='index.asp?page="rs.pagecount"' title='尾页'>尾页/a>") end if end if rs.close set rs=nothing conn.close set conn=nothing %> 这样一个分页的程序就算是做好了,这个程序非常简单而且便于理解,是个学习的好例子。 大家在做一个程序前应该多想想怎么样实现这个功能,然后在动手去写这个代码, 这样才能做到胸有成竹。 呵呵,有时候学点东西真的很不爽哦, 又快到新的一天了 明天我们粗率的讲解一下ASP的组件,这样asp的精华我们也就全部讲完了, 以后的学习过程就要靠我们自己努力了, 最好的学习方法就是多看示例,呵呵 美好的明天一定会来的~~~~~~~~~~~~~~~~~~~blog.91time.com