佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程

ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程

熱門標(biāo)簽:客戶服務(wù) 百度AI接口 語音系統(tǒng) 企業(yè)做大做強(qiáng) 硅谷的囚徒呼叫中心 Win7旗艦版 電話運(yùn)營(yíng)中心 呼叫中心市場(chǎng)需求

第四期:ColdFusionMX Basic Tag編程

序言

      任何一種程序再簡(jiǎn)單也要具備一定的邏輯和算法,Coldfusion也不例外。如果只是靠簡(jiǎn)單的標(biāo)簽的堆砌,是無法真正實(shí)現(xiàn)企業(yè)商業(yè)邏輯的。而且,我在這里非常肯定的提出一點(diǎn),就是簡(jiǎn)單絕對(duì)不等于功能弱小。目前,網(wǎng)絡(luò)技術(shù)發(fā)展到了一個(gè)注重表現(xiàn)的時(shí)代,就是每一個(gè)開發(fā)出來的網(wǎng)絡(luò)應(yīng)用,要在實(shí)現(xiàn)邏輯的同時(shí),具備讓客戶有豐富的用戶體驗(yàn)是另一個(gè)追求的目標(biāo)。Flash+Flashremoting+cf serverside script就是一種極具體驗(yàn)的開發(fā)手段。而對(duì)于開發(fā)工具,眾多的開發(fā)廠商更是在工具的易用性上做足了文章,微軟vs.net開發(fā)平臺(tái)的完整統(tǒng)一性,Oracle9i JDeveloper開發(fā)j2ee程序的wizard方式,Macromedia DreamweaverMX眾多的服務(wù)器端的腳本語言的支持,都是在工具易用性上的一種體現(xiàn)。我們今天要給大家講解的就是簡(jiǎn)單易用的coldfusion loop。通過cf中不同的循環(huán),能夠?qū)崿F(xiàn)很多在cf中編程的邏輯。

      這里的序言還要補(bǔ)充說明一點(diǎn),作者已經(jīng)找到了操作access數(shù)據(jù)庫(kù)時(shí)的中文完全解決的方法,如果哪位開發(fā)者有興趣,請(qǐng)去這里查看:


 

第一部分 Basic tag編程深入

上一期我們講了操作數(shù)據(jù)庫(kù)的第一個(gè)重要的標(biāo)簽,cfquery。但是我們只是講解了如何使用cfquery進(jìn)行數(shù)據(jù)庫(kù)的查詢,現(xiàn)在我們深入講解一下cfquery的作用,然后在來講解另外兩個(gè)操作數(shù)據(jù)庫(kù)的標(biāo)簽cfinsert和cfupdate。

先來看看cfsnippets這個(gè)數(shù)據(jù)庫(kù)中employees這個(gè)表的構(gòu)造。

隨著教程的深入,代碼的編寫采用verdana字體的8號(hào),并且使用籃色,請(qǐng)學(xué)習(xí)者注意。

我們可以使用cfquery來做數(shù)據(jù)的插入,編寫的形式非常的簡(jiǎn)單,代碼的方式如下:

CFTRANSACTION>

CFQUERY NAME="test" DATASOURCE="cfsnippets">

Insert Into Employees(FirstName,lastname,email,phone,department)

Values('Mj','king','mjking@263.net','1234567','Technical')

/CFQUERY>

CFQUERY NAME="test" DATASOURCE="cfsnippets">

Select MAX(Emp_id) as number_id

From Employees

/CFQUERY>

/CFTRANSACTION>

插入數(shù)據(jù)成功!

你新插入的id是:

cfoutput query="test">#number_id#/cfoutput>

