ColdFusion向資料庫插入資料例子

javaprogramers發表於2006-05-15
向資料庫插入資料的內容

 

儲存以下程式碼,使用URL:HTTP://127.0.0.1/insert.cfm來得到HTML的內容。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>插入新職員相關資訊</title>
<style type="text/css">
<!--
.t { background-color: #FFFFFF; border: 1px dotted}
-->
</style>
</head>

<body bgcolor="#FFFFFF">
<span class="t"><span class="t"></span></span>
<form method="POST" action="insert_action.cfm">
<p>
職員姓名
<input type="text" name="name" size="20" class="t">
<br>
職員工資
<input type="text" name="salary" size="20" class="t">
<br>
家庭住址
<input type="text" name="address" size="20" class="t">
</p>
<p><input type="submit" value="插入" name="insert">
<input type="reset" value="重寫" name="reset">
</p>
</form>
</body>
</html>

看上去,和下面樣子差不多

職員姓名
職員工資
家庭住址


大家已經看出來,這是個html表單,用於向資料庫提交資料,為了樣式好看,我們加入了點CSS程式碼。<form>標籤中的method是表單提交方法,這是必須寫明的,注意,在CF中,表單提交的方法必須是post,如果使用別的提交方法,例如get,提交就會發生錯誤。action是指出應由哪個處理檔案處理form中提交的資料,這裡我們用insert_action.cfm檔案。你應該為各個<input>標籤中的name命名,等一下你就會知道為啥要這樣做。

再儲存了以下程式碼,取名為insert_action.cfm,也就是上面表單action指定處理提交資料的檔案

<cfif #ParameterExists(Form.insert)#>
<cfif NOT #LEN(Form.name)# OR NOT #LEN(Form.salary)# OR NOT #LEN(Form.address)#>
<cflocation url="insert.cfm">
</cfif>
<CFQUERY NAME= "selectemployee" DATASOURCE= "employee">
SELECT * FROM employee_info where employee_name='#Form.name#'
</CFQUERY>
<cfif #selectemployee.recordcount# GT 0>
<cfoutput><center>職員#Form.name#的資訊已經存在,請核實後再輸入</center></cfoutput>
<cfelse>


<CFQUERY NAME= "abc" DATASOURCE= "employee">
INSERT INTO employee_info (employee_name, employee_salary, employee_address)
VALUES ('#Form.name#', #Form.salary#, '#Form.address#')
</CFQUERY>

<CFQUERY NAME= "abc" DATASOURCE= "employee">
SELECT * FROM employee_info
</CFQUERY>

<html>
<head>
<title>職員工資表</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FFFFFF" text="#000000">

<table width="50%" border="1" bordercolor="#000000">
<tr>
<td>編號</td>
<td>職員姓名</td>
<td>工資</td>
<td>地址</td>
</tr>
<CFOUTPUT QUERY= "abc">
<tr>
<td>#employee_id#</td>
<td>#employee_name#</td>
<td>#employee_salary#</td>
<td>#employee_address#</td>
</tr>
</cfoutput>
</table>
</body>
</html>
</cfif>

<cfelse>
<cflocation url="insert.cfm">
</cfif>

這裡,我們用到了CF的一個標籤:<cfif>,用來判斷條件,然後執行相應處理。<cfif #ParameterExists(Form.insert)#>中的#ParameterExists(Form.insert)#
.......(中間程式碼省略)
<cfelse>
<cflocation url="insert.cfm">
</cfif>


是判斷Form.insert變數是否存在,這下你知道了為啥我們要在前面的表單檔案中要寫<input type="submit" value="插入" name="insert">,為submit命名成insert的原因,如果沒有提交資料,直接跳過insert.cfm,我們可不想看到這樣的情況發生,所以,我們寫了這個<cfif>判斷語句,如果變數不存在就執行<cflocation url="insert.cfm">,回到insert.cfm。
而ParameterExists()是CF的一個判斷變數是否存在的函式。

<cfif NOT #LEN(Form.name)# OR NOT #LEN(Form.salary)# OR NOT #LEN(Form.address)#>
<cflocation url="insert.cfm">
</cfif>這條程式碼,和上面的作用一樣,如果你沒有完整得輸入資料,某些框沒填,就執行<cflocation url="insert.cfm">,仍然留在原地,直到資料全部輸入完整,你也可以寫一些提示資訊。LEN()是判斷是否為空的函式,在這裡判斷表單變數是否為空。

<CFQUERY NAME= "selectemployee" DATASOURCE= "employee">
SELECT * FROM employee_info where employee_name='#Form.name#'
</CFQUERY>
<cfif #selectemployee.recordcount# GT 0>
<cfoutput><center>職員#Form.name#的資訊已經存在,請核實後再輸入</center></cfoutput>
我說過,在<cfquery>標籤中,使用標準SQL語句執行相應的資料庫操作。這裡我們判斷在insert.cfm提交的人名在資料庫中是否已經存在,SELECT * FROM employee_info where employee_name='#Form.name#',注意這裡如果變數是字串一定要使用單引號封在變數名周圍。<cfif #selectemployee.recordcount# GT 0>
<cfoutput><center>職員#Form.name#的資訊已經存在,請核實後再輸入</center></cfoutput>
是說查詢結果如果大於0,就顯示錯誤提示資訊。#selectemployee.recordcount#是查詢合計,GT是大於的意思。

<cfelse>
<CFQUERY NAME= "abc" DATASOURCE= "employee">
INSERT INTO employee_info (employee_name, employee_salary, employee_address)
VALUES ('#Form.name#', #Form.salary#, '#Form.address#')
</CFQUERY>
這些程式碼是本課的重點:如果提交的人名資料庫中不存在,就插入到資料庫,成為一條新記錄。仍然是使用<cfquery>標籤,插入的SQL語句是這樣寫的:INSERT INTO 表名 (表內欄位名,若有多個用逗號隔開)VALUES (變數名或特定資料,若有多個用逗號隔開) 注意這裡如果變數是字串型別也要使用單引號封在變數名周圍。其它的程式碼你應該能看得懂。


好,這節課程結束,下節課我們繼續。下節課程我們講如何向資料庫更新已存在的資料及如何刪除已存在的資料。各位有啥意見或建議,請發mail給我,JavaProgramers@hotmail.com 謝謝!

相關文章