用户注册册及确认在线的ASP程序。
1. SQL的表及储存过程
---------------------------------------------
CREATE TABLE [dbo].[userbaseinfo] (
[userid] [varchar] (50) NOT NULL ,
[password] [varchar] (50) NOT NULL ,
[validcodelogin] [char] (50) NOT NULL ,
[userlevel] [char] (1) NULL ,
[logintime] [char] (50) NULL
) ON [PRIMARY]
GO
alter table userbaseinfo
add
constraint PK_userbaseinfo_userid
primary key (userid)
Go
CREATE TABLE [dbo].[userdetailinfo] (
[userid] [varchar] (50) NOT NULL ,
[password] [varchar] (30) NOT NULL ,
[realname] [varchar] (10) NULL ,
[sex] [char] (10) NULL ,
[birthday] [datetime] NULL ,
[idcode] [varchar] (50) NULL ,
[address] [varchar] (300) NULL ,
[email] [varchar] (50) NULL ,
[telephone] [varchar] (50) NULL
) ON [PRIMARY]
GO
alter table userdetailinfo
add
constraint PK_userdetailinfo_userid
primary key (userid)
Go
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
CREATE proc dbo.proc_GetRandom_internal
--取得校验码
minNum integer,
maxNum integer,
RandomNum float output
as
set nocount on
declare numRange integer
declare ranSeed integer
declare curTime datetime
begin
select numRange=maxNum-minNum+1
select curTime=getdate()
select ranSeed=datediff(s,'2000-1-1',curTime)
select ranSeed=ranSeed+1
select RandomNum=rand()*numRange+minNum
--print RandomNum
return
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE proc dbo.proc_GetValidCode_Internal
--取得校验码
CodeLength integer,
ValidCode varchar(10) output
as
set nocount on
declare chrRnd char(1)
declare chrRndNo integer
begin
select ValidCode=""
while (CodeLength>0)
begin
exec proc_GetRandom_internal 1,52,chrRndNo output
if chrRndNo>26
begin
select chrRndNo=chrRndNo+6
end
select chrRnd=char(chrRndNo+64)
select ValidCode=ValidCode+chrRnd
select CodeLength=CodeLength-1
end
print validCode
return
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE proc dbo.proc_UserInfoUpdate
--用户更新个人信息
ValidCodeLogin varchar(10),
RealName Varchar(10),
Sex Varchar(10),
Birthday datetime,
IDCode Varchar(50),
Address Varchar(300),
eMail Varchar(50),
Telephone Varchar(50)
as
set nocount on
declare UserValidFlag int
declare ValidCodeReg varchar(30)
declare UserLevel varchar(1)
declare UserID varchar(30)
begin
exec proc_isUserValidbyCode_internal ValidCodeLogin,UserValidFlag output
if UserValidFlag<0
begin
--select UserValidFlag as resultID
-- -1 用户尚未登录
-- -2 用户超时
return UserValidFlag
end
select UserID=UserID from UserBaseinfo where ValidCodeLogin=ValidCodeLogin
Update UserDetailInfo
set RealName=RealName,
Sex=Sex,
Birthday=Birthday,
IDCode=IDCode,
Address=Address,
eMail=eMail,
Telephone=Telephone
where
UserID=UserID;
if (RealName="" or Birthday="" or Sex="" or IDCode="" or Address="" or eMail="" or Telephone="")
begin
--select -3 as resultID
return -3 --信息尚未全部填写
end
select 0 as resultID
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create proc dbo.proc_UserLogOut
--用户退出
ValidCodeLogin varchar(10)
as
set nocount on
declare UserValidFlag int
declare UserLevel varchar(9)
begin
exec proc_isUserValidbyCode_internal ValidCodeLogin,UserValidFlag output
if (UserValidFlag<0)
begin
--select UserValidFlag as resultID
return UserValidFlag
-- -1 用户尚未登录
-- -2 用户超时
end
Update UserBaseInfo
set ValidCodeLogin='',
LoginTime='1970-1-1'
where
ValidCodeLogin=ValidCodeLogin
--select 0 as resultID
return 0
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE proc dbo.proc_UserRegBase
--用户基本资料注册
UserID Varchar(30),
Password Varchar(30)
as
set nocount on
declare UserLevel varchar(9)
--declare ValidCodeReg varchar(10)
declare ValidCodeLogin varchar(10)
declare LoginTime datetime
declare userExist int
declare PwdLength int
begin
select UserLevel="0"
select PwdLength=4
if (datalength(Password)<PwdLength)
begin
select -4 as returnID
return -4 --密码长度不够
end
--exec proc_GetValidCode_internal 10,ValidCodeReg output --取得用户注册校验码
exec proc_GetValidCode_internal 10,ValidCodeLogin output --取得用户登录校验码
exec proc_isUserExist_internal UserID,userExist output --取得用户存在标志
select LoginTime=getdate()
print userExist
if userExist=0
begin
select -1 as resultID
return -1 --用户已存在
end
--插入用户基本信息表
insert into UserBaseInfo
(UserID,Password,UserLevel,ValidCodeLogin,LoginTime)
Values(UserID,Password,UserLevel,ValidCodeLogin,LoginTime)
--插入用户详细信息表
insert into UserDetailInfo
(UserID,Password) Values(UserID,Password)
--取得用户注册校验码,登录校验码
select 0 as resultID
select ValidCodeLogin from UserBaseInfo where UserID=UserID
return 0
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
create proc dbo.proc_isUserExist_internal
--判断用户名是否存在
UserID Varchar(30),
existFlag int output
as
set nocount on
begin
if not EXISTS(select * from UserBaseInfo where UserID=UserID)
begin
select existFlag =-1
return
end
select existFlag =0
return
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
create proc dbo.proc_isUserValidbyCode_internal
--用户身份检验(根据登录校验码)
ValidCodeLogin varchar(10),
validFlag int output
as
set nocount on
declare LoginTime datetime
declare curTime datetime
declare diffTime datetime
begin
if not EXISTS(select * from UserBaseInfo where ValidCodeLogin=ValidCodeLogin)
begin
select validFlag=-1 --用户尚未登录
return
end
select LoginTime = (select LoginTime from UserBaseInfo where ValidCodeLogin=ValidCodeLogin)
select curTime=getdate()
select diffTime=datediff(hh,LoginTime,curTime)
if diffTime>=10
begin
select validFlag=-2 --用户超时
return
end
select LoginTime=getdate() --取得用户最后登录时间
update UserBaseInfo set LoginTime=LoginTime where ValidCodeLogin=ValidCodeLogin
select validFlag=0
return
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
用户注册及跟踪代码(一)
80酷酷网 80kuku.com