下面我們來講解一下上面的這一段代碼,其中最主要的部分是應(yīng)用了兩個(gè)cfquery的標(biāo)簽的組合,實(shí)現(xiàn)了數(shù)據(jù)插入和最新插入的員工id的查詢。其中第一個(gè)cfquery插入了一組記錄到Employees這個(gè)table里去,除了沒有處理emp_id這個(gè)默認(rèn)的員工id的自增主鍵之外,其他的幾個(gè)字段都對(duì)應(yīng)給予了插入。在插入之后,第二個(gè)cfquery做的是將剛剛插入的記錄的emp_id給查詢出來。比如我們要開發(fā)一個(gè)內(nèi)部網(wǎng)的員工模塊,有可能在做了新員工的輸入之后,馬上系統(tǒng)要告知該員工的工號(hào),就可以采用這種方式。但是會(huì)有一個(gè)問題,如果你在請(qǐng)求server做insert的同時(shí),有另外一個(gè)人正好剛剛做完insert,正要查詢出他的id,這樣有可能查出的id是你的,因?yàn)檫@時(shí)候,系統(tǒng)有可能響應(yīng)給對(duì)方你剛做完insert的記錄的emp_id的值。為了避免這樣的現(xiàn)象發(fā)現(xiàn),我們?cè)趦蓚€(gè)cfquery之外使用了Cftransaction這個(gè)標(biāo)簽。

      Cftransaction是一個(gè)協(xié)調(diào)事務(wù)處理的標(biāo)簽,它把處理不同事務(wù)的作為一個(gè)整體,如果其中的某一個(gè)操作不成功,那么所有的操作都會(huì)被服務(wù)器還原(就是roll back),有這樣的功能真的是太好了。

      另外,使用cfquery還可以進(jìn)行數(shù)據(jù)庫(kù)的update,讓我們來看下面的代碼:

Cfparam name="URL.number_id" default="20">

Cfquery name="test" datasource="cfsnippets">

       Select emp_id

       From Employees

       Where emp_id=#URL.number_id#

/Cfquery>

cfoutput>#test.emp_id#/cfoutput>

cfoutput>#test.recordcount#/cfoutput>

Cfif test.RecordCount EQ 0>

              沒有這個(gè)員工記錄

              Cfabort>

/Cfif>

!--- 進(jìn)行數(shù)據(jù)庫(kù)更新 --->

Cfquery name="test" datasource="cfsnippets">

       Update Employees

       Set FirstName='Zerlot',

             LastName='Ma',

                email='zerlot.ma@hdtworld.com',

                phone='7654321'

                department='market'

       Where emp_id=#URL.number_id#

/Cfquery>

cfoutput>更新成功!/cfoutput>

好,我們使用cfquery做成功了insert和update,那么下面我們開始講解cfinsert和cfupdate這兩個(gè)標(biāo)簽。

在開始講解之前,我們將簡(jiǎn)要說明一下access操作中文的問題,目前從access數(shù)據(jù)庫(kù)中把中文顯示出來還沒有解決方案,至少到2002年7月還沒有。但是,進(jìn)行access數(shù)據(jù)庫(kù)的插入已經(jīng)可以解決了,解決方式如下:

在你的應(yīng)用根目錄下建立一個(gè)application.cfm文件,加入下面這行代碼:

cfcontent type="text/html; charset=gb2312">

在你的每一個(gè)cfm頁(yè)面模板的開頭加入下面代碼:

cfcontent type="text/html; charset=gb2312">

cfset setEncoding("URL", "gb2312")>

cfset setEncoding("Form", "gb2312")>

然后使用form表單或者cfquery進(jìn)行插入中文就沒有問題了。但是從access中查詢并顯示某一條中文記錄還是有問題,目前作者還沒有確切的方法。所以作者本人的教程使用access是出于簡(jiǎn)單,但是如果是開發(fā)者使用cfmx來開發(fā)應(yīng)用的話,勸各位使用sqlserver和oracle的企業(yè)數(shù)據(jù)庫(kù),這些數(shù)據(jù)庫(kù)都沒有什么問題。

Cfinsert和cfupdate是coldfusion中兩個(gè)常用的tag,通過點(diǎn)擊DreamweaverMX中CFbasic的兩個(gè)圖標(biāo)來操作它們。

點(diǎn)擊 圖標(biāo),將執(zhí)行cfinsert這個(gè)標(biāo)簽的設(shè)定功能。點(diǎn)擊后的窗口如下所示:

以上經(jīng)常用到的屬性是datasource、tablename和Formfields三個(gè)屬性,其中datasource是你在coldfusion administrator數(shù)據(jù)源設(shè)定中設(shè)置好的名稱,tablename是要更新的表,F(xiàn)ormfields是和數(shù)據(jù)庫(kù)表中字段對(duì)應(yīng)名稱一致的form控件名稱(注意必須一致才行)。我們看下面的列子:

