木子屋 Dnawo's BLOG

表单和字段同名简化ASP语句

👤 dnawo 📅 2007-02-10 👁 5589 👍 0 💬 0 🔄 本站原创
一、常规

在客户和服务器交互过程中,很多时候我们都是用表单进行提交信息再保存到数据库中,碰到表单多的时候,在书写SQL语句时一不小心就会出错。下图是一个房产网站上的表单:

图片

加上很多人都告诫我们:尽量不要将表单的名称和数据库字段名相同,以致我们只能不厌其烦加上万分小心的构造SQL语句:
sql = "insert into table1(username,password,tel,phone,address,post,email,...) values('"&request.form("username")&"','"&request.form("password")&"','"&request.form("tel")&"','"&request.form("phone")&"','"&request.form("address")&"','"&request.form("post")&"','"&request.form("email")&"',..."&")"


rs.addnew
rs("username") = request.form("username")
rs("password") = request.form("password")
rs("tel") = request.form("tel")
rs("phone") = request.form("phone")
rs("address") = request.form("address")
rs("post") = request.form("post")
rs("email") = request.form("email")
...
rs.update


如果有几十上百个表单的话,汗。再也不能忍受这种烦琐的工作了,我们应该让工作变得简单一些!那么就看下边我们是怎么做的吧。

二、简化

第一步:将表单名和字段名一致(不一致但有规律也可以,比如名为tel的表单与tel_1字段对应)。
第二步:有了第一步的前提条件后我们就可以用request.form集合进行简化ASP语句了:
'添加
Sub InsertSQl()
	inssql="insert into "&TableName&" ("
	for each item in request.form
	    inssql=inssql&item&","
	next
	inssql=left(inssql,len(inssql)-1)&")"&" values("
	for each item in request.form
		if isnumeric(request.form(item)) then
		inssql=inssql&""&Sqlstr(request.form(item))&""&","
		else
		inssql=inssql&"'"&Sqlstr(request.form(item))&"'"&","
		end if
		next
	inssql=left(inssql,len(inssql)-1)&")"
	Conn.execute(inssql)
End Sub
'修改
Sub ModifySql()
	modsql="update "&TableName&" set "

	for each item in request.form
		if isnumeric(request.form(item)) then
		modsql=modsql&item&"="&Sqlstr(request.form(item))&","
		else
		if request.form(item)="" then con=" ":else:con=request.form(item)
		modsql=modsql&item&"='"&Sqlstr(con)&"',"
		end if
	next
	modsql=left(modsql,len(modsql)-1)&" where ID="&request("ID")
	Conn.execute(modsql)
End Sub
'删除
Sub DeleteSql()
	for each item in request.form("id")
		delsql="delete from "&TableName&" where id="&item
		Conn.execute(delsql)
	next
End Sub


三、后记

1.只要不轻易暴露出数据库地址,注意下用户表字段的取名,其他表的字段名给人知道了又何妨?
2.需要注意的是得过滤掉确定、重置等按钮的值,要不更新时request.form会取到其值导致出错,这边有个小技巧,将这边按钮的name属性去掉就不需过滤可以直接用了。
3.正确设置字段类型,特别是数值型字符。
4.以上简化代码仅供参考,不能直接使用。

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 两例'or''='漏洞防止方法 下一篇 → 如何通过VB获取网卡地址