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

一、常规

在客户和服务器交互过程中,很多时候我们都是用表单进行提交信息再保存到数据库中,碰到表单多的时候,在书写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.以上简化代码仅供参考,不能直接使用。

上一篇: 两例'or''='漏洞防止方法
下一篇: 如何通过VB获取网卡地址
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 5049
发表评论
登录后再发表评论!