!--- 下面的代碼使用了cfinsert更新了數(shù)據(jù)表格,沒有使用cfquery--->

!--- 如果表單有提交的動(dòng)作,那么開始處理cfinsert動(dòng)作--->

cfif IsDefined ("form.posted")>

cfinsert dataSource = "cfsnippets"

tableName = "Comments"

formFields = "Email,FromUser,Subject,MessText,Posted">

h3>I>你的記錄已經(jīng)被提交。/i>/h3>

/cfif>

!--- 使用cfquery顯示插入數(shù)據(jù) --->

cfquery name = "GetComments" dataSource = "cfsnippets">

SELECT

CommentID, EMail, FromUser, Subject, CommtType, MessText, Posted, Processed

FROM

Comments

/cfquery>

html>

head>/head>

h3>cfinsert/h3>

!--- 顯示數(shù)據(jù) --->

table>

tr>

td>From User/td>td>Subject/td>td>Comment Type/td>

td>Message/td>td>Date Posted/td>

/tr>

cfoutput query = "GetComments">

tr>

td valign = top>a href = "mailt#Email#">#FromUser#/A>/td>

td valign = top>#Subject#/td>

td valign = top>#CommtType#/td>

td valign = top>font size = "-2">#Left(MessText, 125)#/font>/td>

td valign = top>#Posted#/td>

/tr>

/cfoutput>

/table>

p>Next, we'll offer the opportunity to enter a comment:

!---輸入表單--->

form action = "cfinsert.cfm" method = "post">

pre>

Email: input type = "Text" name = "email">

From: input type = "Text" name = "fromUser">

Subject:input type = "Text" name = "subject">

Message:textarea name = "MessText" COLS = "40" ROWS = "6">/textarea>

Date Posted: cfoutput>#DateFormat(Now())#/cfoutput>

!---動(dòng)態(tài)顯示時(shí)間--->

input type = "hidden"

name = "posted" value = "cfoutput>#Now()#/cfoutput>">

/pre>

input type = "Submit"

name = "" value = "insert my comment">

/form>

那么我們執(zhí)行的結(jié)果可以看到瀏覽器顯示了我們剛剛輸入的信息,這里作者就不給出截圖,目的是讓大家自己去執(zhí)行,自己去查看結(jié)果,注意,本數(shù)據(jù)庫(kù)為access,應(yīng)用程序不支持中文,如果各位想測(cè)試中文,可以構(gòu)建自己的應(yīng)用程序來測(cè)試中文(使用sqlserver),只須在每個(gè)頁(yè)面的開頭中加入如下代碼即可:

cfprocessingdirective pageencoding="gb2312">

cfcontent type="text/html; charset=gb2312">

cfset setEncoding("URL", "gb2312")>

cfset setEncoding("Form", "gb2312")>

Cfinsert我們講解完了,那么作為作者本人,不是非常推薦使用Cfinsert,如果要做大量的數(shù)據(jù)庫(kù)的插入,我希望各位開發(fā)人員能夠靈活的使用cfquery而不是cfinsert。下面我們講解一下cfupdate這個(gè)標(biāo)簽。單擊 圖標(biāo),會(huì)出現(xiàn)如下的界面:

各位可能看到cfupdate的窗口設(shè)置和cfinsert的很類似,是的,這兩個(gè)Tag都是對(duì)于Form表單進(jìn)行專屬操作的標(biāo)簽。對(duì)于cfupdate的使用方法,作者這里不想多費(fèi)筆墨,它的使用和cfinsert幾乎是一樣的,同樣,我們用一段程序來看看cfupdate的作用。

程序使用了官方的一段腳本

!--- 使用cfupdate更新數(shù)據(jù)庫(kù) --->

!--- 檢測(cè)course_ID這個(gè)值,如果存在則更新數(shù)據(jù)記錄--->

cfif IsDefined("form.Course_ID")>

!--- 檢測(cè)Course_ID是不是一個(gè)數(shù)字 --->

cfif Not IsNumeric(form.Course_ID)>

cfabort>

/cfif>

!---做更新--->

cfupdate datasource="cfsnippets"

tablename="Courses"

formfields="Descript, Course_ID">

/cfif>

