首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

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">&nbsp;</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">&nbsp;</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分钟。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论