4.2.3 注册页面构成(2)
创建好数据库后,接下来就要向数据表中添加数据,其数据来源就是表单的内容。添加数据就是对表单内容进行提交,并根据条件对表单的内容进行处理。类似于注册这种提交表单的数据处理,相对比较简单,可在一个网页内完成,因此可对上面的register.asp页面代码进一步完善,加进一些内容,使数据的提交能够顺利完成,其完整的代码构成如下。
1.<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
2.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3."http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4.<html xmlns="http://www.w3.org/1999/xhtml">
5.head>
6.<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
7.<title>用户注册</title>
8.<script language="vbscript">
9.<!--
10.function reg_onsubmit
11.dim jhf
12.jhf=""
13.if reg.user.value="" then
14.jhf="请输入用户账号!"
15.reg.user.focus
16.elseif reg.password.value="" then
17.jhf="请输入密码!"
18.reg.password.focus
19.elseif reg.password1.value="" then
20.jhf="你的密码还没有验证!"
21.elseif reg.password1.value<>reg.password.value then
22.jhf="两次输入的密码不一致!"
23.end if
24.if jhf="" then
25.reg_onsubmit=true
26.else
27.alert(jhf)
28.reg_onsubmit=false
29.end if
30.end function
31.-->
32.</script>
33.<style type="text/css">
34.<!--
35..jt3 {
36. color: #FF6633;
37.}
38.input {
39. background-color: #6699FF;
40.}
41.textarea {
42. background-color: #6699FF;
43.}
44.-->
45.</style>
46.</head>
47.<body >
48.<!--#include file="include/up.htm"-->
49.<!--#include file="include/conn.asp"-->
50.<%
51.dim user,password,password1,email,homepage,intrduce
52.user=request.Form("user")
53.password=request.Form("password")
54.password1=request.Form("password1")
55.email=request.Form("email")
56.homepage=request.Form("homepage")
57.intrduce=request.Form("intrduce")
58.if user="" then
59.%>
60.<table width="755" background="images/qcsb_r2_c21.jpg"cellpadding="0"
61.cellspacing="0" align="center">
62.<tr><td width="260"> </td><td>
63.<table width="350" align="center"cellpadding="0" cellspacing="5" >
64.<tr><td height="10"></td></tr>
65.<tr><td colspan="2"><font size="4" color="#FF6600"><b>----用户注册信息
66.----</b></font></td></tr>
67.<tr><td height="20"></td></tr>
68.<form action="register.asp" method="post" name="reg">
69.<tr><td class="jt3">用户账号:</td><td><input type="text" name="user"
70.size="16"></td></tr>
71.<tr><td class="jt3">用户密码:</td><td><input align="center" type="password"
72.name="password" size="16"/></td></tr>
73.<tr><td class="jt3">确认密码:</td><td><input type="password" name="password1"
74.size="16"/></td></tr>
75.<tr><td class="jt3">电子邮件:</td><td><input type="text" name="email"
76.size="25"/></td></tr>
77.<tr><td class="jt3">个人主页:</td><td><input type="text" name="homepage"
78.size="25"/></td></tr>
79.<tr><td class="jt3">自我简介:</td><td><textarea rows="7" cols="30" name="intrduce"
80.></textarea></td></tr>
81.<tr><td class="jt3" colspan=2><table cellpadding=0 cellspacing=0 width=100
82.align="center">
83.<tr><td ><input type="submit" value="提交"></td><td><input type="reset" value=" 重置
84."></td></tr>
85.</table></td></tr>
86.</form>
87.</table>
88.</td><td width="180"> </td></tr></table>
89.<%
90.else
91.sql="select * from user where user='"&user&"'"
92.rs.open sql,conn,1,1
93.if not rs.eof then
94.%>
95.<script>
96.alert("这个用户已经存在,请用其他的账号!")
97.location.href="register.asp"
98.</script>
99.<%
100.else
101.sql="insert into user (user,password,password1,email,homepage,intrduce)
102.values('"&user&"','"&password&"','"&password1&"','"&email&"','"&homepage&"
','"&in
103.trduce&"')"
104.rs.close
105.rs.open sql,conn,1,1
106.response.Cookies("log")("user")=user
107.response.Cookies("log")("password")=password
108.l_time=20
109.l_time=dateadd("n",l_time,now())
110.response.Cookies("log").expires=l_time
111.%>
112.<script>
113.alert("恭喜您注册成功!")
114.location.href="index.asp"
115.</script>
116.<%
117.end if
118.end if
119.%>
120.<!--#include file="include/down.htm"-->
121.</body>
122.</html>
代码释义:
第一,注册表单输入内容设计了很多项,而每次注册时,不一定要求把这些项都填上,但对其中几个重要项,如用户账号和密码等要求必须填写,一旦重要项没有填写,则有相应的提示加以说明;第二,注册的内容已经被写入数据库,因此必须建立好与数据库的连接;第三,一般来讲,一个网站内网页数量越多,越会影响到网站的速度,因此在建立网页时要尽量减少网页数量,这也是为什么把注册表单提交所链接的网页设为本页的原因。经过这样分析之后,下面对代码一一说明。
第10~30行定义了一个函数,主要是为提交表单而设计的,当提交表单时,如果用户的账号、密码和验证密码没有被填写,就会弹出一个对话框,提示一定的信息。当单击【确定】按钮后,返回到本页,继续填写。其中“if reg.user.value="" then jhf="请输入用户账号!"reg.user.focus”语句的意思是,如果表单(reg)的用户(user)的填充值(value)为空,那么定义的变量就会显示“请输入用户账号”,当单击【确定】按钮后,光标会停在user框内。那么这句话怎样才能显示在弹出的窗口上呢?其实这句话的显示在第24~29行,即:
l if jhf="" then表示设置一个如果句,作为判断,即当所设置的变量值为空时。
l reg_onsubmit=true表示表单中的【提交】按钮可用,即可以提交。
l else表示如果不为空。
l alert(jhf)用于显示变量中的内容(这是JavaScript语句,表示弹出窗口,括号中的内容就是弹出窗口显示的内容)。
l reg_onsubmit=false,表示当有弹出窗口时,表单的【提交】按钮不可用。
除了用定义函数的形式来设置【提交】按钮外,还可以用其他的方法来完成,如用JavaScript语句完成的【提交】按钮代码如下。
1.onSubmit="javascript:if(document.reg.user.value=='')
2.{alert('请输入用户账号!');
3.return false}
4.if(document.reg.password.value=='')
5.{alert('请输入密码');
6.return false}
7.if(document.reg.password1.value=='')
8.{alert('请确认密码!');
9.return false}
10.if(document.reg.password.value<>document.reg.password1.value)
11.{alert('两次输入的密码不一致!');
12.Return false}"
这段代码可以写在表单的第一行,即<form…>内,解释如下。
当提交表单时,用JavaScript书写语句,判断当前浏览器所浏览的网页(document),即当前网页中表单(reg)的输入框(user)的值(value)是否为空。这里要注意的一点是,在JavaScript中用的是两个等号。如果是空,则弹出窗口,显示“请输入用户账号!”;如果密码为空则显示“请输入密码”的弹出信息。其他几行与此类似。
以上关于【提交】按钮的代码,希望大家要理解并掌握好,以后凡涉及注册、登录和留言等有关提交内容的都可以进行套用。
下面看代码第32~45行,这是定义的样式内容,主要是在CSS中定义的,有类和标签,类可直接引用,如class="jt3",标签定义好之后,在浏览器中可直接显示出来,如
input {
background-color: #6699FF;
}
上面的CSS定义了在输入文本框中,设置输入背景的颜色,如果设置的只在本页中,则在该网页中所有文本输入背景均为同一种颜色。CSS定义的样式既可在当前网页中使用,也可存成文件,在不同网页中引用。有关CSS的用法,在前面的基础知识中已学过,这里不在赘述。
下面看第48和49行,这两行包含了两个文件,第48行是网页头,第49行是包含一个数据连接,要想把表单提交的内容写入数据库,必须与数据库构成连接。
与Access数据库的连接方式有以下3种方法。
第一种:DSN-LESS连接方法。
set conn=server.createobject(“adodb.connection”)
Conn.open “driver={Microsoft Access Driver(*mdb)}; dbq=”&server.mappath(数据库所在 路径);
第二种:OLEDB连接方法。
Set conn=server.createobject(“adodb.connection”)
Conn.open “provider=Microsoft.jet.oledb.4.0; data source=”&server.mappath(数据所在 路径);
第三种:ODBC连接方法。
Set conn=server.createobject(“adodb.connection”)
Conn.open “系统的DSN名”
这个包含的网页在网站目录下的位置如图4-15所示。

图4-15
conn.asp页面的代码构成如下。
1.<%
2.set conn=server.CreateObject("adodb.connection")
3.conn.open
4."driver={Microsoft access driver (*.mdb)};dbq="&server.MapPath("/datebase/data. mdb")
5.set rs=server.CreateObject("adodb.recordset")
6.%>
这里要解释的是server.MapPath,即获取文件的绝对路径,如果在这里直接写文件的绝对路径,一是不安全,二是在网站文件移植时修改起来不方便,因此要采用这种形式获取绝对路径。
第51~57行,从浏览器获得表单提交的数据,request获得数据的方法有form和querystring,前者表单的传递方法为post,后者是get传递方法,另外在表单传递数据时,由问号后传递的值也要由querystring方法获得,如pargent.asp?cj=1,user=request.Form("user")是获得表单中用户输入的账号,其他类似。
第58行,设置了一个判断语句if,这个语句的意思是如果获得的用户名为空,则显示表单中的信息。
第60~88行,注册信息,由表单来完成,这个表单写在表格里,这样便于对表单的控制。
第90~118行,当获得的用户名不为空时,不为空不等于这个用户就可成为注册用户,
因为还存在着重名的问题,所以在这层判断中首先加入了一个二层判断即第91~117行,这层判断是对数据进行查询,其条件就是where user='"&user&'",查询的方法是遍历数据表中的每条记录,如果查询没有到最后即if not rs.eof ,则说明所输入的用户名在数据库中已经存在,则要求用户重新填写账号,如果循环到结尾,则说明这个账号还没有人用过,可以用来注册,即建立SQL语句。因为是向数据表中添加数据,所以用到的语句为insert into…形式,插入的语句为:
sql=insertintouser(user,password,password1,email,homepage,intrduce)values
('"&user&"','"&password&"','"&password1&"','"&email&"','"&homepage&"','"&intrdu ce&"')"
书写插入语句代码时,要注意每个values值,要根据所定义的数据类型来写,否则容易出错。在数据库中,定义的数据类型都是文本型,对于文本型的数据类型,在添加时,要对所添加的值加定界符,由于外边有双引号,所以里边的要用单引号,同时获取的都是变量,要用连接符把它们连上。大家在写这段代码时可能由于定界符、连接符很多,容易出差错,这里给大家一个简单的方法:在每个添加的值内都先成对地写好各种符号,如在写user这个变量时,就可以先写上“"”,然后在单引号中间加上双引号,即“'""'”,之后在双引号中加上连接符,即“'"&&"'”,最后在连接符中间写上变量,即“'"&user&"'”,接下来再写第二个时,先把逗号加上,然后再按上面的顺序依次写出,一般这种情况下出错的可能性很小。
另外大家要注意第104行,这行是把查询语句关闭,为什么要关闭呢?因为对于SQL语句,“rs.open sql,conn,1,1”这种形式并没有完全打开数据库,而采用do while not rs.eof这种循环,则完全打开了数据库,对于完全打开的数据库,当再次打开时,必须要先关上,否则程序就会出错。
当用户把填写的信息提交,并存储到数据库后,用户就可以登录到相关的网页,如论坛等,但当用户关闭该网页,并在很短的时间内回来再想进入该网页时,用户还需要登录并确认后才可进入网页,每次都这样做,显得略加烦琐,那么有没有办法让用户登录一次,可以在一段时间内不过期呢?答案是肯定的,即把用户注册或登录信息存入用户的本地硬盘上,并给予一定的时间限制,也就是说,当用户注册成为正式用户后,就可以登录网站的BBS或聊天室,并在限制的时间内不必再一次登录认证。怎样才能实现这种功能呢?采取的办法就是建立cookies,即第106~110行。cookies是嵌入客户机中用以标识用户的标记。cookies既可以创建单键值,也可以创建多键值,即cookies字典,本例中创建的是cookies字典。字典名为log,并设有两个子键,分别为user和password,这两个键值分别是从表单中获取的数据。建立cookies后,要设置它的过期时间,一般过期时间都是从注册时间或登录时间开始,即从现在开始,所以大家一定会想到now()。为了实现这个目的,需要用到一个函数dateadd,即返回已添加指定时间间隔的日期,它后边有3个参数,如dateadd(interal, number,date)。interal是个字符串,表示添加时间间隔(YYYY表示年,Q表示季,M表示月,D表示日,WW表示周,H表示小时,N表示分,S表示秒),Number表示增加的时间,date表示返回的当前时间。如dateadd(''n'',10,now()),表示时间从现在起增加10分钟。本网站设置的cookies过期时间为20分钟。