!--- 使用一個(gè)query來查看通過url傳過來的course_ID是否在對(duì)應(yīng)的記錄上做了更新,各位開發(fā)人員可以使用這種查詢的技巧來驗(yàn)證數(shù)據(jù)庫(kù)是否更新,而不用打開數(shù)據(jù)庫(kù)去查看--->

cfquery name="GetCourseInfo" DATASOURCE="cfsnippets">

SELECT Number, Course_ID, Descript

FROM Courses

cfif IsDefined("url.Course_ID")>

WHERE Course_ID = #Trim(url.Course_ID)#

/cfif>

ORDER by Number

/cfquery>

html>

head>

title>CFUPDATE /title>

/head>

body>

H3>cfupdate更新實(shí)例/H3>

cfif IsDefined("url.Course_ID")>

課程號(hào):cfoutput>#GetCourseInfo.Number#/cfoutput>

form method="post" action="cfupdate.cfm">

P>課程描述BR>

textarea name="Descript" cols="40" rows="5">

cfoutput>#Trim(GetCourseInfo.Descript)#/cfoutput>

/textarea>br>

input type="Hidden" NAME="Course_ID"

value="cfoutput>#Trim(GetCourseInfo.Course_ID)#/cfoutput>">

p>input type="Submit" value="Click to Update">

/form>

cfelse>

cftable query="GetCourseInfo" htmltable colheaders>

cfcol text="a href='cfupdate.cfm?Course_ID=#Trim(Course_ID)#'>Edit Me/a>"

width=10 header="Editbr>this Entry">

cfcol text="#Trim(Number)#" WIDTH="4" HEADER="Course Number">

cfcol text="#Trim(Descript)#" WIDTH=100 HEADER="Course Description">

/cftable>

/cfif>

/body>

/html>

上面這段程序是官方的一段標(biāo)準(zhǔn)的使用cfupdate的代碼,其中包括了檢測(cè)從url傳遞過來的參數(shù),以及對(duì)傳遞參數(shù)course_ID所在的數(shù)據(jù)庫(kù)的記錄進(jìn)行更新的操作。這個(gè)程序非常精辟,希望各位開發(fā)者能夠很好的研究。其中,第一次訪問不帶參數(shù)而顯示一個(gè)記錄級(jí)的方法都非常的實(shí)用,可以用在實(shí)際的開發(fā)當(dāng)中。在這里,作者從本人的開發(fā)經(jīng)驗(yàn)再次提出一個(gè)建議,建議大家在實(shí)際的開發(fā)當(dāng)中對(duì)于經(jīng)常操作數(shù)據(jù)庫(kù)的程序編寫時(shí),能不用cfinsert和cfupdate就不用,因?yàn)檫@兩個(gè)tag雖然方便,但是是犧牲了靈活性和效能來取得的。希望大家使用cfquery來進(jìn)行數(shù)據(jù)庫(kù)的查詢,插入和更新。

好了,下面我們輕松一下,講解兩個(gè)非常容易看懂的tag,這兩個(gè)tag在大家進(jìn)行開發(fā)的過程中使用的頻率也是很高的。一個(gè)是cfinclude,另一個(gè)是cflocation。

單擊 中的左邊的圖標(biāo),就會(huì)使用coldfusion中的cfinclude標(biāo)簽,并彈出如下的窗口:

這個(gè)標(biāo)簽就是用來在coldfusion的某個(gè)頁(yè)面中反復(fù)使用其他的頁(yè)面模板,它與asp中的include的作用幾乎是一樣的。比如在coldfusion要嵌入一個(gè)站點(diǎn)統(tǒng)一標(biāo)準(zhǔn)的頁(yè)眉和頁(yè)腳,一個(gè)是header.cfm,另一個(gè)是footer.cfm,那么,就可以使用cfinclude來實(shí)現(xiàn)。

cfinclude template="header.cfm">

使用cfinclude也有缺點(diǎn),隨著企業(yè)應(yīng)用的不斷發(fā)展,業(yè)務(wù)邏輯和表現(xiàn)兩者需要進(jìn)行分離的要求越來越高,那么我們就需要進(jìn)行組件的設(shè)計(jì),這樣,完全混合邏輯和表現(xiàn)的cfinclude標(biāo)簽就不是很適用了,但是目前的coldfusionMx有了它最新的cfc(coldfusion components),使用這個(gè)方法可以達(dá)到邏輯與表現(xiàn)的抽離。但是cfinclude的優(yōu)點(diǎn)也是具有的,就是同cf component一樣可以一次性的修改頁(yè)面代碼來完成site中的所有引用,另外,cfinclude還可以包含很多的application和session的方法。

