我想可以通过2种方法解决,就ACCESS97数据库而言,一种方法就是在数据库内创建一个字段保存图片,通过ASP程序来直接显示它;另一个方法就是在数据库内创建一个普通的文本类型的字段,该字段只保存相应的图片的文件名,将图片放在指定的目录内,然后通过ASP程序显示它。
我们先看后者,我认为这个方法简单,数据库操作起来负担轻。
(1)首先,构造ACCESS97数据库people.mdb,结构如下:
字段名类型长度描述
id自动编号递增用户id
username文本20用户名
picture文本60图片文件名
sex文本10性别(男、女)
age数字整型,小数位0年龄
email文本60用户邮箱
info文本110用户描述
提示:构造合理的数据库结构非常重要,这个例子非常简单。需要指出的是如果一个字段需要20个字符数就够了,就不要用ACCESS97默认的50,info字段用“备注型”也可以,但是没有必要,110个足够描述了。这样节省系统资源。尤其是数据量非常庞大时这个选择的优势就显示出来了。
(2)我们需要完成这样几个页面,login.htm用于管理员将数据登陆到数据库内,add.asp用于处理数据的登陆,view.asp显示所有在数据库内的成员列表,vieweach.asp用于点击单个用户后显示该用户资料。
额外的说明:本例是将所有的图片放在images目录内。如果你打算通过这个程序作个友情连接或交友程序,可以稍加修改,将图片做成指向某个URL的连接即可。最好的情况是你有一个upload的组件,允许用户上传他们的图片。
(3)login.htm文件:
普通的HTML页面,你需要注意的是:
本节要点:将记录添加到数据库中Add.asp
<%@language>
’告诉服务器处理的脚本类型,可以不要,一般系统默认是vbscript,因为默认脚本可以通过修改注册表而变化,所以最好加上。
<%>%>’取得表单输入的数据
username=Request.form("username")
picture=Request.form("picture")
sex=Request.form("sex")
age=trim(Request.form("age"))
’去掉输入的age左侧的空格
email=trim(Request.form("email"))
’去掉输入的email左侧的空格
info=trim(Request.form("info"))
’去掉输入的info左侧的空格
’下面进行表单项目检测,首先是非空检测
ifusername=""orpicture=""orage=""oremail=""orinfo=""then
Response.Write"
Response.end
endif
’检测age字段是否是数字
ifnotisnumeric(age)then
Response.Write"
Response.end
endif
’检测email是否输入正确,标准检测方法,今后用它你可以检测email的正确性;
ifinStr(email,"@")=0orinStr(email,".")=0then
Response.Write"
Response.end
endif
’与数据库连接
setdbconnection=Server.CREATEOBJECT("ADODB.CONNECTION")
DBPath=Server.MapPath("people.mdb")
dbconnection.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&DBPath
’检测同一个picture是否已经在数据库中存在,即记录是否重复;注意我们这里只需要picture字段,所以就是selectpicture,不必select*了,不必要浪费资源的时候就要节约。还有就是带条件的select语句的写法,有一个单引号,即selectpicturefrompeoplewherepicture=’1.jpg’。其中pople是数据表名。
strsql_dup="selectpicturefrompeoplewherepicture=’"&picture&"’"
’创建recordset对象
Setrs_dup=Server.CreateObject("ADODB.Recordset")
rs_dup.Openstrsql_dup,dbconnection,3
’如果有数据重复,显示出错信息;
ifnotrs_dup.eofthen
Response.Write"
rs_dup.close
setrs_dup=nothing
response.end
’否则进行添加操作;
else
Setrs_add=Server.CreateObject("ADODB.Recordset")
rs_add.Open"people",dbconnection,adOpenDynamic,3,AdCmdTable
’加入数据记录
rs_add.AddNew
rs_add("username")=username
rs_add("picture")=picture
rs_add("sex")=sex
rs_add("age")=age
rs_add("email")=email
rs_add("info")=info
rs_add.Update
endif
’记录加入数据库后,导向view.asp查看数据;
’通过view.asp查看所有的记录连接,查看具体的某一条记录通过viewsach.asp控制;
response.redirect"view.asp"
’关闭数据库连接并清除内存;
rs_add.close
setrs_add=nothing
dbconnection.close
setdbconnection=nothing
%>
本节的主要问题是:添加记录后显示数据库内的人员列表,显示的用户名应该是超级连接形式,同时将用户id传递给下一个页面,以便于显示单个用户资料。传递的方法是通过环境变量QueryString进行的。
view.asp
<%@language>
<%>%>setconnection=Server.CREATEOBJECT("ADODB.CONNECTION")
DBPath=Server.MapPath("people.mdb")
connection.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&DBPath
’创建sql语句,这里只需要用户id和username,需要id是因为要传递到下一个页面中去。
strsql="selectid,usernamefrompeople"
’创建recordset对象
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Openstrsql,connection,3
%>
<%ifrs.eoforrs.bofthen%>
<%>%>else
RS.movefirst’移动到下一个记录
dowhilenotrs.EOF’使用dowhile...loop循环显示所有记录
%>
’menubar=no,location=no,toolbars=no,top=0,height=250,width=300’)"><%>
%>
<%>%>rs.movenext
loop
endif
%>
<%>%>rs.close
setrs=nothing
connection.close
setconnection=nothing
%>
注意:上面天蓝色部分是重点,注意表示成超级连接的写法,还有我使用了弹出式窗口来完成,对应的连接大概是这样:
在上面的代码中,<%>和<%>可以得到对应的值用户id和用户名。%>%>