Quickwork For Asp 1.0简介及下载地址:
http://bbs.blueidea.com/thread-2983400-1-1.html
本实例所需文件打包下载地址:
http://www.anyyy.com/quickwork/notebook.rar
Quickwork QQ交流群:95259394
为讲述方便,在这里假设你已经下载了框架主程序,并将其放在根目录下,并且index.asp为默认文档,如非此环境,请在IIS中设置,最后不要忘记该目录需要有读写修改删除等权限,否则数据库无法正常打开。
该实例RAR文件解压后包含4个文件:
1个mod文件:mod_message.asp,放入框架目录中mods文件夹
2个view模板文件:message.html、message_form.html,放入框架目录中view文件夹
1个ACCESS数据库文件:mydata.mdb
环境、文件目录各就各位以后,还需要config.asp中的数据库路径和表前缀进行设置
const DB_CONN = "access:data/mydata.mdb"
"data/mydata.mdb"为数据库的存放路径,可使用相对或绝对路径,mydatea.mdb放在哪里即设置在哪里,不必多说
const DB_TABLE_PRE = "m_"
"m_"为表前缀,打开mydata.mdb可以看到其中包含一个表m_message,因此这里设置为"m_"。
至此,全部准备就绪。浏览器中输入:http://localhost/?/message/,即可测试
本实例包含了对数据库的常用操作,6个基本范例action:
循环列表分页显示 - function default()
添加数据表单 - function add_form()
添加数据处理 - function add()
修改数据表单 - function up_form()
修改数据处理 - function update()
删除数据 - function del()
由于添加数据表单和修改数据表单基本一致,因此使用了同一个模板文件
mod_message.asp代码(注释比较多~):
代码:
<%
'创建一个与表名一致的mod类,message
class message
'声明一个title属性,供各个action设置网站的title
public title
'声明数据库类,仅供message内部使用,因此这里用到了private而非public
private db
'非法操作或成功操作后转向的页面,多次用到,这里将它设置为一个变量,便于维护
private actionurl
private sub class_initialize()
'多处action使用到数据库连接,因此在初始化mod时创建一个数据库类,供action调用
set db = new cls_db
'title默认为“首页”
title = "首页"
'非法操作或成功操作后转向的页面,这里暂设置为首页
actionurl = "./?/message/"
'当action为"up_form"和"del"时,需要传递ID参数,为了避免重复验证,在初始化集中验证
'action_可获取当前action名称,在这里用到了tools中的一个函数arr_in(array,v),判断某数值是否在数组内
if arr_in(array("up_form","del"),action_) then
'若id不为数字即转向出错页,这里转入首页
if not isnum(get_("id")) then call go(actionurl)
end if
end sub
private sub class_terminate()
'在mod运行完后释放数据库类,
set db = nothing
end sub
'action-首页
function default()
'绑定模板文件中的loop循环标签,使用分页模式循环,"[]"代表当前mod名,可映射至相同名的表,即"message"表
arr = array("id:list","sql:select id,username,content,adddate,ip from [] order by id desc","page")
'若不设置DB_PAGE_SIZE,则使用config.asp中默认分页数量,这里设置为5
DB_PAGE_SIZE = 5
default = array("message.html","[loop]",arr)
end function
'action-留言表单
function add_form()
title = "发表留言"
add_form = array("message_form.html")
end function
'action-留言处理
function add()
'新添加数据和修改数据时均要验证表单项合法性,因此将验证部分代码做成了一个函数
call checkpost()
'将要添加的文本框名装入数据,数组中第一个值为要插入的表名,同样使用了"[]"代替"message",前提是表名要与该mod名相同,而这里的文本框名也要与字段名称一一对应
'框架内集成了对一些常用数据的合法性验证,"文本框名|验证类型","username|null",即代表不能username不能为空。"content|html",html类型数据将会对该文本项过滤危险HTML代码,如<script,<iframe,<style等
'框架内也集中了一些常用字段的自动赋值,如adddate将直接为字段adddate赋值now(),"ip"为客户端IP
arr = array("[]","username|null","content|html","adddate","ip")
'使用db.add方法插入数据
if db.add(arr) then call location_alert("留言成功将转入首页",actionurl)
end function
'action-留言修改
function up_form()
title = "修改留言"
'db.find(),通过SQL语句将一条满足条件的记录返回至一个一维数组
arr = db.find("select username,content from [] where id = " & get_("id"))
'若不为数组则表明该留言不存在,转入错误页
if not isarray(arr) then call go(actionurl)
'替换模板标签,array("模板文件名","标签1","值1","标签2","值2")
up_form = array("message_form.html","id",get_("id"),"username",arr(0),"content",arr(1))
end function
'action-修改处理
function update()
call checkpost()
'对表单中隐藏域id进行合法验证
if not isnum(f("id")) then call go(actionurl)
'array("表名","主键值","表单项名1|验证类型",,"表单项名2|验证类型")
'DB类可以自动识别主键名称,因此这里只需要表名、主键值、修改项即可
arr = array("[]",f("id"),"username|null","content|html")
if db.update(arr) then call location_alert("修改成功",actionurl)
end function
'action-留言删除
function del()
call db.del(get_("id"))
call location_alert("已删除",actionurl)
end function
'简单验证提示
private sub checkpost()
if isn(f("username")) or isn(f("content")) then call location_back("昵称和留言内容均为必填项,请检查")
end sub
'由于修改和新建表单所需要填到的项目基本一致,所以这里使用了同一个模板,但他们的提交URL不同,因此form_auto_action做一个自动辨别处理
public function form_auto_action()
dim tmp
'action_-当前action名
tmp = iff(action_ = "add_form","add","update")
'let_,用于构造URL,let_("mod名,action名,参数1,值1,参数2,值2"),当mod名和action省略时,即为当前mod名称和当前action名称
'当然也可以直接写成"index.asp?/message/" & tmp & "/"
form_auto_action = "index.asp" & let_("," & tmp & "/")
end function
end class
%>
以上代码和两个模板文件代码均包含在RAR文件中,也有比较详细的注释说明,可对照查看
原则上,一个mod文件对应一个表的操作及显示,mod文件中的每一个function(即action)对应该表的不同操作界面及数据处理。