單擊上面兩個(gè)圖標(biāo)中右邊的圖標(biāo),就是使用coldfusion的另外一個(gè)tag,cflocation。這個(gè)標(biāo)簽起到了一個(gè)頁(yè)面跳轉(zhuǎn)的作用,它經(jīng)常與cfabort使用。比如我們做一個(gè)用戶驗(yàn)證的程序,當(dāng)進(jìn)行一些判斷之后,發(fā)現(xiàn)用戶并不擁有權(quán)限,那么就需要把他自動(dòng)送回到首頁(yè)或者某個(gè)頁(yè)面,這個(gè)時(shí)候,我們就要使用cflocation這個(gè)標(biāo)簽,例如:

cfif form.registername EQ “”>

cflocation url="http://www.macromedia.com" addtoken="No">

cfabort>

/cfif>

那么我們?cè)贒reamweaverMX使用cflocation的時(shí)候,看到的設(shè)置窗口如下:

最后,我們要進(jìn)行一下coldfusionMx中的函數(shù)說明,coldfusionMX中的函數(shù)分為15類,包括Array, Authentication,Conversion,Date/Time,Decision,Display and Formatting,Dynamic Evaluation,International,List,Mathematical,Query,String,Structure,System,XML,Other十五個(gè)種類。這些分類包括了256個(gè)coldfusion函數(shù),應(yīng)該可以滿足開發(fā)應(yīng)用的需求,而且各位也還可以自己組合定義自己的function和component來使用,這樣就可以滿足開發(fā)的需要了。作者在這里不介紹Function的單獨(dú)應(yīng)用了,以后會(huì)在教程中隨著程序說明一些常用的funtions。如果開發(fā)者在使用上有困難或者不明白使用的方法,可以去這個(gè)地方查看Functions的應(yīng)用和示例:

http://examples.macromedia.com/coldfusion/examples/index.cfm

好了,這期的教程就講到這里,下一期,我們講解coldfusion中重要的cf Flow也就是循環(huán)。下期見!??!


 

第二部分 論壇coldfusion探討之二

l          Flash Remoting 實(shí)現(xiàn) FLashMX ColdFusionMX 的通信

http://www.flashempire.net/showthread.php?s=22c923d2c64f6f43642b0b7dd40ae2abthreadid=124099

l         你怎么得到關(guān)于官方tag的標(biāo)準(zhǔn)用例代碼

http://www.flashempire.net/showthread.php?s=22c923d2c64f6f43642b0b7dd40ae2abthreadid=121883

l         asp.net還是cfmx?

http://www.flashempire.net/showthread.php?s=22c923d2c64f6f43642b0b7dd40ae2abthreadid=123532

l         寵物商店部署有感

http://www.flashempire.net/showthread.php?s=22c923d2c64f6f43642b0b7dd40ae2abthreadid=122125

l         Macromedia 尋求 solution partner

http://www.flashempire.net/showthread.php?s=22c923d2c64f6f43642b0b7dd40ae2abthreadid=123151

標(biāo)簽:山西 山西 安康 長(zhǎng)沙 崇左 濟(jì)南 海南 喀什

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ColdFusionMX 編程指南 ColdFusionMX Basic Tag編程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    金堂县| 平顶山市| 石棉县| 化隆| 红桥区| 乌鲁木齐市| 蒙自县| 奉新县| 东源县| 汉沽区| 辽源市| 金堂县| 阿克陶县| 永兴县| 元阳县| 桃园市| 沧州市| 太仓市| 镇江市| 安泽县| 土默特左旗| 利川市| 巢湖市| 奉化市| 乌拉特中旗| 巨野县| 依兰县| 新建县| 琼中| 鹤山市| 乌拉特中旗| 喀喇| 武宁县| 宜君县| 长丰县| 平凉市| 昌平区| 克什克腾旗| 龙江县| 南昌县| 石狮市|