Coldfusionกับฐานข้อมูลบนเว็บ

[บทความนี้แต่งขึ้นเมื่อ Nov,1999 โดย Rittichart S.]

การเขียนโปรแกรมแบบ Server Side Programming บนเว็บนั้นขาดซะไม่ได้เลยที่จะต้องมีเรื่องฐานข้อมูล หรือ Database เข้ามาเกี่ยวข้อง ทั้งนี้เพราะกระแส Database Driven Website หรือเว็บไซต์พลังขับเคลื่อนด้วยฐานข้อมูล (โฮ่..เท่ห์ 🙂 กำลังมาแรง และเว็บไซต์ดังๆ ในต่างประเทศหลายที่ก็เปลี่ยนมาใช้ฐานข้อมูลมาเป็นขุมพลังแทนการทำ html แบบหน้าต่อหน้าซะเป็นส่วนใหญ่แล้ว

จาก ตอนที่แล้ว เราได้พูดเบื้องต้นในเรื่องการใช้ ColdFusion ต่อกับฐานข้อมูลเพื่อ Query ข้อมูลขึ้นมาโชว์บนหน้าเว็บไปแล้ว คราวนี้เราจะมาว่าต่อกันในเรื่องที่มักจะใช้กันบ่อยๆนั่นคือการ INSERT , UPDATE และ DELETE ข้อมูลในฐานข้อมุลผ่านหน้าเว็บ.

INSERT 
การ Insert นั้นก็คือการ input ข้อมูลชุดใหม่ลงไปในฐานข้อมูล สำหรับ ColdFusion นั้นก็มีวิธีการ Insert ให้เลือกใช้อยู่ 2 ทางด้วยกันคือการใช้ TAG <CFINSERT> 
<CFINSERT Datasource =”DSN” Tablename =”Table” Formfields =”columename1,columename2″ > 
ถ้าคุณไม่ได้ระบุ Formfields ลงไปจะแปลว่าให้ INSERT ลงในทุกๆ Field ซึ่ง value ที่ผ่านค่ามานั้นจะต้องมีชื่อ (NAME) เดียวกันกับ Field นั้นๆด้วย เช่นถ้าคุณจะ INSERT ข้อมูลจากฟอร์ม ลงไปใน Field ทีชื่อ NAME ดังนั้น ตัว INPUT BOX ที่ผ่านค่ามาจะต้องใช้ชื่อ NAME เช่นกัน ตัวอย่างเช่น <input type=”text” name =”NAME”>

อีกวิธีหนึ่งก็คือการใช้ SQL INSERT Statement ภายใต้ TAG <CFQUERY> 
<CFQUERY Datasource =”DSN”>
INSERT INTO Tablename (columnname1,columename2) VALUES (‘#Form.value1#’,’#Form.value2#’) 
</CFQUERY>

โดยส่วนตัวแล้วผมชอบที่จะใช้วิธีที่สองมากกว่า เพราะว่าการใช้ <CFINSERT> นั้นคุณจะต้องส่งค่าผ่านมาทาง FORM เท่านั้นครับ ถ้าส่งผ่านมาทาง URL parameters หรือ Variables ละก็ จะใช้กับ <CFINSERT >ไม่ได้ แล้วบางทีถ้าเกิดผมต้องการกำหนดเงื่อนไขที่มันค่อนข้างจะ Complex จนเกินความสามารถของ <CFINSERT> จะทำการให้ได้แล้ว การใช้ SQL INSERT Statement ภายใน TAG <CFQUERY> ก็จะเป็นทางออกครับ

UPDATE 
การ Update นั้นก็คือการปรับปรุงหรือแก้ไขข้อมูลใน Database นั่นเองครับซึ่ง ColdFusion ก็มีทางเลือกมาให้สองทางอีกเช่นกันคือการใช้ TAG CFUPDATE
<CFUPDATE Datasource =”DSN” Tablename =”Table” Formfields =”columename1,columename2″> TAG <CFUPDATE> นั้นจะรับข้อมูลผ่านทาง FORM เพื่อนำไปแก้ไขในฐานข้อมุล โดยคุณจะต้องระบุ Field ที่เป็น Primary Key ลงไปในฟอร์มด้วย เพราะ <CFUPDATE> นั้นจะทำการอ่านฐานข้อมูลของคุณว่า Field ไหนที่เป็น Primary Key แล้วก็จะนำชื่อของ Field นั้นมาเทียบกับชื่อของ Form ที่คุณส่งผ่านมา ซึ่งถ้าไม่ได้ระบุใส่ Name ของ form ให้มีชื่อเดียวกับ Field ที่เป็น Primary Key ละก็ จะโดนโปรแกรมมันด่าเอา ( ERROR ไง อิอิ)

ส่วนอีกวิธีนึงก็เหมือนเดิมครับ ใช้ SQL UPDATE Statement ภายใต้ TAG <CFQUERY>
<CFQUERY Datasource =”DSN”>
UPDATE Tablename
SET columename1=’#Form.columename1#’, columename2=’#Form.value1#’, Phone=’#Form.value2#’ 
WHERE primarykey=#Form.primary# 
</CFQUERY>

DELETE 

สำหรับการ DELETE นั้นก็คือการลบข้อมูลใน Row ที่ต้องการทั้ง Row สามารถทำได้ทางเดียวครับคือการใช้ SQL DELETE Statement ภายใต้ <CFQUERY>
<CFQUERY Datasource =”DSN”> 
DELETE FROM Tablename WHERE primary= #Form.primary#
</CFQUERY>

ผมคิดว่าคงจะเป็นเพราะการลบข้อมูลนั้นเป็นเรื่องอันตราย Coldfusion ก็คงจะไม่อยากให้มันทำได้ง่ายเกินไปนัก จึงไม่ได้ทำ TAG พิเศษเอาไว้สำหรับลบข้อมูลบน Database

เอาละครับทีนี้เรามาลองสร้างอะไรเล่นๆสนุกๆกันจากการนำวิธีการ INSERT ,UPDATE และ DELETE มาใช้ครับ หึหึ ฝึกกันเล่นๆครับจะได้พริ้ว คีย์ code ตามเลยครับ สำหรับ Database ที่ใช้นั้นก็จะใช้อันเดิมที่เคยทำเอาไว้ครั้งที่แล้วนะครับ อ้อโปรแกรมที่จะสร้างต่อไปนี้ผมไม่ได้ทำให้มัน security อะไรนักหรอกนะครับ เช่นคือไม่ได้เช็คว่าเวลาจะ insert หรือ update เนี่ยถ้าคนที่มาเล่นไม่ใส่ข้อมูลอะไรมาเลยแล้วกดปุ่ม insert หรืออะไร ทำนองนี้นะครับ เพราะผมตั้งใจจะพูดเรื่องเหล่านี้ในบทความต่อๆไปครับผม.

<!– webDB.cfm –>

<html>
<head>
<title>web database with coldfusion</title>
</head>
<body bgcolor=”#FFFFFF”>

<CFIF IsDefined(“Form.command”)>
<CFIF (Form.command eq “insert”)>

<CFQUERY Datasource =”cftest1″>
INSERT INTO Example001 (Name,Email) VALUES(‘#Form.name#‘, ‘#Form.email#‘)
</CFQUERY> 
INSERT DONE !

<CFELSEIF (Form.command eq “update”)>

<CFQUERY Datasource =”cftest1″>
UPDATE Example001 SET Name = ‘#Form.name#‘, Email = ‘#Form.email#‘ WHERE ID = #Form.ID#
</CFQUERY> 
UPDATE DONE !

<CFELSEIF (Form.command eq “delete”)>

<CFQUERY Datasource =”cftest1″>
DELETE FROM Example001 WHERE ID =#Form.ID#
</CFQUERY> 
DELETE DONE !
</CFIF>

<CFELSE>

<table border =”0″>
<tr bgcolor =”#808080″>
<td align =”center”>ID</td>
<td align =”center”>Name</td>
<td align =”center”>E-mail</td>
<td colspan =”2″ bgcolor =”#ffffff”>&nbsp;</td>
</tr>

<CFQUERY Datasource =”cftest1″ Name =”Display”>
SELECT * FROM Example001
</CFQUERY> 
<CFOUTPUT Query=”Display”>

<tr bgcolor =”##eeeeee“>
<form action =”webDB.cfm” method =”post”>
<td align =”center”>
#ID#<input type =”Hidden” name =”ID” value =”#ID#“></td>
<td><input type =”text” name =”name” value =”
#Name#“></td>
<td><input type =”text” name =”email” value =”
#Email#“></td>
<td><input type =”Hidden” name =”command” value =”update”><input type =”submit” value =”Update”></td>
</form>
<form action =”webDB.cfm” method =”post”>
<td><input type =”Hidden” name =”ID” value =”
#ID#“><input type =”Hidden” name =”command” value =”delete”><input type =”submit” value =”Delete”></td>
</form>
</tr>

</CFOUTPUT>
</table>
<p>
INSERT NEW RECORD.
<table border =”0″>
<tr bgcolor =”#808080″>
<td align =”center”>Name</td>
<td align =”center”>E-mail</td>
<td bgcolor =”#ffffff”>&nbsp;</td>
</tr>
<tr>
<form action =”webDB.cfm” method =”post”>
<td><input type =”text” name =”name”></td>
<td><input type =”text” name =”email”></td>
<td><input type =”Hidden” name =”command” value =”insert”><input type =”submit” value =”Insert”></td>
</form>
</tr>
</table>


</CFIF>
</body>
</html>

เสร็จแล้ว SAVE เอาไว้ในชื่อ webDB.cfm ก็ได้นะครับ เสร็จแล้วลองเล่นดูก็ได้ครับ เมื่อรันแล้วจะได้ตามรูปด้านล่าง คุณสามารถที่จะดูข้อมุลในฐานข้อมูลของคุณ , insert ข้อมูลชุดใหม่ , แก้ไขข้อมูล และลบข้อมูลใน Database ของคุณผ่านหน้าเว็บได้เลยครับ

หวังว่าคงจะไม่ยากจนเกินไปนะครับ ใครว่ายากหรือยังไม่ clear แบบว่า โอ้ยอ่านแล้วปวดหัวก็ลองเมล์มาคุยกับผมได้ครับ ColdFusion เนี่ยผมว่าเป็น Server Side Programming ที่ง่ายที่สุดแล้วในความคิดของผมนะครับ แต่ก็ค่อนข้าง PowerFull นะครับ ในครั้งต่อไปผมจะมาบ่นเรื่องอะไรเกี่ยวกับ ColdFusion ต่อ ก็ลองติดตามกันนะครับ.

Download source code : webDB.zip