Unit 10:数据库记录更新
要更新数据库里的记录通常要建立两个步骤:
-
建立更新表格:使用 CFFORM 标记或 HTML
表格标记来建立更新表格,提交是调用更新处理页。
-
建立更新处理页:使用 CFUPDATE 或 CFQUERY 包含有 SQL UPDATE
语句来处理记录的更新,并为用户返回更新完成的提示信息。
记录更新页面
要更新记录首先要选择哪条记录要更新,所以更新页面和插入页面有所不同,更新页面要先列出数据库中记录的唯一标识记录的信息,由用户选择要更新的记录,再列出此记录的全部信息供用户更新。所以在更新页面中首先要查询数据库,找到要更新的哪条记录, 再在<CFOUTPUT>中列出记录的内容。下面举例说明:
使用 http://web_root/updateform.cfm?employeeid=2 ,调用更新数据库中employeeid=2 的记录,生成记录更新页面。
<CFQUERY NAME="EmployeeRecord" DATASOURCE="Employee DB"> SELECT * FROM Employees
WHERE Employee_ID = #URL.EmployeeID#
</CFQUERY>
<HTML>
<HEAD><TITLE>Update Form</TITLE></HEAD>
<BODY>
<CFOUTPUT QUERY="EmployeeRecord">
<!--- Input form --->
<FORM ACTION="EmployeeUpdate.cfm" METHOD="Post">
<!--- 列出记录的内容 --->
<INPUT TYPE="Hidden" NAME="Employee_ID" VALUE="#Employee_ID#">
<PRE>
FirstName: <INPUT TYPE="Text" NAME="FirstName" VALUE="#FirstName#">
//在输入框中列出此条记录的 FirstName,因为 VALUE="#FirstName#",这样可以完成表单值预制。
LastName: <INPUT TYPE="Text" NAME="LastName" VALUE="#LastName#"> Phone: <INPUT TYPE="Text" NAME="Phone" VALUE="#Phone#"><BR>
<INPUT TYPE="Submit" VALUE="Update Information">
</PRE>
</FORM>
</CFOUTPUT>
</BODY>
</HTML>
如果此条记录的 FirstName 是 zhang,LastName 是 ping,Phone 是 62301111,那么记录更新页面就象下图一样,表单的值是预制的:
建立更新数据库的 Action 页
ColdFusion 有两个 Tag 可以用来更新数据库,CFUPDATE 和 CFQUERY。下面分别介绍这两个 Tag。
使用 CFUPDATE 建立更新处理页。使用 CFUPDATE 处理更新十分简单, CFUPDATE tag 的语法规则:
<CFUPDATE DATASOURCE="ds_name" //数据源名称DBTYPE="type"
DBSERVER="dbms"
DBNAME="database name" TABLENAME="table_name" //数据源中的表格名称TABLEOWNER="name"
TABLEQUALIFIER="qualifier"
USERNAME="username" PASSWORD="password" PROVIDER="COMProvider" PROVIDERDSN="datasource"
FORMFIELDS="field_names" //列出要更新的数据项,如果没有填写
此项则更新全部数据项>
下面的 EmployeeUpdate.cfm 例子是对上面记录更新页面的处理,使用 CFUPDATE,并给出处理完成的提示信息:
<CFUPDATE DATASOURCE="Employee DB" TABLENAME="Employees">
<HTML>
<HEAD><TITLE>Reply</TITLE></HEAD>
<BODY>
<H2>谢谢!</H2>
<HR>
<P>你数据库中的记录已经正确更新!</P>
<HR>
</BODY>
</HTML>
使用 CFQUERY 建立更新处理页。
使用 CFUPDATE 处理更新虽然简单,但它不能完成复杂的操作,你可以使用 CFQUERY 结合 SQL 语句来实现复杂的更新处理。标准的 SQL 更新语句的语法是:
UPDATE tablename SET columnname = value WHERE condition 我们的例子还是处理更新页面中的雇员更新:
<CFQUERY NAME="UpdateEmployee" DATASOURCE="Employee DB"> UPDATE Employees
SET Firstname='#Form.Firstname#', // Form.Firstname 是从上面更新页
面中由 用户填入,提交后传送来的值
LastName='#Form.LastName#', Phone='#Form.Phone#'
WHERE Employee_ID=#Employee_ID#
</CFQUERY>
客户端/服务器端数据验证
当你要求用户输入数据时,总希望用户的输入能满足你的要求,如输入的名字中不要带有阿拉伯数字;当你想要把用户的输入添加到数据库中时,也要求数据符合数据库中具体项的类型设定,例如 String 类型的项中不能填入 Integer。所以,下面我们来介绍一下十分有用的数据验证技术,数据验证可以在客户端进行,也可以在服务器端进行,两者各有利弊,下面使用表格对比两者的区别:
验证类型 |
描述 |
---|---|
客户端数据验证 |
在 CFFORM 表格中, 你可以在 CFINPUT, CFGRID, CFSLIDER, CFTEXTINPUT 、 CFTREE 的 ONVALIDATE 的 属 性 中 添 加 一 段JavaScript 程序来判断输入的数据是否符合 |
要求。这种判断实在提交之前进行的所以叫 做客户端数据验证 |
|
---|---|
服务器端数据验证 |
在 CFFORM 表格中,In a CFFORM, 你可以在CFINPUT, CFTEXTINPUT 中的 VALIDATE 属性 中规定输入数据的类型可以是 date 、eurodate 、 time 、 float 、 integer 、telephone 、 zipcode 、 creditcard 、social_security_number。这种判断是和 CFM 文件一起在服务器端进行的。 |
下面我们以 CFFORM 来说明和认证用关的几个属性的使用:
<CFINPUT TYPE ="input_type" NAME ="name"
VALUE ="initial_value"
REQUIRED ="Yes/No"
RANGE ="min_value, max_value" //当要求输入为数字时,使用此属性规定数字
的范围VALIDATE ="data_type" //规定输入数据的类型
ONVALIDATE ="javascript_function" //定义数据判断的 javascript 函数名称,
一旦定义了 ONVALIDATE,VALIDATE 定义的数据类型判断将失效MESSAGE ="validation_msg" //一旦输入类型不对,出示错误信息
ONERROR ="text" //输入类型不对时调用的 javascript 函数名称
SIZE ="integer" //规定除 Radio 和 Checkbox 类型以外其他输入的大小,例如允许输入五个字符
MAXLENGTH ="integer"//当输入类型是 TEXT 时,允许输入的最多字符数CHECKED ="Yes/No">
总之 CFINPUT 比 HTML 的 Input 功能要强大许多,可以对输入进行多种限制,而不用编写 JavaScript,又可以引入 JavaScript 进行更复杂的判断。
使用 Javascript 判断输入的合法性
CFINPUT、CFGRID、CFSLIDER 、CFTEXTINPUT、CFTREE 带有 ONVALIDATE 属性,可以
添加 JavaScript。一旦输入不符合要求时,可以通过 ONERROR 属性添加进行相应处理的JavaScript,CFGRID 、CFINPUT、CFSELECT、CFSLIDER、CFTEXTINPUT、CFTREE 带有 ONERROR
属性。
下面举一个例子,使用 JavaScript 判断用户是否输入电子邮件地址和输入的电子邮件地址是否符合规范,指在邮件地址中要有“@”字符:
<HTML>
<HEAD><TITLE>JavaScript Validation</TITLE>
<SCRIPT><!--
function testbox(form) { Ctrl = form.inputbox1;
if (Ctrl.value == "" || Ctrl.value.indexOf ('@', 0) == -1) { return (false);
} else
return (true);
} //-->
</SCRIPT>
</HEAD>
<BODY><H2>JavaScript validation test</H2>
<P>Please enter your email address:</P>
<CFFORM NAME="UpdateForm" ACTION="update.cfm" >
<CFINPUT TYPE="text" NAME="inputbox1" REQUIRED="YES"
ONVALIDATE="testbox" MESSAGE="请正确输入电子邮件地址!!" SIZE="10" MAXLENGTH="10">
<INPUT TYPE="Submit" VALUE=" Update... ">
</CFFORM>
</BODY>
</HTML>
练习题:
根据第四天的数据库,建立一个更新界面和处理页,并加上输入验证,使用客户端和服务器两种分别验证。