(1)

คำนำ
ในปัจจุบันเทคโนโลยีสารสนเทศมีบทบาทในชีวิตประจาวันของเรามากขึ้นการที่จะสร้างระบบงานที่ใช้
ในองค์กรในลักษณะของการเขียนโปรแกรมบนเว็บ (Web Programming) เพื่อจัดเก็บข้อมูล และสืบค้นข้อมูล
ในระบบฐานข้อมูล การที่จะพัฒนาได้นั้น จาเป็นต้องมีผู้ชานาญในการพัฒนาระบบจึงจะทาให้ระบบนั้นมี
ประสิทธิภาพในการใช้งาน ดังนั้นเป้าหมายสาคัญของเอกสารตารา/หนังสือ เล่มนี้จึงต้องการเสริมสร้างทักษะ
ความรู้ให้กับนักศึกษาหรือผู้ที่สนใจ การเขียนโปรแกรมบนเว็บตั้งแต่เริ่มต้น จนถึงประยุกต์ใช้ในระดับมืออาชีพ
ต่อไป
การเขียนโปรแกรมบนเว็บนั้น มีภาษาที่ใช้สาหรับการพัฒนามีอยู่ด้วยกันหลายภาษา เช่น ASP, Perl,
JSP และ PHP เป็นต้น แต่ภาษาที่ได้รับความนิยมอย่างแพร่หลาย โดยสังเกตได้จากเว็บไซต์ส่วนใหญ่ เช่น
facebook.com และเว็บไซต์หน่วยงานภาครัฐและเอกชน ภาษา PHP นั้น เป็นภาษาสคริปต์ที่ทางานในฝั่ง
ของเครื่องแม่ข่าย (Server Side) เพื่อประมวลผลแล้วส่งกลับมายังเครื่องที่ร้องขอในลักษณะของภาษา HTML
ลักษณะสาคัญของภาษา PHP จะมีโครงสร้างที่ง่ายแก่การทาความเข้าใจ คล้ายกับภาษาซี (C Language) ซึ่ง
เหมาะกับ ผู้ เริ่ มต้ น พัฒ นา และยั งสามารถเขี ย นในลั กษณะของออบเจ็ค (OOP: Object Oriented
Programming) ได้อีกด้วย เหมาะสาหรับการย่อโค๊ดภาษาให้สั้นลง ฐานข้อมูลก็เป็นส่วนหนึ่งที่มีความสาคัญ
สาหรับการเขียนโปรแกรมบนเว็บด้วยภาษา PHP นั้น ตัวภาษา PHP เองสามารถติดต่อกับฐานข้อมูลหลาย
ชนิด เช่น Oracle, Progress, MS-Access และ MySQL เป็นต้น ใน หนังสือเล่มนี้จะใช้ฐานข้อมูล MySQL
สาหรับเรียนรู้และฝึกปฏิบัติ
หนั ง สื อ เล่ ม นี้ เ ขี ย นขึ้ น เพื่ อ ถ่ า ยทอดความรู้ แ ละประสบการณ์ ข องผู้ เ ขี ย น (จากประสบการณ์ สู่
ภาคปฏิบัติ) ประสบการณ์ของผู้เขียนนั้นได้มาจากงานสอน และพัฒนาเว็บ ด้วยภาษา PHP และ MySQL มา
โดยตลอด เป็นเวลานานไม่น้อยกว่า 10 ปี กลั่นจากใจสู่ผู้ที่สนใจ รวมถึง นิสิต นักศึกษา ที่มีความสนใจด้าน
การเขียนโปรแกรมหรือพัฒนาเว็บ นาไปศึกษาเรียนรู้ นาไปประยุกต์ใช้งานที่หลากหลายตามลักษณะงานที่
แตกต่าง ดังนั้นผู้เขียนจึงหวังว่า หลังการศึกษาเนื้อหาจากหนังสือเล่มนี้ทั้งหมดแล้ว ผู้อ่านจะสามารถนาความรู้
ไปใช้การโปรแกรมบนเว็บเพื่อใช้งานจริงต่อไป

ปริญญา น้อยดอนไพร
parinya-2008@hotmail.com
(2)
(3)

สำรบัญ
หน้ำที่
คำนำ .................................................................................................................................................... (1)
สำรบัญ ................................................................................................................................................. (3)
สำรบัญตำรำง ....................................................................................................................................... (9)
สำรบัญภำพ ........................................................................................................................................(11)
บทที่ 1 บทนำ .................................................................................................................................. 1
PHP คือ อะไร ............................................................................................................................. 1
PHP สามารถทาอะไรได้บ้าง ....................................................................................................... 1
ประวัติความเป็นมาของ PHP (History of PHP) ....................................................................... 2
PHP เวอร์ชัน 4 ........................................................................................................................... 3
PHP เวอร์ชัน 5 ........................................................................................................................... 4
PHP เวอร์ชัน 6 ........................................................................................................................... 5
MySQL คืออะไร ......................................................................................................................... 6
บทที่ 2 หลักกำรทำงำนของ PHP .................................................................................................. 11
AppServ คืออะไร .....................................................................................................................13
วิธีการติดตั้งโปรแกรม AppServ ...............................................................................................15
XAMPP คืออะไร ....................................................................................................................... 21
วิธีการติดตั้ง XAMPP บนระบบปฏิบัติ Windows ....................................................................22
การเลือกใช้เครื่องมือสาหรับการเขียนโค้ด (Choosing a Code Editor) ................................. 27
บทที่ 3 PHP เบื้องต้น .................................................................................................................... 31
การแทรกคาสั่งภาษา PHP ในเอกสาร HTML .......................................................................... 31
องค์ประกอบพื้นฐานของการเขียน PHP ................................................................................... 32
การแสดงผลข้อมูลผ่านเว็บบราวเซอร์ (Outputting Data to the Browser) ......................... 33
ชนิดข้อมูลที่รองรับใน PHP (PHP's Supported Datatypes) ................................................ 37
การแปลงชนิดข้อมูลโดยใช้ตัวแปร .......................................................................................... 40
การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ (Adapting Datatypes with Type Juggling) ....... 41
ฟังก์ชันที่เกี่ยวข้องกับชนิดข้อมูล (Type-Related Function) ................................................ 41
ฟังก์ชันตรวจสอบชนิดของข้อมูล (Type Identifier Functions) ............................................ 43
คาสงวนของ PHP (Reserved Words) .................................................................................... 43
บทที่ 4 ตัวแปร ตัวดำเนินกำรและนิพจน์ (Variables, Operators and Expressions) .............. 45
(4)

สำรบัญ (ต่อ)
หน้ำที่
ตัวแปร (Variable) .................................................................................................................... 45
ขอบเขตของตัวแปร (Variable Scope) .................................................................................. 47
ตัวแปรพิเศษ (Super global Variables) ................................................................................ 41
ตัวแปรค่าคงที่ (Constants) ..................................................................................................... 53
ตัวแปรที่มีค่า Null .................................................................................................................... 54
การตรวจสอบและยกเลิกตัวแปร ............................................................................................... 55
ตัวดาเนินการ (Operators) และนิพจน์ (Expressions) ........................................................... 56
ตัวดาเนินการในการเชื่อมข้อความ (String) .............................................................................. 62
ตัวดาเนินการอื่น ๆ ....................................................................................................................66
บทที่ 5 โครงสร้ำงควบคุม (Control Structures) ....................................................................... 67
คาสั่งเงื่อนไข (Conditional Statements) .............................................................................. 67
คาสั่งทาซ้า (Looping Statements) ........................................................................................72
คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซ้า (The Other Controls of Looping
Statements) ........................................................................................................................... 78
บทที่ 6 ฟังก์ชัน (Functions) ....................................................................................................... 81
ฟังก์ชัน ...................................................................................................................................... 81
การเรียกใช้งานฟังก์ชันมาตรฐานของ PHP ............................................................................... 82
การสร้างฟังก์ชัน (Creating a Function) ................................................................................ 82
การเรียกใช้ฟังก์ชันที่สร้างเอง .................................................................................................... 83
ฟังก์ชันแบบมีการส่งค่าพารามิเตอร์ .......................................................................................... 83
การส่งค่ากลับจากฟังก์ชันด้วยคาสั่ง return (Returning Values from a Function) ............86
ฟังก์ชันแบบเรียกตัวเอง (Recursive Functions) .................................................................... 87
ฟังก์ชันไลบรารี (Function Libraries) ..................................................................................... 88
บทที่ 7 อำร์เรย์ (Arrays) .............................................................................................................. 91
การสร้างอาร์เรย์ (Create arrays) ............................................................................................ 91
การเข้าถึงข้อมูลภายในอาร์เรย์ ................................................................................................. 95
ฟังก์ชันอื่นๆ ที่เกี่ยวกับอาร์เรย์ ................................................................................................. 98
ฟังก์ชันในการเพิ่มสมาชิกในอาร์เรย์ ......................................................................................... 98
ฟังก์ชันในการลบสมาชิกในอาร์เรย์ ......................................................................................... 101
(5)

สำรบัญ (ต่อ)
หน้ำที่
ฟังก์ชันในการนับจานวนสมาชิกในอาร์เรย์ ............................................................................. 102
ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวเลข ............................................ 104
ฟังก์ชันที่ใช้ในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษรหรือข้อความ ............. 105
ฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ (Pointer) ในอาร์เรย์ ............................................... 108
ฟังก์ชันสาหรับการรวมอาร์เรย์ ................................................................................................108
ฟังก์ชันสาหรับการสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูลในอาร์เรย์ ..............................110
ฟังก์ชันสาหรับการค้นหาอินเด็กซ์หรือคีย์และค่าข้อมูลในอาร์เรย์ .......................................... 110
ฟังก์ชันสาหรับการหาค่าข้อมูลสมาชิกที่เหมือนและแตกต่างกันในอาร์เรย์ ............................ 111
การใช้ข้อมูลจากอาร์เรย์ $_SERVER ...................................................................................... 112
การใช้ข้อมูลจากอาร์เรย์ $_FILE ............................................................................................ 114
บทที่ 8 สตริง ตัวเลข และเวลำ ................................................................................................... 117
ฟังก์ชันเกี่ยวกับสตริง .............................................................................................................. 117
ฟังก์ชันเกี่ยวกับรหัสแอสกี (ASCII) ......................................................................................... 117
ฟังก์ชันเกี่ยวกับการหาขนาดของสตริง ................................................................................... 118
ฟังก์ชันในการเปลี่ยนรูปแบบของตัวพิมพ์ ............................................................................... 119
ฟังก์ชันเกี่ยวกับการแยก และรวมข้อความหรือสตริง ............................................................. 121
ฟังก์ชันเกี่ยวกับข้อความหรือสตริงย่อย .................................................................................. 122
ฟังก์ชันในการค้นหาข้อความหรือสตริง .................................................................................. 124
ฟังก์ชันในการแทนที่ข้อความหรือสตริง ................................................................................. 125
ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง .............................................................. 127
ฟังก์ชันเกี่ยวกับอักขระพิเศษของ HTML ................................................................................ 129
ฟังก์ชันเกี่ยวกับจานวนและตัวเลข .......................................................................................... 130
ฟังก์ชันเกี่ยวกับวันเวลา (Date and Time) ............................................................................132
การจัดการกับวันที่และเวลาแบบ Greenwich Mean Time (GMT) ..................................... 139
บทที่ 9 กำรจัดกำรไฟล์และไดเรกทอรี ......................................................................................... 145
การอ้างถึง Document Root .................................................................................................145
การอ้างอิงพาธแบบ Absolute ............................................................................................... 145
การอ้างอิงพาธแบบ Relative ................................................................................................. 146
การจัดการกับไฟล์ ................................................................................................................... 147
(6)

สำรบัญ (ต่อ)

บทที่ 10

บทที่ 11

บทที่ 12

บทที่ 13

หน้ำที่
การจัดการกับไดเรกทอรี ......................................................................................................... 159
การอัพโหลดไฟล์ ..................................................................................................................... 164
ฟังก์ชันการหาขนาด และชนิดของไฟล์ .................................................................................. 167
กำรจัดกำรข้อมูลจำกฟอร์ม ............................................................................................. 169
ลักษณะของฟอร์ม ...................................................................................................................169
คานิยามและการใช้งานแท็ก form ..........................................................................................170
การจัดการข้อมูลจากฟอร์มในฝั่งเซิร์ฟเวอร์ .............................................................................179
การส่งข้อมูลแบบอาร์เรย์ .........................................................................................................183
คุกกี้ เซสชั่น และกำรเชื่อมโยงระหว่ำงเพจ ..................................................................... 185
เฮดเดอร์ (Header) ................................................................................................................. 185
การส่งข้อมูลระหว่างเพจแบบ Query String ......................................................................... 186
การจัดเก็บข้อมูลแบบคุกกี้ ...................................................................................................... 187
การจัดเก็บข้อมูลแบบเซสชัน ...................................................................................................189
กำรเขียนโปรแกรมแบบ OOP .........................................................................................197
คลาส (Class) ..........................................................................................................................197
การนาคลาสมาใช้ในสคริปต์ PHP ........................................................................................... 198
ออบเจ็กต์ และอินสแตนซ์ ....................................................................................................... 198
เมธอด (Method) ................................................................................................................... 199
โมดิฟายเออร์ (Modifier) แบบ public และ private ............................................................ 201
ค่าคงที่ (Constant) .................................................................................................................204
คอนสตรักเตอร์ (Constructor) .............................................................................................. 205
โมดิฟายเออร์ Static ............................................................................................................... 206
การสืบทอด (Inheritance) ..................................................................................................... 208
กำรใช้เทคนิค AJAX ร่วมกับ PHP .................................................................................. 211
AJAX (Asynchronous JavaScript and XML) ....................................................................211
ประวัติความเป็นมา ................................................................................................................. 212
ที่มาของปัญหา ........................................................................................................................ 212
โครงสร้างของ AJAX ............................................................................................................... 213
การทางานของ AJAX ..............................................................................................................214
(7)

สำรบัญ (ต่อ)
หน้ำที่
การใช้ AJAX Framework ..................................................................................................... 215
ฟังก์ชันที่ใช้จัดการข้อมูล ......................................................................................................... 218
แนวทางการพัฒนา AJAX Application ................................................................................219
ปัญหาภาษาไทยใน AJAX ....................................................................................................... 220
การส่งผลลัพธ์กลับมาเป็น JavaScript ....................................................................................220
การอัปเดทอินพุต Select ด้วยเทคนิค AJAX ......................................................................... 224
อีเวนต์ (Event) ....................................................................................................................... 228
การกาหนดอีเวนต์ ................................................................................................................... 230
ออบเจ็กต์อีเวนต์ (Object Event) .......................................................................................... 231
อีเวนต์เกี่ยวกับเมาส์ ................................................................................................................ 232
อีเวนต์เกี่ยวกับคีย์บอร์ด .......................................................................................................... 233
บทที่ 14 ฐำนข้อมูล MySQL และกำรใช้งำน phpMyAdmin ...................................................... 241
คาสั่งพื้นฐานของ MySQL .......................................................................................................241
ลักษณะองค์ประกอบของฐานข้อมูล ....................................................................................... 243
ชนิดข้อมูลของคอลัมน์ ............................................................................................................ 244
แอททริบิวต์ของคอลัมน์ .......................................................................................................... 246
การสร้างฐานข้อมูล ................................................................................................................. 247
การสร้างตารางฐานข้อมูล ....................................................................................................... 247
การแทรก ปรับปรุง ลบ และเรียกดูข้อมูลในตาราง .................................................................251
จัดการฐานข้อมูลด้วย phpMyAdmin ....................................................................................256
การเริ่มต้นใช้งาน phpMyAdmin ...........................................................................................256
การลบฐานข้อมูล และตาราง .................................................................................................. 263
ส่วนของการใช้คาสั่ง SQL ....................................................................................................... 263
ส่วนของการค้นหา .................................................................................................................. 264
ส่วนของการกาหนดสิทธิ์ ......................................................................................................... 264
บทที่ 15 กำรใช้ PHP ร่วมกับ MySQL ..........................................................................................265
การใช้ PHP ร่วมกับ MySQL................................................................................................... 265
ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL ................................265
ฟังก์ชันสาหรับการเลือกฐานข้อมูล ..........................................................................................267
(8)

สำรบัญ (ต่อ)
หน้ำที่
การส่งคาสั่ง SQL ไปยังฐานข้อมูล ...........................................................................................268
การอ่านข้อมูลผลลัพธ์ ............................................................................................................. 269
การแก้ไขข้อมูลภาษาไทยกลายเป็น "?????...." ........................................................................272
การตรวจสอบการเปลี่ยนแปลงข้อมูล ......................................................................................272
การตรวจสอบข้อผิดพลาดระหว่างการทางานร่วมกับ MySQL .............................................. 275
การตรวจสอบชื่อฐานข้อมูลและตาราง ................................................................................... 275
การตรวจสอบโครงสร้างของขอบเขตข้อมูล ............................................................................ 277
บทที่ 16 กรณีศึกษำ: ระบบจัดกำรสมำชิก ..................................................................................... 281
โปรเซสการทางานของระบบจัดการสมาชิก ............................................................................ 281
อธิบายการทางานของระบบ ................................................................................................... 281
สร้างฐานข้อมูลและตาราง ...................................................................................................... 282
รายละเอียดของไฟล์ที่เกี่ยวข้อง .............................................................................................. 282
บรรณำนุกรม ...................................................................................................................................... 305
(9)

สำรบัญตำรำง
ตำรำงที่
3.1
3.2
3.3
4.1
4.2
4.3
4.4
4.5
4.6
4.7
7.1
7.2
7.3
7.4
7.5
8.1
8.2
8.3
8.4
8.5
8.6
8.7
9.1
9.2
9.3
9.4
9.5
10.1
10.2

หน้ำที่
แสดงตัวกาหนดชนิดการแสดงผลที่ใช้ร่วมกับคาสั่ง printf ( ) ...................................................35
ตัวดาเนินการแปลงชนิดของข้อมูล (Type Casting Operators) ............................................. 40
คาสงวนของ PHP ......................................................................................................................44
ตัวดาเนินการพื้นฐานสาหรับการคานวณ .................................................................................. 57
ตัวดาเนินการสาหรับการกาหนดค่า .......................................................................................... 58
ตัวดาเนินการสาหรับเพิ่ม และลดค่า ......................................................................................... 59
ตัวดาเนินการสาหรับการเปรียบเทียบ ....................................................................................... 60
ตัวดาเนินการสาหรับการเปรียบเทียบทางตรรกะ ......................................................................60
ลาดับความสาคัญของตัวดาเนินการ .......................................................................................... 62
Escape Sequence ..................................................................................................................63
แสดงตัวอย่างข้อมูลแบบอาร์เรย์ และแสดงตาแหน่งของอินเด็กซ์ ............................................ 91
แสดงผลสรุปฟังก์ชันที่ใช้สาหรับเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษร ............ 107
สรุปฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ในอาร์เรย์ .......................................................... 108
แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_SERVER .................................................................... 113
แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_FILE .......................................................................... 114
ฟังก์ชันเกี่ยวกับรหัสแอสกี .......................................................................................................117
ฟังก์ชันในการตัดช่องว่าง .........................................................................................................128
ฟังก์ชันเกี่ยวกับการประมาณค่า ..............................................................................................130
ฟังก์ชันในการเปรียบเทียบจานวน .......................................................................................... 131
ฟังก์ชันการตรวจสอบ และจัดรูปแบบตัวเลข .......................................................................... 131
ฟังก์ชันเพิ่มเติมอื่นๆ ................................................................................................................ 132
อาร์เรย์แบบ Key/Value ที่ได้จากการใช้ฟังก์ชัน getdate ( ) ............................................... 137
ขั้นตอนการเขียนและอ่านข้อมูลในไฟล์ ...................................................................................147
ไฟล์โหมด ................................................................................................................................ 147
ฟังก์ชันที่ใช้ตรวจสอบเกี่ยวกับไฟล์ .......................................................................................... 158
ฟังก์ชันที่ใช้ตรวจสอบเวลาที่เกี่ยวข้องกับไฟล์ ......................................................................... 158
ค่าคีย์ของตัวแปร $_FILES ......................................................................................................165
ตัวรับข้อมูลที่สาคัญของฟอร์ม .................................................................................................169
แสดงแอตทริบิวต์เฉพาะแท็ก form ........................................................................................ 170
(10)

สำรบัญตำรำง (ต่อ)
ตำรำงที่
10.3
10.4
10.5
10.6
10.7
10.8
10.9
10.10
13.1
13.2
13.3
14.1
14.2
14.3
14.4
14.5
14.6
14.7
14.8
16.1
16.2

หน้ำที่
แสดงแอตทริบิวต์เฉพาะแท็ก input ....................................................................................... 172
แสดงแอตทริบิวต์เฉพาะแท็ก textarea .................................................................................. 174
แสดงแอตทริบิวต์เฉพาะแท็ก label ........................................................................................175
แสดงแอตทริบิวต์เฉพาะแท็ก legend .................................................................................... 175
แสดงแอตทริบิวต์เฉพาะแท็ก select ...................................................................................... 176
แสดงแอตทริบิวต์เฉพาะแท็ก OPTGROUP ............................................................................ 177
แสดงแอตทริบิวต์เฉพาะแท็ก OPTION ...................................................................................178
แสดงแอตทริบิวต์เฉพาะแท็ก button .................................................................................... 178
แสดงอีเวนต์ของ JavaScript สาหรับกาหนดให้กับอิลิเมนต์ .................................................. 229
แสดงอีเวนต์ของ JavaScript แบบพร็อปเพอร์ตี้ .................................................................... 231
แสดงตัวอย่างรหัสที่ใช้แทนปุ่มคีย์บอร์ด ..................................................................................234
แสดงชนิดข้อมูลของ MySQL ชนิดตัวเลข .............................................................................. 244
แสดงชนิดข้อมูลของ MySQL ชนิดสตริง ................................................................................ 245
แสดงชนิดข้อมูลของ MySQL ชนิด BLOB ............................................................................. 245
แสดงชนิดข้อมูลของ MySQL ชนิด SET และ ENUM ............................................................ 245
แสดงชนิดข้อมูลของ MySQL ชนิดวันเวลา ............................................................................ 246
แสดงแอททริบิวต์ของคอลัมน์ใน MySQL ............................................................................... 246
แสดงโอเปอร์เรเตอร์ที่ใช้งานร่วมกับคาสั่ง WHERE ................................................................ 254
แสดงฟังก์ชัน Aggregate สาหรับใช้ร่วมกับ GROUP BY ....................................................... 255
ตารางข้อมูล tblcatmember ................................................................................................ 282
ตารางข้อมูล tblmember ...................................................................................................... 282
(11)

สำรบัญภำพ
ภำพที่
1.1
1.2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
2.20
2.21
2.22
2.23
2.24
2.25
2.26

หน้ำที่
ผู้ร่วมพัฒนา PHP ........................................................................................................................ 2
ผู้ร่วมพัฒนา MySQL ...................................................................................................................6
รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์ผ่านโปรโตคอล HTTP ........12
รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์เพื่อเรียกเว็บเพจธรรมดา ... 12
การร้องขอการใช้งานจากไคลเอ็นท์ ไปยังเครื่องที่ให้บริการเป็น Web Server engine
ของ PHP ................................................................................................................................... 13
ภาณุพงศ์ ปัญญาดี ผู้พัฒนา AppServ ......................................................................................13
ขั้นตอนการติดตั้งโปรแกรม AppServ .......................................................................................16
แสดงรายละเอียดเงื่อนไขการ GNU License ........................................................................... 16
เลือกปลายทางการติดตั้งโปรแกรม AppServ ........................................................................... 17
เลือก Package Components ที่ต้องการติดตั้ง .......................................................................17
แสดงการกาหนดค่าคอนฟิกค่า Apache เว็บเซิร์ฟเวอร์ ........................................................... 18
แสดงการกาหนดค่าคอนฟิกของ MySQL Database ............................................................... 19
แสดงการดาเนินการติดตั้งโปรแกรม AppServ ......................................................................... 19
แสดงหน้าจอขั้นตอนสิ้นสุดการติดตั้งโปรแกรม AppServ ........................................................ 20
แสดงการสตาร์ทโปรแกรม Apache และ MySQL ...................................................................20
แสดงผลการทางานของ AppServ บนหน้าเว็บบราวเซอร์ ........................................................20
แสดงโฟลเดอร์องค์ประกอบต่างๆ ที่สาคัญของ AppServ ........................................................ 21
kai 'oswald' seidler ผู้พัฒนา XAMPP ................................................................................... 22
ขั้นตอนการติดตั้ง XAMPP ........................................................................................................ 22
ขั้นตอนการติดตั้ง XAMPP ในส่วนของการสร้าง Shortcut ใน Start menu และ Desktop...23
ขั้นตอนการติดตั้ง XAMPP ในส่วนของการทวนถามความถูกต้องของตาแหน่งติดตั้ง ............... 23
ขั้นตอนการติดตั้ง XAMPP ในส่วนของการติดตั้ง portable แบบ without drive letters..... 24
ขั้นตอนการติดตั้ง XAMPP แสดงผลการดาเนินการติดตั้ง XAMPP แบบพกพา ....................... 24
ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับโซนเวลาในไฟล์ php.ini และ my.ini ............ 25
ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับเปลี่ยนการใช้งานเพิ่มเติม ............................... 25
แสดงขั้นตอนการเปิด XAMPP Control Panel ....................................................................... 25
แสดงหน้าจอ XAMPP Control Panel เพื่อควบคุมโปรแกรมต่างๆ ที่เกี่ยวข้อง ......................26
แสดงผลการทางานของ XAMPP บนหน้าเว็บบราวเซอร์ .......................................................... 26
(12)

สำรบัญภำพ (ต่อ)
ภำพที่
2.27
2.28
4.1
5.1
5.2
5.3
5.4
5.5
5.6
7.1
8.1
9.1
10.1
10.2
10.3
10.4
10.5
10.6
10.7
10.8
10.9
10.10
11.1
13.1
13.2
13.3
14.1
14.2
14.3

หน้ำที่
แสดงการสร้างโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP ........................................................ 26
แสดงการบันทึกไฟล์ลงในโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP เพื่อทดสอบและใช้งาน... 27
แสดงตัวอย่างตัวดาเนินการและนิพจน์ ......................................................................................58
แสดงแผนภาพการไหล (Flow Chart) ของคาสั่ง if .................................................................. 68
แสดงแผนภาพการไหลของคาสั่ง if ... else .............................................................................. 69
แสดงแผนภาพการไหลของคาสั่ง if ... elseif ............................................................................ 70
แสดงแผนภาพการไหลของคาสั่ง while ................................................................................... 72
แสดงแผนภาพการไหลของคาสั่ง do ... while ......................................................................... 73
แสดงแผนภาพการไหลของคาสั่ง for ........................................................................................ 74
แสดงหน้าเว็บเพจสาหรับเริ่มต้น Upload ไฟล์ ...................................................................... 115
แสดงตัวอย่างผลลัพธ์การสร้างปฏิทินออนไลน์ ....................................................................... 143
แสดงการเปิดไฟล์รูปภาพ ........................................................................................................ 156
แสดงตัวอย่างตัวรับข้อมูลของฟอร์ม ....................................................................................... 170
แสดงตัวอย่างผลลัพธ์ของฟอร์มโดยใช้แท็ก input ชนิด "Text" ............................................. 172
แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก textarea ......................................................................173
แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก label ............................................................................174
แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก fieldset ในการจัดกลุ่มของแท็ก input .......................175
แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select ...................................... 176
แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTGROUP ................................................................ 177
แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select ...................................... 177
แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก button ........................................................................ 178
แสดงการจัดการข้อมูลจากฟอร์มทางด้านเซิร์ฟเวอร์ ...............................................................179
สร้างฟอร์มสาหรับการ Login กรณีศึกษาและประยุกต์ใช้งานเซสชั่น .....................................194
เปรียบเทียบการทางานแบบเดิม กับ AJAX ............................................................................ 213
โครงสร้างของ AJAX ในปัจจุบัน ............................................................................................. 213
หลักการทางานของ AJAX ...................................................................................................... 214
หน้าล็อกอินเพื่อเข้าสู่ระบบของ phpMyAdmin เวอร์ชัน 3.5.4 ............................................ 257
หน้าเพจหลังจากล็อกอินเข้าสู่ระบบ phpMyAdmin เวอร์ชัน 3.5.4 ..................................... 257
แสดงขั้นตอนการสร้างฐานข้อมูลใหม่ ..................................................................................... 258
(13)

สำรบัญภำพ (ต่อ)
ภำพที่
14.4
14.5
14.6
14.7
14.8
14.9
14.10
14.11
14.12
14.13
14.14
14.15
14.15

หน้ำที่
แสดงขั้นตอนการสร้างตารางใหม่ ........................................................................................... 258
แสดงขั้นตอนการสร้างขอบเขตข้อมูลในตาราง ....................................................................... 259
แสดงขั้นตอนการสร้างตารางและกาหนดขอบเขตข้อมูลในตาราง .......................................... 259
แสดงขั้นตอนการแทรกข้อมูลลงในตาราง ............................................................................... 260
แสดงตัวอย่างรายการสาหรับการแทรกข้อมูลลงในตาราง ...................................................... 260
แสดงขั้นตอนการอ่านข้อมูลในตาราง ......................................................................................261
แสดงขั้นตอนการเลือกข้อมูลเพื่อแก้ไขข้อมูล .......................................................................... 261
แสดงขั้นตอนการเลือกข้อมูลเพื่อลบข้อมูล ..............................................................................262
แสดงตัวอย่างการเลือกข้อมูลเพื่อแก้ไขโครงสร้างข้อมูล ..........................................................262
แสดงตัวอย่างการลบข้อมูลในตารางและลบตาราง ................................................................. 263
แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" ...................................................... 263
แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อค้นหาข้อมูล ........................... 264
แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อกาหนดสิทธิ์ ........................... 264
บทที่ 1
บทนำ
PHP คืออะไร
PHP ย่อมาจาก ''PHP Hypertext Preprocessor'' เป็นภาษา Server-Side
Script อีกภาษาหนึ่งเช่นเดียวกันกับ ASP ที่มีการทางานที่เครื่องคอมพิวเตอร์ฝั่ง
Server ซึ่งรูปแบบในการเขียนคาสั่งการทางานนั้นจะมีลักษณะคล้ายกับภาษา Perl
หรือภาษา C และสามารถใช้ร่วมงานกันกับ ภาษา HTML ได้อย่างมีประสิทธิภาพ
หมำยเหตุ ในการสร้างเว็บจะใช้ Script อยู่ 2 รูปแบบคือ
Server-Side Script เป็นลักษณะการทางานบนเครื่อง Server และแปลออกมาเป็นภาษา HTML เช่น
PHP, ASP, CGI
Client-Side Script เป็นลักษณะการทางานบนเครื่อง Client (เครื่องผู้ใช้) เช่น JavaScript, VBScript
PHP สำมำรถทำอะไรได้บ้ำง
ความสามารถของ PHP นั้นสามารถที่จะทางานในลักษณะ Dynamic Web ได้ทุกรูปแบบ
เหมือนกับ CGI หรือ ASP ไม่ว่าจะเป็นการจัดการดูแลระบบฐานข้อมูล ระบบรักษาความปลอดภัย การรับ
– ส่ง Cookies โดยที่ PHP นั้นสามารถที่จะติดต่อกับโปรแกรมจัดการฐานข้อมูลที่มีอยู่มากมาย ดังนี้
Adabas D
InterBase Solid
Microsoft Access
DBase
mSQL
Sybase
Empress
MySQL
Velocis
FilePro
Oracle
Unix dbm
Informix
PostgreSQL
MS SQL Server
แต่ความสามารถที่พิเศษกว่านี้ก็คือ PHP สามารถที่จะติดต่อกับบริการต่างๆ ผ่านทางโพรโตคอล
(Protocol) เช่น IMAP, SNMP, NNTP, POP3, HTTP และยังสามารถติดต่อกับ Socket ได้อีกด้วย
2 บทที่ 1 บทนา
ประวัติควำมเป็นมำของ PHP (History of PHP)

Rasmus Lerdorf

Zeev Suraski
Andi Gutmans
ภำพที่ 1.1 ผู้ร่วมพัฒนา PHP
ที่มา: http://lerdorf.com/pics/rl.jpg ,
http://tec20ten.files.wordpress.com/2010/02/dsc_0156-copy.jpg
และ http://tech.ccidnet.com/col/attachment/2010/6/2037287.jpg
(W. Jason Gilmore: 2) PHP ถูกคิดค้นขึ้นมาในปี 1995 โดยนักพัฒนาที่ชื่อว่า Rasmus
Lerdorf แต่เดิมนั้นเขาได้พัฒนาเว็บเพจของเขาเองเพียงเพื่อแนะนาประวัติส่วนตัวออนไลน์ของเขาด้วย
ภาษาสคริปต์ Perl/CGI แต่ภาษาสคริปต์ดังกล่าวค่อนข้างยุ่งยากและมีข้อจากัด เป็นเหตุเริ่ มต้นให้เขา
พัฒนาภาษาสคริปต์ใหม่ ง่ายต่อการพัฒนา ในช่วงเริ่มต้นพัฒนานั้น ทาหน้าที่เพียง 2 ประการเท่านั้น คือ
1)เพื่อต้องการทราบถึงผู้เข้าชมเว็บของเขามากน้อยเพียงใด และ 2)เพื่อแสดงผลจานวนผู้เข้าชมเว็บเพจ
เครื่องมือในครั้งนั้นเขาได้ตั้งชื่อว่า PHP-toolset (Personal Home Page toolset)
PHP-toolset มีเสียงตอบรับจากผู้ใช้งานเป็นจานวนมาก และเขายังคงพัฒนาอย่างต่อเนื่องมี
การปรับแต่งการแปลงและส่งข้อมูลตัวแปรผ่าน HTML form และเปลี่ยนภาษาที่ใช้ในการพัฒนา โดยใช้
ภาษาซี (C Language) แทนภาษา Perl และเผยแพร่ผลงานของเขาในเดือนพฤศจิกายน ค.ศ.1997 เป็น
เวอร์ชัน PHP 2.0 หรือรู้จักกันในนาม Personal Home Page/Form Interpreter (PHP/FI) และได้เสียง
ตอบรับที่ดีจากเหล่าโปรแกรมเมอร์ทั่วโลก
PHP เวอร์ชันใหม่ ได้มีการเปลี่ยนแปลงและมีทีมพัฒนาทีมงาน คือ Zeev Suraski และ Adni
Gutmans ทาการวิเคราะห์พื้นฐานของ PHP/FI แต่ยังคงแนวคิดเดิม คือ ทางานผสมผสานร่วมกับภาษา
HTML และเพิ่มความสมบูรณ์ของภาษา PHP มากขึ้น เป็นเวอร์ชัน 3 และเผยแพร่ในเดือนมิถุนายน ค.ศ.1998
PHP ได้มีการพัฒนาอย่างต่อเนื่องมีหลายร้อยฟังก์ชั นที่เพิ่มเข้ามาและจานวนผู้ใช้ที่กาลังเติบโต
ในปี 1999 บริษัท Netcraft (http://www.netcraft.com/) ได้ทาการวิจัยทางอินเทอร์เน็ตและวิเคราะห์
ข้อมูล จากรายงานพบว่า มีผู้ใช้งานภาษา PHP มากกว่า 1 ล้านเว็บไซต์ ทาให้ PHP ได้รับความนิยมมาก
ที่สุด และทีมพัฒนา Zeev Suraski และ Andi Gutmans ได้มีความคิดริเริ่มต้องการให้ PHP ทาการ
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 1 บทนา 3
ประมวลผลได้เร็วขึ้นในลักษณะ parser PHP เพื่อแยกประมวลผล ร่วมกับ Zend Engine ของบริษัท
Zend Technology จากัด (http://www.zend.com/) เป็นเครื่องมือหลักในการขับเคลื่อนสาคัญ ผลได้
เป็น PHP เวอร์ชัน 4
PHP เวอร์ชัน 4
เมื่อวันที่ 22 พฤษภาคม ค.ศ.2000 ประมาณ 18 เดือน หลังจากที่เผยแพร่ใช้งาน PHP เวอร์ชัน
4 อย่างเป็นทางการ หลายคนถือว่าภาษา PHP เป็นภาษาที่มีเสถียรภาพสูงภาษาหนึ่งและได้รับความนิยม
อย่างแพร่หลาย ราวๆ ช่วงปลายเดือน บริษัท Netcraft ได้ประมาณการว่า PHP จะมีผู้นาไปติดตั้งและใช้
งาน ประมาณ 3.6 ด้านโดเมน (Domain) สาหรับ PHP เวอร์ชัน 4 ได้เพิ่มและปรับปรุงคุณสมบัติ
ดังต่อไปนี้
กำรจัดกำรทรัพยำกรที่ดีขึ้น (Improved resource handling)
ปรับแก้หนึ่งในปัญหาหลักของเวอร์ชัน 3 ให้มีความยืดหยุ่น สามารถนาไปออกแบบและ
ประยุกต์ใช้กับระบบงานขนาดใหญ่ ในเวอร์ชันก่อนหน้าไม่ได้มีเจตนาจะใช้ในองค์กรขนาดใหญ่ แต่เนื่อง
ด้วยมีการใช้อย่างกว้างขวางและประโยชน์ ทาให้ผู้ พัฒ นาได้คิดและพัฒ นาภาษาให้ส ามารถใช้งานได้
หลากหลาย
สนับสนุนกำรเขียนโปรแกรมเชิงวัตถุ (Object-oriented support)
PHP เวอร์ชัน 4 สามารถพัฒนาระบบในลักษณะของการเขียนโปรแกรมเชิงวัตถุ ซึ่งมีฟังก์ชันที่ช่วย
ในการทางาน แต่ยังไม่ครอบคลุมการทางานมากเท่าไหร่ อย่างไรก็ตามคุณสมบัติใหม่มีบทบาทสาคัญและ
ดึงดูดให้ผู้ใช้งานหรือนักพัฒนาระบบ ที่ต้องการพัฒนาโปรแกรมเชิงวัตถุแบบดั้งเดิม หรือเรียกว่า ภาษา OOP
นอกจากนั้นยังมีคุณสมบัติ เช่น ระบบแจ้งเตือน overloading และ run-time class ที่ช่วยป้องกันปัญหา
เวลาพัฒนาระบบ สาหรับการเขียนโปรแกรมเชิงวัตถุที่สมบูรณ์แบบนั้น ควรใช้ PHP เวอร์ชัน 5
สนับสนุนกำรจัดกำรเซสชั่น (Native session-handling support)
การจัดการเซสชั่น HTTP ใช้ได้กับทั้งในเวอร์ชัน 3.x โดยผู้ใช้สามารถเรียกใช้งานผ่านบน phplib
(http://phplib.sourceforge.net) แต่สาหรับเวอร์ชัน 4 ผู้ใช้งานสามารถใช้งานได้เลย ซึ่งได้รวม
ความสามารถไว้แล้ว คุณลักษณะนี้ได้มาจากการสารวจกิจกรรมและความพึงพอใจของผู้ใช้ส่วนใหญ่
กำรเข้ำรหัส (Encryption)
นาไลบรารี่มาจาก MCrypt (http://mcrypt.sourceforge.net) มารวมไว้ใน PHP เวอร์ชัน 4
ก่อนการเผยแพร่ ผู้ใช้สามารถเลือกใช้รูปแบบการเข้ารหัสได้แบบ hash โดยมีอัลกอริทึมที่ได้รวมไว้ ได้แก่
Blowfish, MD5, SHA1 และ TripleDES ฯลฯ
สนับสนุน ISAPI (ISAPI support)
สนับสนุน ISAPI ให้ผู้ใช้สามารถใช้ PHP ร่วมกับเว็บเซิร์ฟเวอร์ของไมโครซอฟท์ คือ IIS และ
Apache เว็บเซิร์ฟเวอร์
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
4 บทที่ 1 บทนา
สนับสนุน COM / DCOM (Native COM/DCOM support)
เปิดโอกาสให้ผู้ใช้งานสามารถเรียกใช้และทางานร่วมกันกับโปรแกรมประยุกต์บนระบบปฏิบัติ
Windows
สนับสนุนกำรทำงำนร่วมกับภำษำ Java (Native Java support)
PHP เวอร์ชัน 4 ได้เพิ่มประสิทธิภาพในการทางานร่วมกับภาษา Java
รองรับไวยำกรณ์และนิพจน์ภำษำ Perl (Perl Compatible Regular Expressions (PCRE)
library)
ภาษา Perl เป็นภาษาที่มีความยาวและซับซ้อน มีรูปประโยคที่เป็นอิสระ แต่การทางานของภาษา
Perl เป็นภาษาที่ยอมรับอย่างกว้างขวาง มีประสิทธิภาพการ และมีบทบาทสาคัญ ดังนั้น PHP เวอร์ชัน 4
ได้รวม ฟังก์ชันการทางานของภาษา Perl ไว้ด้วย เพื่อเป็นทางเลือกหนึ่งสาหรับการพัฒนาระบบ และทา
ให้ใช้งานได้ง่ายขึ้น
นอกจากคุณสมบัติต่างๆ เหล่านี้ ยังมีอีกหลายร้อยฟังก์ชันที่ถูกเพิ่มเข้ามาใน PHP เวอร์ชัน 4
รองรับความหลากหลาย ไลบรารี่ และโมดูลดีๆ มากมาย จากแหล่งต่างๆ เปิดใจรับสิ่งดีๆ ที่มีอยู่ มากมาย
ในสากล นามาเพิ่มขีดความสามารถของตัวเอง หลายร้อยฟังก์ชันเหล่านี้จะกล่าวถึงรายละเอียดการใช้งาน
ต่อไปในหนังสือเล่มนี้ ผู้แต่งหนังสือเล่มนี้หวังเป็นอย่างยิ่งว่า ผู้อ่านจะเปิดใจรับสิ่งดีๆ ที่มอบให้แล้วนาไป
พัฒนาตนเองให้มีความรู้ความสามารถ เพิ่มประสิทธิภาพแก่ตนเอง เหมือนดังเช่น PHP
PHP เวอร์ชัน 5
PHP เวอร์ชัน 5 ยังคงวิวัฒนาการไม่หยุดยั้งถึงแม้ว่ารุ่นก่อนหน้าจะมีความสามารถมากมาย
มหาศาลโดยการเพิ่มฟังก์ชัน ไลบรารี่ และอื่นๆ อีกมากมาย มาถึง PHP เวอร์ชัน 5 ซึ่งมีการปรับปรุงอีก
มากมายเช่นเดิม เพิ่มคุณสมบัติอีกหลายประการ ผู้แต่งเองยังใช้ความสามารถของเวอร์ชัน 4 ยังไม่หมด
เวอร์ชัน 5 ก็ออกมาทาหัวใจหวั่นไหวใคร่รู้
PHP 5 มีการปรับปรุงความสามารถเพิ่มเติมขึ้นมาจาก PHP 4 มากมาย ในหัวข้อนี้จะกล่าวถึง
ความสามารถที่สาคัญหลัก ๆ ที่เพิ่มเติมขึ้นมาใน PHP 5 ดังนี้
1. ความสามารถทางด้าน OOP (Object-Oriented Programming) ความสามารถทางด้านการ
เขียนโปรแกรมเชิงวัตถุหรือ OOP ได้มีมาตั้งแต่ PHP 3 แล้ว และได้ปรับปรุงต่อเนื่องมาจนถึง PHP 4 แต่
ความสามารถทางด้าน OOP ใน PHP 4 นั้นยังไม่สมบูรณ์นักและยังขาดฟีเจอร์ที่สาคัญในหลายด้าน เช่น
การประกาศ Constructors และ Destructors การกาหนดขอบเขตของตัวแปรและเมธอดเป็น public,
protected, private เป็นต้น โดยใน PHP 5 ได้ปรับปรุงความสามารถทางด้าน OOP ให้สมบูรณ์ขึ้น ทา
ให้โปรแกรมเมอร์สามารถเขียน PHP โดยใช้หลักการของ OOP ได้อย่างสมบูรณ์แบบ
2. เพิ่ม MySQLi Extension MySQL นั้นเป็นระบบจัดการฐานข้อมูลที่ได้รับความนิยมในการ
นามาพัฒนา Web Application ร่วมกับ PHP มานาน โดยใน MySQL เวอร์ชัน 4.1 และเวอร์ชัน 5 ได้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 1 บทนา 5
เพิ่มเติมฟีเจอร์ที่สาคัญมากมาย เช่น Prepared statement การเชื่อมต่อฐานข้อมูลโดยใช้ SSL การใช้
Multi-query, Transaction เป็นต้น ดังนั้น PHP 5 จึงได้มีการเพิ่ม MySQL Extention ขึ้นมาใหม่โดยใช้
ชื่อว่า MySQLi จะช่วยให้สามารถนาความสามารถใหม่ ๆ ของ MySQL ออกมาใช้ได้อย่างเต็มที่
3. ผนวก SQLite ไว้ใน PHP แม้ว่า MySQL จะเป็นระบบจัดการฐานข้อมูลที่ได้รับความนิยมและ
นามาใช้ร่วมกับ PHP มากที่สุด แต่ใน PHP 5 นั้นได้ผนวกรวมเอา SQLite ซึ่งเป็นระบบจัดการฐานข้อมูล
ขนาดเล็กเข้าไว้ด้วย โดยที่ผู้ใช้ไม่ต้องติดตั้งระบบจัดการฐานข้อมูลเพิ่มเติมก็สามารถเขียนโปรแกรม PHP
เพื่อติดต่อกับฐานข้อมูลได้เลย ซึ่งช่วยอานวยความสะดวกในการเขียนโปรแกรมได้มากทีเดียว
4. สนับสนุน XML และ SOAP อย่างเต็มประสิทธิภาพ ใน PHP 5 มีการปรับปรุงความสามารถ
ของ XML เพิ่มเติมโดยจะมีไลบรารี libxml2 ซึ่งเป็นไลบรารีมาตรฐานที่ PHP ใช้ติดต่อกับ XML
นอกจากนี้ยังปรับปรุงและเพิ่มเติมในส่วนของ DOM(Document Object Model), XSLT (Extensible
Stylesheet Language Transformations) และ SimpleXML โดยการออกแบบให้สามารถทางาน
ร่วมกับ XML ได้ดียิ่งขึ้น นอกจากนี้ใน PHP 5 ยังสนับสนุน SOAP ซึ่งเป็นส่วนประกอบสาคัญในการ
พัฒนาเว็บเซอร์วิส
5. การตรวจจับและจั ดการข้อผิดพลาด ใน PHP 5 มีการพัฒนาระบบตรวจจับและจัดการ
ข้อผิดพลาดขึ้นมา เรียกว่า exception handling ซึ่งจะคล้ายกับที่มีในภาษา Java และ C++ ซึ่งจะช่วย
อานวยความสะดวกและเพิ่มประสิทธิภาพในการตรวจสอบและจัดการข้อผิด พลาดที่อาจจะเกิดขึ้ นในการ
รันโปรแกรมได้
6. เพิ่ม Iterator Iterator ใน PHP 5 เป็นการใช้คาสั่ง foreach ในการวนลูปร่วมกับข้อมูลชนิด
ต่าง ๆ ได้หลายชนิด ไม่ว่าจะเป็นอ็อบเจ็กต์ต่าง ๆ เอกสาร XML โครงสร้างไดเรกทอรี่หรือผลลัพธ์จากการ
query ฐานข้อมูล เป็นต้น
เป็นอย่างไรกันบ้างครับกับความสามารถใหม่ ๆ ของ PHP 5 คงทาให้ผู้อ่านเห็นภาพรวมที่ชัดเจน
ขึ้นและหลายคนอาจจะอยากทดลองใช้กันบ้างแล้ว ซึ่ง นอกจากความสามารถหลัก ๆ ทั้ง 6 ข้อที่ได้อธิบาย
ไว้ข้างต้น PHP 5 ยังมีความสามารถที่เพิ่มเติมขึ้นใหม่อีกมากมายที่ยังไม่ได้อธิบายไว้ ณ ที่นี้ เช่น การใช้
ส่วนขยายเพิ่มเติม Tidy เพื่อให้มั่นใจได้ว่าผลลัพธ์ที่แสดงออกมานั้นอยู่รูปแบบของ HTML หรือ XHTML
ที่ถูกต้อง การจัดการหน่วยความจาที่ดีขึ้นรวมไปถึงการปรับปรุงและแก้ไขข้อผิดพลาดเดิมใน PHP 4 อีก
หลายจุดให้ดียิ่งขึ้น
PHP เวอร์ชัน 6
PHP เวอร์ชัน 6 ปัจจุบันกาลังอยู่ในขั้นพัฒนาและปรับปรุงขณะนี้ยังเป็น Beta Version ยังคงใช้
Zend engine เป็นแกนหลัก การเปลี่ยนแปลงที่สาคัญ คือ
1. ไม่มีคุณสมบัติ register_global, magic_quote_gpc และ safe_mode

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
6 บทที่ 1 บทนา
2. ยกเลิกตัวแปร HTTP_*_VARS ทั้งหมด เช่น HTTP_POST_VARS และ HTTP_COOKIE_VARS
เป็นต้น
3. สนับสนุนการทางานกับสตริงแบบ Unicode
4. เพิ่มชนิดข้อมูลเลขจานวนเต็มขนาด 64 บิต
MySQL คืออะไร
MySQL
เป็ น ระบบจั ด การฐานข้ อ มู ล เชิ ง สั ม พั น ธ์
(Relational Database Management System) โดยใช้ภาษา
SQL แม้ว่า MySQL เป็นซอฟต์แวร์โอเพนซอร์ส แต่แตกต่างจาก
ซอฟต์แวร์โอเพนซอร์สทั่วไป โดยมีการพัฒนาภายใต้บริษัท MySQL
AB ในประเทศสวีเดน โดยจัดการ MySQL ทั้งในแบบที่ให้ใช้ฟรี
และแบบที่ใช้ในเชิงธุรกิจ
MySQL สร้างขึ้นโดยชาวสวีเดน 3 คน และชาวฟินแลนด์ ชื่อ David Axmark, Allan Larsson
และ Michael "Monty" Widenius.

David Axmark

Allan Larsson
Michael "Monty" Widenius
ภำพที่ 1.2 ผู้ร่วมพัฒนา MySQL
ที่มา: http://www.mccullagh.org/db9/10d-1/david-axmark-mysql.jpg
http://www.wire2011.eu/upload/participant/290/Allan_Larsson.JPG
และ http://www.abclinuxu.cz/images/screenshots/2/1/150712-ulf-michael-montywidenius-13235.jpg
ปัจจุบันบริษัทซันไมโครซิสเต็มส์ (Sun Microsystems, Inc.) เข้าซื้อกิจการของ MySQL AB
เรียบร้อยแล้ว ฉะนั้นผลิตภัณฑ์ภายใต้ MySQL AB ทั้งหมดจะตกเป็นของบริษัทซันไมโครซิสเต็มส์
ชื่อ "MySQL" อ่านออกเสียงว่า "มายเอสคิวเอล" (maɪˌɛskjuːˈɛl) หรือ "มายเอสคิวแอล"
(ในการอ่านอักษร L ในภาษาไทย) ซึ่งทางซอฟต์แวร์ไม่ได้อ่าน มายซีเควล หรือ มายซีควล เหมือนกั บ
ซอฟต์แวร์จัดการฐานข้อมูลตัวอื่น

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 1 บทนา 7
รุ่นของผลิตภัณฑ์
รุ่นของผลิตภัณฑ์นั้นแบ่งออกมาได้ 3 สายการผลิ ต ได้แก่ เวอร์ชันใช้ฟรี เวอร์ชันการค้า และ
เวอร์ชันที่สนับสนุนกับผลิตภัณฑ์ SAP (MAX DB) ความแตกต่าง คือ เวอร์ชัน community นั้นสามารถ
นาไปใช้งานได้ฟรีแต่ขาดการสนับสนุนหรือการช่วยเหลือเมื่อมีปัญหาเกิดขึ้น เวอร์ชันที่เป็นคอมเมอร์เชียลนั้น
ให้บริการด้านความสนับสนุนเมื่อมีปัญหา (ซื้อบริการ) สรุปคร่าวๆ ประเภทของ MySQL ให้เลือกใช้ดังนี้
MySQL Enterprise
MySQL Cluster
MySQL Embedded
MySQL Community (opensource)
ควำมสำมำรถที่เพิ่มขึ้น
ในเวอร์ชัน 5.0 มีความสามารถหลายอย่างที่สาคัญสาหรับระบบฐานข้อมูลขนาดใหญ่หรือระดับ
องค์กร (Enterprise Feature) เช่น Store Procedure, database trigger, database view,
database schema ซึ่งได้มีการปรับเพิ่มประสิทธิภาพในส่วนของตารางและการทาดัชนี (index) ขึ้นมา
อีก ปัจจุบันเวอร์ชัน community หรือเวอร์ชันที่เสถียร (stable) 5.0 และเวอร์ชันทดสอบคือ 5.1 beta
release และ 5.2 Alpha
ตั้งแต่เวอร์ชัน 5.1 เริ่มสนับสนุนการทา Partition Database ตารางเวลาสาหรับเหตุการณ์ต่างๆ
(Event schedule)
ประเภทกำรจัดเก็บข้อมูล (Database Storage Engine) ที่สนับสนุน
MyISAM ค่าปกติ (default)
InnoDB สนับสนุนการทา ทรานแซคชั่น (transaction) แบบ ACID
Memory การจัดเก็บในหน่วยความจา ใช้เป็นตารางชั่วคราวเพื่อความรวดเร็ว เนื่องจากเก็บไว้ใน
หน่วยความจา ทาให้มีความเร็วในการทางานสูงมาก
Merge เป็นการรวม Table หลาย ๆ ตัวให้แสดงผล หรือแก้ไข เสมือนเป็นข้อมูลจาก Table เดียว
Archive เหมาะสาหรับการจัดเก็บข้อมูลพวก log file,ข้อมูลที่ไม่ต้องมีการ คิวรี่ (query) หรือใช้
บ่อยๆ เช่น log file เพื่อประโยชน์ในการตรวจสอบย้อนหลัง (Security Audit Information)
Federated สาหรับการจัดเก็บแบบปลายทาง (remote server) แทนที่จะเป็นการจัดเก็บแบบ
local เหมือนการจัดเก็บ (Storage) แบบอื่นๆ
NDB สาหรับการจัดเก็บแบบ คลัสเตอร์ (cluster)
CSV เก็บข้อมูลจาก Text ไฟล์โดยอาศัยเครื่องหมาย คอมมา (comma) เป็นตัวแบ่งฟิลด์
ชนิดของข้อมูลที่สนับสนุน
ข้อมูลชนิดตัวเลข

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
8 บทที่ 1 บทนา
 BIT ใช้สาหรับเก็บข้อมูลชนิดเลขสองที่มีสัญลักษณ์เพียงสองตัว ประกอบด้วย 0 (ศูนย์)
กับ 1 (หนึ่ง) บางครั้งอาจหมายถึงการที่มีโอกาสเลือกได้เพียง 2 ทาง เช่น ปิดกับเปิด
ไม่ใช่กับใช่ เท็จกับจริง ซ้ายกับขวา เป็นต้น
 TINYINT ใช้สาหรับจัดเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 8 บิต
 SMALLINT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 16 บิต
 MEDIUMINT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 24 บิต
 INT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 32 บิต
 BIGINT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 64 บิต
 FLOAT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนจริง (เลขที่มเศษทศนิยม) ขนาด 32 บิต
ี
 DOUBLE ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนจริง เช่นเดียวกับ FLOAT ขนาด 64 บิต
ข้อมูลชนิดวันที่และเวลา
 DATETIME ใช้สาหรับจัดเก็บข้อมูล วันเดือนปีและเวลา ขนาด 64 บิต แสดงผลใน
รูปแบบ YYYY-MM-DD HH:MM:SS
 DATE ใช้สาหรับจัดเก็บข้อมูลเฉพาะข้อมูลวันเดือนปี ขนาด 24 บิต แสดงผลในรูปแบบ
YYYY-MM-DD
 TIME ใช้สาหรับจัดเก็บข้อมูลเฉพาะข้อมูลเวลา ขนาด 24 บิต แสดงผลในรูปแบบ
HHH:MM:SS โดยที่ HHH จะคืน ค่าจาก -838 ถึง 838
 TIMESTAMP ใช้สาหรับเก็บข้อมูลชนิดวันที่และเวลา เช่นเดียวกับ DATETIME แต่จะ
เก็ บ ในรู ป แบบของ YYYYMMDDHHMMSS หรื อ YYMMDDHHMMSS หรื อ
YYYYMMDD หรือ YYMMDD แล้วแต่ว่าจะระบุค่าแอตทริบิวต์ TIMESTAMP[(M)] โดย
กาหนด M เป็น 14 หรือ 12 หรือ 8
 YEAR ใช้สาหรับเก็บข้อมูลปีเท่านั้น ขนาด 8 บิต แสดงผลในรูปแบบ YYYY ซึ่งเป็นค่า
ตั้งแต่ 1901 - 2155 เท่านั้น
ข้อมูลชนิดสตริง
 CHAR ใช้สาหรับเก็บข้อมูลชนิดสตริง ขนาดสูงสุดได้ไม่เกิน 255 อักขระ ถ้าอักขระที่ใช้
ยาวไม่เท่ากับที่กาหนดไว้ อักขระที่เหลือ จะถูกแทนที่ด้วยช่องว่าง
 VARCHAR (ย่อมาจาก Variable Character Field หมายถึง กลุ่มข้อมูลตัวอักขระที่ไม่
สามารถระบุความยาวได้ ) ใช้สาหรับเก็บข้อมูลชนิดสตริง ชนิดข้อมูลประเภท varchar
สามารถเก็บข้อมูลตัวอักขระขนาดเท่าใดก็ได้ที่ไม่เกินความยาวที่จากัดไว้ (เก็บข้อมูล
ตามที่รับมาจริงเท่านั้น) ขนาดสูงสุดได้ไม่เกิน 255 อักขระ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 1 บทนา 9
 BINARY ใช้ส าหรั บ เก็บข้อมูล ชนิดเลขสองที่มีสั ญลั กษณ์เพียงสองตัว เหมือน BIT
ประกอบด้วย 0 (ศูนย์) กับ 1 (หนึ่ง) บางครั้งอาจหมายถึงการที่มีโอกาสเลือกได้เพียง 2
ทาง เช่น ปิดกับเปิด ไม่ใช่กับใช่ เท็จกับจริง ซ้ายกับขวา เป็นต้น
 VARBINARY ใช้สาหรับเก็บข้อมูลชนิดสตริง ขนาดสูงสุดไม่เกิน 8,000 อักขระ มีลักษณะ
การเก็บคล้าย VARCHA คือ การเก็บข้อมูลตามที่รับมาจริงเท่านั้น
 TINYTEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง ขนาดสูงสุดไม่เกิน 255 อักขระ สามารถใช้
งานฟีเจอร์ FULL TEXT SEARCH ของ MySQL
 TEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง เช่นเดียวกับ TINYTEXT ขนาดสูงสุดไม่เกิน 65,535
อักขระ (64 KB) เหมาะสาหรับเก็บข้อมูลจาพวกเนื้อหาทีมีความยาวหรือจานวนมาก
่
 MEDIUMTEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง เช่นเดียวกับ TINYTEXT ขนาดสูงสุดไม่
เกิน 16,777,215 อักขระ (16 MB)
 LONGTEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง เช่นเดียวกับ TINYTEXT ขนาดสูงสุดไม่เกิน
4,294,967,295 อักขระ (4 GB)
 ENUM ใช้สาหรับ เก็บ เซตของข้อมูลชุดหนึ่งที่มีจานวนสมาชิกที่กาหนดไว้แน่นอน
และทราบค่าทุกตัว มักจะเป็นข้อมูลที่มีลักษณะคงที่ ขนาดสูงสุดไม่เกิน 65,535 อักขระ
 SET ใช้สาหรับเก็บข้อมูลที่เป็นกลุ่มของข้อมูลที่ยอมให้เลือกได้ 1 ค่าหรือหลายๆ ค่า ซึ่ง
สามารถกาหนดได้ถึง 64 ค่า
ข้อมูลชนิด BLOB (Binary Large Object)
 TINYBLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี ได้แก่ ไฟล์ข้อมูลต่างๆ เช่น ไฟล์รูปภาพ
ไฟล์มัลติมีเดีย เป็นต้น คือ ไฟล์อะไรก็ตามที่อัพโหลดผ่านฟอร์มอัพโหลดไฟล์ในภาษา
HTML ขนาดสูงสุดไม่เกิน 256 ไบต์
 BLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี เช่นเดียวกับ TINYBLOB ขนาดสูงสุดได้ไม่เกิน
64,000 ไบต์
 EDIUMBLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี เช่นเดียวกับ TINYBLOB ขนาดสูงสุดได้
ไม่เกิน 16 เมกะไบต์ (16 MB)
 LONGBLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี เช่นเดียวกับ TINYBLOB ขนาดสูงสุดได้ไม่
เกิน 4 กิกะไบต์ (4 GB)
หมำยเหตุ
การกาหนดชนิด ค่าสูงสุด ค่าต่าสุด และตัวอย่างการใช้งาน สามารถอ่านรายละเอียดเพิ่มเติม ได้
ในบทที่ 14 เรื่องฐานข้อมูล MySQL และการใช้งาน phpMyAdmin

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
10 บทที่ 1 บทนา
กำรใช้งำน
MySQL เป็นที่นิยมใช้กันมากสาหรับฐานข้อมูลสาหรับเว็บไซต์ เช่น มีเดียวิกิ และ phpBB และ
นิยมใช้งานร่วมกับภาษาโปรแกรม PHP เป็นหลัก ดังนั้นจะเห็นได้จากคู่มือคอมพิวเตอร์ต่างๆ ที่จะสอน
การใช้งาน MySQL และ PHP ควบคู่กันไป นอกจากนี้ หลายภาษาโปรแกรมที่สามารถทางานร่วมกับ
ฐานข้อมูล MySQL และรวมถึง ภาษาซี (C Language) ซีพลัสพลัส (C++) ซีชาร์ป (C#) ปาสคาล
(Pascal) ภาษาจาวา (Java Language) ภาษาเพิร์ล (Perl Language) พีเอชพี (PHP) ไพทอน (Python)
รูบี (Ruby) และภาษาอื่น ใช้งานผ่าน API สาหรับโปรแกรมที่ติดต่อผ่าน ODBC หรือ ส่วนเชื่อมต่อกับ
ภาษาอื่น (database connector) เช่น ASP สามารถเรียกใช้ MySQL ผ่านทาง MyODBC, ADO,
ADO.NET เป็นต้น

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2
หลักการทางานของ PHP
ภาษา PHP นั้น ทางานอยู่บนฝั่งเซิร์ฟเวอร์ (Server) จะไม่สามารถเห็นโค๊ดของภาษา PHP ที่
เครื่องคอมพิวเตอร์ของไคลเอ็นท์ได้เลย เพราะว่าระหว่างที่ใช้งานเว็บบราวเซอร์เพื่อเรียกชมเว็บไซต์นั้น ใน
ฝั่งของเซิร์ฟเวอร์ จะทาการประมวลผลภาษา PHP และส่งผลลัพธ์ที่ได้ คือ คาสั่ง HTML หลังจากนั้นจะ
ส่ง HTML ที่ได้จากการประมวลผลแล้วนั้นมาให้กับเว็บบราวเซอร์ของไคลเอ็นท์ แล้วก็จะแสดงผล HTML
ให้เห็นเป็นรูปร่างเว็บ และเมื่อ View Source ในฝั่งไคลเอ็นท์ จะเห็นโค๊ดของ HTML เพียงอย่างเดียว แต่
ไม่เห็นโค๊ด PHP เลย สามารถสรุปขั้นตอนและหลักการทางานของ PHP ได้ดังต่อไปนี้
1) เว็บเซิร์ฟเวอร์ (Web Server) คือ โปรแกรมที่อยู่และทางานบนเครื่องฝั่งเซิร์ฟเวอร์ ทาหน้าที่
ในการรับคาสั่งจากการร้องขอของไคลเอ็นท์ (Client) (โดยผู้ใช้จะเรียกชมหน้าเว็บไซต์ได้โดยใช้โปรโตคอล
HTTP ผ่านทางเว็บบราวเซอร์) และประมวลผลการทางานจากการร้องขอดังกล่าว แล้วส่งข้อมูลกลับไปยัง
เครื่องของไคลเอ็นท์ ที่ร้องขอ สรุป ก็คือ เว็บเซิร์ฟเวอร์ คือ โปรแกรมที่คอยให้บริการแก่ ไคลเอ็นท์ ที่ร้อง
ขอข้อมูลเข้ามาโดยผ่านเว็บบราวเซอร์ หรือ จากการร้องขอโดยโปรโตคอล HTTP ดังกล่าว ซึ่งเว็บที่เขียนก็
สามารถเขียนได้หลายภาษา หลายรูปแบบ การเขียนภาษา PHP ระบบจะสามารถทางานได้ก็จะต้องมี
เว็บเซิร์ฟเวอร์ เป็นตัว Run Engine ของภาษานั้นๆ อีกทีหนึ่ง ดังนั้นถ้าต้องการให้ คอมพิวเตอร์สามารถ
Run ภาษา PHP ได้นั้น จะต้องจาลองเครื่องคอมพิวเตอร์ให้เป็นเซิร์ฟเวอร์ โดยใช้โปรแกรมเว็บเซิร์ฟเวอร์
ซึ่งจะกล่าวถึงในหัวข้อถัดไป (สาหรับในหนังสือเล่มนี้จะใช้โปรแกรม AppServ เป็นโปรแกรมที่ทาหน้าที่
จาลองเซิร์ฟเวอร์) รวมถึงรูปแบบ และวิธีการเข้าถึงข้อมูล จะเรียกใช้ผ่านบริการจากโปรโตคอล HTTP
(Hypertext Transfer Protocol) เพื่อให้ผู้ใช้สามารถอ่านข้อมูล ทั้งภาพและเสียง จากเครื่องบริการผ่าน
เว็บบราวเซอร์ เช่น บริการ http://www.freebsd.sru.ac.th หรือ http://www.sru.ac.th เป็นต้น
เครื่องเว็บเซิร์ฟเวอร์ดังกล่าวที่รอรับคาร้องขอจากเครื่องไคลเอ็นท์ ผ่านทาง เว็บบราวเซอร์ก็จะทาการ
ประมวลผลและส่งข้อมูลที่ประมวลผลได้กลับไปยังเครื่องไคลเอ็นท์ ที่จะส่งไปอาจเป็นเว็บเพจ ประเภท
ภาพหรือเสียง เป็นต้น
2) หลักการทางานของเว็บเซิร์ฟเวอร์ มีลักษณะเช่นเดียวกันกับบริการอื่นๆ ของอินเทอร์เน็ต คือ
อยู่ในรูปแบบไคลเอ็นท์-เซิร์ฟเวอร์ (Client-Server) โดยมีโปรแกรมเว็บไคลเอ็นท์ (Web Client) ทา
หน้าที่เป็นผู้ร้องขอบริการ และมีโปรแกรมเว็บเซิร์ฟเวอร์ ทาหน้าที่เป็นผู้ให้บริการ โปรแกรมเว็บไคลเอ็นท์
ก็คือโปรแกรมเว็บบราวเซอร์ (Web Browser) ในเครื่องของผู้ใช้นั่นเอง สาหรับโปรแกรมเว็บเซิร์ฟเวอร์นั้น
จะถูกติดตั้งไว้ในเครื่องของผู้ให้บริการเว็บไซต์ (มักเรียกเครื่องคอมพิวเตอร์ที่ติดตั้งโปรแกรมเว็บเซิร์ฟเวอร์
12 บทที่ 2 หลักการทางานของ PHP
เพื่อให้บริการ WWW ว่า "เว็บเซิร์ฟเวอร์ " เช่นเดียวกัน) การติดต่อระหว่างโปรแกรมเว็บบราวเซอร์กับ
โปรแกรมเว็บเซิร์ฟเวอร์จะกระทาผ่านโปรโตคอล HTTP (Hypertext Transfer Protocol) ดังภาพที่ 2.1

ภาพที่ 2.1 รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์ผ่านโปรโตคอล HTTP
3) กลไกการทางาน สาหรับเว็บเพจธรรมดาที่โดยปกติมีนามสกุลของไฟล์เป็น htm หรือ html
นั้น เมื่อใช้เว็บบราวเซอร์ เปิดดูหรือเรียกดูเว็บเพจใด เว็บเซิร์ฟเวอร์ก็จะส่งเว็บเพจนั้นกลับมายังบราวเซอร์
จากนั้นบราวเซอร์จะแสดงผลไปตามคาสั่งภาษา HTML (Hypertext Markup Language) ที่อยู่ในไฟล์

ภาพที่ 2.2 รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์เพื่อเรียกเว็บเพจธรรมดา
จะเห็นได้ว่าเว็บเพจ ดังภาพที่ 2.2 เป็นเว็บเพจที่มีลักษณะแบบคงที่ (Static Webpage) กล่าวคือ
ผู้ใช้จะพบกับเว็บเพจหน้าตาเดิมๆ ทุกครั้ง จนกว่าผู้ดูแลเว็บจะทาการปรับปรุงเว็บเพจนั้น นี่คือข้อจากัด
อันมีต้นเหตุมาจากภาษา HTML ซึ่งเป็นภาษาที่ใช้อธิบายหน้าตาของเว็บเพจ (HTML จัดเป็นภาษาในกลุ่ม
ที่เรียกว่า page description language) หรือกล่าวอีกนัยหนึ่งคือ HTML สามารถกาหนดให้เว็บเพจมี
หน้าตาอย่างที่ต้องการได้ แต่ไม่ช่วยให้เว็บเพจมีความฉลาดได้ แต่ในปัจจุบันมีการพัฒนาโปรแกรมที่ใช้ใน
การจัดการเว็บเพจ ให้มีความน่าดึงดูดและน่าสนใจมากยิ่งขึ้นซึ่งจะมีภาษาอื่นๆ อีกหลายภาษาที่เข้ามามี
ส่ว นช่ว ยให้ เว็บไซต์ มีลู กเล่ นและความน่ าสนใจโดยการใช้ภ าษาที่มีความสามารถในการจัดการและ
ประมวลผลเว็บเพจนั่นเองซึ่ง จะเห็นได้จากตัวอย่างจากการเขียนด้วยภาษา PHP ซึ่งรูปแบบการแสดงก็
จะมีความเป็น Dynamic หรือ สามารถมีการตอบสนองต่อผู้เข้าใช้งานได้นั่นเอง แต่การที่ระบบจะสามารถ
ทางานได้ก็จะต้องมีเว็บเซิร์ฟเวอร์ เป็นตัว Run Engine ของภาษานั้นๆ อีกทีหนึ่ง ดังนั้นถ้าต้องการให้
เครื่องของสามารถ Run PHP ได้นั้น ก็จะต้องจาลองเครื่องคอมพิวเตอร์ของให้เป็นเซิร์ฟเวอร์ โดยใช้
โปรแกรมเว็บเซิร์ฟเวอร์ ดังที่จะกล่าวถึงในลาดับถัดไป ตัวอย่างการร้องขอการใช้งานจากไคลเอ็นท์ โดย
เครื่องให้บริการเป็น Web Server engine ของภาษา PHP ดังภาพที่ 2.3

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 13

ภาพที่ 2.3 การร้องขอการใช้งานจากไคลเอ็นท์ ไปยังเครื่องที่ให้บริการเป็น Web Server engine ของ PHP
AppServ คืออะไร
กาเนิดโปรแกรม AppServ
สาหรับโปรแกรม AppServ นี้ไม่ได้เกิดจากการสนับสนุนของหน่วยงานรัฐบาล หรือหน่วยงาน
เอกชน หรือองค์กรอิสระใดๆ เลยทั้งสิ้น แต่โปรแกรม AppServ ได้กาเนิดจากแรงบันดาลใจจากเพื่อนของ
ผู้พัฒนาคนหนึ่งที่ได้เริ่มศึกษาภาษา PHP และฐานข้อมูล MySQL และมีปัญหาทุกครั้งในการติดตั้ง กว่า
จะติดตั้งได้จะใช้เวลาไม่น้อยกว่า 3 ชั่วโมง บางทีทาได้บ้างไม่ได้บ้าง และทุกครั้ งที่ติดตั้งไม่ได้ก็จะมาขอ
ความช่วยเหลือจากผู้พัฒนาเป็นประจาทุกครั้ง ทาให้ผู้พัฒนาได้ พัฒนาโปรแกรมที่สะดวกในการติดตั้ง
เพื่ อให้ เพื่ อนสามารถนาไปใช้ง านได้ทั น ที ในช่ ว งแรกที่แ จกจ่ ายนั้ น
ผู้พัฒนาได้แจกจ่ายในเว็บไซต์ที่เป็นภาษาอังกฤษ ผู้ใช้งานต่างประเทศ
ให้ ค วามสนใจและมี ก ารใช้ ง านเป็ น จ านวนมาก และในปั จ จุ บั น ได้
เพิ่มเติมในส่วนของเว็บไซต์ภาษาไทย
ประวัตินักพัฒนาโปรแกรม AppServ

ภาพที่ 2.4 ภาณุพงศ์ ปัญญาดี ผู้พัฒนา AppServ
ที่มา: http://www.sutenm.com/wp-content/uploads/2009/03/apples4.jpg

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
14 บทที่ 2 หลักการทางานของ PHP
สาหรับผู้พัฒนานั้นได้อาศัยอยู่ในประเทศไทย ชื่อ ภาณุพงศ์ ปัญญาดี ชื่อเล่น apples เกิดวันที่
14 สิงหาคม 2523 สาเร็จการศึกษาระดับปริญญาตรีจาก สถาบันราชภัฏเชียงใหม่ คณะวิทยาศาสตร์และ
เทคโนโลยี สาขาวิทยาการคอมพิวเตอร์
มีประสบการณ์และความเชียวชาญพิเศษในเรื่ องของ Linux Security, Linux Network,
Network Security, Network Admin, PHP Programming, MySQL Database, Linux/Unix
Hacking System, Web Design, ฯลฯ
ความหมายของโปรแกรม AppServ
AppServ คือ โปรแกรมที่รวบรวมเอา Open Source Software หลายๆ อย่างมารวมกัน โดยมี
Package หลักดังนี้ 1) Apache 2) PHP 3) MySQL และ 4) phpMyAdmin
โปรแกรมต่างๆ ที่นามารวบรวมไว้ทั้งหมดนี้ ได้ทาการดาวน์โหลดจาก Official Release ทั้งสิ้น
โดยตัว AppServ จึงให้ความสาคัญว่าทุกสิ่งทุกอย่างจะต้องให้เหมือนกับต้นฉบับ จึงไม่ได้ตัดทอนหรือ
เพิ่ มเติ มอะไรที่แปลกไปกว่ า Official Release แต่อย่า งได้ เพียงแต่มีบางส่ ว นเท่านั้นที่ ได้เพิ่ ม
ประสิทธิภาพการติดตั้งให้สอดคล้องกับการทางานแต่ละคน โดยที่การเพิ่มประสิทธิภาพนี้ไม่ได้ไปยุ่ง ใน
ส่วนของ Original Package เลยแม้แต่น้อยเพียงแต่เป็นการกาหนดค่า Config เท่านั้น เช่น Apache ก็จะ
เป็นในส่วนของ httpd.conf, PHP ก็จะเป็นในส่วนของ php.ini, MySQL ก็จะเป็นในส่วนของ my.ini
ดังนั้นจึงรับประกันได้ว่าโปรแกรม AppServ สามารถทางานและความเสถียรของระบบ ได้เหมือนกับ
Official Release ทั้งหมด
จุดประสงค์หลักของการรวมรวบ Open Source Software เหล่านี้เพื่อทาให้การติดตั้งโปรแกรม
ต่างๆ ที่ได้กล่าวมาให้ง่ายขึ้น เพื่อลดขั้นตอนการติดตั้งที่แสนจะยุ่งยากและใช้เวลานาน โดยผู้ใช้งานเพียง
ดับเบิ้ลคลิก setup ภายในเวลา 1 นาที ทุกอย่างก็ติดตั้งเสร็จสมบูรณ์ระบบต่างๆ ก็พร้อมที่จะทางานได้
ทันทีทั้ง เว็บเซิร์ฟเวอร์, Database Server เหตุผลนี้จึงเป็นเหตุผลหลักที่หลายๆ คนทั่วโลก ได้เลือกใช้
โปรแกรม AppServ แทนการที่จะต้องมาติดตั้งโปรแกรมต่างๆ ที่ละส่วน
ไม่ว่าจะเป็นผู้ที่ความชานาญในการติดตั้ง Apache, PHP, MySQL ก็ไม่ได้เป็นเรื่องง่ายเสมอไป
เนื่ องจากการติ ดตั้ งโปรแกรมที่ แยกส่ ว นเหล่ า นี้ ให้ มารวมเป็น ชิ้ นอั นเดี ยวกั น ก็ ใช้ เวลาค่ อ นข้ า งมาก
พอสมควร แม้แต่ตัวผู้พัฒนา AppServ เอง ก่อนที่จะ Release แต่ละเวอร์ชันให้ดาวน์โหลด ต้องใช้
ระยะเวลาในการติดตั้งไม่น้อยกว่า 2 ชั่วโมง เพื่อทดสอบความถูกต้องของระบบ ดังนั้นจึงจะเห็นว่าเองนั้น
เป็นมือใหม่หรือมือเก่า ย่อมไม่ใช่เรื่องง่ายเลยที่จะติดตั้ง Apache, PHP, MySQL ในพริบตาเดียว
มีบางคาถามที่พบบ่อยว่า AppServ สามารถนาไปเป็นเว็บเซิร์ฟเวอร์ หรือ Database Server ได้
ทั น ที ห รื อ ไม่ ข้ อ นี้ ต้ อ งตอบว่ า ได้ แ น่ น อน 100% แต่ ท างผู้ พั ฒ นาเองขอแนะน าว่ า ระบบจั ด การ
หน่วยความจา และหน่วยประมวลผล บน Windows ที่ทางานเกี่ยวกับเว็บเซิร์ฟเวอร์ หรือ Database
Server ไม่เหมาะกับการใช้งานหนักๆ เป็นอย่างยิ่ง เพราะ Windows นั้นจะกลืนกินทรัพยากรอันมหาศาล
และหากเทียบอัตรารองรับระบบงานกับระบบปฏิบัติการตัวอื่นเช่น Linux/Unix จะยิ่งเห็นได้ชัดว่า
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 15
ระบบปฏิ บั ติ ก ารที่ เ ป็ น Windows
ที่ มี ข นาดหน่ ว ยความจ าและหน่ ว ยประมวลผลที่ เ ท่ า ๆ กั น
ระบบปฏิบัติการที่เป็น Linux/Unix นั้น จะรองรับงานได้น้อยกว่ ามากพอสมควร เช่น Windows รับได้
1,000 คนพร้อมๆ กัน แต่ Linux/Unix อาจรับได้ถึง 5,000 พร้อมๆ กัน หากท่านต้องทางานหนักๆ ทาง
ผู้พัฒนาแนะนาให้เลือกใช้ระบบปฏิบัติการ Linux/Unix จึงจะเหมาะสมกว่า
ข้อแตกต่างของ AppServ ในแต่ละเวอร์ชัน
AppServ ได้แบ่งเวอร์ชันออกเป็น 2 ส่วนด้วยกัน คือ
2.5.x คือ เวอร์ชันที่นา Package ใหม่ๆ นามาใช้งานโดยเฉพาะ เหมาะสาหรับนักพัฒนาที่ต้องการ
ระบบใหม่ๆ หรือต้องการทดสอบ ทดลองใช้งานฟังก์ชันใหม่ ซึ่งอาจจะไม่ได้ความเสถียรของระบบได้ 100%
เนื่องจากว่า Package จากนักพัฒนานั้นยังอยู่ในช่วงของขั้นทดสอบ ทดลองเพื่อหาข้อผิดพลาดอยู่
2.4.x คือ เวอร์ชันที่นา Package ที่มีความเสถียรเป็นหลัก เหมาะสาหรับผู้ที่ต้องการความมั่นคง
ของระบบ โดยไม่ได้มุ่งเน้นที่จะใช้ฟังก์ชันใหม่
คาแนะนาในการเลือกใช้งาน AppServ
AppServ ไม่จาเป็นต้องใช้ เวอร์ชันใหม่เสมอไป แต่ถึงอย่างไรก็ดี ทางผู้พัฒนาเองอยากจะให้
ผู้ใช้งานได้ทดสอบ ทดลองเวอร์ ชัน ใหม่ทุกครั้งที่มีการแจกจ่าย เพื่อช่ว ยในการตรวจสอบปัญหาหรือ
ข้อผิดพลาด ซึ่งจะเป็นประโยชน์ต่อตัวผู้พัฒนาเอง และผู้ใช้คนอื่นๆ ที่จะได้ใช้งานระบบมี ข้อผิดพลาดที่
น้อยที่สุด
สาหรับผู้ที่ใช้งานระบบที่ไม่มีอะไรเปลี่ยนแปลงมาก หรือไม่ได้ต้องการสิ่งใหม่ๆ แต่ต้องการความ
เสถียรเป็นหลัก ในการเลือกใช้ AppServ ให้ท่านเลือกใช้เวอร์ชันที่เหมาะสมกับระบบงานของท่าน เช่น
หากท่านใช้ เวอร์ชัน 1.8.0 ได้อย่างไม่มีปัญหา ท่านก็ไม่จาเป็นต้องอัพเกรดเวอร์ชัน ให้ใหม่อยู่เสมอ
เพื่อที่จะให้การทางานของระบบท่าน เป็นไปได้อย่างราบรื่น
วิธีการติดตั้งโปรแกรม AppServ
เตรียมโปรแกรมเพื่อติดตั้ง
ดาวน์โหลดโปรแกรม AppServ จากเว็บไซต์ http://www.appservnetwork.com โดยเลือก
เวอร์ชันที่ต้องการติดตั้ง
ขั้นตอนการติดตั้ง AppServ
1. ดับเบิ้ลคลิกไฟล์ appserv-win32-x.x.x.exe เพื่อทาการติดตั้ง จะปรากฏหน้าจอตามภาพที่ 2.5

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
16 บทที่ 2 หลักการทางานของ PHP

ภาพที่ 2.5 ขั้นตอนการติดตั้งโปรแกรม AppServ
2. เข้าสู่ขั้นตอนเงื่อนไขการใช้งานโปรแกรม โดยโปรแกรม AppServ ได้แจกจ่ายในรูปแบบ GNU
License หากผู้ติดตั้งอ่านเงื่อนไขต่างๆ เสร็จสิ้นแล้ว หากยอมรับเงื่อนไขให้กด Next เพื่อเข้าสู่การติดตั้ง
ในขั้นต่อไป แต่หากว่าไม่ยอมรับเงื่อนไข ให้กด Cancel เพื่อออกจากการติดตั้งโปรแกรม AppServ ดัง
ภาพที่ 2.6

ภาพที่ 2.6 แสดงรายละเอียดเงื่อนไขการ GNU License
3. เข้า สู่ ขั้น ตอนการเลื อ กปลายทางที่ ต้องการติด ตั้ง โดยค่าเริ่มต้ นปลายทางที่ ติดตั้ งจะเป็ น
C:AppServ หากต้องการเปลี่ยนปลายทางที่ติดตั้ง ให้กด Browse แล้วเลือกปลายทางที่ต้องการ ตามภาพ
ที่ 2.7 เมื่อเลือกปลายทางเสร็จสิ้นให้กดปุ่ม Next เพื่อเข้าสู่ขั้นตอนการติดตั้งขั้นต่อไป

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 17

ภาพที่ 2.7 เลือกปลายทางการติดตั้งโปรแกรม AppServ
4. เลือก Package Components ที่ต้องการติดตั้ง โดยค่าเริ่มต้นนั้นจะให้เลือกลงทุก Package
แต่หากว่าผู้ใช้งานต้องการเลื อกลงเฉพาะบาง Package ก็ส ามารถเลื อกตามข้อที่ต้องการออก โดย
รายละเอียดแต่ละ Package มีดังนี้
 Apache HTTP Server คือ โปรแกรมที่ทาหน้าเป็น เว็บเซิร์ฟเวอร์
 MySQL Database คือ โปรแกรมที่ทาหน้าเป็น Database Server
 PHP Hypertext Preprocessor คือ โปรแกรมที่ทาหน้าประมวลผลการทางานของภาษา PHP
 phpMyAdmin คือ โปรแกรมที่ใช้ในการบริหารจัดการฐานข้อมูล MySQL ผ่านเว็บไซต์
เมื่อทาการเลือก Package ตามภาพที่ 2.8 เรียบร้อยแล้ว ให้กด Next เพื่อเข้าสู่ขั้นตอนการ
ติดตั้งต่อไป

ภาพที่ 2.8 เลือก Package Components ที่ต้องการติดตั้ง
5. กาหนดค่าคอนฟิกของ Apache เว็บเซิร์ฟเวอร์ มีอยู่ด้วยกันทั้งหมด 3 ส่วน ตามภาพที่ 2.9 คือ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
18 บทที่ 2 หลักการทางานของ PHP
 Server Name คือ ช่อ งส าหรั บป้ อนข้อ มู ล ชื่ อ เว็ บ เซิ ร์ฟ เวอร์ ของท่า นเช่ น
www.freebsd.sru.ac.th
 Admin Email คือ ช่องสาหรับป้อนข้อมูล อีเมล์ผู้ดูแลระบบ เช่น root@hotmail.com
 HTTP Port คือ ช่องสาหรับระบุ Port ที่จะเรียกใช้งาน Apache เว็บเซิร์ฟเวอร์ โดยทั่วไป
แล้ว Protocol
หมายเหตุ
 HTTP นั้นจะมีค่าหลัก คือ 80 หากว่าท่านต้องการหลีกเลี่ยงการใช้ Port 80 ก็สามารถ
แก้ไขได้
 หากมีการเปลี่ยนแปลง Port การเข้าใช้งาน เว็บเซิร์ฟเวอร์ แล้ว ทุกครั้งที่เรียกใช้งาน
เว็บไซต์
 จาเป็นที่ต้องระบุหมายเลข Port ด้วย เช่น หากเลือกใช้ Port 99 ในการเข้าเว็บไซต์ทุก
ครั้งต้องใช้ เช่น http://localhost:99 จึงจะสามารถเข้าใช้งานได้ เป็นต้น

ภาพที่ 2.9 แสดงการกาหนดค่าคอนฟิกค่า Apache เว็บเซิร์ฟเวอร์
6. กาหนดค่าคอนฟิกของ MySQL Database มีอยู่ด้วยกันทั้งหมด 3 ส่วน ตามภาพที่ 2.10 คือ
 Root Password คือ ช่องสาหรับป้อน รหัสผ่านการเข้าใช้งานฐานข้อมูลของ Root หรือผู้ดูแล
ระบบ ทุกครั้งที่เข้าใช้งานฐานข้อมูลในลักษณะที่เป็นผู้ดูแลระบบ ให้ระบุ user คือ root
 Character Sets ใช้ในการกาหนดค่าระบบภาษาที่ใช้ในการจัดเก็บฐานข้อมูล , เรียงลาดับ
ฐานข้อมูล, Import ฐานข้อมูล, Export ฐานข้อมูล, ติดต่อฐานข้อมูล
 Old Password หากท่านมีปัญหาเกี่ยวกับการใช้งาน PHP กับ MySQL API เวอร์ชันเก่า
เช่น โดยจะพบ Error ไคลเอ็นท์ does not support authentication protocol

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 19
requested by server; consider upgrading MySQL Client ให้เลือกในส่วนของ Old
Password เพื่อหลีกเลี่ยงปัญหานี้
 Enable InnoDB หากท่านต้องการใช้งานฐานข้อมูลในรูปแบบ InnoDB ให้เลือกในส่วนนี้ด้วย

ภาพที่ 2.10 แสดงการกาหนดค่าคอนฟิกของ MySQL Database
7. หลังกาหนดค่าสาหรับ MySQL Server แล้ว ตัวติดตั้งจะดาเนินการติดตั้งองค์ประกอบต่างๆ
ลงในระบบ

ภาพที่ 2.11 แสดงการดาเนินการติดตั้งโปรแกรม AppServ
8. สิ้นสุดขั้นตอนการติดตั้งโปรแกรม AppServ สาหรับขั้นตอนสุดท้ายนี้จะมีให้เลือกว่าต้องการ
สั่งให้มีการรัน Apache และ MySQL ทันทีหรือไม่ จากนั้นกดปุ่ม Finish เพื่อเสร็จสิ้นการติดตั้งโปรแกรม
AppServ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
20 บทที่ 2 หลักการทางานของ PHP

ภาพที่ 2.12 แสดงหน้าจอขั้นตอนสิ้นสุดการติดตั้งโปรแกรม AppServ
9. ระบบจะทาการสตาร์ท (Start) โปรแกรม Apache และ MySQL

ภาพที่ 2.13 แสดงการสตาร์ทโปรแกรม Apache และ MySQL
10.เมื่อสตาร์ท Apache Http Server เสร็จ ให้ทาการเปิดโปรแกรมเว็บบราวเซอร์ และพิมพ์คา
ว่า http://localhost หรือ http://127.0.0.1 ลงไปในช่องรับยูอาร์แอล (Address Bar) หากโปรแกรม
Apache ทางานได้เป็นปกติจะปรากฏข้อความ ดังภาพที่ 2.14

ภาพที่ 2.14 แสดงผลการทางานของ AppServ บนหน้าเว็บบราวเซอร์
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 21
11.สาหรับองค์ประกอบต่างๆ ของ AppServ จะถูกติดตั้งไว้ที่โฟลเดอร์ C:AppServ

ภาพที่ 2.15 แสดงโฟลเดอร์องค์ประกอบต่างๆ ที่สาคัญของ AppServ
XAMPP คืออะไร
นั ก พั ฒ นาเว็ บ ไซต์ ห ลายคน อาจจะเคยเจอประสบการณ์ ที่ ย ากล าบากในการจ าลองเครื่ อ ง
คอมพิวเตอร์ตัวเอง ให้กลายเป็น เว็บเซิร์ฟเวอร์ เพื่อจะสามารถทดสอบการเขียนโปรแกรมบนเว็บไซต์ได้
XAMPP จัดเป็นโปรแกรมจาลองเซิร์ฟเวอร์ชนิดหนึ่ง ประกอบด้วย Apache ทาหน้าที่หลักเป็นเว็บ
เซิร์ฟเวอร์ ที่มาพร้อม MySQL, PHP และ Perl ดังนั้นจึงถือได้ว่า XAMPP มีความง่ายต่อการติดตั้ง และ
ใช้ ง าน แค่ ด าวน์ โ หลด กระจายไฟล์ อ อก แล้ ว ก็ ติ ด ตั้ ง ใช้ ง านได้ เ ลย (สามารถดาวน์ โ หลดได้ ที่
http://xampp.en.softonic.com/download)
กาเนิดโปรแกรม XAMPP
พัฒนาโดย kai 'oswald' seidler (ที่มา: http://oswaldism.de/)
โปรแกรมเมอร์ ชาวเยอรมันในกรุงเบอร์ลิน และทางานร่วมกับลินุกซ์ ใน
ปี ค.ศ. 1996
kai จบการศึกษาจากสถาบันเบอร์ลินเทคโนโลยี ในระดับปริญญาตรี และประกาศนียบัตรในด้าน
เทคโนโลยีสารสนเทศ (เทียบเท่าปริญญาโทในสาขาวิทยาศาสตร์คอมพิวเตอร์) ในปี ค.ศ.1990 เขาได้สร้าง
และบริหารระบบเซิร์ฟเวอร์ ircnet ซึ่งเป็นระบบเซิร์ฟเวอร์ที่ใหญ่ที่สุดของเยอรมนี คือ irc.fu-berlin.de
และร่วมเป็นส่วนหนึ่งในการจัดการเซิร์ฟเวอร์ ที่ใหญ่ที่สุดของโลก คือ ftp.cs.tu-berlin.de เขาได้แสดง
ความเป็นมืออาชีพโดยติดตั้งระบบเซิร์ฟเวอร์สาธารณะครั้งแรกของเขาในปี ค.ศ.1993 หลังจากนั้น ปี
ค.ศ. 1993 จนถึง ค.ศ.1998 เขาได้เป็นสมาชิกของ projektgruppe kulturraum ซึ่งเป็นอินเทอร์เน็ต
สาหรับโครงการวิจัยเกี่ยวกับเครือข่ายวัฒนธรรมและองค์กร (net culture and network organization)

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
22 บทที่ 2 หลักการทางานของ PHP

ภาพที่ 2.16 kai 'oswald' seidler ผู้พัฒนา XAMPP
ที่มา: http://oswaldatwork.thetaoofamp.com/category/apache/
ประมาณปี ค.ศ.2002 เขาร่วมกับ apache friends และสร้างแบบมัลติแพลตฟอร์ม Apache
เว็บเซิร์ฟเวอร์รวบรวมโปรแกรมที่เกี่ยวข้องและทางานร่วมกันอย่างสมบูรณ์ กลายเป็น XAMPP หลังจาก
นั้นประมาณ ปี ค.ศ.2005 XAMPP จัดเป็นโปรแกรมที่ได้รับความนิยมมากที่สุดทั่วโลก และปัจจุบันเขา
ทางานเกี่ยวกับ technology evangelist ให้กับบริษัท Sun Microsystems
วิธีการติดตั้ง XAMPP บนระบบปฏิบัติ Windows
เตรียมโปรแกรมเพื่อติดตั้ง
ดาวน์โหลด XAMPP จากเว็บไซต์ http://xampp.en.softonic.com/download
ขั้นตอนการติดตั้ง XAMPP
1. ดับเบิ้ลคลิกไฟล์ xampp-win32-1.x.x.exe เพื่อทาการติดตั้ง จะปรากฏหน้าจอตามภาพที่ 2.17

ภาพที่ 2.17 ขั้นตอนการติดตั้ง XAMPP
2. จากภาพที่ 2.17 เข้าสู่ขั้นตอนการติดตั้ง XAMPP และเลือกตาแหน่งปลายทางที่จะติดตั้ง
โปรแกรม หากต้องการเปลี่ ย นตาแหน่ งปลายทางคลิ กปุ่ม Browse เพื่อเปลี่ ยนตาแหน่งใหม่ เมื่ อ
ปรับเปลี่ยนตาแหน่งปลายทางเรียบร้อยแล้วคลิกปุ่ม Install เพื่อเริ่มติดตั้งโปรแกรมและเข้าสู่การติดตั้งใน
ลาดับขั้นตอนต่อไป แต่หากไม่ต้องการติดตั้งตั้ง ให้คลิกปุ่ม Cancel เพื่อออกจากการติดตั้งโปรแกรม
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 23

ภาพที่ 2.18 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการสร้าง Shortcuts ใน Start menu และ Desktop
3. จากภาพที่ 2.18 ต้องการสร้าง shortcuts ใน Start Menu และ Desktop หรือไม่
ในลักษณะของคาถาม yes หรือ no ถ้าต้องการให้พิมพ์ y หากไม่ต้องการให้พิมพ์ n เมื่อใส่คาตอบแล้ว
ก็กดปุ่ม Enter เพื่อเข้าสู่การติดตั้งในลาดับขั้นตอนต่อไป

ภาพที่ 2.19 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการทวนถามความถูกต้องของตาแหน่งติดตั้ง
4. จากภาพที่ 2.19 เป็นส่วนของการทวนถามความถูกต้องของตาแหน่งปลายทางที่จะใช้ในการ
ติดตั้ง XAMPP เป็นผลมาจากภาพที่ 2.17 หรือไม่ ในลักษณะของคาถาม yes หรือ exit ถ้าถูกต้องให้
พิมพ์ y หากต้องการออกจากการติดตั้งให้พิมพ์ x เมื่อใส่คาตอบแล้วก็กดปุ่ม Enter

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
24 บทที่ 2 หลักการทางานของ PHP

ภาพที่ 2.20 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการติดตั้ง portable แบบ without drive letters
5. จากภาพที่ 2.20 ถามว่าจะสร้างที่อยู่สาหรับ XAMPP แบบพกพาโดยไม่ต้องสร้างไดรว์หรือไม่
สาหรับขั้นตอนนี้ขอแนะนาให้กด y แล้วกด Enter เผื่อวันข้างหน้าจะได้ไม่ยุ่งยากเวลาย้ายไฟล์ไปเครื่องอื่น
ด้วยการคัดลอกใส่ USB drive หรืออุปกรณ์เก็บข้อมูลอื่นๆ

ภาพที่ 2.21 ขั้นตอนการติดตั้ง XAMPP แสดงผลการดาเนินการติดตั้ง XAMPP แบบพกพา
6. จากภาพที่ 2.21 แสดงผลการดาเนินการติดตั้ง XAMPP แบบพกพา และแจ้งให้ทราบว่า
XAMPP พร้อมใช้งานแล้ว ให้กดปุ่ม Enter เพื่อเข้าสู่ขั้นตอนลาดับถัดไป

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 25

ภาพที่ 2.22 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับโซนเวลาในไฟล์ php.ini และ my.ini
7. จากภาพที่ 2.22 ระบบแจ้งรายละเอียดการปรับเปลี่ยนโซนเวลาในไฟล์ในไฟล์ php.ini และ
my.ini ซึ่งสามารถปรับเปลี่ยนในภายหลังได้ ให้กดปุ่ม Enter เพื่อเข้าสู่ขั้นตอนลาดับถัดไป

ภาพที่ 2.23 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับเปลี่ยนการใช้งานเพิ่มเติม
8. จากภาพที่ 2.23 ใช้สาหรับการปรับเปลี่ยนคุณลักษณะอื่นๆ เพิ่มเติม ขอแนะนาให้พิมพ์ x เพื่อ
ออกจากการติดตั้งและเริ่มใช้งานในลาดับ ถัดไป หรือพิมพ์ 1 เพื่อเปิด XAMPP Control Panel เพื่อ
ควบคุมการทางานของโปรแกรมต่างๆ ที่เกี่ยวข้อง แล้วกดปุ่ม Enter เพื่อเริ่มต้นใช้งาน XAMPP
9. เปิด XAMPP Control Panel แล้วตรวจสอบโปรแกรมหลักๆ ที่จะใช้งานว่า Started หรือไม่
หลักๆ แล้วให้ดูที่ Apache และ MySQL จะต้องมีสถานะเป็น Started ดังภาพที่ 2.25

ภาพที่ 2.24 แสดงขั้นตอนการเปิด XAMPP Control Panel

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
26 บทที่ 2 หลักการทางานของ PHP

ภาพที่ 2.25 แสดงหน้าจอ XAMPP Control Panel เพื่อควบคุมโปรแกรมต่างๆ ที่เกี่ยวข้อง
9. เปิดโปรแกรมเว็บบราวเซอร์ และพิมพ์คาว่า http://localhost หรือ http://127.0.0.1 ลงไปใน
ช่องรับยูอาร์แอล (Address Bar) หากระบบสามารถทางานได้เป็นปกติจะปรากฏข้อความ ดังภาพที่ 2.26

ภาพที่ 2.26 แสดงผลการทางานของ XAMPP บนหน้าเว็บบราวเซอร์
10. ที่เก็บเอกสารสาหรับเริ่มต้นพัฒนาเว็บไซต์ จะอยู่ในโฟลเดอร์ htdocs ในตาแหน่ง Path ที่
ได้ดาเนินการติดตั้ง XAMPP และควรสร้างโฟลเดอร์ใหม่ไม่ให้ปนกับเอกสารใดๆ เพื่อความสะดวกและ
ป้องกันข้อผิดพลาดเนื่องจากตั้งชื่อซ้ากับเอกสารหลัก ตัวอย่างเช่น สร้างโฟลเดอร์ชื่อ project ไว้ใน
c://xampp/htdocs ดังในภาพ 2.27

ภาพที่ 2.27 แสดงการสร้างโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 27
11. ทดลองเขียน script PHP ไปไว้ที่ myproject ตามที่ได้สร้างเอาไว้ โดยเขียน script ง่ายๆ
ให้ แ สดง PHP information ออกมาที่ ห น้ า จอ (บั น ทึ ก ไฟล์ ใ นชื่ อ phpinfo.php ไว้ ใ น
c://xampp/htdocs/myproject) ดังนี้
<?php
echo phpinfo ( );
?>

ภาพที่ 2.28 แสดงการบันทึกไฟล์ลงในโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP เพื่อทดสอบและใช้งาน
12. ท ด ส อ บ ก า ร เ รี ย ก ไ ฟ ล์ ใ ช้ ง า น ผ่ า น เ ว็ บ บ ร า ว เ ซ อ ร์ แ ล ะ พิ ม พ์ ที่ อ ยู่
http://localhost/myproject/phpinfo.php
การเลือกใช้เครื่องมือสาหรับการเขียนโค้ด (Choosing a Code Editor)
การเริ่มต้นพัฒนาเขียนโค้ดภาษา PHP มีเครื่องมือสาหรับการแก้ไขหลายตัว เช่น Notepad++,
Editplus, vi, และ Adobe Dreamweaver CS3 เป็นต้น มีหลายเหตุผลในการเลือก เพื่อให้การพัฒนา
เป็นไปอย่างราบรื่น แต่ละโปรแกรมจะมีจุดด้อยจุดเด่นแตกต่างกันไป มีทั้งแบบโอเพนซอร์ส และแบบเชิง
พาณิ ช ย์ ส าหรั บ ประกอบการตั ดสิ น ใจเลื อกใช้ ลองมาท าความรู้ จักตั ว อย่ างเครื่อ งมือ ดังกล่ าวกัน มี
รายละเอียด ดังต่อไปนี้
Notepad++
Notepad++ คือ โปรแกรม Text Editor มีความสามารถที่เทียบเท่า
โปรแกรม Editplus ที่ทุกคนเคยใช้มาในอดีต ไม่ว่าจะเป็นการแก้ไข source
code ซึ่งรองรับ syntax ในรูปแบบโปรแกรมได้หลากหลาย หรือแม้แต่กระทั่ง
จะนามาใช้แทนโปรแกรม Notepad แบบธรรมดาในระบบปฏิบัติการ MSWindows ก็สามารถทาได้เลย
ไม่ต้องวิ่งหา cd-key หรือโปรแกรมแคร๊กเพื่อทาให้โปรแกรม Text Editor สามารถใช้ได้และ
หมดปัญหาเรื่องลิขสิทธิ์อีกต่อไป เพียงเปลี่ยนมาใช้ Notepad++ เนื่องจากเป็นโปรแกรมที่โหลดให้ใช้ฟรี
ภายใต้สัญญา GPL สามารถดาวน์โหลดได้ที่ http://notepad-plus.sourceforge.net/
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
28 บทที่ 2 หลักการทางานของ PHP
คุณสมบัติหลัก
1. มี syntax highlight ซึ่งช่วยให้การเขียนโค๊ดโปรแกรมได้สะดวก รองรับภาษาคอมพิวเตอร์ได้
หลายภาษา เช่น C, C++, Java, C#, XML, HTML, PHP, CSS, makefile ASCII art (.nfo), doxygen,
ini file, batch file, Javascript, ASP, VB/VBS, SQL, Objective-C, RC resource file, Pascal, Perl,
Python, Lua, TeX, TCL, Assembler, Ruby เป็นต้น
2. มีระบบเขียนไป ดูไปด้วย WYSIWYG
3. สามารถกาหนดและปรับแต่ง syntax highlight ได้เองระบบเติมคาอัตโนมัติ
4. สามารถเปิดเอกสารได้หลายหลายชนิดในเวลาเดียวกัน
5. เปลี่ยนมุมมองในการใช้โปรแกรมได้หลายมุมมอง (Multi View)
6. ระบบกรองคา เพื่อการค้นหาและแทนที่คา
7. รองรับการใช้เมาส์ลากวาง
8. ขยายและย่อตัวอักษรได้ด้วยเมาส์
9. รองรับได้หลายภาษา รวมทั้งภาษาไทยด้วย
10. ทา Bookmark ตาแหน่งบรรทัดที่แก้ไขบ่อยๆได้
11. มีเส้นแสดงตาแหน่งของวงเล็บปีกกา ช่วยให้การไล่โค๊ดทาได้สะดวกขึ้น
12. บันทึกการทางานแบบมาโครได้ ช่วยให้การทางานที่ซ้าๆ เสร็จเร็วขึ้น
13. ประกอบด้วย Theme ที่หลากหลายให้เลือกใช้ตามความต้องการ
EditPlus
Editplus คือ โปรแกรม Text Editor ตัวหนึ่ง คล้ายกับโปรแกรม
Notepad, Dreamweaver (ซึ่งมีคุณสมบัติเป็นทั้งโปรแกรมสาเร็จรูปในการสร้าง
เว็บเพจด้วย)ที่ใช้ในการพัฒนาสคริปต์โปรแกรมต่างๆ ไม่ว่าจะเป็น เขียนและแก้ไข
Source code ในการสร้างเว็บเพจ ด้วยภาษา HTML ,PHP ,Java เป็นต้น เป็น
เครื่องมือที่ทางานบนระบบปฏิบัติ MS-Windows เท่านั้น
ความสามารถของ Editplus
1. สามารถใช้กับภาษาไทยได้
2. แยกคาสั่งต่างๆ ด้วยการแสดงสีที่ไม่เหมือนกัน ทาให้สามารถตรวจสอบได้ง่ายเมื่อพิมพ์คาสั่งผิด
3. สามารถทาตัวเองเป็นเว็บบราวเซอร์ได้ด้วย (IE 5.XX Compatible)
4. เมื่อเขียนเว็บเพจด้วยภาษา HTML เสร็จแล้ว สามารถดูการแสดงผลได้เลยทันที โดยใช้เมนู
View > View in Browser หรือ Ctrl-B หรือ ใช้วิธีคลิกปุ่มไอคอน View in Browser
5. สามารถเปิดไฟล์ได้ทีละหลายๆ ไฟล์พร้อมกันได้
6. สามารถค้นหาและแทนที่ (Find & Replace) ข้อความเดียวกันได้ทีละหลายๆ ไฟล์พร้อมกัน

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 2 หลักการทางานของ PHP 29
7. สามารถค้นหาข้อความที่ต้องการ ว่าปรากฏอยู่ในไฟล์ไหนบ้าง (พร้อมแสดงหมายเลขบรรทัด
ด้วย) ในไดเรกทอรี่เดียวกัน
vi
vi (visual editor) คือ Text Editor พื้นฐานในระบบปฏิบัติการ UNIX
ซึ่งเป็นโปแกรม editor ใช้สาหรับ เพิ่ม ลบ แก้ไข ไฟล์ข้อมูลใดๆ โดยมีคาสั่ง
พื้นฐานดังนี้

UNIX vi editor มี 2 โหมด:
1. Command mode เป็นคาสั่งสาหรับทาการใดๆกับไฟล์
2. Insert mode ใช้สาหรับการใส่ข้อมูลลงไฟล์
กดปุ่ม <Esc> (Escape) สาหรับยกเลิกการใช้โหมด insert ทั้ง UNIX และ vi เป็น casesensitive. (ตัวเล็กตัวใหญ่ต่างกัน)
เริ่มต้น ใช้ vi ตามด้วยชื่อไฟล์ ถ้าไฟล์มีอยู่แล้ว จะเป็นการเปิดไฟล์นั้นๆ ขึ้นมาเพื่อทาการแก้ไข
ถ้าไฟล์ยังไม่มีจะเป็นการสร้างไฟล์ใหม่ขึ้นมา
รูปแบบการใช้คาสั่ง
vi filename edit filename starting at line 1
vi -r filename recover filename that was being edited when system crashed
การออกจาก vi (Exit vi)
หลังจากที่ทาการสร้าง หรือ แก้ไขไฟล์เรียบร้อยแล้ว เมื่อจะออกจาก vi สามารถที่จะออกโดย
บันทึกหรือ ไม่บันทึกไฟล์ที่สร้างหรือแก้ไขก็ได้
เมื่อทาการกดปุ๋ม (:) cursor จะอยู่ที่ด้านล่างของหน้าจอ แล้วให้ทาการพิมพ์คาสั่งที่ต้องการแล้ว
จบคาสั่งด้วยการกดปุ่ม <Return> (or <Enter>)
<Return>
quit vi, writing out modified file to file named in original invocation
:wq<Return> quit vi, writing out modified file to file named in original invocation
:q<Return> quit (or exit) vi
:q!<Return> quit vi even though latest changes have not been saved for this vi call
Adobe Dreamweaver CS3
ถื อ ได้ ว่ า เป็ น เครื่ อ งมื อ ส าหรั บ สร้ า งเว็ บ เพจ และดู แ ลเว็ บ ไซต์ ที่ มี
ประสิทธิภาพสูง เป็นที่นิยมใช้ของ Web Master อย่างกว้างขวาง สามารถใช้
เขียนภาษาสาหรับการพัฒนาเว็บเพจหลายหลากหลาย เช่น HTML, PHP,

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
30 บทที่ 2 หลักการทางานของ PHP
ASP, JSP เป็นต้น สามารถสอดแทรก Java Script และลูกเล่นต่างๆ ได้มากมาย ช่วยประหยัดเวลา และ
ทางานได้สะดวกยิ่งขึ้น
ความสามารถของ Adobe Dreamweaver CS3 จะมีลักษณะคล้ายกับการพิมพ์งานในโปรแกรม
Text Editor ทั่วไป แต่มีความสามารถ สรุปได้ ดังนี้
1. สนับสนุนการทางานแบบ WYSIWYG (What You See Is What You Get) หมายความว่า
เว็บที่เขียนในหน้าของ Dreamweaver เขียนไว้อย่างไร ก็จะแสดงแบบเดียวกับในเว็บเพจจริงๆ ในเว็บ
บราวเซอร์ ช่วยให้เขียนเว็บเพจได้ง่าย โดยไม่ต้องเขียน Code HTML เองทั้งหมด
2. มีเครื่องมือในการช่วยสร้างเว็บเพจ ที่มีความยืดหยุ่นสูง
3. สนับสนุนภาษาสคริปต์ต่างๆ ทั้งฝั่ง ไคลเอ็นท์ และ Server เช่น Java, ASP, PHP, CGI,
VBScript เป็นต้น
4. มีเครื่องมือในการ Upload หน้าเว็บเพจไปที่เครื่องเซิร์ฟเวอร์เพื่อทาการเผยแพร่งานที่สร้างใน
อินเทอร์เน็ต โดยส่งผ่าน FTP หรือ โดยการใช้โปรแกรม FTP ภายนอกช่วย เช่น WS FTP, filezilla เป็นต้น
5. รองรับมัลติมีเดีย เช่น การแทรกไฟล์เสียง ไฟล์วิดีโอ แฟลช (Flash) เป็นต้น
การใช้งานพื้นฐานที่ควรทราบ
1. ภาษา HTML เป็นภาษาที่ออกแบบสาหรับการแสดงผลเท่านั้น (Static Webpage) ไม่
สามารถประมวลผล หรือ ใช้เขียนเว็บแอพพลิเคชั่นได้ หากต้องการเขียนเว็บแอพพลิเคชั่น (Dynamic
Webpage) ต้องศึกษาภาษา PHP, ASP, JSP เป็นต้น เพิ่มเติม
2. หากต้องการเพิ่มลูกเล่น หรือ เทคนิคพิเศษ เช่น Effect ต่างๆ ต้องนาภาษา JavaScript หรือ
AJAX มาเสริมใน HTML
3. การจัดรูปแบบใน Code เช่น การขึ้นบรรทัดใหม่ การเว้นวรรค ไม่มีผลต่อการแสดงผลทาง
เว็บบราวเซอร์
4. การขึ้นบรรทัดใหม่ ต้องใน tag <BR> หรือ กดปุ่ม Shift+Enter
5. การขึ้นย่อหน้าใหม่ ต้องใช้ tag <P> หรือ กดปุ่ม Enter
6. การเว้นวรรค ต้องใช้ tag พิเศษ คือ &nbsp; หรือ กดปุ่ม Ctrl+Shift+Spacebar
7. หลักการอ่าน tag ของภาษา HTML จะอ่านค่าจาก tag ที่อยู่ด้านในก่อน
8. ไฟล์ HTML และ Script ต่างๆ สามารถเปิดแก้ไขในโปรแกรม Text Editor ทั่วๆ ไป ไม่
จาเป็นต้องแก้ไขใน Dreamweaver เพียงอย่างเดียว
9. การแทรกข้อความ และการปรับแต่งค่าต่างๆ ให้คลิกตาแหน่งที่ต้องการ แล้วพิมพ์ข้อความ
ตามต้องการ หรือให้เลือกข้อความเมื่อต้องการกาหนดค่าต่างๆ เพิ่มเติม

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 3
PHP เบื้องต้น
การแทรกคาสั่งภาษา PHP ในเอกสาร HTML
สามารถแทรกคาสั่งภาษา PHP ได้โดยการใช้ PHP tags ซึ่งมีไว้เพื่อเป็นการบ่งบอกให้รู้ส่วนที่เป็น
คาสั่งของภาษา PHP ที่อยู่ในเอกสาร HTML การใช้ PHP tags นั้นสามารถทาได้ 4 รูปแบบ ดังต่อไปนี้
XML Style หรือ Default Syntax
รูปแบบ <?php คาสั่ง; ?>
ตัวอย่างที่ 3.1 รูปแบบการใช้ PHP tag แบบ XML Style
<?php
echo “Hello World ! <br/>”;
echo “I am PHP”;
?>
SGML หรือ Short Tags
รูปแบบ <? คาสั่ง; ?>
ตัวอย่างที่ 3.2 รูปแบบการใช้ PHP tag แบบ SGML
<?
echo “Hello World ! <br/>”;
echo “I am PHP”;
?>
Script Style
รูปแบบ <script language=`php’> คาสั่ง; </script>
ตัวอย่างที่ 3.3 รูปแบบการใช้ PHP tag แบบ Script Style
<script language=“php”>
echo “Hello World”;
</script>
32 บทที่ 3 PHP เบื้องต้น
ASP Style
รูปแบบ <% คาสั่ง; %>
ตัวอย่างที่ 3.4 รูปแบบการใช้ PHP tag แบบ ASP Style
<%
echo “Hello World ! <br/>”;
echo “I am PHP”;
%>
แบบที่แนะนาให้ใช้ คือ XML style หรือ Default Syntax เนื่องจากสามารถทางานได้กับทุก
เซิร์ฟเวอร์ อีกทั้งสอดคล้องกับไวยากรณ์ของภาษา XML
สามารถวางคาสั่งในภาษา PHP ไว้ภายในเอกสาร HTML ตามที่ต้องการได้ โดยที่ PHP tags
อาจจะวางอยู่สลับกับ HTML tags ตัวอย่าง ดังนี้
ตัวอย่างที่ 3.5 การใช้ PHP tags ร่วมกับ HTML tags
<html>
<head>
<title>My Homepage</title>
</head>
<body>
<h1><?php echo "Hello World!"; ?></h1>
</body>
</html>
องค์ประกอบพื้นฐานของการเขียน PHP
PHP นั้นจะใช้โครงสร้างทางภาษาในรูปแบบเดียวกับภาษาซี ดังนั้ นแนวทางในการเขียนจึง
คล้ายคลึงกัน ทั้งนี้มีองค์ประกอบพื้นฐานบางส่วนที่ควรรู้จัก เพื่อจะได้นาไปใช้ร่วมกับการเขียนโปรแกรม
อื่นๆ ต่อไป ดังนี้
เครื่องหมายสิ้นสุดคาสั่ง
ใน PHP จะใช้เครื่องหมาย ; (Semicolon) เป็นตัวแสดงจุดสิ้นสุดในแต่ละคาสั่ง เช่น
$x = 10;
$z = “abc”;
หลังใส่เครื่องหมาย ; เพื่อสิ้นสุดคาสั่งแล้ว สามารถนาคาสั่งอื่นมาต่อท้ายได้เลย แต่การเขียนโค๊ด
ลักษณะนี้จะอ่านโปรแกรมได้ยาก ดังนั้นไม่นิยมทากัน เช่น
$x = 10; $y = x + 10 : $z = “abc”;
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 3 PHP เบื้องต้น 33
คาอธิบาย (Comment)
คาอธิบาย ใช้ในการอธิบ ายเกี่ยวกับโปรแกรมที่เขียน เพื่อช่ว ยให้พิจารณาโค้ดได้ง่ายขึ้น แต่
โปรแกรมจะไม่นาส่วนที่เป็นคาอธิบายไปประมวลผลได้ใน PHP สามารถเขียนคาอธิบายได้หลายแบบดังนี้
 Single-Line C++ Syntax หรือ Shell Syntax
เป็นการเขียนคาอธิบายบรรทัดเดียว โดยใช้เครื่องหมาย // หรือ # ซึ่งโปรแกรมจะถือว่า
ตั้งแต่สัญลักษณ์เป็นต้นไปตลอดทั้งบรรทัดเป็นคาอธิบายทั้งหมด และจะไม่นาบรรทัดนั้นมาประมวลผล ดังนี้
ตัวอย่างที่ 3.6 แสดงการใช้เครื่องหมาย // หรือ # เพื่อเขียนคาอธิบายแบบบรรทัดเดียว
//Author : Parinya Noidonprai
#All Rights Reserved
 Multiple-Line C Syntax
เป็นการเขียนคาอธิบายแบบหลายๆ บรรทัด โดยใช้สัญลักษณ์ /* */ ซึ่งโปรแกรมจะถือ
ว่าตั้งแต่สัญลักษณ์ /* เป็นต้นไปเป็นคาอธิบาย จนกว่าจะเจอสัญลักษณ์ */ จึงจะถือว่าสิ้นสุดคาอธิบาย
ตัวอย่าง ดังนี้
ตัวอย่างที่ 3.7 แสดงการใช้เครื่องหมาย /* */ เพื่อเขียนคาอธิบายแบบหลายบรรทัด
/* Author : Parinya Noidonprai
All Rights Reserved */
การแสดงผลข้อมูลผ่านเว็บบราวเซอร์ (Outputting Data to the Browser)
การแสดงผลคือ การที่ PHP ส่งผลลัพธ์ของที่เกิดจากการทางานของสคริปต์กลับไปที่บราวเซอร์
ซึ่งใน PHP มีหลายคาสั่งที่สามารถทาเช่นนี้ได้ โดยมีรายละเอียด ดังต่อไปนี้
คาสั่ง print ( )
คาสั่ง print ( ) สามารถใช้แสดงผลลัพธ์ของข้อมูลแล้วส่งผ่านไปแสดงผลยังเว็บบราวเซอร์ โดยมี
รูปแบบ (คาสั่ง print ( ) ไม่ใช่ฟังก์ชันแต่เป็นคาสั่งโครงสร้างพื้นฐานของภาษา) ดังนี้
รูปแบบ
int print (string $arg)
เมื่อ $arg หมายถึง ตัวแปรข้อมูลนาเข้า (The input data)
หากการทางานของคาสั่ง print ( ) ถูกต้อง จะมีการส่งค่ากลับเป็น "1" เสมอ หากการทางานไม่
ถูกต้องก็จะส่งค่ากลับเป็นค่าอื่นๆ
ตัวอย่างที่ 3.8 การใช้งานคาสั่ง print ( )
<?php
print ("<p>I love the summertime.</p>");
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
34 บทที่ 3 PHP เบื้องต้น
ตัวอย่างที่ 3.9 การแสดงค่าของตัวแปรผ่านคาสั่ง print ( )
<?php
$season = "summertime";
print "<p>I love the $season.</p>";
?>
ตัวอย่างที่ 3.10 การใช้ประโยคพารามิเตอร์อยู่คนละบรรทัดผ่านคาสั่ง print ( )
<?php
print "<p>I love the
summertime.</p>";
?>
จากตัวอย่างทั้งหมดที่ได้แสดงโค๊ดตัวอย่างคาสั่ง ผลลัพธ์ จะแสดง ดังนี้
I love the summertime.
รูปแบบได้กาหนดให้ใส่พารามิเตอร์ในวงเล็บของประโยคคาสั่ง print ( ) ด้วยความที่ PHP
ออกแบบมาให้ง่ายและยืดหยุ่น ซึ่งจะใส่วงเล็บก็ได้ไม่ใส่ก็ได้ ก็จะสามารถแสดงผลลัพธ์ได้เหมือนกัน
คาสั่ง echo ( )
คาสั่ง echo ( ) สามารถใช้แสดงผลลัพธ์ของข้อมูลแล้วส่งผ่านไปแสดงผลยังเว็บบราวเซอร์
เหมือนกับคาสั่ง print ( ) ส่วนความแตกต่างนั้น คือ คาสั่ง print ( ) จะมีการตรวจสอบข้อผิดพลาดมากกว่า
คาสั่ง echo ( ) แต่ไม่มีความสาคัญมากนักสามารถใช้งานเหมือนๆ กัน โดยรูปแบบของคาสั่ง echo ( )
(คาสั่ง echo ( ) ไม่ใช่ฟังก์ชันแต่เป็นคาสั่งโครงสร้างพื้นฐานของภาษาเช่นเดียวกับคาสั่ง print ( ) มีดังนี้
รูปแบบ
void echo ( string $arg1 [, string $... ] )
เมื่อ $arg1 หมายถึง ตัวแปรข้อมูลนาเข้า (สามารถกาหนดได้หลายตัวแปร)
ตัวอย่างที่ 3.11 การใช้คาสั่ง echo ( )
<?php
$heavyweight = "Lennox Lewis";
$lightweight = "Floyd Mayweather";
echo $heavyweight, " and ", $lightweight, " are great fighters.";
?>
ผลลัพธ์
Lennox Lewis and Floyd Mayweather are great fighters.

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 3 PHP เบื้องต้น 35
หากเจตนาต้องการแสดงผลลัพธ์ที่มีการผสมผสานระหว่างข้อความแบบคงที่และข้อมูลแบบได
นามิกผ่านตัวแปร ขอให้พิจารณาใช้ printf ( ) แทนซึ่งมีการแนะนาต่อไป หากเป็นเพียงข้อความแบบคงที่
ธรรมดาทั่วๆ ไป ก็ขอแนะนาให้ใช้คาสั่ง echo ( ) หรือ print ( ) เพื่อการทางานก็เพียงพอแล้ว
คาสั่ง printf ( )
คาสั่ง printf ( ) ใช้สาหรับแสดงในรูปแบบข้อความ (Formatted String) เหมาะสาหรับการ
แสดงผลลัพธ์แบบผสมผสานระหว่างข้อความแบบคงที่และข้อมูลแบบไดนามิกที่เก็บไว้ในตัวแปรหรือ
หลายๆ ตัวแปร และยังสามารถควบคุมการแสดงผลข้อมูลแบบไดนามิก เจาะจงการแสดงผลที่หน้าจอมี
ความเที่ยงในการจัดตาแหน่งแต่และตาแหน่ง มีรูปแบบการใช้งาน ดังนี้
รูปแบบ
int printf ( string $format [, mixed $args [, mixed $... ]] )
เมื่อ $format หมายถึง ตัวกาหนดชนิดการแสดงผล (Type Specifiers)
$args
หมายถึง ตัวแปรข้อมูลนาเข้า
ตัวอย่างที่ 3.12 การใช้คาสั่ง printf ( ) สาหรับแสดงในรูปแบบข้อความ
printf ("Bar inventory: %d bottles of tonic water.", 100);
ผลลัพธ์
Bar inventory: 100 bottles of tonic water.
ในตัวอย่างนี้ %d เป็น Format สาหรับตัวกาหนดชนิดการแสดงผล ในที่นี้ %d คือ การ
กาหนดให้แสดงค่าของตัวเลขจานวนเต็ม นอกจากนั้นยังหมายถึงการระบุตาแหน่งที่จะให้แสดงผลลัพธ์
จากตัวอย่าง เมื่อใช้คาสั่ง printf () มีค่าพารามิเตอร์ ที่ส่งเข้ามา คือ 100 ค่า 100 จะถูกแทนที่ใน %d
ระหว่างข้อความ สาหรับกรณีที่ ตัวเลขที่ส่งเข้ามาเป็นค่าทศนิยม ค่าดังกล่าวก็จะถูกปัดเศษให้เป็นจานวน
เต็มที่ใกล้ เ คีย งที่สุ ด เช่น ถ้าส่ งค่าเป็ น 100.2 ผลลั พธ์จะแสดงเป็น 100 ส าหรับตัว กาหนดชนิดการ
แสดงผล มีรายละเอียด ดังตารางที่ 3.1 ดังนี้
ตารางที่ 3.1 แสดงตัวกาหนดชนิดการแสดงผลที่ใช้ร่วมกับคาสั่ง printf ( )
ตัวกาหนดชนิด
ความหมาย
%b
เป็นชนิดตัวเลข แสดงผลเป็นเลขไบนารี (a binary number)
%c
เป็นชนิดตัวเลข แสดงผลเป็นตัวอักขระ ASCII
%d
เป็นชนิดตัวเลขจานวนเต็มบวกและลบ แสดงผลเป็นตัวเลขฐานสิบ
%f
เป็นชนิดตัวเลขจานวนจริง แสดงผลเป็นตัวเลขฐานสิบและทศนิยม
%o
เป็นชนิดตัวเลขจานวนเต็ม แสดงผลเป็นตัวเลขฐานแปด
%s
เป็นชนิดข้อความ แสดงผลเป็นข้อความ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
36 บทที่ 3 PHP เบื้องต้น
ตารางที่ 3.1 (ต่อ)
ตัวกาหนดชนิด
%u
%x
%X

ความหมาย
เป็นชนิดตัวเลขจานวนเต็มบวก แสดงผลเป็นตัวเลขฐานสิบ
เป็นชนิดตัวเลข แสดงผลเป็นเลขฐานสิบหก (อักษรพิมพ์เล็ก)
เป็นชนิดตัวเลข แสดงผลเป็นเลขฐานสิบหก (อักษรพิมพ์ใหญ่)

ดังนั้นหากต้องการที่จะส่งผ่านข้อมูล 2 ค่า สามารถทาได้โดยระบุตัวกาหนดชนิด 2 ตัวเช่นกัน ดัง
ตัวอย่าง ดังนี้
ตัวอย่างที่ 3.14 การใช้คาสั่ง printf ( ) โดยระบุตัวกาหนดชนิดมากกว่า 1 ชนิด
printf ("%d bottles of tonic water cost $%f", 100, 43.20);
ผลลัพธ์
100 bottles of tonic water cost $43.20
หากต้องการกาหนดจ านวนของการแสดงผลจานวนเลขทศนิยม สามารถกาหนดได้โ ดยระบุ
ตัวเลขไว้ก่อนหน้า ตัวกาหนดชนิด ดังนี้
ตัวอย่างที่ 3.15 การใช้คาสั่ง printf ( ) เพื่อการแสดงผลจานวนเลขทศนิยม
printf ("$%.2f", 43.2); // ผลลัพธ์ คือ $43.20
คาสั่ง sprintf ( )
คาสั่ง sprintf ( ) เป็นฟังก์ชันที่ทาหน้าที่เหมือนคาสั่ง printf ( ) แตกต่างก็ตรงที่ฟังก์ชัน sprintf ( )
ใช้ ส าหรั บ ส่ ง ค่ า กลั บ เป็ น ข้ อความหรื อ สตริ ง หรื อ เป็น การน าสตริ ง มาต่ อ ให้ เ ป็น ประโยคเดี ย วกัน แล้ ว
กาหนดค่าให้กับตัวแปร เพื่อประโยชน์การทางานตามเหมาะสม ไม่มีการแสดงผลออกไปยังเว็บบราวเซอร์
ลักษะการใช้งานเหมือน printf ( ) ดังนั้นจะใช้ ตัวกาหนดชนิด เหมือนกัน ตามตารางที่ 3.1 การใช้งานมี
รูปแบบ ดังนี้
รูปแบบ
string sprintf ( string $format [, mixed $args [, mixed $... ]] )
ตัวอย่างที่ 3.16 การใช้คาสั่ง sprintf ( ) สาหรับส่งค่ากลับเป็นข้อความให้เป็นประโยคเดียวกัน
$cost = sprintf ("$%.2f", 43.2);
// ผลลัพธ์ คือ กาหนดให้ $cost = $43.20
ชนิดข้อมูลที่รองรับใน PHP (PHP’s Supported Datatypes)
ใน PHP มีข้อมูล อยู่ หลายชนิด ไม่ว่าจะเป็นข้อมูลชนิดบูลีน (Boolean) ตัวเลขจานวนเต็ม
(Integer) ตัวเลขจานวนจริง (Float) ข้อความหรือสตริง (String) และอาร์เรย์ (Array) เพื่อทาความเข้าใจ
และสามารถนาไปใช้ร่วมกับการกาหนดตัวแปรในหัวข้อต่อๆ ไป ดังรายละเอียดต่อไปนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 3 PHP เบื้องต้น 37
ชนิดข้อมูลพื้นฐาน (Scalar Datatypes)
ชนิดข้อมูลพื้นฐาน เป็นชนิดข้อมูลที่กาหนดให้ตัวแปรหนึ่งๆ เก็บข้อมูลได้เพียงค่าเดียว ชนิดของ
ข้อมูลที่จัดอยู่ในกลุ่มนี้ประกอบด้ วย บูลีน ตัวเลขจานวนเต็ม ตัวเลขจานวนจริง และข้อความหรือสตริง
มีรายละเอียด ดังนี้
1) ข้อมูลชนิดบูลีน
ข้อมูลชนิดบูลีนเป็นชื่อหลังของ George Boole (1815-1864) นักคณิตศาสตร์ที่ได้รับการ
ยกย่องให้เป็นหนึ่งในผู้ก่อตั้งทฤษฎีข้อมูลตัวแปรบูลีน เป็นตัวแทนของความจริงที่สนับสนุนเพียงสองค่า
เท่านั้น คือ TRUE (จริง) และ FALSE (เท็จ) หรือสามารถใช้เลขศูนย์แทน FALSE และค่าใดๆ ที่ไม่ใช่ศูนย์
แทนค่าของ TRUE ดังตัวอย่างต่อไปนี้
ตัวอย่างที่ 3.17 การกาหนดข้อมูลตัวแปรชนิดบูลีน
$alive = false; // $alive is false.
$alive = 1; // $alive is true.
$alive = -1; // $alive is true.
$alive = 5; // $alive is true.
$alive = 0; // $alive is false.
นอกจากการกาหนดเป็นชนิดบูลีนแล้วยังได้มาจากการเปรียบเทียบทางตรรกะ เพื่อตัดสินใจ
ดาเนินการขั้นต่อไป เช่น หากผลลัพธ์ออกมาเป็น TRUE ก็จะทางานต่อ แต่ถ้าออกมาเป็น FALSE ก็จะ
หยุดทางาน เป็นต้น
2) ข้อมูลชนิดเลขจานวนเต็ม
ข้อมูล ชนิ ดเลขจ านวนเต็มเป็นตัว แทนของจ านวนเต็มใดๆ ที่ไม่ประกอบด้ว ยส่ ว นที่เป็ น
เศษส่วน PHP สนับสนุนค่าจานวนเต็มแสดงในเลขฐาน 10 (Decimal) เลขฐาน 8 (Octal) และเลขฐาน
16 (Hexadecimal) ตัวอย่าง ดังนี้
ตัวอย่างที่ 3.18 ตัวอย่างข้อมูลชนิดเลขจานวนเต็ม
42
// เลขฐาน 10
0755 // เลขฐาน 8
0xC4E // เลขฐาน 16
ขนาดสู ง สุ ด ของข้ อ มู ล ชนิ ด เลขจ านวนเต็ ม สู ง สุ ด ที่ ร องรั บ ขึ้ น อยู่ กั บ แพลตฟอร์ ม ที่ ใ ช้
(ระบบปฏิบัติการที่ใช้) สาหรับ PHP 5 และเวอร์ชันก่อนหน้านี้ จะเป็น 32 bit จะมีขนาดสูงสุดของเลขเต็ม
บวกและเต็มลบเท่ากับ 231 สาหรับ PHP 6 จะสนับสนุนค่าสูงสุดของเลขเต็มบวกและเต็มลบเท่ากับ 263

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
38 บทที่ 3 PHP เบื้องต้น
3) ข้อมูลชนิดเลขจานวนจริง
ข้ อ มู ล ชนิ ด เลขจ านวนจริ ง หรื อ เรี ย กว่ า ตั ว เลขทศนิ ย ม ช่ ว ยให้ ส ามารถระบุ ตั ว เลขที่ มี
รายละเอียดที่แท้จริงของเลข เช่น ใช้แทนค่าทางการเงิน น้าหนัก ระยะทางและพื้นที่ทั้งหมด เป็นต้น ซึ่ง
ข้อมูลชนิดจานวนเต็มไม่สามารถระบุได้ มีตัวอย่าง ดังนี้
ตัวอย่างที่ 3.19 แสดงตัวอย่างข้อมูลชนิดเลขจานวนจริง
4.5678
4.0
8.7e4
1.23E+11
4) ข้อมูลชนิดข้อความหรือสตริง
ข้อมูลชนิดข้อความหรือสตริง คือ ข้อมูลที่เป็นอักขระ อาจจะเป็นภาษาอังกฤษ ไทย อื่นๆ ก็
ได้ แต่เนื่องจากสตริงมีความยาวเท่าไหร่ก็ได้ และไม่จาเป็นต้องเขียนอักขระทุกตัวติดกันไปจนจบสตริง
เหมือนกับการเขียนตัวเลข จึงทาให้โปรแกรมไม่สามารถตัดสินใจได้ว่า สตริงนั้นเริ่มต้ นและสิ้นสุดที่ใด
ดังนั้ น การกาหนดข้ อมูล ที่ เป็ น สตริ ง ต้ องกาหนดจุ ดเริ่มต้ นและสิ้ นสุ ด ของมั นเสมอ ด้ว ยเครื่อ งหมาย
Double Quotes (“…”) หรือไม่ก็ใช้ Single Quotes(‘…’) เช่น “Hello, world” หรือ ‘Welcome to
Thailand’ เป็นต้น แต่อย่างไรก็ตาม การใช้เครื่องหมาย Quotes ทั้งสองแบบจะมีข้อแตกต่างกันในบาง
กรณี ซึ่งจะได้กล่าวถึงในลาดับต่อไป
ตัวอย่างที่ 3.20 แสดงตัวอย่างข้อมูลชนิดข้อความหรือสตริง
"PHP is a great language"
"whoop-de-do"
'*9subwayn'
"123$%^789"
นอกจากนี้ยังสามารถเลือกอักขระบางตัวจากข้อความทั้งหมดได้ โดยใช้อาร์เรย์ ดังนี้
ตัวอย่างที่ 3.21 แสดงตัวอย่างการเลือกอักขระบางตัวจากข้อความทั้งหมด
$color = "maroon";
$parser = $color[2]; // กาหนดให้ตัวแปร $parser มีค่าเท่ากับ 'r' วิธีการนับลาดับเริ่มจาก 0
ชนิดข้อมูลแบบชุด (Compound Datatypes)
ชนิดข้อมูลแบบชุด เป็นการรวมชุดของรายการที่คล้ายกันไว้ด้วยกัน อาจเป็นตัวแปรชื่อเดียวกัน
เป็นข้อมูลชนิดเดียวกันเพื่อใช้ในการอ้างอิงถึงกลุ่มข้อมูลชนิดเดียวกัน ในที่นี้ หมายถึง อาร์เรย์ (Array) มี
รายละเอียด ดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 3 PHP เบื้องต้น 39
1) อาร์เรย์ (Array)
อาร์เรย์จะมีประโยชน์ในการรวมชุดของรายการที่คล้ายกันรวมกันไว้ด้วยกัน เพื่อใช้สาหรับการ
อ้างอิงถึงข้อมูลอะไรบางอย่างเฉพาะเจาะจง โครงสร้างข้อมูลที่เรียกว่าอาร์เรย์ ที่ถูกกาหนดอย่างมีรูปแบบ
เป็นกลุ่มเดียวกัน มีดัชนีเพื่อใช้เข้าถึงหรืออ้างถึงสมาชิกข้อมูลในลาดับต่ างๆ การอ้างถึงสมาชิกหนึ่งๆ ใน
อาร์เรย์จะต้องใช้ดัชนีอาร์เรย์ในการชี้ตาแหน่ง (คีย์) อ้างอิงค่าที่สอดคล้องกัน และแต่ละข้อมูลในสมาชิก
สามารถที่จะอ้างอิงด้วยตัวเลขที่เรียบง่ายไปยังตาแหน่งของค่าในชุดหรืออาจมีบางส่วนสัมพันธ์โดยตรงกับค่า
ตัวอย่างที่ 3.22 แสดงตัวอย่างการกาหนดค่าสมาชิกให้กับตัวแปรชนิดอาร์เรย์โดยใช้ดัชนีอาร์เรย์
$province [0] = "Thailand";
$province [1] = "Myanmar";
...
$province [50] = "Cambodia";
นอกจากนี้ยังสามารถสร้างดัชนีความสัมพันธ์เพื่อเชื่อมโยงข้อมูล เช่น สร้างความสัมพันธ์ของ
อาร์เรย์ไปยังเมืองหลวงของประเทศต่างๆ แทนที่จะใช้ดัชนีที่เป็นตัวเลข โดยใช้ชื่อของประเทศแทนดัชนี
ความเชื่อมโยงแทน ดังนี้
ตัวอย่างที่ 3.23 แสดงตัวอย่างการกาหนดค่าสมาชิกให้กับตัวแปรชนิดอาร์เรย์โดยใช้ชื่อแทนดัชนี
$state ["Thailand"] = "Bangkok";
$state ["Myanmar"] = "Naypyidaw";
...
$state ["Cambodia"] = "Phnom Penh";
2) วัตถุ (Object)
ชนิดข้อมูลวัตถุ ที่สนับสนุนใน PHP มีแนวคิดมาจากกระบวนทัศน์ ในการเขียนโปรแกรมเชิง
วัตถุ ซึ่งแตกต่างจากชนิดข้อมูลอื่นๆ ในภาษา PHP วัตถุจะต้องประกาศอย่างชัดเจน การประกาศลักษณะ
ของวัตถุ และลักษณะการทางานนี้จะเกิดขึ้นภายในสิ่งที่เรียกว่า "คลาส" มีตัวอย่าง ดังนี้
ตัวอย่างที่ 3.24 แสดงตัวอย่างการเขียนโปรแกรมเชิงวัตถุด้วยภาษา PHP
class Appliance {
private $_power;
function setPower ($status) {
$this->_power = $status;
// การเรียกใช้เมธอดภายในคลาสเดียวกัน
}
}
$blender = new Appliance;
// การกาหนดให้ $blender ให้สามารถ
// เรียกใช้เมธอดของคลาส Appliance
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
40 บทที่ 3 PHP เบื้องต้น
การแปลงชนิดข้อมูลโดยใช้ตัวแปร
การแปลงค่าของชนิดข้อมูลหนึ่งไปเป็นชนิดข้อมูลอื่นๆ ได้นั้น จาเป็นต้องรู้ถึงชนิดของข้อมูลที่จะ
แปลงไป การแปลงค่าของชนิดข้อมูลสามารถทาได้โดยการวางชนิดที่ต้องการแปลงไว้ในด้านหน้าของตัวแปร
ที่จะทาการแปลง สาหรับรายละเอียดของชนิดของตัวแปลง แสดงในตารางที่ 3.2 มีรายละเอียด ดังต่อไปนี้
ตารางที่ 3.2 ตัวดาเนินการแปลงชนิดของข้อมูล (Type Casting Operators)
Cast Operators
(array)
(bool) or (boolean)
(int) or (integer)
(int64) 64-bit
(object)
(real) or (double) or (float)
(string)

Conversion
Array
Boolean
Integer
integer (introduced in PHP 6)
Object
Float
String

ตัวอย่างที่ 3.25 ตัวอย่างการแปลงตัวเลขจานวนเต็มเป็นเลขจานวนจริง
$score = (double) 13;

// ผลลัพธ์ทได้คือ $score = 13.0
ี่

ตัวอย่างการแปลงค่าข้อมูลชนิดตัวเลขจานวนจริง (double) เป็นเลขจานวนเต็มจะเห็นได้ว่าเลข
ทศนิยมด้านหลังจะถูกปัดทิ้ง ดังนี้
ตัวอย่างที่ 3.26 การแปลงค่าข้อมูลชนิดตัวเลขจานวนจริงเป็นเลขจานวนเต็ม
$score = (int) 14.8;

// ผลลัพธ์ คือ $score = 14

ตัวอย่างที่ 3.27 การแปลงค่าข้อมูลชนิดข้อความหรือสตริงไปเป็นชนิดตัวเลขจานวนเต็ม
$sentence = "This is a sentence";
echo (int) $sentence; // ผลลัพธ์ คือ returns 0

ตัวอย่างที่ 3.28 การแปลงค่าข้อมูลปกติเป็นข้อมูลชนิดอาร์เรย์
$score = 1114;
$scoreboard = (array) $score;
echo $scoreboard [0]; // ผลลัพธ์ที่แสดงออกมา คือ 1114

ตัวอย่างที่ 3.29 การแปลงค่าข้อมูลปกติเป็นข้อมูลชนิดวัตถุ
$model = "Toyota";
$obj = (object) $model;
//ค่าของข้อมูลสามารถอ้างอิงได้ ดังนี้
print $obj -> scalar; // ผลลัพธ์ คือ returns "Toyota"

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 3 PHP เบื้องต้น 41
การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ (Adapting Datatypes with Type Juggling)
PHP ถูกออกแบบมาให้มีความยืดหยุ่นสูง สามารถปรับเปลี่ยนค่าตัวแปรได้หลากหลายและ
ทันท่วงที แบบอัตโนมัติหรือสามารถปรับเปลี่ยนชนิดของตัวแปรแบบอัตโนมัติ โดยจะระบบจะทาการ
พิจารณาความเหมาะสมกับสถานการณ์ที่มีการอ้างอิงตัวแปร ตัวอย่างต่อไปนี้
ตัวอย่างที่ 3.30 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ แบบที่ 1
<?php
$total = 5;
// เป็นชนิดตัวเลข integer
$count = "15";
// เป็นชนิด string
$total += $count; // ผลลัพธ์ของการคานวณ คือ $total = 20 (เป็นชนิด integer)
?>
ตัวอย่างที่ 3.31 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ แบบที่ 2
<?php
$total = "45 fire engines";
$incoming = 10;
$total = $incoming + $total; // ผลลัพธ์ คือ $total = 55
?>
ตัวอย่างที่ 3.32 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ แบบที่ 3
<?php
$val1 = "1.2e3";
// 1,200
$val2 = 2;
echo $val1 * $val2; // ผลลัพธ์ที่แสดงออกมา คือ 2400
?>
ฟังก์ชันที่เกี่ยวข้องกับชนิดข้อมูล (Type-Related Functions)
ฟังก์ชันที่เกี่ยวข้องกับชนิดข้อมูล เช่น การตรวจสอบ และการแปลงชนิดข้อมูล มีรายละเอียด ดังนี้
ฟังก์ชันเรียกดูชนิดของข้อมูล (Retrieving Types)
ฟังก์ชัน gettype ( ) เป็นฟังก์ชันที่ใช้สาหรับเรียกดูชนิดของข้อมูล โดยการส่งกลับเป็นชนิดของ
ข้อมูลในตัวแปร โดยค่าที่ส่งกลับมีทั้งหมด 9 ค่า ประกอบด้วย boolean, integer, double หรือ float,
string, array, object, resource, NULL และ unknown type รูปแบบการใช้งาน ดังนี้
รูปแบบ
string gettype ( mixed $var )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
42 บทที่ 3 PHP เบื้องต้น
เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบชนิด
ตัวอย่างที่ 3.33 ตัวอย่างการใช้ฟังก์ชัน gettype ( ) เรียกดูชนิดของข้อมูล
<?php
$data = "Mr.Parinya";
echo gettype ($data);
// ผลลัพธ์ คือ string
?>
ฟังก์ชันแปลงชนิดข้อมูล (Converting Types)
ฟังก์ชัน settype ( ) เป็นฟังก์ชันสาหรับแปลงตัวแปรตามที่ระบุ ให้เป็นชนิดอื่นๆ ตามต้องการ
ชนิดของข้อมูลที่สามารถแปลงได้นั้น มี 7 ชนิด ประกอบด้วย array, boolean, float, integer, null,
object และ string นอกจากนี้ถ้าหากการแปลงชนิดข้อมูลประสบความสาเร็จ ฟังก์ชัน settype ( ) จะมี
การส่งค่ากลับผลลัพธ์จะมีค่าเป็น TRUE หากไม่สาเร็จจะส่งค่ากลับเป็น FALSE รูปแบบการใช้งาน ดังนี้
รูปแบบ
bool settype ( mixed &$var , string $type )
เมื่อ $var หมายถึง ตัวแปรที่ต้องการแปลงชนิด
$type หมายถึง ชนิดที่ต้องการแปลง มีรายละเอียดดังนี้
"boolean" คือ บูลีน
"integer" คือ เลขจานวนเต็ม
"float"
คือ เลขจานวนจริง
"string"
คือ ข้อความ
"array"
คือ อาร์เรย์
"object" คือ ออบเจ็กต์
"null"
คือ ค่าว่างหรือไม่กาหนดชนิดใดๆ
ตัวอย่างที่ 3.34 ตัวอย่างการใช้ฟังก์ชัน settype ( ) เพื่อแปลงหรือกาหนดชนิดข้อมูล
<?php
$foo = "5bar";
// เป็นชนิด string
$bar = true;
// เป็นชนิด boolean
settype ($foo, "integer"); // ผลลัพธ์ $foo จะมีค่าเท่ากับ 5 และเป็นชนิด integer
settype ($bar, "string"); // ผลลัพธ์ $bar จะมีค่าเท่ากับ "1" และเป็นชนิด string
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 3 PHP เบื้องต้น 43
ฟังก์ชันตรวจสอบชนิดของข้อมูล (Type Identifier Functions)
ฟังก์ชันที่ใช้สาหรับตรวจสอบชนิดของข้อมูล ประกอบด้วย is_array ( ), is_bool ( ), is_float ( )
หรือ is_real ( ), is_integer ( ) หรือ is_int ( ), is_null ( ), is_numeric ( ), is_object ( ),
is_resource ( ), is_scalar ( ) และ is_string ( ) ทุกฟังก์ชันจะมีรูปแบบการใช้งานเหมือนกัน
ประกอบด้วย ชื่อฟังก์ชันตรวจสอบ และในพารามิเตอร์ให้ใส่ตัวแปรที่ต้องการตรวจสอบ หลังจากที่ฟังก์ชัน
ทาการตรวจสอบแล้วและมีการส่งค่ากลับเป็น TRUE หากค่าของตัวแปรตรงกับชนิดข้อมูลที่ตรวจสอบ
หากไม่ตรงกับชนิดข้อมูลที่ตรวจสอบจะส่งค่ากลับเป็น FALSE มีรูปแบบ ดังนี้
รูปแบบ
boolean is_name (mixed var) // เมื่อกาหนดให้ is_name แทนชื่อฟังก์ชันตรวจสอบ
เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบชนิด
ตัวอย่างที่ 3.35 ตัวอย่างการใช้ฟังก์ชัน is_name ( ) เพื่อตรวจสอบชนิดของข้อมูล
<?php
if (is_int (23)) {
echo "is integer <br/>";
} else {
echo "is not an integer <br/>";
}
var_dump (is_int (23));
var_dump (is_int ("23"));
var_dump (is_int (23.5));
?>
ผลลัพธ์
is integer
bool (true)
bool (false)
bool (false)
คาสงวนของ PHP (Reserved Words)
คาสงวน หมายถึง คาที่จะใช้เป็นคาสั่งเฉพาะของ PHP ดังนั้นต้องไม่นาคาเหล่านี้ไปตั้งเป็นชื่อ
ตัวแปร หรือฟังก์ชัน มิฉะนั้นจะทาให้เกิดข้อผิดพลาดขึ้นได้ โดยคาเหล่านี้คือ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
44 บทที่ 3 PHP เบื้องต้น
ตารางที่ 3.3 คาสงวนของ PHP
and
or
_LINE_
array ( )
class
const
die ( )
do
empty ( )
enddeclare
endswitch
endwhile
for
foreach
include ( ) include_once ( )
print ( )
require ( )
switch
unset ( )
_FUNCTION_
_CLASS_
interface (5) implements (5)
protected (5)
abstract (5)
throw (5)
cfunction
(4 only)

xor
as
continue
echo ( )
endfor
eval ( )
function
isset ( )
require_once ( )
use
_METHOD_
extends
clone (5)
old_function
(4 only)

_FILE_
exception (5)
break
case
declare
default
else
elseif
endforeach
endif
exit ( )
extends
global
if
list ( )
new
return ( )
static
var
while
nal ( )
php_user_lter (5)
public (5)
private (5)
try (5)
catch (5)

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4
ตัวแปร ตัวดำเนินกำรและนิพจน์ (Variables, Operators and Expressions)
ในการศึกษาการเขียนโปรแกรมทุกภาษา สิ่งที่ควรเรียนรู้เป็นลาดับแรกๆ คือ การกาหนดตัวแปร
สาหรับเก็บข้อมูลบางอย่างเอาไว้ก่อนจะนาไปใช้งานอื่นๆ ต่อไป และขั้นตอนถัดไปก็คือ รู้จักการใช้ ตัว
ดาเนินการแบบต่างๆ สาหรับใช้ในการประมวลผลข้อมูลเพื่อให้ได้ผลลัพธ์ที่ต้องการ
ตัวแปร (Variable)
ตัวแปร ใช้ในการเก็บพักข้อมูลบางอย่างก่อนที่จะนาข้อมูลนั้นไปใช้งานอื่นๆ ต่อไป ที่น่าสนใจ
สาหรับตัวแปรใน PHP ไม่จาเป็นต้องได้รับการประกาศอย่างชัดเจนเหมือนภาษาอื่นๆ แต่ก็ไม่เป็นสิ่งที่ดี
นักหากขาดทักษะการเขียนโปรแกรมที่ดี ก็อาจจะทาให้เกิดความสับสนในการใช้งานได้ รายละเอียดที่
น่าสนใจเกี่ยวกับตัวแปรมีดังนี้
ข้อกำหนดของตัวแปรใน PHP
วิธีการกาหนดตัวแปรใน PHP จะมีข้อกาหนดที่สาคัญดังนี้คือ
 ตัวแปรใน PHP ไม่จาเป็นต้องระบุชนิดของข้อมูล เนื่องจากตัวแปรแต่ละตัวสามารถเก็บข้อมูล
ชนิดใดก็ได้
 ตัวแปรใน PHP จะต้องขึ้นด้วยสัญลักษณ์เครื่องหมาย $ (Dollar Sign) แล้วตามด้วยชื่อของ
ตัวแปรที่ต้องการใช้งาน เช่น $name, $value, $a, $x เป็นต้น
 ตามข้อกาหนดดั้งเดิมนั้น ตัวแปรต้อง ขึ้นต้น ด้วยอักษร a-z หรือ A-Z หรือเครื่องหมาย _
เท่านั้น ห้ามขึ้นต้นด้วยตัวเลข 0-9 หรืออักขระอื่นๆ นอกเหนือจากนี้ ตัวอย่างการกาหนดตัวแปรที่ถูกต้อง
เช่น $name, $_price, $value1, $num2string
 การเขียนตัวแปรด้วยลักษณะ ตัวพิมพ์ที่แตกต่างกัน ถือว่าเป็นตัวแปรคนละตัว เช่น $abc,
$ABC จะถือว่าไม่ใช่ตัวแปรเดียวกัน
 ในปั จ จุ บั น สามารถน าอักขระภาษาอื่น ๆ มาตั้งเป็นชื่อตัว แปรได้ ซึ่งจากการทดสอบของ
ผู้เขียนพบว่า สามารถตั้งชื่อเป็นภาษาไทยก็ได้ เช่น $ชื่อ, $จานวน1, $ผลลัพธ์ เป็นต้น แต่โดยทั่วไปแล้ว
นิยมตั้งชื่อตัวแปรเป็นภาษาอังกฤษมากกว่า
เมื่อได้ประกาศตัวแปรก็สามารถเริ่มต้นใช้งานได้ทันที แต่ก่อนที่จะนาตัวแปรไปใช้งานได้นั้น ตัว
แปรจะต้องเก็บข้อมูลบางอย่างเอาไว้ หรือเรียกว่าการกาหนดค่าตัวแปร การกาหนดค่าตัวแปรแบบง่ายๆ
คื อ การคั ด ลอกค่ า หรื อ โอนถ่ า ยค่ า ของนิ พ จน์ ห รื อ สมการต่ า งๆ โดยมี สั ญ ลั ก ษณ์ ที่ ใ ช้ ก าหนดค่ า คื อ
46 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
เครื่องหมาย = (เท่ากับ) การกาหนดค่าตัวแปรนั้น หลักๆ จะมีอยู่ด้วยกัน 2 วิธี คือ 1) กาหนดค่าตัวแปร
ปกติ (by value) และ 2) กาหนดตัวแปรโดยการอ้างอิง (by reference) ดังนี้
กำรกำหนดค่ำตัวแปรปกติ (Value Assignment)
การกาหนดค่าตัวแปรรูปแบบนี้ เป็นการกาหนดค่าตัวแปรแบบง่ายที่สุดและนิยมใช้งานโดยทั่วไป
สามารถกาหนดได้หลายลักษณะขึ้นอยู่กับชนิดข้อมูล ดังนี้
สาหรับข้อมูลชนิดตัวเลข ก็เขียนเป็นตัวเลขลงๆ ไปโดยตรงได้เลย ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.1 การกาหนดค่าตัวแปรปกติ
$x = 123;
// กาหนดให้ตัวแปร $x มีค่าเท่ากับ 123
$y = 4.56;
// กาหนดให้ตัวแปร $y มีค่าเท่ากับ 4.56
$z = -789;
// กาหนดให้ตัวแปร $z มีค่าเท่ากับ -789
ส าหรั บ ข้ อ มู ล ชนิ ด ข้ อ ความก็ ก าหนดตามรู ป แบบการเขี ย นข้ อ ความ นั่ ง คื อ ต้ อ งเขี ย นไว้ ใ น
เครื่องหมาย “ ” หรือไม่ก็ ‘’ เท่านั้น ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.2 การกาหนดค่าตัวแปรชนิดข้อความหรือสตริง
$name = “ปริญญา”;
// กาหนดให้ตัวแปร $name มีค่าเท่ากับข้อความ ปริญญา
$country = ‘Thailand’; // กาหนดให้ตัวแปร $country มีค่าเท่ากับข้อความ Thailand
$phone = ‘0123456789’; // กาหนดให้ตัวแปร $phone มีค่าเท่ากับข้อความ 0123456789
ตัวเลขที่เขียนในแบบข้อความ เช่น “123” จะถือว่าเป็น “ชนิดข้อความ” แต่สามารถนาไปใช้
คานวณได้ตามปกติ ทั้งนี้การกาหนดข้อความด้วยเครื่องหมาย “…” และ ‘…’ จะมีข้อแตกต่างกันบางกรณี
ซึ่งจะอธิบายเพิ่มเติมในหัวข้อต่อๆ ไป
ส่วนกรณีที่ตัวแปรเป็นชนิดบูลีนก็กาหนดค่าเป็น true หรือ false อย่างใดอย่างหนึ่ง ดังนี้
ตัวอย่ำงที่ 4.3 การกาหนดค่าตัวแปรชนิดบูลีน
$first_time = true ;
$is_valid = false ;
การใช้งานตัวแปรใน PHP มีความยืดหยุ่น ไม่จากัดชนิดของตัวแปรเป็นชนิดใดชนิดหนึ่ง และยัง
สามารถสลับปรับเปลี่ยนได้ในทันที มีตัวอย่าง ดังนี้
ตัวอย่ำงที่ 4.4 การกาหนดค่าตัวแปรแบบไม่จากัดชนิดของตัวแปร
$color = "red";
$number = 12;
$age = 12;
$sum = 12 + "15"; // ผลลัพธ์ ตัวแปร $sum = 27

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 47
กำรกำหนดค่ำตัวแปรโดยกำรอ้ำงอิง (Reference Assignment)
PHP ตั้งแต่เวอร์ชัน 4 ได้นาความสามารถในการกาหนดค่าตัวแปรโดยการอ้างอิง ซึ่งจะช่วยให้
สามารถสร้างตัวแปรใหม่ให้มีค่าเช่นเดียวกันกับตัวแปรใดๆ ก็ได้ และมีการสร้างความสัมพันธ์ระหว่างตัว
แปรหลักและตัวแปรอ้างอิง เมื่อมีการเปลี่ยนแปลงค่าในตัวแปรใดๆ ค่าของตัวแปรทั้งหมดที่มีการอ้างอิง
กันจะมีค่าหรือข้อมูลเดียวกัน การกาหนดตัวแปรโดยอ้างอิงสามารถทาได้โดยการเพิ่มเครื่องหมายแอนด์
(&) ด้านขวาของเครื่องหมายเท่ากับหรือด้านหน้าของตัวแปรก็ได้ ดังนี้
ตัวอย่ำงที่ 4.5 การกาหนดค่าตัวแปรโดยการอ้างอิง
<?php
$value1 = "Hello";
$value2 =& $value1; // $value1 และ $value2 มีค่าเท่ากับ "Hello"
$value2 = "Goodbye"; // $value1 และ $value2 มีค่าเท่ากับ "Goodbye"
?>
ขอบเขตของตัวแปร (Variable Scope)
การประกาศและกาหนดค่าตัว แปรทั้งวิธีกาหนดค่าปกติห รือกาหนดค่า แบบอ้างอิง ใน PHP
สามารถประกาศได้ทุกที่ในสคริปต์ของ PHP ซึ่งตาแหน่งของการประกาศตัวแปรมีผลต่อการใช้งานหรือ
เรียกว่าขอบเขตของตัวแปร จะมีผลต่อการเข้าถึงและใช้งาน ขอบเขตของตัวแปรมี 4 ชนิด คือ ตัวแปร
ท้องถิ่น (Local variables), ตัวแปรฟังก์ชันพารามิเตอร์ (Function parameters), ตัวแปรสาธารณะ
(Global variables) และตัวแปรคงที่ (Static variables) มีรายละเอียด ดังนี้
ตัวแปรท้องถิ่น (Local Variables)
ตัวแปรท้องถิ่น คือ ตัวแปรที่ถูกประกาศไว้ภายในฟังก์ชันนั้น จะมีขอบเขตเฉพาะภายในฟังก์ชัน
นั้นๆ เท่านั้น หรือถ้าจะพูดให้ง่ายก็คือจะสามารถใช้งานตัวแปรนั้นๆ ได้ภายในฟังก์ชันนั้น ในทางกลับกัน
ถ้าประกาศตัวแปรภายนอกฟังก์ชัน (เป็นขอบเขตตัวแปรสาธารณะ: Global Variables) ก็จะไม่สามารถ
ใช้งานตัวแปรนั้นๆ ภายในฟังก์ชันได้ ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.6 ตัวแปรที่ถูกประกาศไว้ภายในฟังก์ชันหรือเรียกกว่าตัวแปรท้องถิ่น
<?php
function update_counter ( )
$counter++;
}
$counter = 10; update_counter ( );
echo $counter;
// ผลลัพธ์ คือ 10 เท่าเดิมก่อนเรียกใช้ฟังก์ชัน
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
48 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
ตัวแปรฟังก์ชันพำรำมิเตอร์ (Function Parameters)
ตั ว แปรฟั ง ก์ ชั น พารามิ เ ตอร์ คื อ ตั ว แปรต่ า งๆ ที่ ถู ก ส่ ง ผ่ า นไปยั ง ฟั ง ก์ ชั น หนึ่ ง ๆ ซึ่ ง การส่ ง
ค่าพารามิเตอร์นั้นสามารถส่งได้ครั้งละหลายๆ ตัวแปร โดยทาการคั่นแต่ละพารามิเตอร์ด้วยเครื่องหมาย
comma (,) สาหรับรูปแบบการส่ง ค่าจะกล่าวถึงในบทถัดไป ตัวอย่างการการส่งค่าตัวแปรฟังก์ชัน
พารามิเตอร์ ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.7 การใช้งานตัวแปรฟังก์ชันพารามิเตอร์
<?php
function x10 ($value) { // ตัวอย่าง ตัวแปรฟังก์ชันพารามิเตอร์ $value
$value = $value * 10;
return $value;
// มีการส่งค่ากลับตัวแปรฟังก์ชันพารามิเตอร์
}

ตัวแปรสำธำรณะ (Global Variables)
ตัวแปร ที่ประกาศไว้ภายนอกฟังก์ชัน คือ ตัวแปรสาธารณะ ซึ่งหมายความว่า สามารถเข้าถึงจาก
ส่วนใดๆ ของโปรแกรมได้ แต่อย่างไรก็ตามมันจะไม่สามารถใช้งานได้ภายในฟังก์ชัน แต่ถ้าต้องการเรี ยกใช้
งานตัวแปรสาธารณะภายในฟังก์ชันนั้นจริงๆ สามารถใช้คาสั่ง GLOBAL ในการอ้างอิงได้ ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.8 การใช้งานตัวแปรสาธารณะ
<?php
$somevar = 15;
function addit ( ) {
GLOBAL $somevar;
$somevar++;
}
addit ( );
echo "Somevar is $somevar"; // ผลลัพธ์ คือ Somevar is 16
?>

ยังมีอีกวิธีห นึ่ งในการอ้างอิงตัว แปรสาธารณะได้ นั่นก็คือการใช้อาร์เรย์ของ PHP
$GLOBALS แทนได้ ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.9 การอ้างอิงตัวแปรสาธารณะ
<?php
$somevar = 15;
function addit ( ) {
$GLOBALS ["somevar"]++;
}

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL

ที่ชื่อว่า
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 49
addit ( );
echo "Somevar is ".$GLOBALS ["somevar"];

// ผลลัพธ์ คือ Somevar is 16

?>

ตัวแปรคงที่ (Static Variables)
ตัวแปรคงที่นั้นจะทาการเก็บค่าของตัวแปรนั้นๆ ไว้ทุกครั้งที่เรียกใช้ ฟังก์ชัน เมื่อเรียกใช้ฟังก์ชันกี่
ครั้งค่าของตัวแปรที่ถูกประกาศเป็นแบบคงที่จะถูกปรับปรุงค่าไว้เสมอ สามารถใช้ได้กับตัวแปรท้องถิ่น
เท่านั้น มีตัวอย่าง ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.10 การใช้งานตัวแปรคงที่
<?php
function show_number ( ) {
STATIC $count = 0;
$count=$count+10;
echo $count;
echo "<br />";
}
show_number ( );
show_number ( );
show_number ( );
?>
ผลลัพธ์ของการทางานถ้าหากไม่มีการกาหนด STATIC ไว้ด้านหน้าของตัวแปร $count ดังนี้
10
10
10

แต่ผลลัพธ์ของการทางานเมื่อมีการกาหนด STATIC ไว้ด้านหน้าตัวแปร $count จะได้ผลลัพธ์ ดังนี้
10
20
30

ตัวแปรพิเศษ (Super global Variables)
ตัวแปรพิเศษของ PHP คือ ตัวแปรที่กาหนดไว้ล่วงหน้าภายในระบบของ PHP สามารถเข้าถึงได้
จากทุกที่ภายในสคริปต์ที่ทางานอยู่ สามารถเรียกใช้ตัวแปรเหล่านี้ เพื่อดึงรายละเอียดเกี่ยวกับการใช้งาน
ผู้ใช้ในปัจจุบัน รวมทั้งรายละเอียดของเครื่องคอมพิวเตอร์ ระบบปฏิบัติการและเว็บเซิร์ฟเวอร์ และอื่นๆ
อีกมากมาย หากต้องการเรียกดูตัวแปรพิเศษทั้งหมดของ PHP สามารถใช้คาสั่ง ตัวอย่างดังนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
50 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
ตัวอย่ำงที่ 4.11 การใช้งานตัวแปรพิเศษ
<?php
foreach ($_SERVER as $var => $value) echo "$var => $value <br />";
?>
หลังจากเรียกใช้คาสั่ง ระบบจะส่งกลับเป็นรายการของตัวแปรพิเศษ ซึ่งอาจใช้เวลาสักครู่เพื่ออ่าน
รายชื่อตัวแปรพิเศษและรายละเอียดต่างๆ ของระบบปฏิบัติการและเว็บเซิร์ฟเวอร์ รวมถึงสภาพแวดล้อม
ต่างๆ ที่เกี่ยวข้อง ตัวอย่างตัวแปรพิเศษ มีตัวอย่างดังนี้
ตัวอย่ำงที่ 4.12 การใช้งานตัวแปรพิเศษร่วมกับ HTML tags
HTTP_HOST => localhost:81
HTTP_USER_AGENT => Mozilla/5.0 (Windows; U; Windows NT 6.0; enUS;rv:1.8.0.10) Gecko/20070216 Firefox/1.5.0.10
HTTP_ACCEPT => text/xml,application/xml,application/xhtml+xml,text/html;
q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_LANGUAGE => en-us,en;q=0.5
HTTP_ACCEPT_ENCODING => gzip,deflate
HTTP_ACCEPT_CHARSET => ISO-8859-1,utf-8;q=0.7,*;q=0.7
HTTP_KEEP_ALIVE => 300
HTTP_CONNECTION => keep-alive
PATH =>C:oraclexeapporacleproduct10.2.0serverbin; c:rubybin;
C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:ProgramFilesQuickTi
meQTSystem; c:php52; c:Python24
SystemRoot => C:Windows
COMSPEC => C:Windowssystem32cmd.exe
PATHEXT => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.RB;.RBW
WINDIR => C:Windows
SERVER_SIGNATURE => Apache/2.0.59 (Win32) PHP/6.0.0-dev Server at localhost Port 81
SERVER_SOFTWARE => Apache/2.0.59 (Win32) PHP/6.0.0-dev
SERVER_NAME => localhost
SERVER_ADDR => 127.0.0.1
SERVER_PORT => 81
REMOTE_ADDR => 127.0.0.1
DOCUMENT_ROOT => C:/apache2/htdocs
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 51
SERVER_ADMIN => parinya@freebsd.sru.ac.th
SCRIPT_FILENAME => C:/apache2/htdocs/books/php-MySQL/5/server.php
REMOTE_PORT => 49638
GATEWAY_INTERFACE => CGI/1.1
SERVER_PROTOCOL => HTTP/1.1
REQUEST_METHOD => GET
QUERY_STRING =>
REQUEST_URI => /books/php-MySQL/5/server.php
SCRIPT_NAME => /books/php-MySQL/5/server.php
PHP_SELF => /books/php-MySQL/5/server.php
REQUEST_TIME => 1174440456
ตัวแปรพิเศษที่เห็นเหล่านี้ คือ ตัวแปรพิเศษทั้งหมดของสคริปต์ที่ทางานอยู่ และสามารถใช้ได้ตว
ั
แปรพิเศษเหล่านี้ได้ ซึ่งบางตัวแปรอาจจะไม่มีประโยชน์เป็นเพียงข้อมูลสารสนเทศของระบบเท่านั้น ดังนั้น
ต้องพิจารณาใช้หรือประยุกต์ใช้ตามความเหมาะสม ต่อไปจะยกตัวอย่างการเรียกใช้ตัวแปรพิเศษเพื่อแสดง
แสดง IP ที่กาลังใช้งานอยู่ ลักษณะการใช้งานจะเหมือนกับการใช้งานอาร์เรย์ ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.13 การใช้งานตัวแปรพิเศษในลักษณะการใช้งานจะเหมือนกับการใช้งานอาร์เรย์
<?php
printf ("Your IP address is: %s", $_SERVER['REMOTE_ADDR']);
?>
ผลลัพธ์
Your IP address is: 127.0.0.1
หากต้องการเรียกดูเว็บบราวเซอร์และระบบปฏิบัติที่ใช้งานอยู่ สามารถใช้ตัวแปรพิเศษ ดังนี้
ตัวอย่ำงที่ 4.14 การแสดงผลตัวแปรพิเศษผ่านเว็บบราวเซอร์
<?php
printf ("Your browser is: %s", $_SERVER['HTTP_USER_AGENT']);
?>
ผลลัพธ์
Your browser is: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US;
rv:1.8.0.10)Gecko/20070216 Firefox/1.5.0.10

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
52 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
ตัวแปรที่เรียกใช้ผ่ำน $_GET (Retrieving Variables Passed Using $_GET)
ตัวแปร $_GET เป็นตัวแปรพิเศษที่เรียกว่า Super global predefined variable เป็นตัวแปร
ระบบของ PHP ที่ประกาศเป็น global โดยอัตโนมัติ จึงสามารถถูกใช้งานได้ในฟังก์ชันต่างๆ โดยไม่ต้อง
ประกาศ global เช่น http://www.example.com/index.html?cat=apache&id=157 ได้ผลดังนี้
ตัวอย่ำงที่ 4.15 ตัวแปรที่เรียกใช้งาน $_GET
$_GET ['cat'] = "apache"
$_GET ['id'] = "157"
การจะใช้งานตัวแปรพิเศษนี้ได้นั้น ในหน้าฟอร์ม (Form) ส่งค่า จะต้องมีการกาหนด method
ในการส่งค่าเป็นแบบ GET ด้วยจึงจะสามารถใช้ตัวแปรพิเศษเหล่านี้ได้
ตัวแปรที่เรียกใช้ผ่ำน $_POST (Retrieving Variables Passed Using $_POST)
ตัวแปร $_POST เป็นตัวแปรพิเศษที่เรียกว่า Super global predefined variable เช่นเดียวกับ
$_GET แต่ไม่แสดงผลตัวแปรและค่าตัวแปรบน URL มีตัวอย่างดังนี้
ตัวอย่ำงที่ 4.16 ตัวแปรที่เรียกใช้ผ่าน $_POST
<form action="subscribe.php" method="post">
<p>
Email address: <br />
<input type="text" name="email" size="20" maxlength="50" value="" />
</p>
<p>
Password:<br />
<input type="password" name="pswd" size="20" maxlength="15" value="" />
</p>
<p>
<input type="submit" name="subscribe" value="subscribe!" />
</p>
</form>
จากตัวอย่างตัวแปร $_POST จะส่งค่าผ่านไปยังไฟล์ subscribe.php พร้อมตัวแปรและค่า ดังนี้
ตัวอย่ำงที่ 4.17 การกาหนดค่าให้กับตัวแปร $_POST ก่อนส่งค่าไปทางานต่อในไฟล์อื่นๆ
$_POST['email'] = "jason@example.com";
$_POST['pswd'] = "rainyday";
$_POST['subscribe'] = "subscribe!";

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 53
ผลจากการส่งค่าผ่านไปยังไฟล์ subscribe.php จะไม่สามารถใช้ตัวแปร $email, $pswd และ
$subscribe โดยตรงได้ ต้องใช้ผ่านตัวแปร $_POST เท่านั้น
การกาหนด method โดยส่วนใหญ่จะกาหนดเป็น POST เพื่อให้ส่งข้อมูลจาก field ต่างๆ ไป ใน
ส่วนหัวของโปรโตคอล HTTP request ซึ่งสามารถส่งข้อมูลจานวนมากได้ส่วนการส่งด้วย method GET
จะใช้ในกรณีที่มี field และความยาวข้อมูลน้อยและไม่เป็นความลับ เนื่องจากการส่งแบบ GET เป็นการ
สร้าง query string จาก field ต่างๆ ต่อท้ายชื่อ URL โดยอัตโนมัติและการส่งแบบ GET ยังไม่สามารถ
ใช้ได้กับฟอร์มที่มีการส่งไฟล์ด้วย
กำรเรียกใช้ข้อมูลที่เก็บไว้ในคุกกี้ (Retrieving Information Stored Within Cookies)
$_COOKIE เป็นตัวแปรพิเศษที่เรียกว่า Super global ข้อมูลที่เก็บไว้ในคุกกี้จะถูกเก็บไว้
ระยะเวลาหนึ่งเพื่อใช้งานในเอกสารต่างๆ ทั้งเว็บไซต์ (การเก็บข้อมูลไว้ในคุกกี้นั้น ระบบจะทาการสร้าง
ไฟล์ เก็ บ คุก กี้ ไว้ ที่ เครื่ องไคลเอ็น ต์ ) ซึ่ งการจะใช้ คุ ก กี้ไ ด้ นั้น จะต้ องมี การสร้ า งคุ ก กี้ก่ อ น โดยใช้ค าสั่ ง
setcookie ( ) รายละเอียดการใช้งาน จะกล่าวถึงในบทต่อไป
กำรเรียกใช้ข้อมูลที่เก็บไว้ในเซสชัน (Retrieving Information Stored in Sessions)
$_SESSION เป็นตัวแปรพิเศษที่เรียกว่า Super global ข้อมูลที่เก็บไว้ในเซสชันจะถูกเก็บไว้
ระยะเวลาหนึ่งเพื่อใช้งานในเอกสารต่างๆ ทั้งเว็บไซต์เหมือนกับคุกกี้ (การเก็บข้อมูลไว้ในเซสชันนั้น ระบบ
จะทาการสร้างไฟล์เก็บเซสชันไว้ที่เครื่องเซิร์ฟเวอร์) ซึ่งการจะใช้เซสชันได้นั้น จะต้องมีการสั่งเริ่มใช้เซสชัน
โดยใช้คาสั่ง session_start () รายละเอียดการใช้งาน จะกล่าวถึงในบทต่อไป
เซสชันและคุกกี้ เหมือนกัน คือ ใช้สาหรับเก็บค่าตัวแปรไว้เพื่อเรียกใช้ในหน้าเว็บเพจต่างๆ ใน
เว็ บ ไซต์ แ ละทั้ ง คู่ มี ค วามแตกต่ า งกั น คื อ อายุ ข องตั ว แปร อายุ ข องคุ ก กี้ ถู ก ก าหนดด้ ว ยเวลา
ส่ ว นอายุ ของเซสชัน ถูกกาหนดด้ว ยการทางานของบราวเซอร์ เมื่อไคลเอนต์ทาการปิดโปรแกรมเว็ บ
บราวเซอร์ เซสชันก็จะถูกทาลายด้วย
ตัวแปรค่ำคงที่ (Constants)
ในภาษา PHP นั้นได้กาหนดวิธีการประกาศตัวแปรค่าคงที่ โดยผ่านฟังก์ชัน define ( ) หรือใช้คีย์
เวิร์ด const (ใช้ได้ตั้งแต่ PHP 5.3.0) เมื่อตัวแปรค่าคงที่ถูกกาหนดแล้ว มันจะไม่สามารถเปลี่ยนหรือคืนค่า
ได้อีกต่อไป สามารถรับค่าของค่าคงที่ได้โดยระบุชื่อตัวแปรของค่าคงที่ ซึ่งจะแตกต่างจากการรับค่าตัวแปร
ทั่วไป นั่นก็คือตัวแปรค่าคงที่ไม่ต้องใช้เครื่องหมาย $ นาหน้าตัวแปรค่าคงที่ หรือว่าจะรับค่าของค่าคงที่ผ่าน
ฟังก์ชัน constant ( ) แต่ถ้ามีชื่อตัวแปรค่าคงที่ที่เปลี่ยนแปลงตลอด นั้นจะไม่รู้ว่ามีชื่อตัวแปรค่าคงที่ใดบ้าง
สามารถใช้ฟังก์ชัน get_defined_constants ( ) เพื่อรับค่ารายการการประกาศค่าคงที่ทั้งหมด
รูปแบบ
boolean define ( string $name , mixed $value )

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
54 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
เมื่อ

$name หมายถึง ชื่อของตัวแปรที่ต้องการกาหนดให้เป็นตัวแปรค่าคงที่
$value หมายถึง ค่าที่ต้องการกาหนด
ตัวอย่ำงที่ 4.18 การกาหนดตัวแปรค่าคงที่
<?php
define ("PI", 3.141592);
printf ("The value of pi is %f", PI);
// The value of pi is 3.141592
$pi2 = 2 * PI;
printf ("Pi doubled equals %f", $pi2);
// Pi doubled equals 6.283184
?>
มีห ลายจุ ดที่จ ะต้อ งทราบเกี่ย วกับ การอ้างอิงและใช้งานตัว แปรค่ าคงที่ เช่น 1) ไม่ต้องใช้
เครื่องหมาย $ นาหน้าตัวแปร 2) จะไม่สามารถเปลี่ยนแปลงค่าตัวแปรนั้นได้อีก หากต้องการเปลี่ยนแปลง
ค่าเพื่อการแสดงผลหรืออื่นๆ จะต้องถ่ายโอนค่าไปยังตัวแปรอื่นๆ
ตัวแปรที่มีค่ำ Null
ค่า Null หมายถึง ว่างเปล่าหรือไม่มีค่าใดๆ เลย ทั้งนี้หากสร้างตัวแปรขึ้นมาโดยที่ไม่กาหนดค่า
ใดๆให้กับมัน จะทาให้ตัวแปรนั้นมีค่าเป็น Null หรืออาจเกิดจากการสร้างตัวแปรแล้วกาหนดค่า null
ให้กับมันก็ได้ เช่น ในกรณีต่อไปนี้ ตัวแปร $a และ $b จะมีค่าเป็น Null
ตัวอย่ำงที่ 4.19 ตัวแปรที่มีค่า Null
$a;
$b = null;
สาหรับใน PHP ตัวแปรที่มีค่า Null นี้ เท่าที่ผู้เขียนตรวจผลจากการนาไปใช้งาน จะมีผลดังนี้
 หากนาไปคานวณจะมีค่า เทียบเท่ากับ 0
 หากนาไปใช้ในแบบข้อความ จะมีค่า เทียบเท่ากับ “” หรือข้อความว่างนั่นเอง
 หากนาไปเปรียบเทียบทางตรรกะ จะเทียบเท่า กับค่า false
ลองพิจารณาผลจากการใช้ตัวแปรที่มีค่า Null ดังต่อไปนี้
ตัวอย่ำงที่ 4.20 แสดงตัวอย่างการประยุกต์ใช้ตัวแปรที่มีค่า Null
$a;
$b = null ;
echo $a + $b
// 0
echo 10/$a;
// Error: Division by zero (ข้อผิดพลาดจากการหารด้วย 0)
$c = (1 = = 1) && $a;
//$c = true && false => false;
echo “A, $b, C, D”;
//A, ,C,D
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 55
กำรตรวจสอบและยกเลิกตัวแปร
การเขียนโปรแกรมในระดับสูงขึ้นไปจะเป็นการทางานแบบไดนามิก ซึ่งในบางกรณีไม่อาจทราบ
ล่วงหน้าได้ว่า ข้อมูล (ตัวแปร) ที่ต้องการใช้งานนั้นมีอยู่จริง หรือเก็บค่าใดๆเอาไว้หรือไม่ จึงต้องมีคาสั่งใน
การตรวจสอบข้อมูลเหล่านี้ก่อนนามาใช้เพื่อป้องกันข้อผิดพลาด นอกจากนี้ตัวแปรที่สร้างขึ้นอาจจะเพื่อใช้
งานเพียงชั่วระยะเวลาหนึ่ง และหลังจากนั้นหากมีตัวแปรนี้อยู่ต่อไปอาจจะส่งต่อการทางานของระบบ
ดังนั้นจึงต้องมีคาสั่งในการยกเลิกตัวแปรอีกออย่างหนึ่งด้วย ซึ่งคาสั่ง (ฟังก์ชัน) ที่เกี่ยวกับการตรวจสอบ
และยกเลิกตัวแปรมีดังนี้
ฟังก์ชัน isset ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่ามีตัวแปรตามที่ระบุอยู่จริงหรือไม่ หรือได้สร้างตัวแปรตามที่
ระบุแล้วหรือยังนั่นเอง ซึ่งหากไม่มีตัวแปรนั้น หรือตัวแปรมีค่าเป็น null จะคืนค่ากลับมาเป็น false แต่
หากมีอยู่จริง และไม่เป็น null จะได้เป็นค่า true มีรูปแบบดังนี้
bool isset ( mixed $var [, mixed $... ] )
เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบ
ตัวอย่ำงที่ 4.21 การใช้ฟังก์ชัน isset ( ) สาหรับตรวจสอบว่ามีตัวแปรตามที่ระบุอยู่จริงหรือไม่
<?php
$x = 123;
$a = isset ($x);
// $a = true
$y = null;
$b = isset ($y); // $b = false
$c = isset ($z) ; //$c = false เพราะ $z มีค่าเป็น null
?>
ฟังก์ชัน empty ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่าตัวแปรว่าเป็นตัวแปรที่ว่างเปล่าหรือไม่ ซึ่ง PHP จะถือว่าเป็น
ตัวแปรมีค่าในลักษณะต่อไปนี้
 มีค่าเป็น null
 มีค่าเป็นข้อความว่าง หรือ “” (ไม่ใช่ช่องว่าง)
 มีค่า 0 หรือ “0”
ถ้าตัวแปรมีค่าว่างจะได้ผลลัพธ์เป็น true มิฉะนั้นจะเป็น false มีรูปแบบดังนี้
รูปแบบ
bool empty ( mixed $var )
เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบ
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
56 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
ตัวอย่ำงที่ 4.22 การใช้ฟังก์ชัน empty ( ) สาหรับตรวจสอบว่าตัวแปรว่าเป็นตัวแปรที่ว่างเปล่าหรือไม่
<?php
$x = “”;
$a = empty ($x);
// $a = true
$y = 0;
$b = empty ($y); // $b = true
$c = empty ($z) ; //$c = true เพราะ $z มีค่าเป็น null
?>
ฟังก์ชัน unset ( )
เป็นฟังก์ชันที่ใช้สาหรับ ยกเลิกการใช้ตัวแปรที่ระบุเมื่อไม่ต้องใช้ตัวแปรตัวนั้นอีกต่อไปเพื่อคืน
ทรัพยากรให้แก่ระบบ มีรูปแบบดังนี้
void unset ( mixed $var [, mixed $... ] )
เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบ
ตัวอย่ำงที่ 4.23 การใช้ฟังก์ชัน unset ( ) สาหรับยกเลิกการใช้ตัวแปร
<?php
$a = 123;
unset ($a);
echo $a;
//มีค่า Null เพราะตัวแปร $a ถูกยกเลิกแล้ว
?>
ตัวดำเนินกำร (Operators) และนิพจน์ (Expressions)
ตัวดาเนินการ เป็นสัญลักษณ์ที่ใช้กาหนดรูปแบบการประมวลผลข้อมูล ซึ่งแบ่งได้หลายประเภท
เช่น ตัวดาเนินการเกี่ยวกับการคานวณทางคณิตศาสตร์ การเปรียบเทียบ และการประมวลผลทางด้าน
ตรรกะ (Logic) เป็นต้น
นิพจน์ คือ การกระทาเพื่อให้ได้ผลลัพธ์ค่าหนึ่งค่า ประกอบไปด้วยตัวถูกกระทา (Operands)
และตัวดาเนินการ (Operators) เขียนเรียงกันไป เช่น 3 * 2 - 1 + 7 หรือ a * 5 เป็นต้น
ลำดับควำมสำคัญของตัวดำเนินกำร
ลาดับความสาคัญของตัวดาเนินการนั้น มีความสาคัญมากในการเขียนโปรแกรม ซึ่งถ้าจัดลาดับ
ผิด ก็อาจจะทาให้โปรแกรมของเกิด ข้อผิดพลาด (bug) ได้ และบางทีจะทาให้หาจุด ผิดพลาดนั้นๆ ยาก
ด้วย ลาดับความสาคัญของตัวดาเนินการแต่ละตัวจะมีความสาคัญแตกต่างกัน เป็นที่แน่นอนอยู่แล้วว่า
ลาดับความสาคัญสูงก็จะถูกทาก่อนลาดับความสาคัญต่า ตัวอย่าง ดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 57
ตัวอย่ำงที่ 4.24 แสดงนิพจน์และตัวดาเนินการ
2+4*3
จากตัวอย่างด้านบน ถ้าลองมาคานวณกันเองแล้ว ก็คงจะได้หลายๆ ค่าแตกต่างกันไปเนื่องจากว่า
ไม่รู้ว่าจะนาตัวไหนมาคานวณกันก่อนดีใช่ไหม จากตัวอย่างเครื่องหมายที่มีความสาคัญสูงคือเครื่องหมาย
Multiply (*) หรือคูณนั่นเอง รองลงมา คือ Addition (+) หรือบวก ซึ่งหมายความว่ามันจะทาการคานวณ
4 * 3 ก่อน แล้วค่อยนาผลลัพธ์นี้ไปบวกกับ 2 ผลลัพธ์จึงมีค่าเท่ากับ 14
แต่ถ้าไม่อยากปวดหัวกับการกาหนดนิพจน์แบบนี้ ซึ่งจะทาให้ยุ่งยากในการจัดลาดับความสาคัญ
ให้มันแล้วละก็ ขอแนะนาให้ใช้วงเล็บ ( ) ในการแบ่งการคานวณออกจากกัน ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.25 แสดงนิพจน์และดาลับความสาคัญของตัวดาเนินการ
(2 + 4) * 3
หรือ ขึ้นอยู่กับว่าจะให้นิพจน์ใดคานวณก่อน-หลัง การคานวณจะเกิดขึ้นในวงเล็บก่อนเสมอ
2 + (4 * 3)
มาลองกันอีกครั้ง
1/3*3
จากตั ว อย่ า งด้ า นบน ถ้ า ลองมาค านวณกั น เองอี ก ครั้ ง ก็ ค งจะได้ ห ลายๆ ค่ า แตกต่ า งกั น ไป
เนื่องจากว่าไม่รู้ว่าจะนาตัวไหนมาคานวณกันก่อนเช่นเดิม จากตัวอย่างเครื่องหมายคูณและหารจะมีลาดับ
ความสาคัญเท่ากัน ในกรณีนี้ การคานวณจะเกิดขึ้นจากซ้ายไปขวาเสมอ คือ 1 / 3 ก่อน แล้วจึงนาผลลัพธ์
ไปคูณกับ 3 คาตอบ คือ 1
ตัวดำเนินกำรสำหรับกำรคำนวณ
ตัวดาเนินการที่ใช้ในการคานวณทางคณิตศาสตร์ ซึ่งประกอบด้วยตัวดาเนินการดังต่อไปนี้
ตำรำงที่ 4.1 ตัวดาเนินการพื้นฐานสาหรับการคานวณ
+ บวก
/ หาร
- ลบ
% เรียกว่า Modulus เป็นการหารแบบเอาเฉพาะเศษ เช่น
13%5 = 3 //เพราะค่าใกล้เคียง 13 คือ 5*2 = 10 => 13-10 = 3
* คูณ
13%3 = 1 // เพราะค่าใกล้เคียง 13 คือ 3*4 = 12 => 13-12 = 1

7 + 5
ค่าคงที่ ตัวดาเนินการ ค่าคงที่

a + b
ตัวแปร

ตัวดาเนินการ ตัวแปร

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
58 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
(a * 3) + 5

2.0 * (int) (2.12)

ตัวแปร ตัวดาเนินการ ค่าคงที่
นิพจน์

ค่าคงที่ ตัวดาเนินการ ฟังก์ชัน
ตัวดาเนินการ

ค่าคงที่

ภำพที่ 4.1 แสดงตัวอย่างตัวดาเนินการและนิพจน์
ตัวดำเนินกำรสำหรับเชื่อมต่อข้อควำม (String Concatenation)
สาหรับใน PHP จะใช้เครื่องหมายจุด (.) ในการเชื่อมต่อข้อความ ตัวอย่างตัวดาเนินการสาหรับ
เชื่อมต่อข้อความ
ตัวอย่ำงที่ 4.26 การใช้เครื่องหมายจุด (.) ในการเชื่อมต่อข้อความ
<?php
$str = “My” . “SQL”;
// $str = “MySQL”
echo “สมชาย” . “ ” . “พายเรือ”;
// สมชาย พายเรือ
$fname = “Parinya”;
$lname = “Mai”;
echo “My name is” . $fname . “ ” . $lname ; //My name is Parinya Mai
echo 1 . 2 . 3 ; //123
?>
ตัวดำเนินกำรสำหรับกำรกำหนดค่ำ (Assignment)
เป็นตัวดาเนินการในการกาหนดค่าให้กับตัวแปรที่อยู่ทางด้านซ้ายของตัวดาเนินการ ด้วยค่าที่อยู่
ทางขวาโดยประกอบด้วยตัวดาเนินการดังต่อไปนี้
ตำรำงที่ 4.2 ตัวดาเนินการสาหรับการกาหนดค่า
=
กาหนดค่า เช่น
$x = 10;
+=
นาค่าที่กาหนดไปบวกเพิ่มจากค่าเดิมตัวแปร แล้วผลลัพธ์ที่ได้เก็บไว้ในตัวแปรเดิม เช่น
$x = 10;
$x += 8; // $x = 18
-=
ลดค่าตัวแปรลงเท่ากับค่าที่ระบุ เช่น
$x = 10;
$x -= 8;
// $x = 2
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 59
ตำรำงที่ 4.2 (ต่อ)
*=
คูณค่าเดิมของตัวแปรด้วยค่าที่ระบุ เช่น
$x = 10;
$x *= 8; // $x = 80
/=
หารค่าเดิมของตัวแปรด้วยค่าที่ระบุ เช่น
$x = 16;
$x /= 8; // $x = 2
%=
นาค่าที่ระบุไปหารค่าเดิมของตัวแปร แต่จะเอาเฉพาะเศษจากการหารเท่านั้น หรือเรียกว่าการ
หารแบบ Modulus เช่น
$x = 10;
$x %= 3; // $x = 1
.=
ใช้ในการเชื่อมต่อข้อความโดยนาข้อความด้านขวามือไปต่อท้ายข้อความด้านซ้ายมือ
$x = “PHP”;
$x .= “/MySQL”; // $x = “PHP/MySQL”
ตัวดำเนินกำรสำหรับเพิ่ม และลดค่ำ (Increment & Decrement)
ประกอบด้วยตัวดาเนินการดังต่อไปนี้
ตำรำงที่ 4.3 ตัวดาเนินการสาหรับเพิ่ม และลดค่า
++ เป็นการเพิ่มตัวแปรขึ้นไปอีก 1 เช่น
-- เป็นการลดค่าตัวแปรลงอีก 1 เช่น
$x = 10;
$x = 10;
$x++; //$x = 11
$x--; //$x = 9
ข้อควรระวังเกี่ยวกับกำรใช้ตัวดำเนินกำร ++ และ -การวางตัวดาเนินการ ++ หรือ -- ไว้ด้านหน้า หรือหลังตัวแปร หากตัวแปรนั้นอยู่เดี่ยวๆ ค่าที่ได้
จะไม่ต่างกัน เช่น กรณีตัวอย่างต่อไปนี้
ตัวอย่ำงที่ 4.27 ข้อควรระวังการวางตัวดาเนินการ ++ หรือ -- ไว้ด้านหน้า หรือหลังตัวแปร
$x = 10;
$y = 10;
$x++;
// $x = 11
++$y;
// $y = 11
แต่หากนาไปใช้ในรูปแบบของนิพจน์ (Expression) หรือกระทากับค่าอื่นๆ ด้วย ค่าที่ได้อาจ
แตกต่างกันไป เช่น สองกรณีต่อไปนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
60 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
ตัวอย่ำงที่ 4.28 การเปรียบเทียบรูปแบบของการใช้นิพจน์สองกรณี
$x = 10;
$x = 10;
$y = 20;
$y = 20;
$y += ++$x; // $x = 11, $y = 31
$y += $x++; // $x = 11, $y = 30
หากก าหนดแบบนี้ y
จะมี ค่ า เท่ า กั บ หากกาหนดแบบนี้ y จะมีค่าเท่ากับ 20+10=30
(20+1)+10=31 นั่นคือ จะเพิ่มค่า x ขึ้นไปอีก 1 นั่นคือ จะนาค่า x เดิมไปบวกกับ y ก่อน แล้วค่อย
ก่อนแล้วค่อยนาไปบวกกับ y
เพิ่มค่า x ขึนไปอีก 1
้
ความจริ ง หลั กการที่ กล่ าวมานี้ พิ จารณาจากล าดั บความส าคัญ ของตั ว ด าเนินการ ตามที่จ ะ
กล่าวถึงในลาดับต่อไป
ตัวดำเนินกำรสำหรับกำรเปรียบเทียบ (Comparison)
ใช้ในการเปรียบเทียบหาค่าความจริงระหว่าง 2 นิพจน์ โดยผลลัพธ์ที่ได้จะเป็นได้เพียง true หรือ
false อย่างใดอย่างหนึ่งเท่านั้น โดยตัวดาเนินการในกลุ่มนี้ มีดังนี้
ตำรำงที่ 4.4 ตัวดาเนินการสาหรับการเปรียบเทียบ
<
น้อยกว่า
== เท่ากัน
<= น้อยกว่า หรือเท่ากับ
=== เท่ากันทั้งหมดทั้งค่า และชนิดข้อมูล
>
มากกว่า
!=
ไม่เท่ากัน
=> มากกว่า หรือเท่ากับ
ตัวอย่ำงที่ 4.29 ตัวอย่างผลลักษณะการเปรียบเทียบ กรณีศึกษาแบบที่ 1
$a = (10 <= 9);
// $a = false เพราะ 10 > 9
$b = (10 == 10);
// $b = true
$c = (10 == “10”); // $c = true
$d = (10 === “10”); // $d = false เพราะ 10 เป็นตัวเลข ขณะที่ “10” ถือว่าเป็นข้อความ
$e = (“php” == “PHP”); // $e = false เพราะลักษณะตัวพิมพ์ต่างกัน
ตัวดำเนินกำรสำหรับกำรเปรียบเทียบทำงตรรกะ (Bitwise Operators)
การเปรียบเทียบทางตรรกะ (Logical) เป็นการเปรียบเพื่อหาค่าความจริงระหว่าง 2 นิพจน์ เช่น
หากพิสูจน์พจน์แรกเป็นจริง และนิพจน์ที่สองเป็นเท็จ แล้วผลลัพธ์จะออกมาเป็นอย่างไร เป็นต้น ซึ่ง ตัว
ดาเนินการในการเปรียบเทียบทางตรรกะมีดังต่อไปนี้
ตำรำงที่ 4.5 ตัวดาเนินการสาหรับการเปรียบเทียบทางตรรกะ
ตัวดำเนินกำร
กำรเปรียบเทียบ
ผลลัพธ์
! หรือ not
!(true)
true
!(false)
false
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 61
ตำรำงที่ 4.5 (ต่อ)
ตัวดำเนินกำร
&& หรือ and

|| หรือ or

^ หรือ xor

กำรเปรียบเทียบ
true && true
true && false
false && false
true || true
true || false
false || false
true ^ true
true ^ false
false ^ false

ผลลัพธ์
true
false
false
true
true
false
false
true
false

ตัวอย่ำงที่ 4.29 ตัวอย่างผลลักษณะการเปรียบเทียบ กรณีศึกษาแบบที่ 2
$a = ! (1 = = 2);
//$a = ! (false) => $a = true;
$b = (1 != 2) && (1>0);
// $b = (true) && (true) => $b = true;
$c = (1 = = 2) && (1>0);
// $c = (false) && (true) => $c = false;
$d = (1 = = 2) || (1>0);
// $c = (false) || (true) => $d = true;
ตัวดำเนินกำรแบบ Ternary
เป็น ตัว ดาเนิ นการในการเปรีย บเทียบในอีกลั กษณะหนึ่งคือ ถ้าตรงกับเงื่อนไขผลลั พธ์จะเป็น
อย่างไร และกรณีที่ไม่ตรงตามเงื่อนไขผลลัพธ์จะเป็นอย่างไร รูปแบบการใช้งานคือ
ตัวอย่ำงที่ 4.30 การใช้ตัวดาเนินการแบบ Ternary สาหรับ Expression? x : y
หมายความว่า หาก Expression มีค่าเป็นจริงผลลัพธ์จะเป็น x แต่หากเป็นเท็จผลลัพธ์จะเป็น y
เช่น
$a = (1 > 0) ? true : false;
// $a จะมีค่าเป็น true เนื่องจาก 1 > 0 นั้นเป็นจริง
$b = ($x % 2 == 0) ? “เลขคู่” : “เลขคี”;
่
//หาก $x หารด้วย 2 ลงตัว (เศษเป็น0) ตัวแปร $b จะเท่ากับ “เลขคู” แต่หากหารไม่ลงตัว $b
่
จะเท่ากับ “เลขคี”
่
ลำดับควำมสำคัญของตัวดำเนินกำร
ลาดับความสาคัญของตัวดาเนินการก็คือ ลาดับในการประมวลผลก่อนหลัง ซึ่งเป็นสิ่งที่สาคัญมาก
หากวางตาแหน่ง หรือจัดกลุ่มไม่ถูกต้อง ผลลัพธ์ที่ได้อาจไม่ตรงตามที่ต้องการก็ได้ โดยลาดับความสาคัญ
ของตัวดาเนินการมีดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
62 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
ตำรำงที่ 4.6 ลาดับความสาคัญของตัวดาเนินการ
1
()
2
++, -- (วางไว้หน้าตัวแปร)
3
*, /, %
4
+, 5
==, !=

6
7
8
9

&&
||
=, +=, -=, /=, %=
++, -- (วางไว้หลังตัวแปร)

ตัวอย่ำงที่ 4.31 ตัวดาเนินการที่มีลาดับความสาคัญเท่ากัน ตัวที่มาก่อนจะถูกประมวลผลก่อน
$a = 2*100/10;
//$a = 20 เพราะ 100/10 = 10 => 2*10 = 20 หรือเท่ากับ 2*(100/10)
$b = 100/10%2;
//$b = 0 เพราะ 100/10 = 10 => 10%2 เหลือเศษ 0 หรือเท่ากับ (100/10)%2
$c = 100%80*2;
//$c = 40 เพราะ 100%80 เหลือเศษ20 => 20*2 = 40
$d = 100/10+30;
//$d = 40 ซึ่งเท่ากับ (100/10)+30
$e = 2*100/10+30; //$e = 50 ซึ่งเท่ากับ (2*(100/10))+30
ในทางปฏิบัติเพื่อหลีกเลี่ยงข้อผิดพลาดจากลาดับความสาคัญของเครื่องหมาย ควรใช้วงเล็บใน
การจัดแบ่งกลุ่มให้ชัดเจน
ตัวดำเนินกำรในกำรเชื่อมข้อควำม (String)
บางครั้งข้อความที่จะพามากาหนดค่าให้กับตัวแปรนั้นมีความยาวมากเกินกว่าที่จะเขียนให้หมด
ภายในบรรทัดเดียว อาจใช้หลายวิธีแก้ปัญหานี้ โดยวิธีที่ใช้กันเป็นส่วนใหญ่มีดังนี้
วิธีที่ 1 แบ่งออกเป็นข้อความย่อยๆ โดยจุดที่ต้องการขึ้นบรรทัดใหม่ ให้แทรกแท็ก <br/> หรือ
<p/> เข้าไป จากนั้นนาข้อความย่อยๆ มาเชื่อมต่อเข้ากันด้วยตัวดาเนินการ .= ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.32 ตัวดาเนินการในการเชื่อมข้อความ วิธีที่ 1
<?php
$str = “นาย สมชาย พายเรือ <br />” ;
$str .= “123/456 ถ.พระราม รอบเมือง <br />” ;
$str .= “ปทุมวัน กรุงเทพ 10330 <br />” ;
echo $str;
?>
วิธีที่ 2 ข้อความที่เขียนในเครื่องหมาย “…” เดียวกัน สามารถเขียนแยกไว้คนละบรรทัดได้เลย
โดยไม่ต้องใช้การเชื่อมต่อ ข้อความ โดยวางเครื่องหมาย “ และ ” แค่ที่จุดเริ่มต้น และสิ้นสุดข้อความ
ตามลาดับ เช่น
ตัวอย่ำงที่ 4.33 ตัวดาเนินการในการเชื่อมข้อความ วิธีที่ 2
<?php
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 63
echo “นาย สมชาย พายเรือ <br />
123/456 ถ.พระราม รอบเมือง <br />
ปทุมวัน กรุงเทพ 10330 <br />” ;
?>
กำรแทรกค่ำของตัวแปรลงในข้อควำม (String Interpolation)
จากการที่ PHP นั้นใช้สัญลักษณ์ $ ในการบ่งชี้ตัวแปร ทาให้การนาค่าของตัวแปรมาแทรกลงใน
ข้อความสามารถทาได้ง่ายดาย โดยการนาตัวแปรไปวาง ณ จุดที่ต้องการแทรกค่าลงไป แต่หลังชื่อตัวแปร
จะต้องมีช่องว่างอย่างน้อย 1 ช่อง หรือเครื่องหมายใดๆ ที่ไม่สามารถนามาใช้เป็นตัวแปรได้ เช่น ตัวอย่าง
การแทรกค่าจากตัวแปรลงในข้อความ ดังนี้
ตัวอย่ำงที่ 4.34 การแทรกค่าของตัวแปรลงในข้อความ
<?php
$name = “สมชาย”;
$age = 30;
$country = “ไทยแลนด์”;
echo “My name is $name,
$age years old from $country”;
?>
Escape Sequence
Escape Sequence คือ สัญลักษณ์ที่ใช้สาหรับการกาหนดการแสดงผลของข้อความ ภายใน
Double Quotes สาหรับสัญลักษณ์ของ Escape Sequence ที่ควรรู้จักมีตัวอย่าง ดังนี้
ตำรำงที่ 4.7 Escape Sequence
สัญลักษณ์
ควำมหมำย
"
Double quotes
n"
Newline (ขึ้นบรรทัดใหม่)
r
Carriage return
t
Tab

Backslash
$
Dollar sign
{
Left brace
}
Right brace
[
Left bracket
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
64 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
ตำรำงที่ 4.7 (ต่อ)
สัญลักษณ์
]
0 จนถึง 777
x0 จนถึง xFF

ควำมหมำย
Right bracket
ASCII character ในเลขฐานแปด
ASCII character ในเลขฐานสิบหก

เครื่องหมำย Single Quotes และ Double Quotes
ใน PHP ทั้งเครื่องหมาย Single Quotes (‘’) และ Double Quotes (“ ”) ต่างก็สามารถใช้ใน
การกาหนดข้อมูลที่เป็น ข้อความได้เหมือนกัน แต่อย่างไรก็ตามทั้ง Single Quotes และ Double
Quotes ก็มีข้อแตกต่างกันในบางเรื่อง กล่าวคือเครื่องหมาย Single Quotes นั้น ไม่สามารถนาค่าของตัว
แปรมาแทรกลงไปได้ เพราะสิ่งที่เขียนเอาไว้ใน Single Quotes เขียนอย่างไรผลลัพธ์ก็จะออกมาตามนั้น
แต่ขณะที่เครื่องหมาย Double Quotes นั้น สามารถแทรกค่าของตัวแปรลงไปได้ ดังตัวอย่างที่แล้ว ให้ดู
เปรียบเทียบจากตัวอย่างต่อไปนี้ โดยนาตัวอย่างที่แล้วมาแก้ไขดังนี้
ตัวอย่ำงที่ 4.35 ตัวอย่างการแทรกค่าตัวแปรลงในข้อความที่กาหนดด้วย Single Quotes และ
Double Quotes
<?php
$name = “สมศรี”;
$age = 30;
$country = “ไทยแลนด์”;
echo ‘<b> Single Quotes :</b>My name is $name, $age years old from $country’;
echo “<p />”;
echo “<b> Double Quotes:</b>My name is $name, $age years old from $country”;
?>
จากผลลัพธ์ที่ได้แสดงว่าการใช้เครื่องหมาย Single Quotes นั้นไม่สามารถแทรกค่าตัวแปรลงไป
ได้เหมือน Double Quotes
กำรใช้งำน Heredoc
Heredoc ใช้สาหรับการแสดงกลุ่มของข้อความจานวนมาก ซึ่งเป็นข้อจากัดของการแสดงผลด้วย
Double Quoted สามารถแสดงผลค่าตัวแปรใน Double Quote ได้ และไม่ต้องพิมพ์เครื่อง Double
Quoted อีกทั้งยังสามารถใช้ Escape Sequences การใช้งาน Heredoc จะใช้รูปแบบขึ้นต้นด้วย <<<
"nameOfHeredoc" แล้วปิดท้ายด้วย nameOfHeredoc (ชื่อของตัวเปิดและตัวปิดต้องเหมือนกัน ) และ
เซมิโคลอน (;) ตัวอย่างดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 65
ตัวอย่ำงที่ 4.36 การใช้งาน Heredoc สาหรับการแสดงกลุ่มของข้อความจานวนมาก
<?php
print <<< "END"
First line....................................................................................n
Second line..............................................................................n
Third line...................................................................................n
END;
?>
จากตัวอย่าง จะเห็นว่า มีการใช้ <<< นาหน้าก่อน แล้วเว้นวรรค ตามด้วยคีย์เวิร์ดอะไรก็ได้
(สามารถเปลี่ยนคาว่า END เป็นคาอื่นๆ ได้) แล้วกดขึ้นบรรทัดใหม่ จากนั้นจึงเป็นข้อความที่ต้องการจะ
ยาวขนาดไหนก็ได้ หรือใช้ตัวแปรข้างในก็ได้ และปิดท้ายด้วยคีย์เวิร์ดตัวเดิม (ย้าว่าตัวเดิม) และปิดท้าย
ด้วยเซมิโคลอน (;) เป็นอันจบการใช้ข้อความแบบ heredoc
กำรใช้งำน Nowdoc
Nowdoc ใช้สาหรับการแสดงกลุ่มของข้อความจานวนมาก ซึ่งเป็นข้อจากัดของการแสดงผลด้วย
Single Quoted สามารถแสดงผลค่าตัวแปรเหมือนใน Single Quote ได้ คล้ายกับ Heredoc แต่ไม่
สามารถใช้ Escape Sequences เพื่อจัดรูปแบบการแสดงผลข้อความ รูปแบบขึ้นต้นด้วย <<<
'nameOfNowdoc' แล้วปิดท้ายด้วย nameOfNowdoc และเซมิโคลอน (;) ตัวอย่างดังนี้
ตัวอย่ำงที่ 4.37 การใช้งาน Nowdoc สาหรับการแสดงกลุ่มของข้อความจานวนมาก
<?php
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
class foo {
public $foo;
public $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
66 บทที่ 4 ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions)
}
$foo = new foo ( );
$name = 'MyName';
echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': x41
EOT;
?>
ตัวดำเนินกำรอื่น ๆ
PHP ยังมีตัวดาเนินการอื่นๆ ที่ไม่ถูกจัดให้อยู่ในประเภทใดเลย นั่นก็คือ ตัวดาเนินการ error
suppression (ใช้ในการระงับการเกิด error) ตัวดาเนินการในการ execute คาสั่งของ OS และตัว
ดาเนินการในการเลือกค่า มีรายละเอียด ดังนี้
Error suppression (@)
ตัวดาเนินการ หรือ ฟังก์ชัน บางตัวนั้นสามารถทาการ generate ข้อความ error ออกมาได้ ซึ่ง
ถ้าใช้ตัวดาเนินการนี้มันจะช่วยในการไม่สนใจ error ที่เกิดขึ้น เช่น
ตัวอย่ำงที่ 4.38 การใช้งาน Error suppression (@) ไม่สนใจ error ที่เกิดขึ้น
<?PHP
@include ("file.php");

// ในกรณีที่ไม่มีไฟล์ file.php ให้นาเข้าระบบก็ยังคง
// สามารถทางานได้ปกติไม่แจ้งข้อผิดพลาดบนหน้าจอ

?>
Execution ('...')
ตัวดาเนินการ backtick (') ใช้ในการสั่งให้ execute คาสั่งภายนอก (ซึ่งก็หมายความว่าคาสั่งที่
ไม่ใช่ของ PHP นั่นเอง เช่น คาสั่งของระบบปฏิบัติการ เป็นต้น) เช่น
ตัวอย่ำงที่ 4.39 ตัวดาเนินการ backtick (') ใช้ในการสั่งให้ execute คาสั่งภายนอก
<?php
$listing = 'ls -ls /tmp';
echo $listing;
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 5
โครงสร้างควบคุม (Control Structures)
ในบทนี้จะกล่าวถึงโครงสร้างควบคุมการไหลของโค้ดภายในโปรแกรม การกาหนดทางเลือกให้
กระทาหรือไม่กระทา การทาคาสั่งซ้าๆ ตามเงื่อนไขที่กาหนด เป็นต้น ซึ่งลักษณะการทางานดังกล่าวนี้ถือ
เป็นพื้นฐานที่สาคัญที่ผู้เขียนโปรแกรมจาเป็นต้องเรียนรู้ ดังนั้นเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับทุก
โครงสร้างการควบคุมดังกล่าวทีสามารถใช้ได้กับภาษา PHP
่
โครงสร้างควบคุม สามารถแบ่งออกเป็น 3 กลุ่ม คือ 1) คาสั่งเงื่อนไข 2) คาสั่งทาซ้า และ 3)
คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซ้า มีรายละเอียด ดังนี้
หมายเหตุ
รูปแบบประโยคคาสั่งโครงสร้างควบคุมของ if, while, for, foreach และ switch สามารถ
เปลี่ยนจากเครื่องหมายปีกกาเปิด (bracket) แทนด้วยเครื่องหมาย colon (:) และแทนปีกกา
ปิดด้วย endif;, endwhile;, endfor;, endforeach; และ endswitch; ตามคาสั่งโครงสร้าง
ควบคุมที่ใช้งาน เช่น if ($test=1) : printf ("test"); endif; เป็นต้น
คาสั่งเงื่อนไข (Conditional Statements)
คาสั่งเงื่อนไขเป็นหนึ่งในโครงสร้างควบคุมขั้นพื้นฐาน เพื่อกาหนดทางเลือกต่างๆ เพื่อให้โปรแกรม
คอมพิวเตอร์ของสามารถตอบสนองตามความหลากหลายของสิ่งที่รับเข้ามาหรือเงื่อนไขต่างๆ โดยใช้
รูปแบบการเปรียบเทียบทางตรรกะในการแยกแยะระหว่างเงื่อนไขต่างๆ ขึ้นอยู่กับค่าที่ป้อนเข้า ฟังก์ชัน
พื้นฐานของกลุ่มนี้ คือ 1) if 2) if...else 3) if ... elseif และ 4) switch มีรายละเอียด ดังนี้
คาสั่ง if (The if Statement)
คาสั่ง if ใช้ในการเปรียบเทียบเงื่อนไขว่าตรงตามที่ต้องการหรือไม่ หากตรงกับเงื่อนไขที่กาหนดก็จะ
ทาตามคาสั่งอะไรบ้าง ถ้าเป็นเท็จก็จะทาคาสั่งอื่นๆ หลังจากประโยคปิดของคาสั่ง if คาสั่ง if มีรูปแบบ ดังนี้
if (เงื่อนไข) {
คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง
}
68 บทที่ 5 โครงสร้างควบคุม (Control Structures)

เท็จ

เงื่อนไข

จริง

คาสั่งต่างๆ
เมื่อเงื่อนไขเป็นจริง
ภาพที่ 5.1 แสดงแผนภาพการไหล (Flow Chart) ของคาสั่ง if
ตัวอย่างเช่น สมมติว่าต้องการแสดงข้อความยินดี เมื่อผู้ใช้สามารถเดาเลขรหัสลับที่กาหนดไว้
ล่วงหน้า ดังนี้
ตัวอย่างที่ 5.1 การใช้คาสั่ง if ในการเปรียบเทียบเงื่อนไขว่าตรงตามที่ต้องการหรือไม่
<?php
$secretNumber = 453;
if ($_POST['guess'] == $secretNumber) {
// เมื่อ $_POST['guess'] คือ
echo "<p>Congratulations!</p>"; // ค่าที่รับมาจาก Input Form
}
?>
คาสั่ง if ... else (The if ... else Statement)
คาสั่ง if...else เป็นคาสั่งที่ใช้เปรียบเทียบเงื่อนไขการกระทาเช่นเดียวกับ คาสั่ง if แต่มากกว่า
ตรงที่ คาสั่ง if .. else ถ้าเปรียบเทียบแล้วเป็นจริงก็จะให้ทาตามเงื่อนไขภายใน if ถ้าเป็นเท็จก็จะทาคาสั่ง
ภายในเงื่อนไข else มีรูปแบบ ดังนี้
if (เงื่อนไข) {
คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง
} else {
คาสั่งต่างๆ เมื่อเงื่อนไขเป็นเท็จ
}

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 5 โครงสร้างควบคุม (Control Structures) 69

เท็จ

คาสั่งต่างๆ
เมื่อเงื่อนไขเป็นเท็จ

เงื่อนไข

จริง

คาสั่งต่างๆ
เมื่อเงื่อนไขเป็นจริง

ภาพที่ 5.2 แสดงแผนภาพการไหลของคาสั่ง if ... else
จากคาสั่ง if ก่อนหน้านี้จะเห็นว่า เลขรหัสลับที่รับเข้ามาจากผู้ใช้ต้องตรงกับเลขรหัสลับที่ระบุไว้
เท่านั้น จึงจะแสดงข้อความยินดี แต่หากเลขที่รับเข้ามาไม่ตรงกับเลขรหัสลับที่ระบุไว้ โปรแกรมก็จะไม่
แสดงอะไรกลับไปยังผู้ใช้ หากประยุกต์ใช้คาสั่ง if ... else เพื่อแสดงข้อความเพิ่มเติม เช่น กรณีที่เป็นเท็จ
จากเงื่อนไข ในคาสั่ง if ให้แสดงข้อความแสดงความเสียใจรหัสผ่านไม่ถูกต้อง ตัวอย่างดังนี้
ตัวอย่างที่ 5.2 การใช้คาสั่ง if...else ในการเปรียบเทียบเงื่อนไข 2 กรณีที่เป็นจริงและเท็จ
<?php
$secretNumber = 453;
if ($_POST['guess'] == $secretNumber) {
echo "<p>Congratulations!!</p>";
} else {
echo "<p>Sorry!</p>";
}
?>
คาสั่ง if ... elseif (The if ... elseif Statement)
คาสั่ง if ... elseif หรือ if ... else if เป็นคาสั่งที่ใช้เปรียบเทียบเงื่อนไขมากกว่า 1 เงื่อนไข เป็น
การรวมกันของคาสั่ง if และ else ซึ่งคาสั่งเหล่านี้จะเรียงลาดับกันตามลาดับ มีรูปแบบ ดังนี้
if (เงื่อนไขที่ 1) {
คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง
} elseif (เงื่อนไขที่ 2) {
// หรือเว้นวรรคเป็น else if (เงื่อนไขที่ 2)
คาสั่งต่างๆ เมื่อเงื่อนไขที่ 2 เป็นจริง
} else {
คาสั่งต่างๆ เมื่อเงื่อนไขเป็นเท็จ
}
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
70 บทที่ 5 โครงสร้างควบคุม (Control Structures)

เท็จ

จริง

เงื่อนไขที่ 2

เงื่อนไขที่ 1

คาสั่งต่างๆ
เมื่อเงื่อนไขที่ 2 เป็นจริง

จริง

คาสั่งต่างๆ
เมื่อเงื่อนไขที่ 1 เป็นจริง

เท็จ
คาสั่งต่างๆ
เมื่อเงื่อนไขทั้งหมดเป็นเท็จ
ภาพที่ 5.3 แสดงแผนภาพการไหลของคาสั่ง if ... elseif
จากคาสั่ง if ... else ก่อนหน้านี้ มีการแสดงข้อความเพิ่มเติม กรณีที่เป็นเท็จจากเงื่อนไข ในคาสั่ง
if ให้แสดงข้อความแสดงความเสียใจรหัสผ่านไม่ถูกต้อง หากต้องการประยุกต์ใช้เพิ่มเติมเพื่อแจ้งให้ผู้ใช้
ทราบถึงเลขที่รับเข้ามายังไม่ตรงกับเลขรหัสลับที่กาหนดไว้ แต่ใกล้เคียง มีค่าไม่เกิน 10 เลข สามารถ
ประยุกต์ใช้ ตัวอย่างดังนี้
ตัวอย่างที่ 5.3 การใช้คาสั่ง if...elseif ในการเปรียบเทียบเงื่อนไขหลายๆ เงื่อนไข
<?php

?>

$secretNumber = 453;
if ($_POST['guess'] == $secretNumber) {
// เมื่อ $_POST['guess'] คือ
echo "<p>Congratulations!</p>";
// ค่าที่รับมาจาก Input Form
} elseif (abs ($_POST['guess'] - $secretNumber) < 10) { // ฟังก์ชัน abs ( )
echo "<p>You're getting close!</p>";
// เป็นฟังก์ชันสาหรับแปลง
} else {
// ค่าค่าสัมบูรณ์ของตัวเลข
echo "<p>Sorry!</p>";
// (เลขบวก) เช่น
}
// echo abs(-9.99)
// แสดงผล 9.99

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 5 โครงสร้างควบคุม (Control Structures) 71
คาสั่ง switch (The switch Statement)
คาสั่ง switch เป็นคาสั่งเงื่อนไขหนึ่งในโครงสร้างควบคุมขั้นพื้นฐาน เป็นการผสมผสานของ if ...
else ซึ่งคาสั่ง switch นิยมใช้สาหรับการเปรียบเทียบค่าตัวแปรจานวนมาก เพื่อกาหนดทางเลือกต่างๆ
ตามค่าของตัวแปร อาจจะถูกกาหนดเป็นค่าใดค่าหนึ่งจากตัวเลือกที่กาหนด
คาสั่ง switch เป็นคาสั่งในการเปรียบเทียบค่าของตัวแปรในกรณีต่างๆ ภายใน switch ถ้าตัวแปร
นั้นๆ ตรงกับ case ไหนก็จะทางานภายในบล็อกคาสั่งนั้นๆ และจะหยุดการทางานคาสั่งในบล็อกนั้นๆ
ด้วยคาสั่ง break แต่ถ้าค่าตัวแปรไม่ตรงกับ case ไหนเลย มันก็จะมาทางานในส่วนของ case "default"
(ในตัวอย่างนี้จะแสดงการตรวจสอบเงื่อนไขโดยใช้คาสั่ง if และคาสั่ง switch ให้พิจารณาเลือกใช้ ตาม
ความถนัด) มีรายละเอียด ดังนี้
รูปแบบ
switch (ตัวแปร) {
case ค่าที่ 1 : ประโยคคาสั่งที่ 1; break;
case ค่าที่ 2 : ประโยคคาสั่งที่ 2; break;
...
case ค่าที่ N : ประโยคคาสั่งที่ N; break;
default: ประโยคคาสั่ง //ในกรณีที่ไม่ตรงกับเงื่อนไขใดๆ ก่อนหน้า
}

ตัวอย่างที่ 5.4 การใช้คาสั่ง switch สาหรับการเปรียบเทียบค่าตัวแปรจานวนมาก
<?php
switch ($category) {
case "news": echo "What's happening around the world<br />"; break;
case "weather": echo "Your weekly forecast <br />"; break;
case "sports": echo "Latest sports highlights <br />"; break;
default: echo "Welcome to my Web site <br />";
}
?>

ตัวอย่างที่ 5.5 การใช้คาสั่ง if พิจารณาเปรียบเทียบจากตัวอย่างการใช้คาสั่ง switch
<?php
if ($category=="news") echo "What's happening around the world<br />";
else if ($category=="weather") echo "Your weekly forecast<br />";
else if ($category=="sports") echo "Latest sports<br />";
else echo "Welcome to my Web site<br />";
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
72 บทที่ 5 โครงสร้างควบคุม (Control Structures)
หมายเหตุ
จากตัวอย่างการใช้คาสั่ง switch หากไม่ระบุการจบของแต่ละ case ด้วยฟังก์ชัน break; ผลที่จะ
เกิดขึ้น คือ การทางานจะกระทาตั้งแต่ case ที่ตรวจสอบแล้วเป็นจริงกระทั้งถึง case สุดท้าย
หรือจนกว่าจะพบฟังก์ชัน break; ใน case ใดๆ ตัวอย่างผลที่จะเกิดขึ้นหากไม่ระบุฟังก์ชัน
break; ตัวอย่างเช่น สมมติให้ ตรวจพบ case ของ $category มีค่าเท่ากับ "weather" ผลที่
เกิดขึ้นหากไม่ระบุฟังก์ชัน break; จะได้ผลลัพธ์ ดังนี้
Your weekly forecast
Latest sports
Web site
คาสั่งทาซา (Looping Statements)
คาสั่งทาซ้า เป็ นหนึ่งในโครงสร้างควบคุม เพื่อควบคุมคาสั่งส่ วนใดส่วนหนึ่งให้ทางานซ้าตาม
เงื่อนไขที่กาหนด คาสั่งทาซ้าที่นิยมใช้ใน PHP คือ 1) while 2) do … while 3) for และ 4) foreach
คาสั่ง while
คาสั่ง while จัดเป็นคาสั่งที่ใช้ในการควบคุมการทางานของโปรแกรมประเภทคาสั่งทาซ้า โดยที่
หลักการทางาน คือ จะทาการตรวจสอบเงื่อนไขใน while (condition) ก่อนกระทา ถ้าเงื่อนไขเป็นจริง
โปรแกรมจะเริ่มทาในบล็อกคาสั่ง while แล้วกลับมาตรวจสอบเงื่อนไขใหม่อีกครั้ง หากเป็นจริงก็จาทาซ้า
เช่นนี้ไปเรื่อยๆ จนกระทั้งเงื่อนไขเป็นเท็จจึงจะออกจากคาสั่งทาซ้า คาสั่ง while มีรูปแบบ ดังนี้
รูปแบบ
while (เงื่อนไข) {
ประโยคคาสั่ง
}

เท็จ

เงื่อนไข
จริง
ประโยคคาสั่ง

ภาพที่ 5.4 แสดงแผนภาพการไหลของคาสั่ง while
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 5 โครงสร้างควบคุม (Control Structures) 73
ตัวอย่างที่ 5.6 ตัวอย่างการหาค่าเลขยกกาลังสองของเลข 1 ถึง 5
<?php
$count = 1;
while ($count < 5) {
printf ("%d ยกกาลังสองเท่ากับ %d <br />", $count, pow ($count, 2));
$count++;
}
?>
ผลลัพธ์ คือ
1 ยกกาลังสองเท่ากับ 1
2 ยกกาลังสองเท่ากับ 4
3 ยกกาลังสองเท่ากับ 9
4 ยกกาลังสองเท่ากับ 16
คาสั่ง do ... while
คาสั่ง do ... while จัดเป็นคาสั่งที่ใช้ในการควบคุมการทางานของโปรแกรมประเภทคาสั่งทาซ้า
โดยที่หลักการทางาน คือ จะเริ่มกระทาในบล็อกของ do ... while ก่อน 1 ครั้ง แล้วจึงค่อยตรวจสอบ
เงื่อนไขใน while (condition) ถ้าเงื่อนไขเป็นจริง โปรแกรมจะกลับมาทาซ้าเช่นนี้ไปเรื่อยๆ จนกระทั้ง
เงื่อนไขเป็นเท็จจึงจะออกจากคาสั่งทาซ้า คาสั่ง do ... while มีรูปแบบ ดังนี้
รูปแบบ
do{
ประโยคคาสั่ง
} while (เงื่อนไข);

ประโยคคาสั่ง

เงื่อนไข

จริง

เท็จ
ภาพที่ 5.5 แสดงแผนภาพการไหลของคาสั่ง do ... while
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
74 บทที่ 5 โครงสร้างควบคุม (Control Structures)
ตัวอย่างที่ 5.7 ตัวอย่างการใช้งาน do ... while
<?php
$count = 11;
do {
printf ("%d ยกกาลังสองเท่ากับ %d <br />", $count, pow ($count, 2));
} while ($count < 10);
?>
ผลลัพธ์ คือ
11 ยกกาลังสองเท่ากับ 121
คาสั่ง for
คาสั่ง for จัดเป็นคาสั่งที่ใช้ในการควบคุมการทางานของโปรแกรมประเภทคาสั่งทาซ้า มีลักษณะ
คล้ายๆ กับคาสั่ง while เพียงแต่ว่าสามารถกาหนดค่าเริ่มต้น ตัวแปรตรวจสอบ กาหนดเงื่อนไข และ
ปรับเปลี่ยนค่าตัวแปรตรวจสอบของคาสั่งทาซ้าได้ ภายในบรรทัดเดียวเท่านั้น มีรูปแบบดังนี้
รูปแบบที่ 1
for (ค่าเริ่มต้นตัวแปรตรวจสอบ; เงื่อนไข; ปรับเปลี่ยนค่าตัวแปรตรวจสอบ) {
ประโยคคาสั่ง;
}
กาหนดค่าเริ่มต้น
ตัวแปรตรวจสอบ
เท็จ

เงื่อนไข
จริง
ประโยคคาสั่ง
ปรับเปลี่ยนค่า
ตัวแปรตรวจสอบ

ภาพที่ 5.6 แสดงแผนภาพการไหลของคาสั่ง for
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 5 โครงสร้างควบคุม (Control Structures) 75
หมายเหตุ
จากรูปแบบ for (ค่าเริ่มต้น; เงื่อนไข; ปรับเปลี่ยนค่าตัวแปร) ค่าในแต่ละตาแหน่งสามารถเว้นเป็น
ค่าว่างได้ และใช้ตรรกศาสตร์อื่นๆ ในบล็อกเพื่อควบคุมการทางานของคาสั่ง for
ตัวอย่างที่ 5.8 ตัวอย่างการใช้งาน for กรณีศึกษาแบบที่ 1
for ($kilometers = 1; $kilometers <= 5; $kilometers++) {
printf ("%d kilometers = %f miles <br />", $kilometers, $kilometers*0.62140);
}
ตัวอย่างที่ 5.9 ตัวอย่างการใช้งาน for กรณีศึกษาแบบที่ 2
for ($kilometers = 1; ; $kilometers++) {
if ($kilometers > 5) break;
printf ("%d kilometers = %f miles <br />", $kilometers, $kilometers*0.62140);
}
ตัวอย่างที่ 5.10 ตัวอย่างการใช้งาน for กรณีศึกษาแบบที่ 3
$kilometers = 1;
for (;;) {
if ($kilometers > 5) break;
printf ("%d kilometers = %f miles <br />", $kilometers, $kilometers*0.62140);
$kilometers++;
}
ผลลัพธ์ทั้ง 3 ตัวอย่าง คือ
1 kilometers = 0.6214 miles
2 kilometers = 1.2428 miles
3 kilometers = 1.8642 miles
4 kilometers = 2.4856 miles
5 kilometers = 3.107 miles
คาสั่ง foreach
คาสั่ง foreach เป็นคาสั่งที่มโครงสร้างเหมือนในภาษา Perl และภาษาอื่นๆ บางภาษาโครงสร้าง
ี
foreach จะใช้ในการทางานกับอาร์เรย์ ช่วยในการทาซ้าหรือวนลูปดึงค่าอาร์เรย์ออกมาตามลาดับ และจะ
เกิด error ถ้าใช้มันกับตัวแปรชนิดอื่นๆ ที่ไม่ใช่อาร์เรย์
รูปแบบของคาสั่ง foreach มีรูปแบบการใช้งาน 2 รูปแบบ ดังนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
76 บทที่ 5 โครงสร้างควบคุม (Control Structures)
รูปแบบที่ 1
foreach (array_expression as $value) {
ประโยคคาสั่ง
}
รูปแบบที่ 2
foreach (array_expression as $key => $value)
ประโยคคาสั่ง
?>
โครงสร้างของ foreach รูปแบบที่ 1 นั้น จะทาการวนลูปอาร์เรย์โดยใช้ตัวแปรอาร์เรย์ในส่วนของ
array_expression ซึงแต่ละลูปนัน ค่าของสมาชิกปัจจุบันจะถูกกาหนดไปยัง $value และ pointer ของ
่
้
อาร์เรย์ก็จะเลื่อนไปที่สมาชิกตัวต่อไปเพื่อรอการวนลูปรอบใหม่ (ดังจะเห็นได้จาก เมื่อเริ่มลูปใหม่ ค่าของ
สมาชิกตัวต่อไปจะถูกกาหนดไปยัง $value แทน) โดยจะทาการวนลูปไปเรื่อยๆ จนกระทั่งครบจานวน
สมาชิกในอาร์เรย์
โครงสร้างของ foreach รูปแบบที่ 2 นั้น จะทางานคล้ายกับรูปแบบที่ 1 เพียงแต่มันจะส่งค่า
keys (หรือ index) ของสมาชิก ในแต่ละรอบให้กับ $key ด้วย ซึ่งต่างกันตรงที่รูปแบบที่ 1 นั้นจะทาการ
ส่ง value (ค่าของสมาชิก) เพียงอย่างเดียว
เมื่อเริ่มลูปแรกของ foreach นั้น pointer ของอาร์เรย์จะถูก reset ให้เริ่มต้นที่สมาชิกตัวแรก
โดยอัตโนมัติ ซึ่งหมายความว่าไม่จาเป็นต้องใช้ฟังก์ชัน reset ( ) ก่อนเข้าลูป foreach และยังสามารถ
เปลี่ยนแปลงค่าสมาชิกในอาร์เรย์ได้อย่างง่ายๆ โดยใช้การเปลี่ยนค่าแบบอ้างอิง (reference)
ตัวอย่างที่ 5.11 ตัวอย่างการใช้งาน foreach กรณีศึกษาแบบที่ 1
<?php
$arr = array (1, 2, 3, 4);
foreach ($arr as $value) {
printf ("%d ", $value); // ผลลัพธ์ คือ 1 2 3 4
}
?>
จากตัวอย่างไม่สามารถเปลี่ยนแปลงค่าอาร์เรย์ได้ เนื่องจากไม่สามารถรู้ว่า keys ของค่าตัวแปร
นั้นๆ คืออะไร
ตัวอย่างที่ 5.12 ตัวอย่างการใช้งาน foreach กรณีศึกษาแบบที่ 2
<?php
$arr2 = array(1, 2, 3, 4)
foreach ($arr2 as $key => $value) {
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 5 โครงสร้างควบคุม (Control Structures) 77
$arr2 [$key] = $value * 2;

// ผลที่ได้คือ: $arr2 = array (2, 4, 6, 8)

}
?>
จากตัวอย่างสามารถเปลี่ยนค่าให้กับสมาชิกอาร์เรย์ได้ เนื่องจากมี keys ของสมาชิกแต่ละตัว (ใน
แต่ละรอบ) เพื่อใช้ในการอ้างอิง keys ที่ต้องการเปลี่ยนค่า
ตัวอย่างที่ 3 ตัวอย่างนี้ไม่จาเป็นต้องใช้ keys ก็ได้ แต่ก็สามารถเปลี่ยนแปลงค่าของสมาชิก
อาร์เรย์ได้ โดยการใช้แบบอ้างอิงแทน
ตัวอย่างที่ 5.13 ตัวอย่างการใช้งาน foreach กรณีศึกษาแบบไม่ใช้ keys ในการอ้างอิงค่า
<?php
$arr3 = array (1, 2, 3, 4);
foreach ($arr3 as &$value)
$value = $value * 2;
// ผลที่ได้ คือ arr3 = array (2, 4, 6, 8)
unset ($value);
?>
จากตัวอย่างค่าที่ได้ คือ arr3 = array(2, 4, 6, 8) สิ่งที่ต้องทาในการ foreach แบบอ้างอิงจะต้อง
ทาการ unset ( ) ค่าที่ทาการอ้างอิงมาด้วย เนื่องจากมันยังคงจาค่าสุดท้ายของสมาชิกตัวสุดท้ายอยู่
เมื่อนาไปใช้งานอื่นๆ มันก็ยังคงถือว่าเป็นการตัวแปรที่มีการอ้างอิงสมาชิกตัวสุดท้ายอยู่
ตัวอย่างที่ 5.14 เปรียบเทียบระหว่างคาสั่ง foreach และคาสั่ง while กรณีศึกษาแบบที่ 1
<?php
<?php
$arr = array("one", "two", "three");
$arr = array ("one", "two", "three");
foreach ($arr as $value) {
reset ($arr); //ตาแหน่งแรกของอาร์เรย์
echo "Value: $value<br />";
while (list (, $value) = each ($arr)) {
}
echo "Value: $value<br />";
?>
}
?>
จากตัวอย่างได้ผลลัพธ์เหมือนกัน ดังนี้
Value: one
Value: two
Value: three
ตัวอย่างที่ 5.15 เปรียบเทียบระหว่างคาสั่ง foreach และคาสั่ง while กรณีศึกษาแบบที่ 2
<?php
<?php
foreach ($arr as $key => $value) {
$arr = array ("one", "two", "three");
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
78 บทที่ 5 โครงสร้างควบคุม (Control Structures)
echo "Key: $key; Value: $value<br />";

reset ($arr);
while (list ($keys, $value) = each ($arr))
echo "Key: $key; Value: $value<br />";

}
?>
?>
จากตัวอย่างได้ผลลัพธ์เหมือนกัน ดังนี้
Key: 0 Value: one
Key: 1 Value: two
Key: 2 Value: three

คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซา (The Other Controls of Looping Statements)
คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซ้า คือ คาสั่งควบคุมอื่นๆ ที่ส่งผลต่อการทางานของ
คาสั่งทาซ้า เช่น ในบางครั้งของการเขียนโปรแกรมอาจจาเป็นต้องหยุดการทางานของคาสั่งทาซ้านั้นๆ อัน
เนื่องมาจากค่าตัวแปรบางอย่างอาจก่อให้เกิดข้อผิดพลาดจาเป็นต้องหยุดการทางานก่อนปัญหาดังกล่าว
จะเกิดขึ้น เป็นต้น คาสั่งควบคุมอื่นๆ คือ 1) คาสั่ง break 2) คาสั่ง goto และ 3) คาสั่ง continue มี
รายละเอียด ดังนี้
คาสั่ง break (The break Statements)
คาสั่ง break เป็นคาสั่งที่สั่งให้หยุดการทางานของบล็อกคาสั่ง ทาซ้า ไม่ว่าจะเป็น for, foreach,
while, do ... while หรือ switch ก็ตาม ซึ่งเมื่อโปรแกรมมาพบคาสั่ง break โปรแกรมจะหยุด
ประมวลผลคาสั่งอื่นๆ ในบล็อกของคาสั่งทาซ้านั้นๆ แล้วจะกระโดดออกจากบล็อกคาสั่งดังกล่าวทันที
คาสั่ง break ก็ยังสามารถกาหนดค่า optional โดยการใส่หมายเลขต่อท้ายคาสั่ง ค่าของ option
ประกอบด้วย 1 คือ การสั่งให้ออกจากลูปที่อยู่ในปัจจุบัน และ 2 คือ การสั่งให้ออกจากบล็อกคาสั่งที่
ครอบบล็อกคาสั่งปัจจุบันอยู่ ตัวอย่างดังนี้
ตัวอย่างที่ 5.16 การใช้คาสั่ง break สาหรับหยุดการทางานของบล็อกคาสั่งทาซ้า
<?php
$arr = array ('one', 'two', 'three', 'four', 'stop', 'five');
while (list (,$val) = each ($arr)) {
if ($val == 'stop') {
break;
/* เมื่อค่าของอาร์เรย์มีค่าเป็น 'stop' มันจะทาการ break ลูป while ทันที
ซึ่งสามารถใช้ break 1; แทนได้ */
}
echo "$val <br />";
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 5 โครงสร้างควบคุม (Control Structures) 79
}
$i = 0;
while (++$i) {
switch ($i) {
case 5: echo "At 5 <br />"; break 1;
// ออกจากบล็อกคาสั่ง switch
case 10: echo "At 10; quitting <br />"; break 2;
// ออกจากบล็อกคาสั่ง while
default: break;
}
}
?>
คาสั่ง goto (The goto Statements)
คาสั่ง goto เป็นคาสั่งที่สั่งให้โปรแกรมไปทางานตามจุดที่กาหนดไว้ ส่วนมากไม่นิยมใช้กันเพราะ
ทาให้การตรวจสอบการทางานของโปรแกรมทาได้ยากขึ้น เนื่องจากการใช้คาสั่ง goto และ label ทาให้
การทางานของโปรแกรมมีลักษณะกระโดดไปทางานตามจุดที่กาหนดไว้ ทาให้การทางานของโปรแกรม
ไม่ได้ทางานจากด้านบนลงมาด้านล่างอาจเกิดความสับสนในการทางานของโปรแกรมได้ แต่อย่างไรก็ตาม
ขึ้นอยู่กับการประยุกต์ใช้งานอย่างเหมาะสม มีตัวอย่างการใช้งาน ดังนี้
ตัวอย่างที่ 5.17 การใช้คาสั่ง goto สั่งให้โปรแกรมไปทางานตาม label ที่กาหนดไว้
<?php
for ($count = 0; $count < 10; $count++){
$randomNumber = rand(1,50);
if ($randomNumber < 10)
goto less;
else
echo "Number greater than 10: $randomNumber <br />";
}
less:
echo "Number less than 10: $randomNumber <br />";
?>
จากตัวอย่าง มีการกาหนดไว้ว่าหากเลขที่สุ่มมีค่าน้อยกว่า 10 ให้กระโดดมายัง label ที่ชื่อว่า
less: ตัวอย่างผลลัพธ์ (ผลลัพธ์อาจแตกต่างเนื่องจากการสุ่มตัวเลขขึ้นมากแสดงผล) ดังนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
80 บทที่ 5 โครงสร้างควบคุม (Control Structures)
Number greater than 10: 22
Number greater than 10: 21
Number greater than 10: 35
Number less than 10: 8
คาสั่ง continue (The continue Statement)
คาสั่ง continue ถูกใช้ภายในโครงสร้างควบคุมของคาสั่งทาซ้า เพื่อให้ข้ามการทางานลูปหรือ
รอบการทางานของคาสั่งทาซ้าปัจจุบัน ไปทางานในลูปถัดไป และคาสั่ง continue ยังสามารถกาหนด
optional เพื่อระบุตัวเลขสาหรับข้ามการทางานในลูประดับ (level) ชั้นใด ตัวอย่างดังนี้
ตัวอย่างที่ 5.18 การใช้คาสั่ง continue ข้ามการทางานลูปของคาสั่งทาซ้าปัจจุบัน ไปทางานในลูปถัดไป
<?php
while (list ($key, $value) = each ($arr)) {
if (!($key % 2)) {
continue;
// ข้ามไปทางานรอบต่อไปเลยถ้าเป็นเลขคี่
}
do_something_odd ($value);
}
$i = 0;
while ($i++ < 5) {
echo "Outer<br />";
while (1) {
echo " Middle<br />";
while (1) {
echo " Inner<br />";
continue 3;
// ทาการข้ามไปทางานรอบต่อไปของลูป while($i++ < 5)
// เนื่องจากในลูป while($i++ < 5) นี้เป็นระดับ (level) ที่ 3
}
echo "This never gets output.<br />";
}
echo "Neither does this.<br />";
}
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 6
ฟังก์ชัน (Functions)
ในบทนี้จะกล่าวถึง PHP ฟังก์ชัน รวมถึงวิธีการสร้าง ข้อกาหนด คุณสมบัติต่างๆ และการเรียกใช้
งานฟังก์ชัน การส่งค่าตัวแปรเพื่อประมวลผลในฟังก์ชัน การส่งค่ากลับเมื่อฟังก์ชันทางานเสร็จ เป็นต้น
ซึงหน้าที่หลักๆ ของฟังก์ชันนั้นจะช่วยลดขั้นตอนการเขียนโปรแกรมที่ต้องทาซ้าๆ หรือใช้งานบ่อยครั้ง ทา
่
ให้การเขียนโปรแกรมทาได้ง่ายและรวดเร็ว สามารถสร้างเป็น ไลบรารีฟังก์ชัน สาหรับการใช้งานในครั้ง
ต่อๆ ไป
ฟังก์ชัน
ฟังก์ชัน คือ กลุ่มหรือชุดของคาสั่งที่สร้างขึ้นเพื่อทาหน้าที่หนึ่งๆ เมื่อต้องการใช้งานก็เพียงเรียกชื่อ
ฟังก์ชันนั้นก็สามารถใช้งานได้ทันที ฟังก์ชันใน PHP สามารถแบ่งได้เป็น 2 ชนิด คือ 1) ฟังก์ชันมาตรฐาน
(Built-in Functions) และ 2) ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง (User Defined Functions) มี
รายละเอียด ดังนี้
ฟังก์ชันมาตรฐาน (Built-in Functions)
ฟังก์ชันมาตรฐาน คือ ฟังก์ชันที่มาพร้อมกับ PHP สามารถเรียกใช้งานได้ทันที ฟังก์ชันมาตรฐานมี
หลายกลุ่มการทางาน สามารถจาแนกตามหน้าที่ ดังนี้
 ฟังก์ชันที่เกี่ยวกับวันที่และเวลา
 ฟังก์ชันที่เกี่ยวกับการคานวณทางคณิตศาสตร์
 ฟังก์ชันที่เกี่ยวกับการติดต่อกับฐานข้อมูล
 ฟังก์ชันที่เกี่ยวกับการจัดการกับกับสตริงหรือข้อความ
ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง (User Defined Functions)
ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง คือ กลุ่มของคาสั่งที่ผู้ใช้เป็นผู้เขียนหรือพัฒนาขึ้นมาเอง เพื่อ
ทางานหรือทาหน้าที่อย่างใดอย่างหนึ่งตามต้องการ
จากที่ได้กล่าวถึงในข้างต้น สรุปได้ว่า หลักๆ แล้วฟังก์ชันมีอยู่ด้วยกัน 2 ประเภท ทั้ง 2 ประเภท
ก็จะมีฟังก์ชันที่ประกอบไปด้วย ฟังก์ชันที่ไม่มีการส่งค่าระหว่างฟังก์ชัน และฟังก์ชันที่มีการส่งค่าระหว่าง
ฟังก์ชัน ค่าที่ใช้รับส่งระหว่างฟังก์ชัน จะเรียกว่า พารามิเตอร์ (parameter) หรือบ้างก็เรียกว่า อากิวเมนต์
(argument) ในหนังสือเล่มนี้ ผู้แต่งขอใช้คาว่า พารามิเตอร์ เพียงอย่างเดียวเมื่อกล่าวถึงค่าตัวแปรที่ใช้
สาหรับการรับส่งค่าระหว่างฟังก์ชัน
82 บทที่ 6 ฟังก์ชัน (Functions)
การเรียกใช้งานฟังก์ชันมาตรฐานของ PHP
ในการเรียกใช้งานฟังก์ชันจะต้องตรวจสอบก่อนว่าฟังก์ชันนั้นๆ เป็นฟังก์ชันเพื่อทาหน้าที่อะไร มี
การรับส่งค่าตัวแปรระหว่างฟังก์ชันหรือไม่ ถ้าไม่มีการรับส่งค่าระหว่างฟังก์ชัน ก็สามารถเรียกใช้งานได้
เลย แต่ถ้ามีการรับส่งค่าระหว่างฟังก์ชัน ก็จะต้องมีการระบุค่าพารามิเตอร์ ให้ถูกต้องตามรูปแบบที่ฟังก์ชัน
กาหนด
ตัวอย่างที่ 6.1 รูปแบบฟังก์ชันที่ไม่มีการรับส่งค่าระหว่างฟังก์ชัน
function_name ( );
ตัวอย่างที่ 6.2 รูปแบบฟังก์ชันที่มีการรับส่งค่าระหว่างฟังก์ชัน
function_name ($value1, $value2);
ตัวอย่างที่ 6.3 การเรียกใช้งานฟังก์ชันมาตรฐาน
<?php
$today = date("d/m/Y");
echo $today;

// เรียกใช้งานฟังก์ชัน date(); พร้อมระบุค่าอากิวเมนต์
// แสดงผลลัพธ์ เป็นวันที่ปัจจุบัน เช่น 6/7/2012 เป็นต้น

?>
การสร้างฟังก์ชัน (Creating a Function)
ลักษณะของงานที่จะนามาสร้างเป็นฟังก์ชันนั้น ควรเป็นงานหรือการกระทาอย่างใดอย่างหนึ่ง ที่
มักจะต้องทาซ้าๆ และบ่ อยครั้ ง เพื่อให้ไม่ต้องเขียนคาสั่ งหรือชุดคาสั่ งนั้นๆ ทุกครั้งที่ต้องการทางาน
แบบเดิม ซึ่งสามารถแยกคาสั่งบางส่วนออกมาสร้างเป็นฟังก์ชันไว้ต่างหากและนามาทาเป็นฟังก์ชัน และ
เรียกใช้ตามลักษณะงานที่ต้องการ จะช่วยให้โค้ดคาสั่งของมีขนาดเล็กลง ช่วยลดการใช้ทรัพยากร และง่าย
ในการปรับปรุงแก้ไขในอนาคต เพราะสามารถแก้ไขเพียงครั้งเดียวก็จะมีผลทุกจุดที่เรียกใช้ฟังก์ชัน
รูปแบบ
<?php
function ชื่อฟังก์ชัน (พารามิเตอร์)
{
คาสั่ง;
}
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 6 ฟังก์ชัน (Functions) 83
หมายเหตุ
การตั้งชื่อฟังก์ชัน มีหลักเกณฑ์คล้ายกับการตั้งชื่อตัวแปร ดังนี้
- ต้องขึ้นต้นชื่อด้วย a-z หรือ _ เท่านั้น
- ต้องประกอบด้วย a-z, 0-9 หรือ _ เท่านั้น
- ต้องไม่ซ้ากับชื่อฟังก์ชันที่มีอยู่แล้วหรือฟังก์ชันมาตรฐานของ PHP
พารามิเตอร์ คือ ตัวแปรหรือข้อมูลที่ต้องการรับจากภายนอกฟังก์ชันเข้ามาประมวลผลภายใน
ฟังก์ชัน จะมีหรือไม่ก็ได้ ขึ้นอยู่กับว่าจาเป็นต้องใช้หรือไม่
การเรียกใช้ฟังก์ชันที่สร้างเอง
การเรียกใช้ฟังก์ชันที่สร้างเองสามารถทาได้เช่นเดียวกับการใช้ฟังก์ชันมาตรฐานของ PHP คือ
ต้องระบุชื่อฟังก์ชันที่ต้องการใช้งานโดยระบุข้อมูลที่จะส่งให้กับฟังก์ชัน (ถ้ามี) ดังตัวอย่าง
ตัวอย่างที่ 6.4 การสร้างฟังก์ชัน
<?php
function generateFooter ($msg)
{
printf ("<p><font color=red> %s <font></p>",$msg);
}
?>
ตัวอย่างที่ 6.5 การเรียกใช้ฟังก์ชันที่สร้างเอง
<?php
generateFooter ("Copyright 2012 Mr.Parinya Noidonprai");
?>
ฟังก์ชันแบบมีการส่งค่าพารามิเตอร์
พารามิเตอร์ คือ ข้อกาหนดในการรับข้อมูลของฟังก์ชัน โดยข้อมูลนั้นจะถูกนาไปใช้ประมวลผล
ภายในฟังก์ชัน พารามิเตอร์จะทาให้ฟังก์ชันมีความยืดหยุ่นต่อการใช้งาน เพราะผลลัพธ์จะแปรเปลี่ยนไป
ตามค่าพารามิเตอร์นั้น วิธีการกาหนดค่าพารามิเตอร์ มีดังนี้
พารามิเตอร์แบบกาหนดค่าเริ่มต้น (Default Parameter)
ในบางฟังก์ชันอาจใช้ค่าพารามิเตอร์ค่าใดค่าหนึ่งเป็นส่วนใหญ่ โดยอาจมีการเปลี่ยนไปใช้ค่าอื่น
บ้างในบางครั้ง ดังนั้นเพื่อความสะดวกจึงมีการกาหนดค่าพารามิเตอร์แบบกาหนดค่าเริ่มต้นขึ้น โดยจะ
กาหนดค่าพารามิเตอร์ที่ต้องใช้บ่อยๆ ไว้ล่วงหน้า หรือป้องกันปัญหาในกรณีที่ไม่ได้กาหนดค่าพารามิเตอร์

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
84 บทที่ 6 ฟังก์ชัน (Functions)
ให้กับฟังก์ชัน เมื่อมีการเรียกใช้ฟังก์ ชันหากไม่มีการส่งค่าพารามิเตอร์มาให้ฟังก์ชัน ฟังก์ชันจะเรียกใช้ค่า
เริ่มต้นที่กาหนดไว้ให้แทน รูปแบบการกาหนดพารามิเตอร์แบบกาหนดค่าเริ่มต้น มีรายละเอียด ดังนี้
รูปแบบ
<?php
function ชื่อฟังก์ชัน (ชื่อพารามิเตอร์ = ค่าเริ่มต้น) {
คาสั่ง;
}
?>
ตัวอย่างที่ 6.6 ฟังก์ชันปิรามิดตัวเลข
<?php
function pyramidNumber ($number=7) {
for ($loop1=$number; $loop1>=1; $loop1--) {
for($loop2=1; $loop2<=$loop1; $loop2++) {
printf (" %d ",$loop2);
}
echo "</ br>";
}
}
?>
ตัวอย่างที่ 6.7 การเรียกใช้ฟังก์ชันปิรามิดตัวเลข
<?php
<?php
pyramidNumber ( ); // ไม่ส่งพารามิเตอร์
pyramidNumber (4); // ส่งพารามิเตอร์
?>
?>
ผลลัพธ์
1234567
1234
123456
123
12345
12
1234
1
123
12
1

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 6 ฟังก์ชัน (Functions) 85
พารามิเตอร์แบบส่งค่าและอ้างอิง (Passing Parameter by Value and Reference)
ปกติแล้วค่าที่ถูกส่งไปยังฟังก์ชันจะเป็นแบบส่งค่า (by Value) คือ เมื่อมีการเปลี่ยนแปลงค่าของ
ตัวแปรภายในฟังก์ชัน จะไม่ส่งต่อค่าตัว แปรตัวเดียวกันที่อยู่นอกฟังก์ชัน ทุกตัว อย่างก่อนหน้าในเรื่อง
ฟังก์ชันนี้ใช้วิธีการผ่านค่าพารามิเตอร์แบบส่งค่าทั้งหมด
การส่งผ่านค่าแบบอ้างอิง (by Reference) นั้น หากในฟังก์ชันมีการเปลี่ยนแปลงค่าของตัวแปร
ภายในฟังก์ชันจะส่งผลให้ค่าของตัวแปรที่อ้างอิงกันนอกฟังก์ชัน ทาให้มีค่าเปลี่ยนตามไปด้วย การส่งผ่าน
ค่าแบบอ้างอิงสามารถทาได้โดยการใส่เครื่องหมาย & ไว้หน้าพารามิเตอร์ตัวที่ต้องการอ้างอิง
ตัวอย่างที่ 6.8 การเปรียบเทียบการส่งค่าพารามิเตอร์แบบปกติและแบบอ้างอิง
<?php // การส่งค่าพารามิเตอร์ปกติ
<?php // การส่งค่าพารามิเตอร์แบบอ้างอิง
function foo ($var) {
function foo (&$var) {
$var++;
$var++;
}
}
$a=5;
$a=5;
foo ($a);
foo ($a);
echo $a;
// ผลลัพธ์ $a = 5
echo $a;
// ผลลัพธ์ $a = 6
?>
?>
ตัวอย่างที่ 6.9 การประยุกต์ใช้งานการส่งค่าพารามิเตอร์แบบอ้างอิง
<?php
$cost = 20.99;
$tax = 0.0575;
function calculateCost (&$cost, $tax)
{
// ปรับเปลี่ยนค่าตัวแปร $cost
$cost = $cost + ($cost * $tax);
// ปรับเปลี่ยนค่าตัวแปร $tax
$tax += 4;
}
calculateCost ($cost, $tax);
printf ("Tax is: %01.2f%% <br />", $tax*100);
printf ("Cost is: $%01.2f", $cost);
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
86 บทที่ 6 ฟังก์ชัน (Functions)
ผลลัพธ์
Tax is: 5.75%
Cost is: $22.20
จากตัว อย่างจะเห็ นได้ว่าตัวแปร $cost ที่อยู่ในฟังก์ชันและนอกฟังก์ชันถือว่าเป็นตัวเดียวกัน
ดังนั้นเมื่อมีการปรับเปลี่ยนค่าตัวแปรในฟังก์ชันจะยังผลให้ค่าเปลี่ยนตามทั้งหมดเหมือนกับการใช้งานตัว
แปรแบบสาธารณะ (Global Variable) แต่ในสาหรับตัวแปร $tax ในและนอกฟังก์ชันถือว่าเป็นคนละตัว
แปร ดังนั้นเมื่อภายในฟังก์ชันมีการเปลี่ยนแปลงจะไม่ทาให้ค่าของตัวแปรเปลี่ยนไป
การส่งค่ากลับจากฟังก์ชันด้วยคาสั่ง return (Returning Values from a Function)
เนื่องจากฟังก์ชันจะใช้ในการประมวลผลอย่างใดอย่างหนึ่ง โดยฟังก์ชันมักจะถูกเรียกใช้โดยส่วน
ต่างๆ ของโปรแกรม เพื่อประมวลผลตามหน้าที่ต่างๆ ของฟังก์ชัน ในบางครั้งฟังก์ชัน อาจจาเป็นต้องส่งค่า
ผลลัพธ์ของการทางานกลับไปยังส่วนที่เรียกใช้ฟังก์ชันนั้นๆ หรือสามารถประยุกต์ใช้สาหรับการตรวจสอบ
การทางานของฟังก์ชัน เช่น ทางานปกติอาจส่งค่ากลับเป็นเลข 1 ทางานไม่ถูกต้องส่งค่ากลับเป็นเลข 2
หรืออื่นๆ ตามต้องการ เป็นต้น สาหรับ วิธีการส่งค่ากลับออกไปจะใช้คาสั่ง return แล้วตามด้วยค่าที่
ต้องการส่งออกไป มีรูปแบบ ดังนี้
return ค่าที่จะส่งกลับ;
ตัวอย่างที่ 6.10 ฟังก์ชัน calcSalesTax ( ) มีการส่งค่ากลับเป็นค่าของตัวแปร $total
<?php
function calcSalesTax ($price, $tax=.0675)
{
$total = $price + ($price * $tax);
return $total;
}
?>
ตัวอย่างที่ 6.11 ฟังก์ชัน calcSalesTax ( ) มีการส่งค่ากลับเป็นผลลัพธ์ของการคานวณ
<?php
function calcSalesTax ($price, $tax=.0675)
{
return $price + ($price * $tax);
}
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 6 ฟังก์ชัน (Functions) 87
เทคนิคการส่งค่ากลับแบบหลายค่า (Returning Multiple Values)
ในบางครั้งของการเรียกใช้ฟังก์ชัน อาจจาเป็นต้องต้องส่งค่ากลับมากกว่า 1 ค่า เช่น เขียนฟังก์ชัน
เพื่อติดต่อกับฐานข้อมูล แล้วต้องการส่งค่ากลับประกอบด้วย ชื่อ -สกุล อีเมล์ ที่อยู่ เบอร์โทรศัพท์ เป็นต้น
ซึ่งในตัวอย่างก่อนหน้านี้จะกล่าวถึงเฉพาะส่งค่ากลับเพียง 1 ค่าเท่านั้น ในกรณีนี้มีฟังก์ชันมาตรฐานของ
PHP ที่สามารถช่วยได้ คือ ฟังก์ชัน list ( ) สามารถใช้สาหรับส่งค่ากลับมากกว่า 1 ค่าในรูปแบบของ
อาร์เรย์ ตัวอย่างดังนี้
ตัวอย่างที่ 6.12 เทคนิคการส่งค่ากลับแบบหลายค่า กรณีศึกษาแบบที่ 1
<?php
$colors = array ("red","blue","green");
list ($red, $blue, $green) = $colors;
?>
จากตัวอย่าง เมื่อเรียกใช้ฟังก์ชัน list ( ) จะได้ตัวแปรประกอบด้วย $red, $blue และ $green
มีค่าเป็น red, blue และ green ตามลาดับ จากตัวอย่างเป็นแนวคิดเริ่มต้นสาหรับตัวอย่างถัดไป เพื่อให้
เห็นกระบวนการสาหรับประยุกต์ใช้ฟังก์ชัน list ( ) ดังนี้
ตัวอย่างที่ 6.13 เทคนิคการส่งค่ากลับแบบหลายค่า กรณีศึกษาแบบที่ 2
<?php
function retrieveUserProfile ( ) {
$user [ ] = "Parinya";
$user [ ] = "parinya@example.com";
$user [ ] = "Thai";
return $user;
}
list ($name, $email, $language) = retrieveUserProfile ( );
echo "Name: $name, email: $email, language: $language";
?>
ผลลัพธ์ของแนวคิดและประยุกต์ใช้ฟังก์ชัน list ( )
Name: Parinya, email: parinya@example.com, language: Thai
ฟังก์ชันแบบเรียกตัวเอง (Recursive Functions)
ฟังก์ชันแบบเรียกตัวเอง คือ การเขียนฟังก์ชันโดยใช้เทคนิคการแก้ปัญหาใหญ่ให้เป็นปัญหาย่อยที่
มีรูปแบบเดียวกันกับปัญหาใหญ่ การเขียนฟังก์ชั นแบบเรียกตัวเองช่วยในการแก้ปัญหาที่ซับซ้อนได้โดย
การเขียนฟังก์ชันในรูปแบบที่ง่ายและสั้น ตัวอย่างดังนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
88 บทที่ 6 ฟังก์ชัน (Functions)
ตัวอย่างที่ 6.14 การสร้างฟังก์ชันสาหรับหาค่าแฟลทอเรียล n!
<?php
function factorial ($n) {
if ($n < 1)
return 1;
else
return $n*factorial($n-1);
}
echo factorial(4);
?>
ฟังก์ชัน factorial ( ) จากตัวอย่างข้างบน จะเห็นได้ว่าตัวแปร $n จะต้องเป็นตัวแปรที่เก็บค่าที่
เป็นเลขจานวนเต็ม และไม่เป็นลบ ถ้าต้องการจะเขียนฟังก์ชันให้มีความปลอดภัยในการใช้งาน ก็อาจจะ
เพิ่มเงื่อนไข เพื่อตรวจสอบก่อนว่า ผู้ใช้ส่งค่าของตัวแปรตรงตามต้องการหรือไม่ เช่น ไม่ ส่งค่าที่เป็นสตริง
หรือเป็นเลขทศนิยม หรือค่าที่เป็นลบ เป็นต้น จากตัวอย่างจะเป็นการทางานซ้าโดยใช้รูปแบบฟังก์ชัน
เรียกใช้ตัวเอง จะหยุดก็ต่อเมื่อตัวแปร $n มีค่าน้อยกว่าหรือเท่ากับ 1 เมื่อเป็นจริงตามเงื่อนไขฟังก์ชันจะ
หยุดทางานโดยใช้ฟังก์ชัน return 1
ฟังก์ชันไลบรารี (Function Libraries)
วิธีที่จะช่วยลดการเขียนคาสั่งหรือฟังก์ชันซ้าซ้อน คือ การเขียนคาสั่งการทางานแยกเก็บไว้อีกไฟล์
หนึ่ง ซึ่งอาจเป็นชุดคาสั่ง ฟังก์ชัน คลาส หรือไฟล์อื่นๆ ที่เกี่ยวข้องในลักษณะของฟังก์ชันไลบรารีหรือคลัง
ฟังก์ชัน และเมื่อต้องการนาไฟล์ดังกล่าวมาใช้งานที่เว็บเพจใดก็เพี ยงเรียกไฟล์ที่เก็บฟังก์ชันนั้นๆ ไว้ ก็
สามารถใช้งานได้ทันทีเสมือนว่าฟังก์ชันที่จะเรียกอยู่ในเว็บเพจที่กาลังพัฒนา ฟังก์ชันสาหรับการเรียกใช้
ไฟล์ภายนอก ได้แก่ 1) include ( ) 2) include_once ( ) 3) require ( ) และ 4) require_once ( ) มี
รายละเอียดการใช้งานในแต่ละฟังก์ชัน ดังนี้
ฟังก์ชัน include ( )
เป็นฟังก์ชันสาหรับโหลดไฟล์เพื่อนามาใช้งานร่วมกับคาสั่งอื่นๆ ของเว็บเพจ และยังคงทางานอยู่
ภายในโปรแกรมจนกว่าจะสิ้นสุดการทางาน ถ้าฟังก์ชัน include ( ) เรียกหาไฟล์ที่ระบุไม่พบ ระบบ
จะแจ้งเตือน (Warning) ข้อผิดพลาดแล้วข้ามไปทาส่วนอื่นๆ ของคาสั่งในลาดับถัดไป
ฟังก์ชัน include_once ( )
เป็นฟังก์ชันสาหรับเรีย กโหลดไฟล์เหมือนกับฟังก์ชัน include ( ) แต่ต่างกันที่ฟังก์ชัน
include_once ( ) จะเรียกโหลดไฟล์นั้นได้เพียงครั้งเดียวเท่านั้น

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 6 ฟังก์ชัน (Functions) 89
ตัวอย่างที่ 6.15 ตัวอย่างไฟล์ที่เก็บชุดคาสั่งกาหนดชื่อเป็น lib.php
<?php
echo "parinya<br />";
?>
ตัวอย่างที่ 6.16 การเปรียบเทียบความแตกต่างระหว่างฟังก์ชัน include ( ) และ include_once ( )
<?php
<?php
include ("lib.php");
include_once ("lib.php");
include ("lib.php");
include_once ("lib.php");
include ("lib.php");
include_once ("lib.php");
?>
?>
ผลลัพธ์
// ผลลัพธ์ของการใช้ฟังก์ชัน include ( );
// ผลลัพธ์ของการใช้ฟังก์ชัน include_once ( );
parinya
parinya
parinya
parinya
ในกรณีที่เรียกใช้ฟังก์ชัน include ( ) หรือ include_once ( ) แล้วไม่พบไฟล์ที่จานาเข้ามา
จะปรากฏข้อความตามตัวอย่าง แต่ยังสามารถทางานต่อในลาดับถัดไปได้ ตัวอย่างดังต่อไปนี้
ตัวอย่างที่ 6.17 แสดงตัวอย่างข้อผิดพลาดเมื่อไม่พบไฟล์ที่จะนาเข้า
<?php
include ("file.php");
echo "ยังสามารถแสดงผลบรรทัดนี้ได้<br/>";
?>
ผลลัพธ์
Warning: include(file.php) [function.include]: failed to open stream: No such file or
directory in C:AppServwww test.php on line 2
Warning: include() [function.include]: Failed opening 'file.php' for inclusion
(include_path='.;C:php5pear') in C:AppServwww test.php on line 2
ยังสามารถแสดงผลบรรทัดนี้ได้
ฟังก์ชัน require ( )
เป็นฟังก์ชันสาหรับเรียกโหลดไฟล์เหมือนกับฟังก์ชัน include ( ) แต่ต่างกันที่เมื่อฟังก์ชัน
require ( ) หาไฟล์ที่ต้องการโหลดไม่พบจะแจ้งเตือน และแสดงข้อผิดพลาด (Fatal) จากนั้นจะหยุดการ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
90 บทที่ 6 ฟังก์ชัน (Functions)
ทางานไม่ทาคาสั่งในลาดับ ถัดไป นิยมใช้โหลดไฟล์ที่จัดเก็บฟังก์ชัน หรือคลาสที่มีความจาเป็นต่อการ
ทางานของโปรแกรม
ฟังก์ชัน require_once ( )
เป็นฟังก์ชันที่มีการทางานเหมือนกับฟังก์ชัน require ( ) แต่ต่างกันที่ฟังก์ชัน require_once ( )
จะโหลดไฟล์นั้นได้เพียงครั้งเดียวเท่านั้น
ในกรณีที่เรียกใช้ฟังก์ชัน require ( ) หรือ require_once ( ) แล้วไม่พบไฟล์ที่จานาเข้ามา
จะปรากฏข้อความตามตัวอย่าง และจะไม่ทางานในลาดับบรรทัดต่อไป
ตัวอย่างที่ 6.18 การใช้ฟังก์ชัน require_once ( )
<?php
require ("file.php");
echo "ยังสามารถแสดงผลบรรทัดนี้ได้<br/>";
?>
ผลลัพธ์
Warning: require(file.php) [function.require]: failed to open stream: No such file or
directory in C:AppServwww test.php on line 2
Fatal error: require() [function.require]: Failed opening required 'file.php'
(include_path='.;C:php5pear') in C:AppServwwwtest.php on line 2
จากตัวอย่างดังกล่าว จะเห็นได้ว่าไม่ปรากฏคาว่า "ยังสามารถแสดงผลบรรทัดนี้ได้ " เรียกลักษณะ
ดังกล่าวว่า Fatal Error นิยมใช้โหลดไฟล์ที่จัดเก็บฟังก์ชันหลัก หรือคลาสที่มีความจาเป็นต่อการทางาน
ของโปรแกรม (หยุดทางานซะ ดีกว่าทางานต่อไปเรื่อยๆ แบบผิดๆ)

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7
อาร์เรย์ (Arrays)
อาร์เรย์ (Array) คือ ชุดของข้อมูล (Data Sets) หรือชุดของตัวแปร ใช้สาหรับเก็บค่าของข้อมูลที่อยู่ใน
กลุ่มเดียวกัน ซึ่งมีการเรียงลาดับที่แน่นอน โดยล าดับของอาร์เรย์โดยปกติจะเริ่มจากศูนย์ และเป็นล าดับ
ต่อเนื่องไปจนถึงตัวสุดท้าย อาร์เรย์แตกต่างจากตัวแปรทั่วไป คือ ตัวแปรโดยทั่วไปจะถูกจัดเก็บในหน่วยความจา
แบบไม่ต่อเนื่องกัน แต่ตัวแปรประเภทอาร์เรย์จะถูกเก็บในหน่วยความจาในตาแหน่งที่ต่อเนื่องกัน
ข้อมูลแต่ละตัวในอาร์เรย์เรียกว่า "สมาชิก (Member) หรืออิลิเมนต์ (Element)" โดยสมาชิก
เหล่านี้มักจะมีความสัมพันธ์กันในลักษณะใดลักษณะหนึ่ง สาหรับใน PHP ข้อมูลที่เก็บในอาร์เรย์ไม่
จ าเป็ น ต้องเป็ น ข้อมูล ชนิ ดเดีย วกัน สมาชิกแต่ล ะตัว จะประกอบด้ว ยค่าข้อมูล (Value) และอินเด็ก ซ์
(Index) เปรียบเสมือนเป็นคีย์ (Key) ของอาร์เรย์ที่ใช้อ้างอิงถึงตาแหน่งของสมาชิกแต่ละตัวในอาร์เรย์
ตารางที่ 7.1 แสดงตัวอย่างข้อมูลแบบอาร์เรย์ และแสดงตาแหน่งของอินเด็กซ์
หมายเลขอินเด็กซ์
ค่าของข้อมูลหรือสมาชิก
ลาดับที่ของสมาชิก
0
สุราษฎร์ธานี
1
1
กระบี่
2
2
ชุมพร
3
3
นครศรีธรรมราช
4
การสร้างอาร์เรย์ (Create arrays)
การสร้างอาร์เรย์มีหลักๆ 4 วิธี คือ 1) การใช้ฟังก์ชัน array ( ) 2) การใช้ฟังก์ชัน range ( )
3) การสร้างโดยใช้เครื่องหมายวงเล็บก้ามปู [ ] และ 4) การสร้างโดยนาค่ามาจากเท็กซ์ไฟล์ มีตัวอย่าง ดังนี้
การใช้ฟังก์ชัน array ( )
รูปแบบที่ 1 กรณีไม่กาหนดอินเด็กซ์ให้กับสมาชิก
$ชื่ออาร์เรย์ = array (สมาชิกลาดับที่ 1, สมาชิกลาดับที่ 2, ... , สมาชิกลาดับที่ N);
ตัวอย่างที่ 7.1 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีไม่กาหนดอินเด็กซ์ให้กับสมาชิก
<?php
$province = array ("สุราษฎร์ธานี", "กระบี่", "ชุมพร", "นครศรีธรรมราช", "พังงา", "ภูเก็ต", "ระนอง");
print_r ($province);
// ใช้แสดงข้อมูลในอาร์เรย์
?>
92 บทที่ 7 อาร์เรย์ (Arrays)
ตัวอย่างที่ 7.2 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีไม่กาหนดอินเด็กซ์ให้กับสมาชิก
<?php
$province[ ] = "สุราษฎร์ธานี";
$province[ ] = "กระบี่";
$province[ ] = "ชุมพร";
$province[ ] = "นครศรีธรรมราช";
print_r ($province);
?>
การอ้างถึงสมาชิกแต่ละตัวต้องใช้หมายเลขอินเด็กซ์ เริ่มต้นจากเลข 0 และ 1, 2, 3 ตามลาดับ ซึ่ง
การระบุเลขอินเด็กซ์จะต้องใส่ภายในเครื่องหมายวงเล็บก้ามปู ([ ])
หมายเหตุ
ฟังก์ชันที่ใช้แสดงอาร์เรย์ออกทางหน้าจอ มีให้เลือกใช้ดังนี้
1) ฟังก์ชัน print_r ( ) ใช้แสดงข้อมูลจากตัวแปรทุกชนิด ไม่ว่าจะเป็น string, integer,
array, object มีรูปแบบคาสั่ง ดังนี้
mixed print_r ( mixed $expression [, bool $return = false ] )
เมื่อ $expression หมายถึง ชื่อตัวแปรที่ต้องการนาข้อมูลมาแสดง
$return
หมายถึง กาหนดให้มีการส่งค่าคืนหรือไม่ โดยปกติจะเป็น false คือ
ไม่มีการส่ งค่าคืน และแสดงข้อมูล ออกทางหน้าจอ หาก
กาหนดเป็น true จะส่งคืนค่าและต้องกาหนดตัวแปรมา
รับค่า และไม่แสดงข้อมูลออกทางหน้าจอ
2) ฟังก์ชัน var_dump ( ) ใช้แสดงข้อมูลเช่นเดียวกับ print_r ( ) แต่สามารถใช้กับอาร์เรย์
หลายมิติได้ และไม่มีการส่งคืนค่า รูปแบบดังนี้
void var_dump ( mixed $expression [, mixed $... ] )
รูปแบบที่ 2 กรณีกาหนดอินเด็กซ์ให้กับสมาชิก
$ชื่ออาร์เรย์ = array (Key1=>สมาชิกลาดับที่ 1, Key2=>สมาชิกลาดับที่ 2, ... );
ตัวอย่างที่ 7.3 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีกาหนดอินเด็กซ์ให้กับสมาชิก
<?php
$province = array ("Surat" => "สุราษฎร์ธานี", "Krabi" => "กระบี่", "Chumphon" =>
"ชุมพร", "Nakhon" => "นครศรีธรรมราช");
echo $province["Surat"];
// ผลลัพธ์ คือ สุราษฎร์ธานี
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 93
ตัวอย่างที่ 2 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีกาหนดอินเด็กซ์ให้กับสมาชิก สาหรับ
ตัวอย่างที่ 2 นี้จะใช้ในกรณีที่อาจไม่ทราบสมาชิกที่แน่นอน ดังนั้นอาจยังไม่ระบุสมาชิกลงไป หรือระบุ
เพียงบางตัวแล้วมาปรับปรุงเพิ่มเติมในภายหลัง ดังนี้
ตัวอย่างที่ 7.4 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีกาหนดอินเด็กซ์ให้กับสมาชิก
<?php
$province = array ( );
// สร้างอาร์เรย์ว่าง
$province [0] = "สุราษฎร์ธานี";
// กาหนดสมาชิก
...
$province [0] = "ยะลา";
// แก้ไขปรับปรุงค่าข้อมูลสมาชิกเดิม
$province [7] = "เชียงใหม่";
// เพิ่มข้อมูลสมาชิกใหม่
print_r ($province);
?>
การใช้ฟังก์ชัน range ( )
ฟังก์ชัน range ( ) เป็นฟังก์ชันที่ใช้สาหรับสร้างอาร์เรย์ โดยกาหนดค่าข้อมูลเป็นช่วงของตัวเลขหรือ
ตัวอักษร เรียงลาดับจากน้อยไปหามากหรือมากไปหาน้อย (เป็นลักษณะข้อมูลที่เกี่ยวเนื่องกันเป็นชุด) มีรูปแบบ ดังนี้
รูปแบบ
array range (mixed $start, mixed $limit [, number $step = 1])
เมื่อ $start หมายถึง ค่าเริ่มต้นของลาดับ
$limit หมายถึง ค่าสุดท้ายของลาดับ
$step หมายถึง ค่าความต่างของข้อมูล จะกาหนดหรือไม่ก็ได้ ถ้าไม่กาหนดค่าจะเพิ่ม
ครั้งละ 1 ค่า
ตัวอย่างที่ 7.5 การใช้ฟังก์ชัน range ( )
<?php
foreach (range (0, 12) as $number) echo $number . " ";
// ผลลัพธ์ คือ 0 1 2 3 4 5 6 7 8 9 10 11 12
foreach (range (0, 100, 10) as $number) echo $number . " ";
// ผลลัพธ์ คือ 0 10 20 30 40 50 60 70 80 90 100
foreach (range ('a', 'i') as $number) echo $number . " ";
// ผลลัพธ์ คือ a b c d e f g h i
foreach (range ('i', 'a') as $number) echo $number . " ";
// ผลลัพธ์ คือ i h g f e d c b a
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
94 บทที่ 7 อาร์เรย์ (Arrays)
การสร้างโดยใช้เครื่องหมายวงเล็บก้ามปู [ ]
การสร้างอาร์เรย์ด้วยวิธีนี้ เป็นการกาหนดค่าให้กับอาร์เรย์โดยตรง โดยสร้างครั้งละ 1 สมาชิก
นอกจากนี้ยังสามารถนาไปใช้ในการเพิ่มสมาชิกให้กับอาร์เรย์ที่มีอยู่แล้วก็ได้
รูปแบบ
array array_name [Key] = value;
เมื่อ array_name หมายถึง ชื่อตัวแปรอาร์เรย์
Key
หมายถึง อินเด็กซ์ของตัวแปรอาร์เรย์ (จะกาหนดหรือไม่ก็ได้)
value
หมายถึง ค่าของข้อมูลที่จะกาหนดให้ตัวแปรอาร์เรย์
ตัวอย่างที่ 7.6 การสร้างโดยใช้เครื่องหมายวงเล็บก้ามปู [ ]
<?php
$country [1] = "Thailand";
$country [A] = "Japan";
print_r ($country);
// ผลลัพธ์ คือ Array ( [1] => Thailand [A] => Japan )
?>

การสร้างอาร์เรย์โดยนาค่ามาจากเท็กซ์ไฟล์
การสร้ างอาร์ เรย์โดยน าค่ามาจากเท็กซ์ไฟล์เป็นวิธีการโหลดข้อมูล จากเท็กซ์ไฟล์มาเก็บไว้ใน
อาร์เรย์ ซึ่งข้อมูลแต่ละบรรทัดในเท็กซ์ไฟล์ ก็คือ ค่าข้อมูลของสมาชิกแต่ละตัวในอาร์เรย์
ตัวอย่าง ข้อมูลในเท็กซ์ไฟล์ กาหนดชื่อ text.txt
Suratthani
Chumphon
Ranong

ตัวอย่างที่ 7.7 การนาค่ามาจากเท็กซ์ไฟล์
<?php
$txt_file = file ("text.txt");
// ติดต่อกับเท็กซ์ไฟล์
$count_txt = count ($txt_file); // นับจานวนตัวอักษรเก็บในตัวแปร $count_txt
if ($count_txt == 0) {
// จานวนตัวอักษรเท่ากับ 0 แสดงว่าไม่มีข้อมูล
echo "ไม่มีข้อมูลในไฟล์ <br />";
} else {
// จานวนตัวอักษรมากกว่า 0
for ($loop = 0; $loop < $count_txt; $loop++) { // ลูปวนรอบเท่ากับจานวน
echo $txt_file [$loop] . "<br />";
// ตัวอักษรในเท็กซ์ไฟล์
}
}
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 95
ผลลัพธ์
Suratthani
Chumphon
Ranong
การเข้าถึงข้อมูลภายในอาร์เรย์
การเข้าถึงข้อมูลภายในอาร์เรย์มี 4 วิธี คือ 1) การอ้างตาแหน่งของอินเด็กซ์ 2) การใช้คาสั่งทาซ้า
3) การใช้ฟังก์ชัน each ( ) และ 4) การใช้ฟังก์ชัน list ( ) มีรายละเอียด ดังนี้
การอ้างตาแหน่งของอินเด็กซ์
ตัวแปรทั่วไปจะใช้เฉพาะชื่อของตัวแปรเพื่ออ้างถึงค่าในตัวแปร แต่สาหรับอาร์เรย์จะใช้ชื่อของ
อาร์เรย์และอินเด็กซ์ในการอ้างถึงค่าในอาร์เรย์ที่ต้องการนาไปประมวลผล ค่าของอินเด็กซ์ที่ต้องการอ้าง
ถึงจะกาหนดในเครื่องหมายวงเล็บก้ามปู ซึ่งอยู่ หลังชื่อของอาร์เรย์ ตัวอย่างเช่น $province[0] เป็นการ
อ้างถึงสมาชิกของอาร์เรย์อินเด็กซ์ลาดับที่ 0 เป็นต้น นอกจากนี้ค่าที่อยู่ในอาร์เรย์ยังสามารถเปลี่ยนแปลง
ได้โดยใช้รูปแบบกาหนดค่า (เครื่องหมาย =) เหมือนการกาหนดค่าให้กับตัวแปรทั่วไป
การใช้คาสั่งทาซา
การเข้าถึงข้อมูลในอาร์เรย์ด้วยการใช้คาสั่งทาซ้า เช่น for, while และ foreach เป็นต้น จะใช้ได้
เฉพาะอาร์เรย์ที่มีอินเด็กซ์ที่เป็นตัวเลขที่มีการเรียงลาดับแล้ว ตัวอย่างการใช้งาน ดังนี้
ตัวอย่างที่ 7.8 การใช้คาสั่งทาซ้าเพื่อควบคุมการแสดงผลของอาร์เรย์
<?php
$province = array ("สุราษฎร์ธานี", "กระบี่", "ชุมพร", "นครศรีธรรมราช");
$count_province = count ($province);
for ($loop = 0; $loop < $count_province; $loop++) {
printf ("ลาดับที่ %d คือ %s <br />", $loop+1, $province [$loop]);
}
?>
การใช้ฟังก์ชัน each ( )
ฟังก์ชัน each ( ) เป็นฟังก์ชันที่ใช้อ่านค่าอาร์เรย์ โดยจะส่งคืนค่าเป็น คีย์ (key) และค่าข้อมูล
(value) หากอ่านค่าในอาร์เรย์จนหมดแล้ว จะส่งคืนค่าเป็น false
รูปแบบ
array each ( array &$array )
เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
96 บทที่ 7 อาร์เรย์ (Arrays)
ตัวอย่างที่ 7.9 การใช้ฟังก์ชัน each ( ) สาหรับอ่านค่าอาร์เรย์
<?php
$province = array ("สุราษฎร์ธานี", "กระบี่", "ชุมพร", "นครศรีธรรมราช");
while ($element = each ($province))
printf ("คีย์ที่ %d มีค่า %s <br />",$element ["key"], $element ["value"]);
?>
การใช้ฟังก์ชัน list ( )
ฟังก์ชัน list ( ) ทางานในลักษณะเดียวกับฟังก์ชัน each ( ) แตกต่างกันที่ฟังก์ชัน list ( ) ไม่มีการ
ส่งคืนค่า และจะแยกอาร์เรย์ออกจากกัน แล้วเก็บค่าของสมาชิกแต่ละตัวไว้ในตัวแปรที่กาหนดไว้
รูปแบบ
array array_values ( array $input )
เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า
ตัวอย่างที่ 7.10 การใช้ฟังก์ชัน list ( ) สาหรับอ่านค่าอาร์เรย์
<?php
$data_set = array ("A1001", "ปริญญา", "น้อยดอนไพร", "ผู้จัดการ", "25000");
list ($code, $name, $lastname, $occupation, $salary) = $data_set;
echo "รหัสพนักงาน: $code ";
echo "ชื่อ-สกุล: $name $lastname ";
echo "อาชีพ: $occupation เงินเดือน: $salary";
?>
การใช้ฟังก์ชัน array_keys ( )
ฟังก์ชัน array_keys ( ) ใช้สาหรับอ่านค่าคีย์ทั้งหมดของตัวแปรอาร์เรย์ โดยผลลัพธ์จะเป็น
อาร์เรย์ของคีย์ที่อานได้ทั้งหมด
่
รูปแบบ
array array_keys ( array $input [, mixed $search_value = NULL [, bool $strict = false ]] )
เมื่อ $input
หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่าคีย์
$search_value หมายถึง อ่านค่าคีย์เฉพาะค่าของอาร์เรย์ที่ตรงกับค่าที่กาหนด (จะ
กาหนดหรือไม่ก็ได้)
$strict
หมายถึง ใ ช้ ส า ห รั บ ก า ร เ ป รี ย บ เ ที ย บ ( ===) ใ ช้ ร่ ว ม กั บ
$search_value เพื่ อ เปรี ย บเที ย บค่ า ของอาร์ เ รย์ กั บ ค่ า ที่
เปรียบเทียบ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 97
ตัวอย่างที่ 7.11 การใช้ฟังก์ชัน array_keys ( ) สาหรับอ่านค่าคีย์ทั้งหมดของตัวแปรอาร์เรย์
<?php
$array = array (0 => 100, "color" => "red");
print_r (array_keys ($array)); // ผลลัพธ์ คือ Array ( [0] => 0 [1] => color )
$array = array ("blue", "red", "green", "blue", "blue");
print_r (array_keys ($array, "blue"));// ผลลัพธ์ คือ Array ( [0] => 0 [1] => 3 [2] => 4 )
$array = array ("color" => array ("blue", "red", "green"), "size" => array ("small",
"medium", "large"));
print_r (array_keys ($array)); // ผลลัพธ์ คือ Array ( [0] => color [1] => size )
?>
การใช้ฟังก์ชัน array_values ( )
ฟังก์ชัน array_values ( ) ใช้สาหรับอ่านค่าของสมาชิกในอาร์เรย์ โดยผลลัพธ์จะเป็นอาร์เรย์ของ
ค่าที่อ่านได้ทั้งหมด
รูปแบบ
array array_values ( array $input )
เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า
ตัวอย่างที่ 7.12 การใช้ฟังก์ชัน array_values ( ) สาหรับอ่านค่าของสมาชิกในอาร์เรย์
<?php
$array = array ("size" => "XL", "color" => "gold");
print_r (array_values ($array)); // ผลลัพธ์ คือ Array ( [0] => XL [1] => gold )
?>
การใช้ฟังก์ชัน array_unique ( )
ฟังก์ชัน array_unique ( ) ใช้สาหรับอ่านค่าของสมาชิกในอาร์เรย์ โดยเลือกเฉพาะข้อมูลที่ไม่ซ้า
กัน (ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สาหรับภาษาอังกฤษถือว่าไม่เหมือนกัน)
รูปแบบ
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
เมื่อ $array
หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า
$sort_flags
หมายถึง พารามิเตอร์ที่ใช้ร่วมกับการจัดเรียงตามชนิด โดยจะต้อง
กาหนดร่วมกับค่า SORT_STRING ของการจัดเรียง (จะ
กาหนดหรือไม่ก็ได้) ดังนี้
SORT_REGULAR หมายถึง จัดเรียงโดยการเปรียบเทียบตามปกติ (ไม่มีการเปลี่ยนชนิด)
SORT_NUMERIC หมายถึง จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่เป็นชนิดตัวเลข
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
98 บทที่ 7 อาร์เรย์ (Arrays)
SORT_STRING

หมายถึง จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่เป็นชนิดตัวอักษร
หรือข้อความ
ตัวอย่างที่ 7.13 การใช้ฟังก์ชัน array_unique ( ) สาหรับอ่านค่าของสมาชิกในอาร์เรย์ที่ไม่ซ้ากัน
<?php
$input = array ("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique ($input);
print_r ($result);
// ผลลัพธ์ คือ Array ( [a] => green [0] => red [1] => blue )
?>
ตัวอย่างที่ 7.14 การใช้ฟังก์ชัน array_unique ( ) กรณีศึกษาแบบที่ 2
<?php
$input = array (4, "4", "3", 4, 3, "3");
$result = array_unique ($input);
var_dump ($result); // ผลลัพธ์ คือ array(2) { [0]=> int(4) [2]=> string(1) "3" }
?>
ฟังก์ชันอื่นๆ ที่เกี่ยวกับอาร์เรย์
สาหรับใน PHP จะมีฟังก์ชันที่เกี่ยวข้องกับอาร์เรย์อยู่มากมาย แต่บางฟังก์ชันก็อาจไม่ค่อยได้ใช้
งานบ่อยนัก หรืออาจใช้ฟังก์ชันอื่นทดแทนกันได้ ดังนั้นในส่วนนี้จะเน้นเฉพาะฟังก์ชันหลักๆ ที่สาคัญที่
มักจะใช้บ่อยครั้ง ทั้งนี้เพื่อความสะดวกต่อการทาความเข้าใจ จะแยกอธิบายตามความเกี่ยวข้องของ
ฟังก์ชันต่างๆ ดังนี้
ฟังก์ชันในการเพิ่มสมาชิกในอาร์เรย์
ฟังก์ชัน array_push ( )
ใช้สาหรับเพิ่มสมาชิกลงในอาร์เรย์ โดยข้อมูลที่จะเพิ่มลงไปจะมีจานวนเท่าไหร่ก็ได้ หรือจะนามา
จากอาร์เรย์อื่นก็ได้
รูปแบบ
int array_push ( array &$array , mixed $var [, mixed $... ] )
เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่จะนาข้อมูลเพิ่ม
$var หมายถึง ข้อมูลที่ต้องการเพิ่ม
ตัวอย่างที่ 7.15 ฟังก์ชัน array_push ( ) สาหรับเพิ่มสมาชิกลงในอาร์เรย์
<?php
$stack = array ("orange", "banana");
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 99
array_push ($stack, "apple", "raspberry");
print_r ($stack);
?>
ผลลัพธ์
Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )
ฟังก์ชัน array_pad ( )
ใช้สาหรับขยายสมาชิกเพิ่มให้กับอาร์เรย์
รูปแบบ
array array_pad ( array $input , int $pad_size , mixed $pad_value )
เมื่อ $input
หมายถึง ตัวแปรอาร์เรย์ที่จะขยายเพิ่มสมาชิก
$pad_size หมายถึง ขนาดใหม่ของตัวแปรอาร์เรย์
$pad_value หมายถึง ข้อมูลที่จะเพิ่ม
ตัวอย่างที่ 7.16 ฟังก์ชัน array_pad ( ) สาหรับขยายสมาชิกเพิ่มให้กับอาร์เรย์
<?php
$input = array(12, 10, 9);
$result = array_pad ($input, 5, 0); // ผลลัพธ์ คือ array(12, 10, 9, 0, 0)
$result = array_pad ($input, -7, -1);// ผลลัพธ์ คือ array(-1, -1, -1, -1, 12, 10, 9)
$result = array_pad ($input, 2, "noop");
?>
// ผลลัพธ์ คือ ไม่ขยาย (not padded) เนื่องจาก $pad_size มีขนาดน้อยกว่า $input
ฟังก์ชัน array_unshift ( )
ใช้สาหรับเพิ่มสมาชิกตาแหน่งแรกของอาร์เรย์
รูปแบบ
int array_unshift ( array &$array , mixed $var [, mixed $... ] )
เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่จะเพิ่มสมาชิก
$var หมายถึง ข้อมูลหรือค่าที่จะเพิ่ม
ตัวอย่างที่ 7.17 ฟังก์ชัน array_unshift ( ) สาหรับเพิ่มสมาชิกตาแหน่งแรกของอาร์เรย์
<?php
$queue = array ("orange", "banana");
array_unshift ($queue, "apple", "raspberry");
print_r ($queue);
?> // ผลลัพธ์ คือ Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
100 บทที่ 7 อาร์เรย์ (Arrays)
ฟังก์ชัน array_slice ( )
ใช้สาหรับลบ แทนที่ และเพิ่ม สมาชิกในตาแหน่งใดๆ ของอาร์เรย์
รูปแบบ
array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed
$replacement ]] )
เมื่อ $input
หมายถึง ตัวแปรอาร์เรย์ที่จะนาข้อมูลเพิ่ม
$length
หมายถึง จานวนสมาชิกที่จะลบ (จะกาหนดหรือไม่ก็ได้) แบ่งเป็น 3 กรณี
คือ 1) หากกาหนด จะลบสมาชิกตามจานวนที่กาหนด โดยเริ่ม
จากตาแหน่ง offset ที่ระบุ 2) หากไม่กาหนด จะลบสมาชิก
ตั้งแต่ตาแหน่ง offset ที่ระบุจนถึงสมาชิกสุดท้ายของอาร์เรย์ 3)
หากกาหนดเป็น 0 คือ ไม่ต้องการลบสมาชิกออก แต่ต้องการ
เพิ่ มสมาชิ กลงในต าแหน่ ง offset ที่ ระบุ แต่ ต้ องก าหนด
replacement ด้วย
$replacement หมายถึง ข้อมูลที่จะเพิ่มลงไปยังตาแหน่ง offset ที่ระบุ (จะกาหนด
หรือไม่ก็ได้)
ตัวอย่างที่ 7.18 ฟังก์ชัน array_slice ( ) สาหรับลบ แทนที่ และเพิ่ม สมาชิกในตาแหน่งใดๆ ของอาร์เรย์
<?php
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 2);
print_r ($input);
// ผลลัพธ์ คือ Array ( [0] => red [1] => green )
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 1, -1);
print_r ($input);
// ผลลัพธ์ คือ Array ( [0] => red [1] => yellow )
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 1, count($input), "orange");
// ผลลัพธ์ คือ Array ( [0] => red [1] => orange )
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, -1, 1, array("black", "maroon"));
// ผลลัพธ์ คือ Array ( [0] => red [1] => green [2] => blue [3] => black [4] => maroon )
$input = array ("red", "green", "blue", "yellow");
array_splice ($input, 3, 0, "purple");
// ผลลัพธ์ คือ Array ( [0] => red [1] => green [2] => blue [3] => purple [4] => yellow )
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 101
ฟังก์ชันในการลบสมาชิกในอาร์เรย์
ฟังก์ชัน unset ( )
ใช้สาหรับลบหรือยกเลิกตัวแปรทั่วไปหรือตัวแปรชนิดอาร์เรย์
รูปแบบ
void unset ( mixed $var [, mixed $... ] )
เมื่อ $var หมายถึง ตัวแปรอาร์เรย์ที่ต้องการลบ
ตัวอย่างที่ 7.19 ฟังก์ชัน unset ( ) สาหรับลบหรือยกเลิกตัวแปรทั่วไปหรือตัวแปรชนิดอาร์เรย์
<?php
$stack = array ("orange", "banana");
unset ($stack[1]);
print_r ($stack);
?> // ผลลัพธ์ Array ( [0] => orange )
ฟังก์ชัน array_pop ( )
ใช้สาหรับลบสมาชิกตาแหน่งสุดท้ายของตัวแปรชนิดอาร์เรย์ หากตัวแปรเป็นค่าว่างหรือตัวแปรที่
ส่งเข้าไปไม่ใช่ตัวแปรชนิดอาร์เรย์ ฟังก์ชันจะส่งค่ากลับเป็น Null หากสามารถลบได้จะส่งค่ากลับเป็นค่า
ลาดับสุดท้ายของสมาชิกอาร์เรย์
รูปแบบ
mixed array_pop ( array &$array )
เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการลบ
ตัวอย่างที่ 7.20 ฟังก์ชัน array_pop ( ) สาหรับลบสมาชิกตาแหน่งสุดท้ายของตัวแปรอาร์เรย์
<?php
$stack= array ("orange", "banana", "apple");
$fruit = array_pop ($stack);
print_r ($stack);
// ผลลัพธ์ Array ( [0] => orange [1] => banana )
?>
ฟังก์ชัน array_shift ( )
ใช้สาหรับลบสมาชิกตาแหน่งแรกของตัวแปรชนิดอาร์เรย์ และย้ายล าดับของสมาชิกใหม่โดย
เริ่มต้นจาก 0
รูปแบบ
mixed array_shift ( array &$array )
เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการลบ
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
102 บทที่ 7 อาร์เรย์ (Arrays)
ตัวอย่างที่ 7.21 ฟังก์ชัน array_shift ( ) สาหรับลบสมาชิกตาแหน่งแรกของตัวแปรชนิดอาร์เรย์
<?php
$stack = array ("orange", "banana", "apple");
$fruit = array_shift ($stack);
print_r ($stack);
?> // ผลลัพธ์ Array ( [0] => banana [1] => apple )
ฟังก์ชันในการนับจานวนสมาชิกในอาร์เรย์
ฟังก์ชัน count ( )
ใช้สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์
รูปแบบ
int count ( mixed $var [, int $mode = COUNT_NORMAL ] )
เมื่อ $var หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนับจานวนสมาชิก
$mode หมายถึง พารามิเตอร์เสริมสาหรับนับอาร์เรย์แบบ COUNT_RECURSIVE
หมายเหตุ
ฟังก์ชัน count ( ) จะมีการส่งค่ากลับเป็นเลขจานวนสมาชิกทั้งหมดในอาร์เรย์ ในกรณีที่ตัว
แปรที่ส่งเข้ามาไม่ใช่ตัวแปรชนิดอาร์เรย์ฟังก์ชัน count ( ) จะส่งค่ากลับเป็น 1 และในกรณีที่
ตัวแปรอาร์เรย์เป็นค่าว่างจะส่งค่ากลับเป็น 0
ตัวอย่างที่ 7.22 การใช้ฟังก์ชัน count ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์
<?php
$a [0] = 1;
$a [1] = 3;
$a [2] = 5;
$result = count($a); // ผลลัพธ์ คือ $result = 3
$b [0] = 7;
$b [5] = 9;
$b [10] = 11;
$result = count($b); // ผลลัพธ์ คือ $result = 3
$result = count(null); // ผลลัพธ์ คือ $result = 0
$result = count(false);
// ผลลัพธ์ คือ $result = 1
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 103
ตัวอย่างที่ 7.23 การใช้ฟังก์ชัน count ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ เพื่อนับ
อาร์เรย์แบบ COUNT_RECURSIVE
<?php
$food = array ('fruits' => array ('orange', 'banana', 'apple'),
'veggie' => array ('carrot', 'collard', 'pea'));
// แสดงตัวอย่างการนับสมาชิกของอาร์เรย์แบบ COUNT_RECURSIVE
echo count($food, COUNT_RECURSIVE); // ผลลัพธ์ คือ 8
// แสดงตัวอย่างการนับสมาชิกของอาร์เรย์แบบปกติ
echo count($food); // ผลลัพธ์ คือ 2
?>
ฟังก์ชัน sizeof ( )
ใช้สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ เช่นเดียวกับฟังก์ชัน count ( )
รูปแบบ
int sizeof ( mixed $var )
เมื่อ $var หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนับจานวนสมาชิก
ตัวอย่างที่ 7.24 การใช้ฟังก์ชัน sizeof ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์
<?php
$result [0] = 1;
$result [1] = 3;
$result [2] = 5;
for ($a = 0, $b = sizeof ($result); $a < $b; $a++) printf ("%d ", $result [$a]);
?> // ผลลัพธ์ คือ 1 3 5
ฟังก์ชัน array_count_values ( )
ใช้สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ แต่ผลลัพธ์ที่ได้จะเป็นอาร์เรย์ที่แสดงว่า สมาชิกแต่
ละตัวมีอยู่จานวนเท่าไหร่ โดยค่าคีย์จะเป็นสมาชิกแต่ละตัว และค่าจะเป็นจานวนที่นับได้
รูปแบบ
array array_count_values ( array $input )
เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนับ
ตัวอย่างที่ 7.25 การใช้ฟังก์ชัน array_count_values ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์
<?php
$array = array (1, "hello", 1, "world", "hello");
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
104 บทที่ 7 อาร์เรย์ (Arrays)

?>

print_r (array_count_values ($array));
// ผลลัพธ์ คือ Array ( [1] => 2 [hello] => 2 [world] => 1 )

ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มอินเด็กซ์เป็นตัวเลข
ี
ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวเลข จะมี 2 ฟังก์ชันให้เลือกใช้งาน
คือ ฟังก์ชัน sort ( ) และ rsort ( ) มีรายละเอียด ดังนี้
ฟังก์ชัน sort ( )
ใช้สาหรับเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวเลข โดยเรียงลาดับข้อมูลจากน้อยไม่หา
มาก มีรูปแบบ ดังนี้
รูปแบบ
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
เมื่อ $array
หมายถึง ตัวแปรอาร์เรย์ที่ต้องการจัดเรียงและมีอินเด็กซ์เป็นตัวเลข
$sort_flags หมายถึง พารามิเตอร์เสริมสาหรับการจัดเรียงเพิ่มเติม โดยการระบุสตริง
สาหรับการจัดเรียง มีรายละเอียด (จะกาหนดหรือไม่ก็ได้) ดังนี้
 SORT_REGULAR จัดเรียงโดยการเปรียบเทียบระหว่างค่า
ตามปกติ (ไม่ต้องเปลี่ยนค่าคีย์)
 SORT_NUMERIC จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่
เป็นชนิดตัวเลข
 SORT_STRING จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่เป็น
ตัวอักษรหรือข้อความ
 SORT_NATURAL จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่
เป็นตัวอักษรหรือข้อความเหมือนกับฟังก์ชัน natsort ( ) ซึ่งใช้
สาหรับการจัดเรียงข้อมูล ในอาร์เรย์ที่มีค่าอินเด็กซ์เป็นชนิด
ตัวอักษรหรือข้อความ
 SORT_FLAG_CASE รูปแบบการจัดเรียงที่สามารถใช้ร่วมกับ
การจัดเรียงแบบ SORT_STRING หรือ SORT_NATURAL
โดยการเปรียบเทียบในลักษณะตัวอักษรพิมพ์เล็กพิมพ์ใหญ่ถือ
ว่าเป็นตัวเดียวกัน (case-insensitively)
ตัวอย่างที่ 7.26 การใช้ฟังก์ชัน sort ( )
<?php
$fruits = array ("lemon", "banana", "apple");
sort ($fruits);
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 105
foreach ($fruits as $key => $val) echo "fruits[" . $key . "] = " . $val . "<br />";
?>
ผลลัพธ์
fruits [0] = apple
fruits [1] = banana
fruits [2] = lemon
ตัวอย่างที่ 7.27 การใช้ฟังก์ชัน sort ( ) โดยกาหนดการจัดเรียงแบบ case-insensitive natural ordering
<?php
$fruits = array ( "Orange1", "orange2", "Orange3", "orange20" );
@sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);
foreach ($fruits as $key => $val) echo "fruits[" . $key . "] = " . $val . "<br />";
?>
ผลลัพธ์
fruits [0] = Orange1
fruits [1] = orange2
fruits [2] = Orange3
fruits [3] = orange20
ตัวอย่างที่ 7.28 การใช้ฟังก์ชัน rsort ( ) ซึ่งมีรูปแบบการใช้งานเช่นเดียวกับฟังก์ชัน sort ( )
<?php
$fruits = array ("lemon", "orange", "banana", "apple");
rsort ($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $valn";
}
?>
ผลลัพธ์
0 = orange 1 = lemon 2 = banana 3 = apple
ฟังก์ชันที่ใช้ในการเรียงลาดับข้อมูลในอาร์เรย์ที่มอินเด็กซ์เป็นตัวอักษรหรือข้อความ
ี
ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษรหรือข้อความ มี 4 ฟังก์ชันให้
เลือกใช้งาน ประกอบด้วย 1) asort ( ) 2) arsort ( ) 3) ksort ( ) และ 4) krsort ( ) มีรายละเอียด ดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
106 บทที่ 7 อาร์เรย์ (Arrays)
ฟังก์ชัน asort ( )
ฟังก์ชัน asort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์ โดยพิจารณาจากค่าหรือ
ข้อมูลในตัวแปรอาร์เรย์ จากน้อยไปหามาก มีรูปแบบการใช้งาน ดังนี้
รูปแบบ
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
เมื่อ $array
หมายถึง ตัวแปรอาร์เรย์ที่ต้องการจัดเรียง
$sort_flags หมายถึง พารามิเตอร์เสริมส าหรับการจัดเรียงเพิ่มเติม โดยการระบุส ตริง
สาหรับการจัดเรียง จะมีรูปแบบเหมือนฟังก์ชันจัดเรียงก่อนหน้า
ตัวอย่างที่ 7.29 การใช้ฟังก์ชัน asort ( ) สาหรับจัดเรียงลาข้อมูลในอาร์เรย์
<?php
$fruits = array("d" => "lemon", "b" => "banana", "c" => "apple");
asort ($fruits);
foreach ($fruits as $key => $val) echo "$key = $val <br />";
?>
ผลลัพธ์
c = apple
b = banana
d = lemon
ฟังก์ชัน arsort ( )
ฟังก์ชัน arsort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์โดยพิจารณาจากค่าหรือ
ข้อมูลในตัวแปรอาร์เรย์ จากมากไปหาน้อย มีรูปแบบการใช้งานเหมือนกับฟังก์ชัน asort ( )
ตัวอย่างที่ 7.30 การใช้ฟังก์ชัน arsort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์
<?php
$fruits = array("d" => "lemon", "b" => "banana", "c" => "apple");
arsort ($fruits);
foreach ($fruits as $key => $val) echo "$key = $val <br />";
?>
ผลลัพธ์
d = lemon
b = banana
c = apple
ฟังก์ชัน ksort ( )
ฟังก์ชัน ksort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์โดยพิจารณาจากอินเด็กซ์
หรือคีย์ของตัวแปรอาร์เรย์ จากน้อยไปหามาก มีรูปแบบการใช้งาน ดังนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 107
รูปแบบ
bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
เมื่อ $array
หมายถึง ตัวแปรอาร์เรย์ที่ต้องการจัดเรียง
$sort_flags หมายถึง พารามิเตอร์เสริมสาหรับการจัดเรียงเพิ่มเติม โดยการระบุสตริง
สาหรับการจัดเรียง จะมีรูปแบบเหมือนฟังก์ชันจัดเรียงก่อนหน้า
ตัวอย่างที่ 7.31 การใช้ฟังก์ชัน ksort ( ) สาหรับจัดเรียงลาข้อมูลในอาร์เรย์
<?php
$fruits = array ("d" => "lemon", "b" => "banana", "c" => "apple");
ksort ($fruits);
foreach ($fruits as $key => $val) echo "$key = $val <br />";
?>
ผลลัพธ์

b = banana
c = apple
d = lemon
ฟังก์ชัน krsort ( )
ฟังก์ชัน krsort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์โดยพิจารณาจากอินเด็กซ์
หรือคีย์ของตัวแปรอาร์เรย์ จากมากไปหาน้อย มีรูปแบบเหมือนกับฟังก์ชัน ksort ( ) มีตัวอย่างดังนี้
ตัวอย่างที่ 7.32 การใช้ฟังก์ชัน krsort ( ) สาหรับจัดเรียงลาข้อมูลในอาร์เรย์
<?php
$fruits = array ("d" => "lemon", "b" => "banana", "c" => "apple");
krsort ($fruits);
foreach ($fruits as $key => $val) echo "$key = $val <br />";
?>
ผลลัพธ์
d = lemon
c = apple
b = banana
โดยสรุป ทั้ง 4 ฟังก์ชัน เป็นฟังก์ชันที่ใช้สาหรับ เรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็น
ตัวอักษรหรือข้อความ สามารถจาแนกได้เป็นกลุ่มใหญ่ ดังนี้
ตารางที่ 7.2 แสดงผลสรุปฟังก์ชันที่ใช้สาหรับเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษร
เรียงจาก
ฟังก์ชัน
ลาดับการเรียง
ข้อมูล (Value)
asort ( )
น้อยไปหามาก
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
108 บทที่ 7 อาร์เรย์ (Arrays)
ตารางที่ 7.2 (ต่อ)
เรียงจาก
อินเด็กซ์หรือคีย์ (Index or Key)

ฟังก์ชัน
arsort ( )
ksort ( )
krsort ( )

ลาดับการเรียง
มากไปหาน้อย
น้อยไปหามาก
มากไปหาน้อย

ฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ (Pointer) ในอาร์เรย์
เมื่อใส่ข้อมูลในอาร์เรย์ ตาแหน่งของพอยเตอร์จะชี้อยู่ที่ตาแหน่งของสมาชิกปัจจุบัน หากต้องการ
กาหนดให้พอยเตอร์ชี้ไปที่ตาแหน่งต่างๆ ของอาร์เรย์ สามารถทาได้โดยใช้ฟังก์ชันต่างๆ ดังตารางที่ 7.3
ตารางที่ 7.3 สรุปฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ในอาร์เรย์
ฟังก์ชัน
การทางาน
each ( ) ฟังก์ ชัน ส าหรั บ เลื่ อนพอยเตอร์ ไปข้า งหน้ าครั้ง ละ 1 ตาแหน่ ง หากเรียกใช้ ฟัง ก์ชั น
each ( ) จะคืนค่าสมาชิกก่อนหน้าที่จะเลื่อนพอยเตอร์
current ( ) ฟังก์ชันที่ใช้สาหรับคืนค่าสมาชิกปัจจุบันที่พอยเตอร์กาลังชี้อยู่ หากก่อนหน้ายังไม่มีการ
เรียกใช้ฟังก์ชันสาหรับการเลื่อนพอยเตอร์ หลั งจากอาร์เรย์ถูกสร้างตาแหน่งพอยเตอร์
ปัจจุบัน คือ ตาแหน่งแรกของสมาชิกอาร์เรย์
reset ( ) ฟังก์ชันที่ใช้สาหรับเลื่อนพอยเตอร์ไปยังสมาชิกตาแหน่งแรกของอาร์เรย์
end ( ) ฟังก์ชันที่ใช้สาหรับเลื่อนพอยเตอร์ไปยังสมาชิกตาแหน่งสุดท้ายของอาร์เรย์
next ( ) ฟังก์ ชัน ส าหรั บ เลื่ อนพอยเตอร์ ไปข้า งหน้ าครั้ง ละ 1 ตาแหน่ ง หากเรียกใช้ ฟัง ก์ชั น
next ( ) จะเลื่อนพอยเตอร์ก่อนแล้วจึงคืนค่าสมาชิกก่อนหน้า
prev ( ) ฟังก์ชันสาหรับเลื่อนพอยเตอร์ตรงข้ามกับฟังก์ชัน next ( ) คือ ถอยกลับครั้งละ 1 ตาแหน่ง
หากเรียกใช้ฟังก์ชัน prev ( ) จะเลื่อนพอยเตอร์ก่อนแล้วจึงคืนค่าสมาชิกก่อนหน้า
ฟังก์ชันสาหรับการรวมอาร์เรย์
ฟังก์ชันสาหรับการรวมอาร์เรย์ มีให้เลือกใช้งาน ดังนี้
ฟังก์ชัน array_merge ( ) และ array_merge_recursive ( )
ทั้ง 2 ฟังก์ชันนี้ใช้สาหรับรวมอาร์เรย์เหมือนกัน หลักการรวมอาร์เรย์ คือ จะนาค่าข้อมูลมาเก็บใน
ลักษณะของสมาชิกต่อกันไปเรื่อยๆ ในรูปแบบของอาร์เรย์หลายมิติ แล้วสร้างอินเด็กซ์ชนิดตัวเลขให้ใหม่เรียง
ตามลาดับ ข้อแตกต่างระหว่าง 2 ฟังก์ชันนี้ คือ
ฟังก์ชัน array_merge ( ) หากอาร์เรย์ที่นามารวมมีอินเด็กซ์หรือคีย์ที่เป็นสตริง ซ้ากัน จะนาค่า
ข้อมูลของอาร์เรย์ชุดหลังทับค่าข้อมูลของอาร์เรย์ชุดแรก

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 109
ฟังก์ชัน array_merge_recursive ( ) จะนาข้อมูลของอาร์เรย์ชุดหลังมาต่อท้า ยกับค่าข้อมูลตัว
แรก ไม่ว่าค่าข้อมูลหรืออินเด็กซ์หรือคีย์จะซ้ากันหรือไม่
รูปแบบ ฟังก์ชัน array_merge ( )
array array_merge ( array $array1 [, array $... ] )

รูปแบบ ฟังก์ชัน array_merge_recursive ( )
array array_merge_recursive ( array $array1 [, array $... ] )

เมื่อ $array1 หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนามารวมลาดับที่ 1
$...
หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนามารวมลาดับต่อๆ ไป
ตัวอย่างที่ 7.33 การใช้ฟังก์ชัน array_merge ( ) สาหรับรวมอาร์เรย์
<?php
$array1 = array ("color" => "red", 2, 4);
$array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge ($array1, $array2);
print_r ($result);
?>

ผลลัพธ์ (หากค่าอินเด็กซ์หรือคีย์ซ้ากันข้อมูลของอาร์เรย์ตัวแรกจะถูกทับด้วยข้อมูลอาร์เรย์ตัวหลัง)
Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )

ตัวอย่างที่ 7.34 การใช้ฟังก์ชัน array_merge_recursive ( )
<?php
$array1 = array ("color" => "red", 2, 4);
$array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge_recursive ($array1, $array2);
print_r ($result);
?>
ผลลัพธ์ (หากอินเด็กซ์หรือคีย์ซ้ากันจะสร้างเป็นอาร์เรย์ซ้อนอาร์เรย์ หรือเรียกว่าอาร์เรย์หลายมิติ)
Array ( [color] => Array ( [0] => red [1] => green ) [0] => 2 [1] => 4 [2] => a [3] => b
[shape] => trapezoid [4] => 4 )
ฟังก์ชัน array_combine ( )
เป็นฟังก์ชันที่ใช้สาหรับรวมอาร์เรย์ 2 อาร์เรย์เข้าด้วยกัน โดยใช้ค่าข้อมูลของอาร์เรย์ตัวแรกเป็น
อินเด็กซ์หรือคีย์ ส่วนค่าข้อมูลของอาร์เรย์ตัวที่สองเป็นค่าข้อมูลของอาร์เรย์ใหม่ที่เกิดจากการรวมกันของ
อาร์เรย์ทั้งสอง ถ้าจานวนของสมาชิกของทั้งสองอาร์เรย์ไม่เท่ากัน หรืออาร์เรย์ตัวใดตัวหนึ่งเป็นค่าว่าง
ฟังก์ชันจะส่งคืนค่าเป็นเท็จ (False)
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
110 บทที่ 7 อาร์เรย์ (Arrays)
รูปแบบ
array array_combine ( array $keys , array $values )
เมื่อ $key คือ ตัวแปรอาร์เรย์ที่ใช้สาหรับเป็นอินเด็กซ์หรือคีย์
$values คือ ตัวแปรอาร์เรย์ที่ใช้สาหรับกาหนดค่า
ตัวอย่างที่ 7.35 การใช้ฟังก์ชัน array_combine ( ) สาหรับรวมอาร์เรย์ 2 อาร์เรย์เข้าด้วยกัน
<?php

?>

$a = array ('green', 'red', 'yellow');
$b = array ('avocado', 'apple', 'banana');
$c = array_combine ($a, $b);
print_r ($c);
// ผลลัพธ์ คือ Array ( [green] => avocado [red] => apple [yellow] => banana )

ฟังก์ชันสาหรับการสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูลในอาร์เรย์
ฟังก์ชัน array_flip ( )
เป็นฟังก์ชันที่ใช้สาหรับสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูล
รูปแบบ
array array_flip ( array $trans )
เมื่อ $trans หมายถึง ตัวแปรอาร์เรย์ที่ต้องการสลับค่า
ตัวอย่างที่ 7.36 การใช้ฟังก์ชัน array_flip ( ) สาหรับสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูล
<?php
$trans = array ("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip ($trans);
print_r ($trans);
// ผลลัพธ์ Array ( [1] => b [2] => c )
?>
ฟังก์ชันสาหรับการค้นหาอินเด็กซ์หรือคีย์และค่าข้อมูลในอาร์เรย์
ฟังก์ชัน array_key_exists ( )
เป็นฟังก์ชันที่ใช้สาหรับหาอินเด็กซ์หรือคีย์ที่ระบุมีอยู่ในอาร์เรย์หรือไม่ หากพบอินเด็กซ์หรือคีย์ที่
ค้นหา ฟังก์ชันจะคืนค่าเป็นจริง (True) หากไม่พบจะคืนค่าเป็นเท็จ (False)
รูปแบบ
bool array_key_exists ( mixed $key , array $search )
เมื่อ $key หมายถึง อินเด็กซ์หรือคีย์ที่ค้นหา
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 111
$search หมายถึง อาร์เรย์ที่นามาใช้ค้นหา
ตัวอย่างที่ 7.37 การใช้ฟังก์ชัน array_key_exists ( ) สาหรับหาอินเด็กซ์หรือคีย์ที่ระบุมีอยู่ใน
อาร์เรย์หรือไม่
<?php

?>

$search_array = array ('first' => 1, 'second' => 4);
if (array_key_exists ('first', $search_array)) echo "พบข้อมูลในอาร์เรย์";
else echo "ไม่พบข้อมูลในอาร์เรย์";
// ผลลัพธ์ คือ แสดงข้อมูล พบข้อมูลในอาร์เรย์

ฟังก์ชัน in_array ( ) และ array_search ( )
เป็นฟังก์ชันที่ใช้สาหรับหาค่าข้อมูลที่ระบุมีอยู่ในอาร์เรย์หรือไม่ หากฟังก์ชัน in_array ( ) และ
array_search ( ) พบค่าข้อมูลที่ค้นหา ฟังก์ชันจะคืนค่าเป็นจริง (True) หากไม่พบจะคืนค่าเป็นเท็จ
(False) ซึ่งทั้ง 2 ฟังก์ชันมีรูปแบบเหมือนกัน ดังนี้
รูปแบบ
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

เมื่อ $needle หมายถึง ค่าข้อมูลที่ต้องการค้นหา
$haystack หมายถึง ตัวแปรอาร์เรย์ที่นามาใช้ในการค้นหา
$strict
หมายถึง ใช้ส าหรับ การเปรีย บเที ยบ (===) ใช้ ร่ว มกับ $needle เพื่ อ
เปรียบเทียบค่าของอาร์เรย์กับค่าที่ค้นหา
ตัวอย่างที่ 7.38 การใช้ฟังก์ชัน in_array ( ) และ array_search ( ) สาหรับหาค่าข้อมูลที่ระบุมี
อยู่ในอาร์เรย์หรือไม่
<?php

?>

$os = array ("Mac", "NT", "Irix", "Linux");
if (in_array ("Irix", $os)) echo "Got Irix";
if (in_array ("mac", $os)) echo "Got mac";
// ผลลัพธ์ คือ Got Irix

จากตัวอย่างในเงื่อนไขที่ 2 จะพบว่าเงื่อนไขไม่ถูกต้องเพราะในฟังก์ชัน in_array ( ) จะมีการ
ตรวจสอบอักษรพิมพ์เล็กและพิมพ์ใหญ่ (case-sensitive)
ฟังก์ชันสาหรับการหาค่าข้อมูลสมาชิกที่เหมือนและแตกต่างกันในอาร์เรย์
ฟังก์ชัน array_intersect ( )
เป็นฟังก์ชันสาหรับหาค่าข้อมูลสมาชิกในอาร์เรย์ ตั้งแต่ 2 อาร์เรย์ขึ้นไป มาทาการ Intersection
หาสมาชิกที่มีซ้ากัน เพื่อกาหนดค่าข้อมูลให้กับอาร์เรย์ใหม่
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
112 บทที่ 7 อาร์เรย์ (Arrays)
รูปแบบ
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
เมื่อ $array1 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 1
$array2 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 2
$ ...
หมายถึง ตัวแปรอาร์เรย์ลาดับต่อๆ ไป
ตัวอย่างที่ 7.39 การใช้ฟังก์ชัน array_intersect ( )
<?php
$array1 = array ("a" => "green", "red", "blue");
$array2 = array ("b" => "green", "yellow", "red");
$result = array_intersect ($array1, $array2);
print_r ($result);
?>
// ผลลัพธ์ คือ Array ( [a] => green [0] => red )
ฟังก์ชัน array_diff ( )
เป็นฟังก์ชันสาหรับหาค่าข้อมูลสมาชิกในอาร์เรย์ ตั้งแต่ 2 อาร์เรย์ขึ้นไป มาทาการ differential
หาสมาชิกที่มีเฉพาะในอาร์เรย์ตวแรก แต่ไม่มีในอาร์เรย์อื่นๆ เพื่อกาหนดค่าข้อมูลให้กับอาร์เรย์ใหม่
ั
รูปแบบ
array array_diff ( array $array1 , array $array2 [, array $... ] )
เมื่อ $array1 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 1
$array2 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 2
$ ...
หมายถึง ตัวแปรอาร์เรย์ลาดับต่อๆ ไป
ตัวอย่างที่ 7.40 การใช้ฟังก์ชัน array_diff ( )
<?php
$array1 = array ("a" => "green", "red", "blue", "red");
$array2 = array ("b" => "green", "yellow", "red");
$result = array_diff ($array1, $array2);
print_r ($result);
?>
// ผลลัพธ์ คือ Array ( [1] => blue )
การใช้ข้อมูลจากอาร์เรย์ $_SERVER
ตัวแปร $_SERVER เป็นตัวแปรแบบอาร์เรย์ที่ PHP สร้างไว้ล่วงหน้าเพื่อใช้อ้างถึงข้อมูลเกี่ยวกับการ
เชื่ อมต่ อระหว่ า ง ไคลเอนต์ กั บ เว็ บ เซิ ร์ ฟเวอร์ เช่ น ชื่ อโฮสต์ พอร์ ต เมธอดในการส่ งข้ อมู ล เป็ นต้ น

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 113
ซึ่งตัวแปร $_SERVER นี้ในบทต่อๆ ไป จะได้นาๆ ใช้กันอยู่ตลอด การอ้างถึงค่าข้อมูลในตัวแปร $_SERVER จะ
ใช้อินเด็กซ์หรือคียเหมือนกับอาร์เรย์อื่นๆ ก่อนหน้า อินเด็กซ์หรือคีย์ที่สาคัญ มีรายละเอียด ดังตารางที่ 7.4
์
ตารางที่ 7.4 แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_SERVER
ค่าอินเด็กซ์หรือคีย์
ค่าข้อมูลและความหมาย
$_SERVER ['HTTP_USER_AGENT'] อ่านข้อมูลเกี่ยวกับ บราวเซอร์ ที่ผู้ใช้คนกาลังใช้งานอยู่ ตัวอย่าง
ลักษณะของค่าที่อ่านได้ เช่น Mozilla/5.0 (Windows NT
5.1;th:1.9.1.3) Gecko/20090824 Firefox/3.5.3
$_SERVER ['HTTP_HOST']
ชื่อของโฮสต์ที่รันเว็บเซิร์ฟเวอร์อยู่ในขณะนั้น เช่น localhost
$_SERVER ['SERVER_NAME']
ชื่อของเว็บเซิร์ฟเวอร์ เช่น localhost
$_SERVER ['SERVER_ADDR']
หมายเลข IP Address ของเครื่องหมายเซิร์ฟเวอร์ หากรันบน
เว็บเซิร์ฟเวอร์บนเครื่องที่กาลังใช้งานในขณะนั้นIP Addressจะ
เป็น 127.0.01
$_SERVER ['REMOTE_ADDR']
หมายเลข IP Address ของเครื่องผู้ใช้ ซึ่งหากอยู่บนเครื่องเดียวกับ
เว็บเซิร์ฟเวอร์ก็จะมี IP Address เป็นค่าเดียวกัน เช่น 127.0.0.1
$_SERVER ['SCRIPT_FILENAME'] ชื่อไฟล์สคริปต์ หรือเว็บเพจที่กาลังเปิดอยู่ในขณะนั้นเอง ซึ่งชื่อ
นี้ ร ว ม ไ ป ถึ ง ไ ด เ ร็ ก ท อ รี ข อ ง ไ ฟ ล์ เ ช่ น
C:/AppServ/www/parinya/test1.php
$_SERVER ['REQUEST_METHOD'] เมธอดที่ใช้ในการส่งข้อมูลของฟอร์มจากผู้ใช้มายังเว็บเซิร์ฟเวอร์
เช่น GET, POST
$_SERVER ['QUERY_STRING']
Query String ของข้อมูลที่ถูกส่งด้วยเมธอด GET จากฟอร์ม
มายังเว็บเซิร์ฟเวอร์ โดยจะแนบมากับ URL เช่น
num1=123&num2=456
$_SERVER ['REQUEST_URI']
ชื่อของเพจที่ request มายังเว็บเซิร์ฟเวอร์ โดยไม่รวมชื่อ ของ
โฮสต์ เช่ น URI
ของเพจที่ request
เข้ า มาเป็ น
http://localhost/parinya/test1.php ค่ า URI จะเป็ น
parinya/test1.php
$_SERVER ['PHP_SELF']
URI
ของเว็ บ เพจ ที่ เ ปิ ด ใช้ ง านในขณะนั้ น เช่ น
parinya/test1.php
$_SERVER ['HTTP_REFERER']
เพจที่ Request เข้ามายังเพจปัจจุบัน เช่น คลิกลิงค์ที่เพจ
page1.php เพื่อเปิดไปยัง page2.php ถ้าอ่านค่า $_SERVER
['HTTP_REFERER'] ที่เพจ page2.php จะได้เป็น page1.php
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
114 บทที่ 7 อาร์เรย์ (Arrays)
การใช้ข้อมูลจากอาร์เรย์ $_FILE
ตัวแปร $_FILE เป็นตัวแปรชนิดอาร์เรย์แบบ Key/Value ที่ PHP สร้างไว้ล่วงหน้าเพื่อใช้อ้างถึงข้อมูล
เกี่ยวกับการอัพโหลดไฟล์ (File Upload) ระหว่าง ไคลเอนต์กับเว็บเซิร์ฟเวอร์ มีรายละเอียด ดังตารางที่ 7.5
ตารางที่ 7.5 แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_FILE
ค่าอินเด็กซ์หรือคีย์
ค่าข้อมูลและความหมาย
$_FILE ['file'] ['type']
ชนิดของไฟล์ที่อัพโหลด เช่น .JPG, .PNG, .doc เป็นต้น
$_FILE ['file'] ['size']
ขนาดของไฟล์
$_FILE ['file'] ['tmp_name']
ตาแหน่งไดเรกทอรีที่เก็บไฟล์ไว้ชั่วคราว
$_FILE ['file'] ['name']
ชื่อไฟล์ที่อัพโหลด
$_FILE ['file'] ['error']
ข้อมูลที่ผิดพลาดจากการอัพโหลด โดยมีการคืนค่า ดังนี้
0 คือ แสดงว่าไม่มีข้อผิดพลาด
1 คือ ไฟล์ที่อัพโหลดมีขนาดเกินกว่าค่าที่กาหนดใน php.ini
(ปกติ 2 MB)
2 คือ ไฟล์มีขนาดเกินค่าที่กาหนดใน MAX_FILE_SIZE ของฟอร์ม
3 คือ ข้อผิดพลาดในการสื่อสารทาให้อัพโหลดไฟล์ไม่ได้
4 คือ ไม่มีไฟล์
หลังจากนั้นจะใช้ฟังก์ชัน move_uploaded_file ( ) ใช้ในการเคลื่อนย้ายไฟล์จากไดเรกทอรี
ชั่วคราวไปยังตาแหน่งใหม่
โดยจะใช้ $_FILE['file'] ['tmp_name'] ในการอ้างถึงไดเร็กทอรีชั่วคราว ส่วนตาแหน่งไดเร็กทอรี
ปลายทาง ถ้าต้องการใช้ชื่อไฟล์เดิมจะใช้ $_FILE ['file'] ['name'] ถ้าต้องการย้ายไปไดเร็กทอรีอื่น ก็
สามารถระบุได้ ตัวอย่างที่นิยมใช้งานเพื่อไม่ให้เกิดปัญหาชื่อไฟล์ซ้ากัน คือ ใช้วันที่และเวลาสาหรับกาหนด
ชื่อไฟล์ มีตัวอย่าง ดังนี้
ตัวอย่างที่ 7.41 การกาหนดชื่อไฟล์โดยใช้วันที่และเวลา
$fileName = mktime (date('H'), date('i'), date('s'),date('m'), date('d'), date('Y')).'.jpg';
การกาหนดชื่อไฟล์นั้นใช้สาหรับจัดเก็บลงในฐานข้อมูล หรืออ้างอิงอื่นๆ และใช้ฟังก์ชัน
move_uploaded_file ($_FILE ['file'] ['tmp_name'] , '../image/news/'.$fileName);
หรือใช้ฟังก์ชัน
copy ($_FILE ['file'] ['tmp_name'] , '../image/news/'.$fileName);
เพื่อเริ่มต้นอัพโหลดไฟล์

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 7 อาร์เรย์ (Arrays) 115
ตัวอย่างที่ 7.42 การประยุกต์พัฒนาเว็บเพจสาหรับอัพโหลดไฟล์
<?php /* กาหนดชื่อไฟล์เป็น upload.php*/ ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload File by Mr.Parinya</title>
</head>
<body>
<form name="form1" method="post" action="chk.php" enctype="multipart/form-data">
<input type="file" name="fileUpload">
<input name="btnSubmit" type="submit" value="Submit">
</form>
</body>
</html>

ภาพที่ 7.1 แสดงหน้าเว็บเพจสาหรับเริ่มต้น Upload ไฟล์
<?php /*กาหนดชื่อไฟล์ chk.php สาหรับเริ่มต้น Upload ไฟล์ไปเก็บไว้ยังเซิร์ฟเวอร์*/ ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Upload File by Mr.Parinya</title>
</head>
<body>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
116 บทที่ 7 อาร์เรย์ (Arrays)
<?php
if(move_uploaded_file($_FILES["filUpload"]["tmp_name"],"pictures/".$_FILES["filUpl
oad"]["name"]))
// กาหนดให้ pictures/ คือ โฟลเดอร์ปลายทางสาหรับเก็บไฟล์
{
echo "Upload ไฟล์เสร็จเรียบร้อยแล้วครับ";
}
?>
</body>
</html>
หมายเหตุ
ฟังก์ชันอัพโหลดไฟล์ move_uploaded_file ( ) และ copy ( ) มีรูปแบบการใช้งาน
เหมือนกัน ดังนี้ ชื่อฟังก์ชัน (ตาแหน่งไฟล์ต้นทาง, ตาแหน่งไฟล์ปลายทาง)
เมื่อ ตาแหน่งไฟล์ต้นทาง คือ $_FILE ['file'] ['tmp_name']
ตาแหน่งไฟล์ปลายทาง คือ ตาแหน่งใหม่ที่จะนาไฟล์ไปเก็บไว้ที่ใดของเครื่องเซิร์ฟเวอร์
ข้อระวังสาหรับการใช้งานทั้งตาแหน่งไฟล์ต้นทางและปลายทาง จาเป็นต้องมีที่ตั้งของ
ไฟล์และชื่อไฟล์เสมอ สาหรับที่ตั้งของไฟล์จะเรียกว่า พาธไดเร็กทอรี (Path Directory)

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8
สตริง ตัวเลข และเวลา
ในบทนี้จะกล่าวถึงการใช้ฟังก์ชันของ PHP เพื่อจัดการข้อมูลใน 3 รูปแบบคือ สตริง ตัวเลข และ
วันเวลา แม้ว่าในบทที่ผ่านๆ มานั้น ได้ใช้งานข้อมูลแบบสตริง และตัวเลขกันมาบ้างแล้ว แต่ก็เป็นเพียงการ
ใช้ใ นแบบพื้น ฐานทั่ว ไป ซึ่งข้ อมู ล ทั้ง สองอย่ างนี้ ยังมี รายละเอีย ดปลี กย่ อยที่ จาเป็นต้ องรู้อีก มากมาย
ส่วนข้อมูลประเภทวันเวลานั้น ก็จัดว่าเป็นข้อมูลพิเศษอีกอย่างหนึ่ง ที่ไม่สามารถใช้โอเปอเรเตอร์ไหนไป
จัดการโดยตรงได้ต้องอาศัยฟังก์ชันเฉพาะทางด้านนี้ของ PHP เท่านั้น
ฟังก์ชันเกี่ยวกับสตริง
สตริ ง (String) คื อ ชุ ดของตั ว อั กษร หรื อเป็ นการน าอั ก ษรแต่ ละตั ว มาวางเรียงต่ อกัน เพื่ อสื่ อ
ความหมาย เช่นคาว่า “String” เกิดจากอักขระ S + t + r + i + n + g เป็นต้น ทั้งนี้อักขระที่วางเรียงต่อ
กันเป็นสตริง ก็จะมีลาดับของมันเองเหมือนกันกับอาร์เรย์ของสตริงหรือคานั่นเอง ดังนั้นการอ้างถึงอักษร
ย่อยๆ แต่ละตัวภายในสตริง จึงใช้เลขลาดับเป็นตัวกาหนดเหมือนกับการอ้างอิงสมาชิกของอาร์เรย์ เช่น
ตัวอย่างที่ 8.1 แสดงตัวอย่างสตริงหรือชุดของตัวอักษร
$str = “Thailand” ;
echo $str[0] . $str[1] .$str[2] .$str[3] ;
//Thai
สาหรับฟังก์ชันที่เกี่ยวกับสตริงมีเป็นจานวนมาก แต่ที่จะใช้งานกันบ่อยๆ มีอยู่ไม่มากนัก ดังนั้นใน
ที่นี้จะกล่าวถึงเฉพาะฟังก์ชันที่น่าสนใจ และเพื่อให้ศึกษาได้ง่ายขึ้น จะแบ่งออกเป็นกลุ่มหัวข้อดังต่อไปนี้
ฟังก์ชันเกี่ยวกับรหัสแอสกี (ASCII)
ฟังก์ชันเกี่ยวกับรหัสแอสกี (ASCII) ที่น่าสนใจมีดังนี้
ตารางที่ 8.1 ฟังก์ชันเกี่ยวกับรหัสแอสกี
ord (อักขระ)
หาค่ารหัส ASCII ของอักขระที่ระบุ
chr (ค่าแอสกี)
แปลงจากค่ารหัสแอสกีที่ระบุไปเป็นอักขระที่มีค่าแอสกีตรงกัน
ตัวอย่างที่ 8.2 การใช้ฟังก์ชัน ord ( ) และ chr ( )
<body>
<table border = “1” width = “100%” cellspacing = “0”>
<caption>ตารางค่า ASCII ของ A – Z</caption>
<?php
118 บทที่ 8 สตริง ตัวเลข และเวลา
$a = ord ('A') ;
$z = ord ('Z') ;
for ($i = $a; $i <= $z; $i += 5) {
echo "<tr align = center>";
for ($j = $i ; $j < ($i+5) ; $j++) {
$ch = chr ($j) ;
echo "<td bgcolor = #ddd> $ch </td><td> $j </td>" ;
}
echo "</tr>" ;
// ผลลัพธ์ ดังนี้
}
?>
</table>
</body>

ฟังก์ชันเกี่ยวกับการหาขนาดของสตริง
ฟังก์ชันเกี่ยวกับการหาขนาดสตริงที่น่าสนใจมีดังนี้
ฟังก์ชัน strlen ( )
เป็นฟังก์ชันที่ใช้สาหรับหาความยาวของสตริง หรือนับจานวนสตริง โดยที่ช่องว่าง 1 ช่อง ก็จะ
นับเป็นอักขระ 1 ตัวด้วย และในกรณีภาษาไทยและวรรณยุกต์ต่างๆ ก็จะนับเป็นอักขระ 1 ตัวเช่นกัน
รูปแบบ
int strlen ( string $string )

เมื่อ $string หมายถึง ข้อความหรือสตริงที่ต้องการนับจานวน
ตัวอย่างที่ 8.3 การใช้ฟังก์ชัน strlen ( ) สาหรับหาความยาวของสตริง
<?php
$str = 'abcdef';
echo strlen ($str);
$str = ' ab cd ';
echo strlen ($str);

// ผลลัพธ์ คือ 6
// ผลลัพธ์ คือ 7

?>

ฟังก์ชัน str_word_count ( )
นับจานวนคา โดยใช้อักขระที่ไม่ใช่ตัวอักษร a-z เป็นตัวคัดแยก (รวมถึงตัวเลขด้วย) ยกเว้น
เครื่องหมาย ' และ -

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 119
รูปแบบ
mixed str_word_count ( string $string [, int $format = 0 [, string $charlist ]] )

เมื่อ $string หมายถึง ข้อความหรือสตริงที่ต้องการนับจานวน
$format หมายถึง กาหนดรูปแบบการนับ มีรายละเอียดดังนี้
0 คือ นับจานวนคา (โดยปริยายจะเป็น 0)
1 คือ ส่ ง ค่ า กลั บ เป็ น อาร์ เ รย์ ข องค า (ค่ า อิ น เด็ ก ซ์ ห รื อ คี ย์ เ รี ย ง
ตามลาดับ)
2 คือ ส่งค่ากลับเป็นอาร์เรย์ของคา (ค่าอินเด็กซ์หรือคีย์มาจาก
การนับจานวนตัวอักษรต่อกันไปเรื่อยๆ)
$charlist หมายถึง กาหนดอักขระพิเศษอื่นๆ ที่ต้องการนับเป็นคา
ตัวอย่างที่ 8.4 การใช้ฟังก์ชัน str_word_count ( ) สาหรับนับจานวนคา
<?php
$str = "Hello fri3nd, today! is good";
print_r (str_word_count ($str, 1));
// Array ( [0] => Hello [1] => fri [2] => nd [3] => today [4] => is [5] => good )
print_r (str_word_count ($str, 2));
// Array ( [0] => Hello [6] => fri [10] => nd [14] => today [21] => is [24] => good )
echo str_word_count ($str);
// ผลลัพธ์ คือ 6
?>

ฟังก์ชันในการเปลี่ยนรูปแบบของตัวพิมพ์
ฟังก์ชันในการเปลี่ยนรูปแบบของตัวพิมพ์มีดังนี้
ฟังก์ชัน strtolower ( )
เป็นฟังก์ชันที่ใช้สาหรับเปลี่ยนข้อความหรือสตริงที่ระบุให้เป็นตัวพิมพ์เล็กทุกตัว
รูปแบบ
string strtolower ( string $str )

เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ
ตัวอย่างที่ 8.5 ฟังก์ชัน strtolower ( ) สาหรับเปลี่ยนข้อความที่ระบุให้เป็นตัวพิมพ์เล็กทุกตัว
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str;
// ผลลัพธ์ คือ mary had a little lamb and she loved it so
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
120 บทที่ 8 สตริง ตัวเลข และเวลา
ฟังก์ชัน strtoupper ( )
เป็นฟังก์ชันที่ใช้สาหรับเปลี่ยนข้อความหรือสตริงที่ระบุให้เป็นตัวพิมพ์ใหญ่ทุกตัว
รูปแบบ
string strtoupper ( string $str )
เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ
ตัวอย่างที่ 8.6 ฟังก์ชัน strtoupper ( ) ใช้สาหรับเปลี่ยนข้อความที่ระบุให้เป็นตัวพิมพ์ใหญ่ทุกตัว
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtoupper ($str);
echo $str;
// ผลลัพธ์ คือ MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
?>
ฟังก์ชัน ucfirst ( )
เป็นฟังก์ชันที่ใช้สาหรับเปลี่ยนข้อความหรือสตริงที่ระบุ เฉพาะตัวอักษรตัวแรกเท่านั้นเป็นตัวพิมพ์
ใหญ่ ส่วนข้อความหรือสตริงที่เหลือเหมือนเดิม
รูปแบบ
string ucfirst ( string $str )
เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ
ตัวอย่างที่ 8.7 การใช้ฟังก์ชัน ucfirst ( )
<?php
$foo = 'welcome to thailand';
echo ucfirst ($foo);
// ผลลัพธ์ คือ Welcome to thailand
$bar = 'WELCOME TO THAILAND';
echo ucfirst ($bar);
// ผลลัพธ์ เหมือนเดิม คือ WELCOME TO THAILAND
echo ucfirst (strtolower ($bar)); // ผลลัพธ์ คือ Welcome to thailand
?>
ฟังก์ชัน ucwords ( )
เป็นฟังก์ชันที่ใช้สาหรับ เปลี่ยนข้อความหรือสตริงที่ระบุ เฉพาะตัวอักษรตัวแรกของทุกคาเป็น
ตัวพิมพ์ใหญ่ ส่วนข้อความหรือสตริงที่เหลือเหมือนเดิม
รูปแบบ
string ucwords ( string $str )
เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 121
ตัวอย่างที่ 8.8 การใช้ฟังก์ชัน ucwords ( )
<?php
$foo = 'welcome to thailand';
echo ucwords ($foo);
//ผลลัพธ์ คือ Welcome To Thailand
$bar = 'WELCOME TO THAILAND';
echo ucwords ($bar); // ผลลัพธ์ เหมือนเดิม คือ WELCOME TO THAILAND
echo ucwords (strtolower ($bar)); // ผลลัพธ์ คือ Welcome To Thailand
?>
ฟังก์ชันเกี่ยวกับการแยก และรวมข้อความหรือสตริง
ฟังก์ชันเกี่ยวกับการแยก และรวมข้อความหรือสตริงที่น่าสนใจมีดังนี้
ฟังก์ชัน explode ( )
คัดแยกข้อความหรือสตริงออกเป็นข้อความหรือสตริงย่อยๆ ด้วยสัญลักษณ์ที่กาหนดโดยเฉพาะ
ผลลัพธ์ที่ได้จะอยู่ในรูปแบบของอาร์เรย์ของสตริงย่อยที่ถูกแยกออกมา
รูปแบบ
array explode ( string $delimiter , string $string )
เมื่อ $delimiter หมายถึง สัญลักษณ์ที่ใช้แยก
$string
หมายถึง ข้อความหรือสตริงที่ต้องการแยก
ตัวอย่างที่ 8.9 การใช้ฟังก์ชัน explode ( ) คัดแยกข้อความออกเป็นข้อความย่อยๆ
<?php
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode (" ", $pizza);
echo $pieces [0];
// ผลลัพธ์ คือ piece1
echo $pieces [1];
// ผลลัพธ์ คือ piece2
// Example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list ($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode (":", $data);
echo $user;
// ผลลัพธ์ คือ foo
echo $pass;
// ผลลัพธ์ คือ *
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
122 บทที่ 8 สตริง ตัวเลข และเวลา
ฟังก์ชัน implode ( ) และ join ( )
ฟังก์ชัน implode ( ) และ join ( ) จะทางานตรงข้ามกับฟังก์ชัน explode ( ) คือ เป็นฟังก์ชัน
รวมอาร์เรย์ มารวมเข้าด้วยกัน เป็นข้อความหรือสตริง โดยคั่นแต่ละข้อความหรือสตริงด้วยสัญลักษณ์ที่
ระบุ รูปแบบทั้ง 2 ฟังก์ชันเหมือนกัน ดังนั้นจะแนะนาเฉพาะฟังก์ชัน implode ( )
รูปแบบ
string implode ( string $glue , array $pieces )
เมื่อ $glue หมายถึง สัญลักษณ์ระบุเพิ่มเข้าไประหว่างข้อความหรือสตริง (หากไม่ต้องการคั่น
ด้วยสัญลักษณ์ก็สามารถระบุเป็นค่าว่างหรือเว้นวรรคได้ แต่หากจะแยก
ใหม่ในภายหลังจะทาได้ยุ่งยากหากไม่มีสัญลักษณ์คั่นในแต่ละสตริง)
$pieces หมายถึง อาร์เรย์ที่ต้องการนามารวมกันเป็นข้อความหรือสตริง
ตัวอย่างที่ 8.10 การใช้ฟังก์ชัน implode ( ) และ join ( )
<?php
$array = array ('lastname', 'email', 'phone');
$comma_separated = implode (", ", $array);
echo $comma_separated;
// ผลลัพธ์ คือ lastname, email, phone
?>
ฟังก์ชันเกี่ยวกับข้อความหรือสตริงย่อย
ฟังก์ชันเกี่ยวกับข้อความหรือสตริงย่อยที่น่าสนใจมีดังนี้
ฟังก์ชัน strstr ( )
เป็นฟังก์ชันที่ใช้สาหรับเลือกเอาเฉพาะข้อความหรือสตริงตั้งแต่ข้อความหรือสตริงที่พบเป็นต้นไป
รูปแบบ
string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
เมื่อ $haystack หมายถึง ข้อความหรือสตริงต้นฉบับ
$needle หมายถึง ระบุข้อความหรือสตริงที่ต้องการ
$before_needle หมายถึง โดยปริยายจะมีค่าเป็น false คือ เอาเฉพาะข้อความหรือ
สตริงที่ระบุตั้งแต่คาที่พบ $needle เป็นต้นไป แต่ถ้าระบุ
เป็น true จะเอาเฉพาะข้อความหรือสตริง ทั้งหมดใน
ด้านซ้ายก่อนข้อความหรือสตริงที่ระบุ
ตัวอย่างที่ 8.11 การใช้ฟังก์ชัน strstr ( )
<?php
$email = 'name@example.com';
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 123
$domain = strstr ($email, '@');
echo $domain;
// ผลลัพธ์ คือ @example.com
$user = strstr ($email, '@', true);
echo $user;
// ผลลัพธ์ คือ name
?>
ฟังก์ชัน substr ( )
เป็นฟังก์ชันที่ใช้สาหรับคัดเอาข้อความหรือสตริงย่อย โดยกาหนดเอาตาแหน่งเริ่มต้น และความ
ยาวที่ต้องการ
รูปแบบ
string substr ( string $string , int $start [, int $length ] )
เมื่อ $string หมายถึง ข้อความหรือสตริงต้นฉบับ
$start หมายถึง ตาแหน่งเริ่มต้น เช่น ข้อความหรือสตริง 'abcdef' ตาแหน่งของ
ตัวอักษรจะเริ่มต้นที่ 0 คือ 'a' ตาแหน่งของตัวอักษรตาแหน่งที่ 2 คือ
'c' และตาแหน่งอื่นๆ ตามลาดับ
$length หมายถึง ความยาว
ตัวอย่างที่ 8.12 การใช้ฟังก์ชัน substr ( )
<?php
$rest = substr ("abcdef", 0, -1);
// ผลลัพธ์ คือ "abcde"
$rest = substr ("abcdef", 2, -1);
// ผลลัพธ์ คือ "cde"
$rest = substr ("abcdef", 4, -4);
// ผลลัพธ์ คือ false ไม่สามารถคัดเอาสตริงได้
$rest = substr ("abcdef", -3, -1);
// ผลลัพธ์ คือ "de"
?>
ฟังก์ชัน substr_count ( )
เป็นฟังก์ชันที่ใช้สาหรับ นับจานวนคาที่มีอยู่ในข้อความหรือสตริง โดยรูปแบบของการค้นหาคาที่
ตรงกัน (case-sensitive)
รูปแบบ
int substr_count (string $haystack , string $needle [, int $offset = 0 [, int $length ]])
เมื่อ $haystack หมายถึง ข้อความหรือสตริงที่ต้องการค้นหาเพื่อนับจานวน
$needle หมายถึง คาที่ใช้สาหรับการค้นหา
$offset หมายถึง ตาแหน่งของตัวอักษรที่จะเริ่มนับ
$length หมายถึง ความยาว

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
124 บทที่ 8 สตริง ตัวเลข และเวลา
ตัวอย่างที่ 8.13 การใช้ฟังก์ชัน substr_count ( )
<?php
$text = 'This is a test';
echo strlen ($text);
// ผลลัพธ์ ของจานวนตัวอักษร คือ 14
echo substr_count ($text, 'is');
// ผลลัพธ์ ของ 'is' คือ 2
echo substr_count ($text, 'is', 3);
// การนับจะเริ่มต้นที่ 'is a test' ผลลัพธ์ คือ 1
// ไม่พบคาที่ต้องการนับเพราะตาแหน่งนับ คือ 's i' ผลลัพธ์ คือ 0
echo substr_count ($text, 'is', 3, 3);
// ไม่สามารถนับได้และแสดงข้อความเตือน เพราะ 5+10 > 14 (ยาวกว่าข้อความ)
echo substr_count($text, 'is', 5, 10);
?>
ฟังก์ชันในการค้นหาข้อความหรือสตริง
ฟังก์ชันเกี่ยวกับการค้นหาข้อความหรือสตริงที่น่าสนใจมีดังนี้
ฟังก์ชัน strpos ( )
เป็ น ฟังก์ชัน ที่ใช้ส าหรับ ค้น หาตาแหน่งของข้อความหรือ สตริงย่อย ซึ่งค่าที่คืนกลั บมาจะเป็น
ตาแหน่งที่มันค้นพบย่อยเป็นครั้งแรก แต่หากไม่พบจะคืนค่า null กลับมา (ตัวพิมพ์เล็กและพิมพ์ใหญ่ถือ
ว่าเป็นคนละตัวกัน: case-sensitive)
รูปแบบ
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
เมื่อ $haystack หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา
$needle หมายถึง คาที่ใช้สาหรับการค้นหา
$offset หมายถึง ตาแหน่งของตัวอักษรที่จะเริ่มค้นหา
ตัวอย่างที่ 8.14 การใช้ฟังก์ชัน strpos ( )
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos ($mystring, $findme);
// ตัวอย่างจะใช้เครื่องหมายเปรียบเทียบ === ไม่นิยมใช้เครื่องหมาย ==
// เพราะตาแหน่งของ 'a' เป็นตาแหน่งแรกของตัวอักษร
if ($pos === false) {
echo "ข้อความที่ค้นหา '$findme' ไม่พบในข้อความ '$mystring'";
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 125
} else {
echo "ข้อความที่ค้นหา '$findme' ตรวจพบในข้อความ '$mystring'";
echo " และตรวจพบในตาแหน่ง $pos";
}
?>
ฟังก์ชัน stripos ( )
เป็ น ฟั งก์ชั น ที่ใ ช้ส าหรั บ ค้น หาตาแหน่ งของสตริงย่ อย เหมื อนฟั งก์ชั น strpos ( ) ซึ่ งค่า ที่
คืนกลับมาจะเป็นตาแหน่งที่มันค้นพบย่อยเป็นครั้งแรก แต่หากไม่พบจะคืนค่า null กลับมา (ตัวพิมพ์เล็ก
และพิมพ์ใหญ่ถือว่าเป็นตัวเดียวกัน : case-insensitive)
รูปแบบ
int stripos ( string $haystack , string $needle [, int $offset = 0 ] )
เมื่อ $haystack หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา
$needle หมายถึง คาที่ใช้สาหรับการค้นหา
$offset หมายถึง ตาแหน่งของตัวอักษรที่จะเริ่มค้นหา
ตัวอย่างที่ 8.15 การใช้ฟังก์ชัน stripos ( )
<?php
$findme = 'a';
$mystring1 = 'xyz';
$mystring2 = 'ABC';
$pos1 = stripos ($mystring1, $findme);
$pos2 = stripos ($mystring2, $findme);
if ($pos1 === false) {
echo "ข้อความที่ค้นหา '$findme' ไม่พบในข้อความ '$mystring1'";
}
if ($pos2 !== false) {
echo "ข้อความที่ค้นหา '$findme' ตรวจพบในข้อความ '$mystring2' ที่ตาแหน่ง $pos2";
}
?>
ฟังก์ชันในการแทนที่ข้อความหรือสตริง
ฟังก์ชันในการแทนที่ข้อความหรือสตริงที่น่าสนใจมีดังนี้
ฟังก์ชัน str_replace ( )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
126 บทที่ 8 สตริง ตัวเลข และเวลา
เป็นฟังก์ชันที่ใช้สาหรับค้นหาและแทนที่ข้อความหรือสตริงย่อยเดิม ด้วยข้อความหรือสตริงย่อย
ใหม่ ที่ต้ องการ หากข้อ ความหรื อ สตริ งย่ อยที่ต้ องการค้น หามีมากกว่า 1 ครั้ ง ก็จ ะถู กแทนที่ ทั้ง หมด
(ตัวพิมพ์เล็กและพิมพ์ใหญ่ถือว่าเป็นตัวเดียวกัน : case-insensitive)
รูปแบบ
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
เมื่อ $search หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา
$replace หมายถึง ข้อความหรือสตริงที่ต้องการแทนที่
$subject หมายถึง ข้อความหรือสตริง หรืออาร์เรย์ ที่ใช้สาหรับการค้นหาและแทนที่
(ไม่ต้องระบุก็ได้)
$count หมายถึง จานวนครั้งที่ต้องการให้แทนที่
ตัวอย่างที่ 8.16 การใช้ฟังก์ชัน str_replace ( )
<?php
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace ($vowels, "", "Hello World of PHP");
// ผลลัพธ์ คือ Hll Wrld f PHP
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array ("fruits", "vegetables", "fiber");
$yummy = array ("pizza", "beer", "ice cream");
$newphrase = str_replace ($healthy, $yummy, $phrase);
//ผลลัพธ์ คือ $healthy You should eat pizza, beer, and ice cream every day
?>
ฟังก์ชัน str_ireplace ( )
เป็นฟังก์ชันที่ใช้สาหรับค้นหาและแทนที่ข้อความหรือสตริงย่อยเดิม ด้วยข้อความหรือสตริงย่อย
ใหม่ ที่ ต้ อ งการ หากข้ อ ความหรื อ สตริ ง ย่ อ ยที่ ต้ อ งการค้ น หามี ม ากกว่ า 1 ครั้ ง เหมื อ นกั บ ฟั ง ก์ ชั น
str_replace ( ) เพียงแต่จะไม่สนใจความแตกต่างของตัวพิมพ์ (ignore case)
รูปแบบ
mixed str_ireplace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
เมื่อ $search หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา
$replace หมายถึง ข้อความหรือสตริงที่ต้องการแทนที่
$subject หมายถึง ข้อความหรือสตริง หรืออาร์เรย์ ที่ใช้สาหรับการค้นหาและแทนที่
(ไม่ต้องระบุก็ได้)
$count หมายถึง จานวนครั้งที่ต้องการให้แทนที่
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 127
ฟังก์ชัน strtr ( )
เป็นฟังก์ชันที่ใช้สาหรับ การแปลตัวอักษรหรือแทนที่ข้อความหรือสตริง และยังสามารถกาหนด
substring ในการแทนที่ได้มากกว่า 1 คา โดยอาร์เรย์ของสตริงที่จะใช้แทนที่จะต้องกาหนดในรูปแบบของ
Key/Value โดย Key คือ สิ่งที่ต้องการค้นหา และ Value คือสิ่งที่จะนาไปแทนที่ ซึ่งรูปแบบของตัวพิมพ์
จะต้องตรงกันจึงจะแทนที่กันได้ มี 2 รูปแบบ ดังนี้
รูปแบบที่ 1
string strtr ( string $str , string $from , string $to )
รูปแบบที่ 2
string strtr ( string $str , array $replace_pairs )
เมื่อ $str
หมายถึง ข้อความหรือสตริงที่ต้องการแปล
$from หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา
$to
หมายถึง ข้อความหรือสตริงที่ต้องการแทนที่
$replace_pairs หมายถึง พารามิ เ ตอร์ ซึ่ งอาจใช้ ร ะบุ ข้ อความหรื อสตริ งที่ ต้ องการ
ค้นหาและแทนที่ในกรณีของอาร์เรย์ array ('from' => 'to', ...) ในใน
รูปแบบของ Key/Value
ตัวอย่างที่ 8.17 การใช้งานฟังก์ชัน strtr ( ) กรณีศึกษาแบบที่ 1
<?php
// ตัวอย่างนี้ ฟังก์ชัน strtr ( ) ไม่ได้แปลเป็นรายตัวอักษร
// แต่ลักษณะการแปลจะใช้วิธีการแปลทั้งข้อความหรือสตริง
$addr = strtr ($addr, "äåö", "aao");
?>
ตัวอย่างที่ 8.18 การใช้งานฟังก์ชัน strtr ( ) กรณีศึกษาแบบที่ 2
<?php
$trans = array ("h" => "-", "hello" => "hi", "hi" => "hello");
echo strtr ("hi all, I said hello", $trans);
// ผลลัพธ์ คือ hello all, I said hi
?>
ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง
ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง มีดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
128 บทที่ 8 สตริง ตัวเลข และเวลา
ตารางที่ 8.2 ฟังก์ชันในการตัดช่องว่าง
ltrim ( )
ตัดช่องว่างที่อยู่ด้านซ้ายของสตริงออกทั้งหมด
rtrim ( )
ตัดช่องว่างที่อยู่ด้านขวาของสตริงออกทั้งหมด
trim ( )
ตัดช่องว่างทั้งด้านซ้าย และด้านขวาของสตริงออกทั้งหมด
รูปแบบ
string ชื่อฟังก์ชันในตารางที่ 8.2 ( string $str )
เมื่อ $str หมายถึง ข้อความหรือสตริงนาเข้า
ตัวอย่างที่ 8.19 การประยุกต์ใช้ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง
<?php
$str = "
PHP
";
echo strlen ($str)."<br />";
// ผลลัพธ์ของการนับ คือ 19
echo strlen (ltrim ($str))."<br />" ; // ผลลัพธ์ของการนับ คือ 11
echo strlen (rtrim ($str))."<br />" ; // ผลลัพธ์ของการนับ คือ 11
echo strlen (trim ($str)) ;
// ผลลัพธ์ของการนับ คือ 3
?>
จากตัว อย่างจะใช้วิธีการทดสอบโดยการนับจานวนเนื่องจากช่องว่าง (whitespace) จะไม่
สามารถมองเห็นได้ แต่จะส่งผลเมื่อใช้สาหรับการค้นหาหรือเปรียบเทียบข้อความหรือสตริง เพราะช่องว่าง
เทียบได้กับอักษร 1 ตัว
ฟังก์ชัน str_pad ( )
เป็นฟังก์ชันที่ใช้สาหรับขยายความยาวของข้อความหรือสตริง หรือเติมอักษรหรือข้อความลงใน
ข้อความหรือสตริงหลัก
รูปแบบ
string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int
$pad_type = STR_PAD_RIGHT ]] )
เมื่อ $input หมายถึง ข้อความหรือสตริงหลัก
$pad_length หมายถึง ความยาวที่ ต้ อ งการขยายเพิ่ ม เติ ม (ถ้ า ค่ า ตั ว เลขน้ อ ยกว่ า หรื อ
เท่ากับจานวนความกว้างของข้อความหรือสตริงใน $input จะไม่
มีการขยาย)
$pad_string หมายถึง ตัวอักษรหรือข้อความอื่นๆ ที่จะเติมลงไป (ไม่ระบุก็ได้)
$pad_type หมายถึง ด้ า นที่ ต้ อ งการขยายเพิ่ ม เติ ม โดยปริ ย ายจะเติ ม ด้ า นขวา มี
รายละเอียด ดังนี้ STR_PAD_RIGHT (ขยายเพิ่มด้านขวา),

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 129
STR_PAD_LEFT (ขยายเพิ่มด้านซ้าย) หรือ STR_PAD_BOTH
(ขยายทั้งซ้ายและขวาเท่าๆ กัน)
ตัวอย่างที่ 8.20 การใช้ฟังก์ชัน str_pad ( )
<?php
$input = "Alien";
echo str_pad ($input, 10);
echo str_pad ($input, 10, "-=", STR_PAD_LEFT);
echo str_pad ($input, 10, "_", STR_PAD_BOTH);
echo str_pad ($input, 6 , "___");

// ผลลัพธ์ คือ "Alien "
// ผลลัพธ์ คือ "-=-=-Alien"
// ผลลัพธ์ คือ "__Alien___"
// ผลลัพธ์ คือ "Alien_"

?>

ฟังก์ชันเกี่ยวกับอักขระพิเศษของ HTML
ฟังก์ชันเกี่ยวกับอักขระพิเศษของ HTML ที่น่าสนใจมีดังนี้
ฟังก์ชัน nl2br ( )
เป็นฟังก์ชันสาหรับเปลี่ยนอักขระพิเศษ เช่น rn, nr, n และ r ซึ่งเป็นคาสั่งที่ใช้สาหรับขึ้นบรรทัด
ใหม่ ให้เปลี่ยนเป็นแท็ก <br> หรือ <br /> ของภาษา HTML ซึ่งมีความจาเป็นในกรณีที่ต้องการให้ผู้ใช้ป้อน
ข้อมูลผ่านทางจอภาพ เช่น ป้อนข้อมูลผ่านกล่องข้อความ (Text Field หรือ Text Box) หลายๆ บรรทัด หรือ
โดยปกติแล้วเมื่อกดปุ่ม Enter เพื่อขึ้นบรรทัดใหม่ ตาแหน่งที่กดปุ่ม Enter ก็จะถูกบันทึกด้วยสัญลักษณ์ n
หรือ new line เพื่อเป็นสัญลักษณ์บ่งชี้ว่าเป็นตาแหน่งที่จะต้องขึ้นบรรทัดใหม่ แม้จะมองไม่เห็นสัญลักษณ์นี้ก็
ตาม แต่ในเอกสาร HTML สัญลักษณ์ n จะไม่ทาให้ขึ้นบรรทัดใหม่ เพราะในเอกสาร HTML จะขึ้นบรรทัดใหม่
ด้วยสัญลักษณ์ <br /> เท่านั้น ดังนั้นฟังก์ชัน nl2br ( ) จึงใช้ในการเปลี่ยนจากสัญลักษณ์ n ให้เป็น <br />
รูปแบบ
string nl2br ( string $string [, bool $is_xhtml = true ] )

เมื่อ $string
หมายถึง สตริงหรือข้อความ
$is_xhtml หมายถึง จะใช้รูปแบบ xhtml หรือไม่ (ค่าโดยปริยายจะกาหนดเป็น true)
ตัวอย่างที่ 8.21 การใช้ฟังก์ชัน nl2br ( )
<?php
echo nl2br ("สวัสดีครับnwww.sru.ac.th");
?>

ผลลัพธ์
สวัสดีครับ
www.sru.ac.th

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
130 บทที่ 8 สตริง ตัวเลข และเวลา
ฟังก์ชัน wordwrap ( )
เป็นฟังก์ชันสาหรับแบ่งสตริงตามจานวนตัวอักษรที่กาหนด โดยจะไม่ตัดคาหรือฉีกข้อความ ใช้
แยกคาจากการเว้นวรรค ซึ่งภายหลังจากการแบ่งสตริงแล้วจะดาเนินการอย่างไรก็แล้วแต่กาหนด
รูปแบบ
string wordwrap (string $str [, int $width = 75 [, string $break = "n" [, bool $cut = false ]]])

เมื่อ

$str หมายถึง
$width หมายถึง
$break หมายถึง
$cut หมายถึง

ตัวแปรที่ใช้เก็บค่าข้อความหรือสตริง
จานวนตัวอักษรที่ต้องการ (โดยปริยาย คือ 75)
คาสั่งที่ต้องการให้ดาเนินการ (โดยปริยาย คือ n เพื่อขึ้นบรรทัดใหม่)
ต้องการตัดคาหรือไม่ หากกาหนดเป็น true จะตัดคาที่มีความยาว
เกินกว่าที่ $width กาหนด
ตัวอย่างที่ 8.22 การใช้ฟังก์ชัน wordwrap ( )
<?php
$text = "The quick brown fox jumped over the lazy dog.";
$newtext = wordwrap ($text, 20, "<br />n");
echo $newtext;
?>

ผลลัพธ์
The quick brown fox
jumped over the lazy
dog.

ฟังก์ชันเกี่ยวกับจานวนและตัวเลข
แม้ว่าใน PHP จะมีฟังก์ชันเกี่ยวกับจานวน และตัวเลขอยู่เป็นจานวนมาก แต่ก็มี ฟังก์ชันที่จะได้
นาไปใช้งานอยู่บ่อยๆ เพียงไม่กี่ฟังก์ชัน ดังนั้นในที่นี้จะกล่าวถึงเฉพาะฟังก์ชันที่น่าสนใจเท่านั้น
ฟังก์ชันเกี่ยวกับการประมาณค่า
ฟังก์ชันที่น่าสนใจเกี่ยวกับการประมาณค่ามีดังนี้
ตารางที่ 8.3 ฟังก์ชันเกี่ยวกับการประมาณค่า
ceil (จานวน)
ใช้ในการปัดเศษขึ้นไปเป็นเลขจานวนเต็มตัวถัดไปถ้าเศษมีค่ามากกว่า 0 เช่น
echo ceil (10.01);
//ผลลัพธ์ คือ 11
echo ceil (10.50);
//ผลลัพธ์ คือ 11

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 131
ตารางที่ 8.3 (ต่อ)
floor (จานวน)

ใช้ในการตัดเศษทิ้ง ไม่ว่าเศษนั้นจะมีค่าเท่าใดก็ตาม เช่น
echo floor (10.01);
//ผลลัพธ์ คือ 10
echo floor (10.50);
//ผลลัพธ์ คือ 10
round (จานวน,
ใช้ในการประมาณค่าเป็นจานวนเต็มที่ใกล้เคียง หากเศษน้อยกว่า 0.5 จะตัด
[, ทศนิยม])
เศษทิ้ง แต่หากเศษมีค่าตั้งแต่ 0.5 จะปัดขึ้นไปเป็นจานวนเต็มถัดไป เช่น
echo round (10.49);
//ผลลัพธ์ คือ 10
echo round (10.50);
//ผลลัพธ์ คือ 11
ส่วนทศนิยมเป็นการกาหนดว่าจะให้มีทศนิยมกี่ตาแหน่ง
intval (จานวน)
เลือกเอาเฉพาะจานวนเต็มของจานวนที่ระบุ หากมีทศนิยมจะตัดทิ้งเช่น
echo intval (10.01);
//ผลลัพธ์ คือ 10
echo intval (10.99);
//ผลลัพธ์ คือ 10
echo intval (-1.23);
//ผลลัพธ์ คือ -1
floatval (จานวน)
เลือกเอาจานวนที่ระบุในแบบ float ซึงฟังก์ชันนี้น่าจะมีประโยชน์ในกรณีที่
่
จานวนนั้นวางอยู่ข้างหน้าสตริง เช่น
echo floatval (“12.34 MB”);
//ผลลัพธ์ คือ 12.34
ฟังก์ชันในการเปรียบเทียบจานวน
ฟังก์ชันที่น่าสนใจเกี่ยวกับการเปรียบเทียบจานวนมีดังนี้
ตารางที่ 8.4 ฟังก์ชันในการเปรียบเทียบจานวน
min (n1, n2, …n) หรือ หาค่าที่น้อยที่สุดของช่วงที่กาหนด
min (อาร์เรย์)
$m1 = min (6, 7, 3, 8, 9);
$m2 = min (array (10, 10.5, 3.4, 5.2, 20 ));
max (n1, n2, …n) หรือ หาค่าทีมากที่สุดของช่วงที่กาหนด
่
max (อาร์เรย์)
$m1 = max (6, 7, 3, 8, 9);
$m2 = max (array (10, 10.5, 3.4, 5.2, 20 ));

//ผลลัพธ์ คือ $m1 = 3
//ผลลัพธ์ คือ $m2 = 3.4
//ผลลัพธ์ คือ $m1 = 9
//ผลลัพธ์ คือ $m2 = 20

ฟังก์ชันการตรวจสอบ และจัดรูปแบบตัวเลข
ฟังก์ชันที่น่าสนใจเกี่ยวกับการตรวจสอบ และจัดรูปแบบตัวเลขมีดังนี้
ตารางที่ 8.5 ฟังก์ชันการตรวจสอบ และจัดรูปแบบตัวเลข
number_format
ใช้ในการจัดรูปแบบตัวเลข เช่น จาก 1234 เป็น 1,234 เป็นต้น เช่น
(จานวน)
echo number_format (1234567);
// 1,234,567

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
132 บทที่ 8 สตริง ตัวเลข และเวลา
ตารางที่ 8.5 (ต่อ)
is_numeric (ข้อมูล)

ตรวจสอบว่าข้อมูลที่ระบุนั้นเป็นตัวเลขหรือไม่ โดยจะคืนค่า true ถ้าเป็นข้อมูล
ตัวเลขที่ไม่มีอักขระอื่นๆปะปนอยู่ด้วย ทั้งนี้ตัวเลขที่เขียนในแบบสตริง เช่น
“123” ก็ถือว่าเป็นตัวเลขด้วยเพราะสามารถนาไปใช้ คานวณได้ เช่น
$a = is_numeric(123);
//ผลลัพธ์ คือ $a = ture
$b = is_numeric(“1.23”);
//ผลลัพธ์ คือ $b = ture
$c = is_numeric(“123abc”); //ผลลัพธ์ คือ $c = false
is_int (ข้อมูล)
ตรวจสอบว่าเป็นจานวนเต็มหรือไม่ หากใช่จะคืนค่า true
is_float (ข้อมูล)
ตรวจสอบว่าเป็นจานวนที่มีทศนิยมหรือไม่ หากใช่จะคืนค่า true
ฟังก์ชันเพิ่มเติมอื่นๆ
ฟังก์ชันที่น่าสนใจเพิ่มเติมอื่นๆ มีดังนี้
ตารางที่ 8.6 ฟังก์ชันเพิ่มเติมอื่นๆ
abs (จานวน)
ใช้สาหรับหาค่า absolute เช่น
$x = abs(10);
//ผลลัพธ์ คือ $x = 10
$y = abs (-10);
//ผลลัพธ์ คือ $y = 10
rand ( ) หรือ
ใช้ในการสร้างเลขสุ่ม โดยค่าที่ได้จะไม่แน่นอนในแต่ละครั้ง ซึ่งโดยปกติแล้ว
rand (ค่าน้อยที่สุด,
เลขสุ่มที่ได้จะเป็นเลขจานวนเต็มที่มีค่าระหว่าง 0-32,768 แต่อย่างไรก็ตาม
ค่ามากที่สุด)
PHP อนุญาตให้สามารถกาหนดช่วงตัวเลขผลลัพธ์ที่ต้องการได้ว่าให้อยู่
ระหว่างค่าใดถึงค่าใด เช่น
$r1 = rand ( );
$r2 = rand (10, 20);
//เลขสุ่มที่ได้จะมีค่าระหว่าง 10-20
pow (เลขฐาน, เลขชี้กาลัง) ใช้ในการค่าเลขยกกาลัง เช่น
echo pow (10, 2);
//100
sqrt (ตัวเลข)
หาค่ารากที่สองของจานวนที่ระบุ แต่ต้องไม่ใช่จานวนที่ติดลบ เช่น
$a = sqrt (100);
//$a =10
ฟังก์ชันเกี่ยวกับวันเวลา (Date and Time)
ข้อมูลเกี่ยวกับวันเวลา นับว่าเป็นข้อมูลที่สาคัญอีกอย่างหนึ่งของการเขียนโปรแกรมแบบสคริปต์
ซึ่งการใช้งานส่วนใหญ่จะทาผ่านฟังก์ชันต่างๆ ที่เกี่ยวข้อง โดยฟังก์ชันที่น่าสนใจเกี่ยวกับวันเวลามีดังนี้
การจัดการกับวันที่และเวลาแบบ Local Mean Time (LMT)
รูปแบบของวันที่และเวลาแบ่งเป็น 2 ประเภท คือ
1. Local Mean Time (LMT) คือ เวลาเฉลี่ยของแต่ละท้องถิ่น
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 133
2. Greenwich Mean Time (GMT) คือ เวลามาตรฐานสากล ซึ่งเป็นเวลาที่เทียบกับเมืองกรีนิช
ประเทศอังกฤษ โดยหน่วยเวลาอย่างเป็นทางการ เรียกว่า UTC
ก่อนที่จะใช้ฟังก์ชันใดเพื่อจัดการวันที่และเวลา ควรใช้ฟังก์ชัน date_default_timezone_set ()
เพื่อกาหนดรูปแบบ Timezone ที่ต้องการใช้งานก่อน ฟังก์ชันของ PHP จะแสดงวันเวลาตาม Timezone
ที่กาหนด รูปแบบการใช้ฟังก์ชันมีดังนี้
รูปแบบ
bool date_default_timezone_set ( string $timezone_identifier )
เมื่อ $timezone_identifier หมายถึง เขตเวลา (Timezone) ส าหรับเวลาในประเทศไทย
ต้องระบุค่าเป็น "Asia/Bangkok" ซึ่งเป็นเวลา LMT
สาหรับเวลา GMT สามารถระบุค่าเป็น GMT หรือ
UTC ก็ได้
ฟังก์ชัน time ( )
เป็นฟังก์ชันที่ใช้แสดงวันที่และเวลาปัจจุบันในรูปแบบของ Unix Timestamp จะแสดงเวลาเป็น
หน่วยวินาที โดยเริ่มนับค่าตั้งแต่วันที่ 1 มกราคม ค.ศ.1970 เวลา 00:00:00 น. ตามเวลา GMT จนถึง
วัน ที่และเวลาปัจ จุ บัน ยกตัว อย่างเช่น วันที่ 26 พฤศจิกายน 2012 เวลา 13:47:00 มีค่า Unix
Timestamp คือ "1353912424"
รูปแบบ
int time ( void )
ตัวอย่างที่ 8.23 การใช้ฟังก์ชัน time ( )
<?php
$nextWeek = time ( ) + (7 * 24 * 60 * 60); // 7 days; 24 hours; 60 mins; 60secs
echo 'Now:
'. date ('Y-m-d') ."<br>";
echo 'Next Week: '. date ('Y-m-d', $nextWeek) ."<br>";
// or using strtotime():
echo 'Next Week: '. date ('Y-m-d', strtotime('+1 week')) ."<br>";
?>
ผลลัพธ์
Now: 2012-11-26
Next Week: 2012-12-03
Next Week: 2012-12-03
ฟังก์ชัน strtotime ( )
เป็นฟังก์ชันที่ใช้สาหรับแปลงสตริงให้เป็นข้อมูลวันเวลาในรูปแบบ timestamp แต่สตริงนั้นต้อง
เขียนในรูปแบบที่สามารถแปลงได้ ถ้าแปลงไม่ได้จะคืนค่า false
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
134 บทที่ 8 สตริง ตัวเลข และเวลา
รูปแบบ
int strtotime ( string $time [, int $now = time() ] )
เมื่อ $time หมายถึง วันเวลาในรูปแบบสตริง
$now หมายถึง วันเวลาปัจจุบันที่เรียกใช้ฟังก์ชัน
ตัวอย่างที่ 8.24 การใช้ฟังก์ชัน strtotime ( )
<?php
echo strtotime ("now"), "<br>";
echo strtotime ("10 September 2012"), "<br>";
echo strtotime ("+1 day"), "<br>";
echo strtotime ("+1 week"), "<br>";
echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "<br>";
echo strtotime ("next Thursday"), "<br>";
echo strtotime ("last Monday"), "<br>";
?>
ฟังก์ชน date ( )
ั
เป็นฟังก์ชันที่ใช้สาหรับแสดงวันที่และเวลา โดยสามารถกาหนดรูปแบบของผลลัพธ์ของฟังก์ชันได้
เช่น ต้องการเฉพาะวันที่ หรือต้องการเฉพาะเวลา รูปแบบคาสั่งมีดังนี้
รูปแบบ
string date ( string $format [, int $timestamp = time() ] )
เมื่อ $format
หมายถึง รูปแบบวันเวลา
$timestamp หมายถึง พารามิเตอร์เสริม ชนิดตัวเลขจานวนเต็ม ของเวลาปัจจุบันบน
ระบบ Unix ถ้าไม่มีการกาหนดค่าใดๆ ค่าโดยปริยาย คือ ค่าของ
ฟังก์ชัน time ( ) หรือวันเวลาปัจจุบัน
อักขระต่างๆ ที่ใช้กาหนดรูปแบบวันเวลาสาหรับฟังก์ชัน date ( ) ผ่านพารามิเตอร์ $format
สามารถแยกออกเป็นกลุ่มได้ดังนี้
 อักขระที่ใช้แทน “วัน” และ “สัปดาห์”
d
ใช้แทนวันที่ของเดือน โดยเป็นเลข 2 หลัก เช่น 01, 02, 31
j
ใช้แทนวันที่ของเดือน แบบไม่มี 0 นาหน้าเลขหลักเดียว เช่น 1, 2, 30
D
ใช้แทนวันในรอบสัปดาห์แบบย่อ เช่น Sun, Mon
l
ตัวแอลพิมพ์เล็กใช้แทนวันในรอบสัปดาห์แบบชื่อเต็ม เช่น Sunday, Monday
S
ตัวS(พิมพ์ใหญ่) เป็นตัวอักษรย่อที่ใช้บ่งบอกลาดับที่ของวันในรอบเดือน เช่น st, nd, rd, th

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 135

w
z
W
F
M
M
n
t
L
Y
y
a
A
g
G
h
H
i
s
O
r

โดยปกติจะใช้ต่อท้ายตัว j หรือ d (ซึ่งใช้แทนวันที่) เช่น jS ลักษณะผลลัพธ์คือ 1st
ใช้แทนลาดับของวันในรอบสัปดาห์จาก 0-6
แทนลาดับของวันในรอบปีจาก 0-365
ลาดับของสัปดาห์ในรอบปี
 อักขระที่ใช้แทน “เดือน”
ชื่อเดือนแบบเต็ม เช่น January, March
ลาดับที่ของเดือนในรอบปีโดยมี 0 นาหน้าเลขหลักเดียว เช่น 01, 02, 12
ชื่อของเดือนแบบย่อ เฉพาะ 3 ตัวแรก เช่น Jan, Feb
ลาดับที่ของเดือนแบบไม่มี 0 นาหน้าเลขหลักเดียว เช่น 1, 2, 12
จานวนวันของเดือนนั้นๆ โดยมีค่าระหว่าง 28- 31
 อักขระที่ใช้แทน “ปี”
ตรวจสอบว่าเป็นปี Leap Year หรือไม่(เดือนกุมภาพันธ์มี 29 วัน) ถ้าใช่จะคืนค่า 1
ถ้าไม่ใช่จะคืนค่า 0
ใช้แทนปี ค.ศ. แบบเลข 4 หลัก เช่น 1975
ใช้แทนปี ค.ศ. แบบเลข 2 หลัก เช่น 75
 อักขระที่ใช้แทน “เวลา”
ใช้แทนค่า Ante Meridiem และ Post Meridiem แบบพิมพ์เล็ก ได้แก่ am หรือ pm
ใช้แทนค่า Ante Meridiem และ Post Meridiem แบบพิมพ์ใหญ่ ได้แก่ AM หรือ PM
ใช้แทนค่าชั่วโมงของวันแบบ 12 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 0-12
ใช้แทนค่าชั่วโมงของวันแบบ 24 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 0-23
ใช้แทนค่าชั่วโมงของวันแบบ 12 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 01-12
ใช้แทนค่าชั่วโมงของวันแบบ 24 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 00-23
ค่านาทีแบบมี 0 นาหน้าเลขหลักเดียวจาก 00-59
ค่าวินาทีแบบมี 0 นาหน้าเลขหลักเดียวจาก 00-59
ค่าความแตกต่างเมื่อเทียบกับเวลา Greenwich(GMT) เช่น +0700
เวลาตามมาตรฐานของ RFC 2822 เช่น Sun, 1 Mar 2009 15:03:57 +0700
ตัวอย่างที่ 8.25 การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( ) แบบที่ 1

<?php
date_default_timezone_set('Asia/Bangkok');
echo "การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( ) <br/>";
echo date ("r") . "<br/>";
echo date ('l jS of F Y h:i:s A') . "<br/>";

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
136 บทที่ 8 สตริง ตัวเลข และเวลา
echo "July 1, 2012 is on a " . date ("l", mktime(0, 0, 0, 7, 1, 2012)) . "<br/>";
?>

ผลลัพธ์แบบที่ 1
การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( )
Mon, 26 Nov 2012 16:36:34 +0700
Monday 26th of November 2012 04:36:34 PM
July 1, 2012 is on a Sunday

ตัวอย่างที่ 8.26 การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( ) แบบที่ 2
<?php
date_default_timezone_set('Asia/Bangkok');
$birth = strtotime ("12/10/1978");
echo date ("ข้าพเจ้าเกิดเมื่อ j-m-Y <br />", $birth);
$day = array("อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์");
$month =array("มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน",
"กรกฎาคม", "สิงหาคม" , "กันยายน" , "ตุลาคม" , "พฤศจิกายน" , "ธันวาคม");
$d = date ("w");
$day = $day [$d];
$date = date ("j");
$m = date ("m")-1;
// เพราะลาดับเดือนจะได้คา 1-12
่
$month = $months [$m];
$year = date ('Y') + 543;
echo "วันนีตรงกับวัน $day วันที่ $date เดือน $month ปี $year ";
้
echo date("ขณะนี้เวลา H:i:s");
?>

ผลลัพธ์แบบที่ 2
ข้าพเจ้าเกิดเมื่อ 10-12-1978
วันนี้ตรงกับวัน จันทร์ วันที่ 26 เดือน ปี 2555 ขณะนี้เวลา 16:43:48

ฟังก์ชัน getdate ( )
เป็นฟังก์ชันที่ใช้สาหรับแสดงวันที่และเวลาเช่นเดียวกับฟังก์ชัน date ( ) แต่ไม่สามารถกาหนด
รูปแบบเองได้ และฟังก์ชันจะคืนค่าเป็นอาร์เรย์แบบ Key/Value รูปแบบคาสั่งมีดังนี้
รูปแบบ
array getdate ([ int $timestamp = time() ] )

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 137
เมื่อ

$timestamp หมายถึง พารามิเตอร์ชนิดตัวเลขจานวนเต็ม ของเวลาปัจจุบันบนระบบ
Unix ถ้าไม่มีการกาหนดค่าใดๆ ค่าโดยปริยาย คือ ค่าของ
ฟังก์ชัน time ( ) หรือวันเวลาปัจจุบัน
อาร์เรย์ที่ได้จากฟังก์ชัน getdate ( ) ส่งคืนค่า ประกอบด้วยอีลีเมนต์ที่เก็บข้อมูลดังต่อไปนี้
ตารางที่ 8.7 อาร์เรย์แบบ Key/Value ที่ได้จากการใช้ฟังก์ชัน getdate ( )
Key
คาอธิบาย
ลักษณะค่าที่ได้
seconds อ่านค่า “วินาที”
0-59
minutes อ่านค่า “นาที”
0 to 59
hours
อ่านค่า “ชั่วโมง”
0 to 23
mday
อ่านค่า “วันที่”
1 to 31
wday
อ่านค่าลาดับของวันในรอบสัปดาห์
0(อาทิตย์)-6(เสาร์)
mon
อ่านค่าลาดับของเดือนในรอบปี
1-12
year
อ่านค่า “ปี”แบบเลข 4 หลัก
เช่น 2010
yday
อ่านค่าลาดับของวันในรอบปี
0-365
weekday อ่านค่า “ชื่อวัน” ของสัปดาห์
Sunday-Saturday
month
อ่านค่า “ชื่อเดือน” ของปี
January-December
ตัวอย่างที่ 8.27 การใช้ฟังก์ชัน getdate ( )
<?php
$today = getdate ( );

print_r ($today);

?>

ผลลัพธ์
Array ( [seconds] => 30 [minutes] => 55 [hours] => 16 [mday] => 26 [wday] => 1 [mon] => 11 [year] =>
2012 [yday] => 330 [weekday] => Monday [month] => November [0] => 1353923730 )

ฟังก์ชัน mktime ( )
เป็นฟังก์ชันที่ใช้สาหรับหาค่า Unix Timestamp ของวันที่และเวลาเช่นเดียวกับฟังก์ชัน time ( )
แต่ฟังก์ชัน time ( ) หาค่า Unix Timestamp ของวันที่และเวลาปัจจุบันเท่านั้น ส่วนฟังก์ชัน mktime ( )
สามารถกาหนดวันและเวลาที่ต้องการหาค่า Unix Timestamp ได้ รูปแบบคาสั่งมีดังนี้
รูปแบบ
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s")
[, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
เมื่อ $hour หมายถึง ชั่วโมง
$minute หมายถึง นาที
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
138 บทที่ 8 สตริง ตัวเลข และเวลา
$second
$month
$day
$year
$is_dst

หมายถึง
หมายถึง
หมายถึง
หมายถึง
หมายถึง

วินาที
เดือน
วัน
ปี
การกาหนดรูปแบบวันเวลาตามฤดูกาล (กาหนดพารามิเตอร์เป็น 1)
ไม่กาหนดเวลา (กาหนดพารามิเตอร์เป็น 0) หรือหากไม่ทราบสามารถ
กาหนดเป็น -1 หรือไม่กาหนดซึ่งจะใช้ค่าปริยายเป็น -1 อยู่แล้ว
ตัวอย่างที่ 8.28 การใช้ฟังก์ชัน mktime ( )
<?php
date_default_timezone_set ('Asia/Bangkok');
echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 2012)) . "<br/>";
echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 2012)). "<br/>";
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 2013)). "<br/>";
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 13));
?>
ผลลัพธ์
Jan-01-2013
Jan-01-2013
Jan-01-2013
Jan-01-2013
ฟังก์ชัน checkdate ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบความถูกต้องของวันที่ เช่น วันที่ที่ถูกต้องจะต้องไม่เกิน 31 วัน
หรือเดือนจะต้องเป็นตัวเลขที่อยู่ระหว่าง 1 ถึง 12 หากฟังก์ชันตรวจสอบแล้วพบว่าวันที่ไม่ถูกต้อง จะคืน
ค่าเป็นเท็จ (False) จากถูกต้องจะคืนค่าเป็นจริง (True) รูปแบบคาสั่งมีดังนี้
รูปแบบ
bool checkdate ( int $month , int $day , int $year )

เมื่อ $month หมายถึง จานวนเดือนใน 1 ปี มีค่าอยู่ระหว่าง 1 - 12 เดือน
$day หมายถึง จานวนวันของแต่ละเดือน
$year หมายถึง ปี มีค่าอยู่ระหว่าง 1 - 32767
ตัวอย่างที่ 8.29 การใช้ฟังก์ชัน checkdate ( )
<?php
var_dump (checkdate (12, 31, 2012)); // bool (true) เป็นจริงเพราะเดือนธันวาคมมี 31 วัน ในปี 2012

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 139
var_dump (checkdate (2, 29, 2013)); // bool (false) เป็นเท็จเพราะเดือนกุมภาพันธ์ในปี 2013 มี 28 วัน
?>

การจัดการกับวันที่และเวลาแบบ Greenwich Mean Time (GMT)
ฟังก์ชัน gmdate ( )
เป็นฟังก์ชันที่ใช้แสดงวันที่และเวลาเหมือนกับฟังก์ชัน date ( ) แต่จะคืนค่าเป็นเวลา GMT โดย
สามารถกาหนดรูปแบบวันที่และเวลาได้เหมือนกับฟังก์ชัน date รูปแบบคาสั่งมีดังนี้
รูปแบบ
string gmdate ( string $format [, int $timestamp = time() ] )

เมื่อ $format
หมายถึง รูปแบบวันเวลา
$timestamp หมายถึง พารามิเตอร์เสริมชนิดตัวเลขจานวนเต็ม ของเวลาปัจจุบันบนระบบ
Unix ถ้าไม่มีการกาหนดค่าใดๆ ค่าโดยปริยาย คือ ค่าของฟังก์ชัน
time ( ) หรือวันเวลาปัจจุบัน
ตัวอย่างที่ 8.30 การใช้ฟังก์ชัน gmdate ( )
<?php
echo date("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 2012)) . "<br/>";
echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 2012));
?>

ผลลัพธ์
Jan 01 2012 00:00:00
Dec 31 2011 17:00:00
ฟังก์ชัน gmmktime ( )
เป็นฟังก์ชันที่ใช้แสดงวันที่และเวลาเหมือนกับฟังก์ชัน mktime ( ) แต่จะคืนค่าเป็นเวลา GMT
รูปแบบคาสั่งมีดังนี้
รูปแบบ
int gmmktime ([ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second
= gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year =
gmdate("Y") [, int $is_dst = -1 ]]]]]]] )
ตัวอย่างที่ 8.31 การใช้งานฟังก์ชัน gmmktim ( )
<?php
echo "July 1, 2012 is on a " . date ("l", gmmktime (0, 0, 0, 7, 1, 2012));
?>
// ผลลัพธ์ คือ July 1, 2012 is on a Sunday
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
140 บทที่ 8 สตริง ตัวเลข และเวลา
ตัวอย่างที่ 8.32 การประยุกต์เพื่อทาปฏิทินออนไลน์ด้วย PHP และ CSS โดยไม่ต้องใช้ตาราง
CSS Code
<style type="text/css">
div.holder{
position:relative;
font-family:tahoma, "Microsoft Sans Serif", Vanessa;
border:2px solid #999;
float:left;
font-size:12px;
width:175px;
padding:5px;
}
div.month {
position:relative;
display:block;
height:18px;
width:100%;
float:left;
left:0;
top:0;
background:#567;
color:#fff;
border-bottom:2px solid #89a;
text-align:center;
}
div.wkday {
position:relative;
clear:both;
float:left;
height:18px;
display:block;
width:100%;
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 141
background:#567;
color:#fff;
border-bottom:3px solid #234;
}
div.wkday span {
display:block;
float:left;
width:25px;
text-align:center;
}
div.box_day {
position:relative;
width:100%;
clear:both;
float:left;
background:#EEEEEE;
color:#000;
word-spacing:8px;
text-indent:3px;
}
</style>
PHP Code
<body>
<?php
$thai_month_arr=array ("0"=>"", "1"=>"มกราคม", "2"=>"กุมภาพันธ์", "3"=>"มีนาคม",
"4"=>"เมษายน", "5"=>"พฤษภาคม", "6"=>"มิถุนายน",
"7"=>"กรกฎาคม", "8"=>"สิงหาคม", "9"=>"กันยายน",
"10"=>"ตุลาคม", "11"=>"พฤศจิกายน", "12"=>"ธันวาคม"
);
$now_month = date ("Y-m-01");
$mk_time = strtotime ($now_month);
$day_no = date ("t",$mk_time);
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
142 บทที่ 8 สตริง ตัวเลข และเวลา
$wan_no = date ("w",$mk_time);
$box_day = $day_no+$wan_no;
$rows_week = ceil ($box_day/7);
$total_box = $rows_week * 7;
function get_day ($no_day,$wan_no,$day_no) {
$wan_tee = $no_day-$wan_no;
i f($wan_tee<=0) {
$wan_tee="__";
return $wan_tee;
} else {
if ($wan_tee <= $day_no) {
return str_pad ($wan_tee,2,"0",STR_PAD_LEFT);
} else {
return "__";
}
}
}
?>
<div class="holder">
<div class="month">
<?=$thai_month_arr [intval (date ("m"))] ?> <?=date ("Y")+543 ?>
</div>
<div class="wkday">
<span>อา</span>
<span>จ</span>
<span>อ</span>
<span>พ</span>
<span>พฤ</span>
<span>ศ</span>
<span>ส</span>
</div>
<?php
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 8 สตริง ตัวเลข และเวลา 143
for ($i = 1; $i <= $total_box; $i++) {
?>
<?php
if ($i%7 == 1) {
echo "<div class='box_day'>"; }
?>
<?=get_day ($i,$wan_no,$day_no) ?>
<?php
if ($i%7 == 0 || $i == $total_box ) {
echo "</div>n";
}
?>
<?php } ?>
</div>
<br style="clear:both;" />
</body>

ภาพที่ 8.1 แสดงตัวอย่างผลลัพธ์การสร้างปฏิทินออนไลน์
ตัวอย่างที่ 8.33 การประยุกต์โปรแกรมคานวณอายุ กรณีศึกษาแบบที่ 1
<?php
// กรณีวันเกิดที่เก็บสามารถแยกออกเป็นแต่ละส่วน เช่นปี ค.ศ. เดือน และ วัน
// ตัวอย่าง ปีเกิด 1978 เดือนเกิด 1 (มกราคม) วันที่ 2
// ฟังก์ชันคานวณหาอายุใช้ดังนี้
function AgeCalculator ($year,$month,$day) {
$birthday_convert = mktime (1,1,1,$month,$day,$year);

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
144 บทที่ 8 สตริง ตัวเลข และเวลา
return (floor ((time ( ) - $birthday_convert) / 31556926));
// หมายเหตุ 1 ปี เท่ากับ 31556926 วินาที
}
echo AgeCalculator (1978,1,2);
// ผลลัพธ์จะได้ 35

// การใช้งาน

?>
ตัวอย่างที่ 8.34 การประยุกต์โปรแกรมคานวณอายุ กรณีศึกษาแบบที่ 2
<?php
// กรณีวันเกิดที่เก็บอยู่ในรูปแบบของ date แบบมาตรฐาน คือ ปี ค.ศ.- เดือน - วันที่
// ตัวอย่าง 1978-01-02
// ฟังก์ชันคานวณหาอายุใช้ดังนี้
function AgeCalculator ($birthday) {
$birthday_convert = strtotime ($birthday);
return (floor ((time ( ) - $birthday_convert) / 31556926));
// หมายเหตุ 1 ปี เท่ากับ 31556926 วินาที
}
// การใช้งาน
$date_input = "1978-01-02";
// ตัวแปรเก็บวันเกิด
echo AgeCalculator ($date_input);
// ผลลัพธ์จะได้ 35
?>
หมายเหตุ การเทีย บเวลาวิน าทีเพื่อความสะดวกในการพัฒ นาโปรแกรมที่เกี่ยวข้องกับเวลา
ที่มา: วิกิพีเดีย สารานุกรมเสรี http://th.wikipedia.org/wiki/วินาที
1 มิลลิวินาที เท่ากับ 0.001 วินาที
1 วินาที เท่ากับ 1 วินาที
1 นาที เท่ากับ 60 วินาที
1 ชั่วโมง เท่ากับ 3600 วินาที
1 วัน เท่ากับ 86400 วินาที
1 สัปดาห์ เท่ากับ 604800 วินาที
1 เดือน เท่ากับ 2629743.83 วินาที
1 ปี เท่ากับ 31556926 วินาที
1 ปีปกติสุรทิน เท่ากับ 31536000 วินาที
1 ปีอธิกสุรทิน เท่ากับ 31622400 วินาที
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9
การจัดการไฟล์และไดเรกทอรี
การจัดเก็บ ข้อมูล ของคอมพิว เตอร์จะทาในรูปแบบของไฟล์ ทั้งนี้ในกระบวนการสร้างเว็บใน
บางครั้งมีความจาเป็นต้องใช้ความรู้เรื่องการกาจัดไฟล์ และไดเรกทอรีมาเกี่ยวข้องด้วย ดังนั้นในบทนี้จึง
จะกล่าวถึงเรื่องราวพื้น ฐานที่จาเป็ นที่ควรรู้เกี่ยวกับไฟล์ เช่น การอ้างอิงตาแหน่งไฟล์ การแทรกไฟล์
รวมถึงฟังก์ชันต่างๆ ของ PHP ที่ใช้สาหรับจัดการไฟล์ และไดเรกทอรี เป็นต้น
ในการสร้างเว็บเพจนั้น บางครั้งจาเป็นต้องนาข้อมูลจากไฟล์อื่นๆ เข้ามาใช้ร่วมด้วย เช่น รูปภาพ
หรือการนาไฟล์เข้ามาแทรก ทั้งนี้ไฟล์แต่ละชนิด มักแยกเก็บให้เป็นสัดส่วนเฉพาะ เช่น ไฟล์ภาพ อาจเก็บ
ไว้ในไดเรกทอรี images หรือ pictures หรือไฟล์สาหรับนาไปแทรกจะเก็บไว้ในไดเรกทอรี inc เป็นต้น
ด้วยเหตุนี้จึงมักเกิดปัญหาในการอ้างอิง ตาแหน่งไฟล์ที่อยู่ต่างไดเรกทอรีกัน ดังนั้นก่อนที่จะศึกษาเรื่อง
อื่นๆ เกี่ยวกับไฟล์ จะต้องทาความเข้าใจเกี่ยวกับการอ้างอิงตาแหน่งของไฟล์และไดเรกทอรีก่อน เพราะ
เป็นสิ่งจาเป็นที่จะต้องใช้งานอยู่ตลอด
การอ้างถึง Document Root
Document Root คือ ไดเรกทอรีเริ่มต้นของการจัดเก็บข้อมูลของเว็บ ซึ่งตาแหน่งนี้ปกติแล้วก็
เกิดขึ้นกับการเซตค่าของผู้ดูแลระบบ ทั้งนี้หากเป็นผู้ติดตั้งระบบเองด้วย AppServ ตามค่าดีฟอลต์ที่
กาหนดไว้จะอยู่ที่
C:/AppServ/www
สาหรับตาแหน่งนี้ถ้าเป็นรูปแบบ URL ก็จะเท่ากับ http://localhost หรือ http://127.0.0.1
นั้นเอง ตามรูปแบบของระบบเว็บจะแทนตาแหน่งนี้ด้วยเครื่องหมาย / แล้วก็จากอ้างอิงตาแหน่งไฟล์
และไดเรกทอรีโดยเริ่มจาก Document Root นี้เป็นต้นไป เช่น “/myphp/example/index.php”
การอ้างอิงพาธแบบ Absolute
พาธ คือ เส้นทางไปยังไฟล์ หรือไดเรกทอรี ซึ่งอ้างอิงแบบ Absolute นี้จะเป็นระบุตาแหน่งที่
แท้จริงของไฟล์ หรือไดเรกทอรี โดยเริ่มจาก Document Root เป็นต้นไป ตัวอย่างดังนี้
ลักษณะการอ้างอิงไฟล์ภาพต่างๆ จะเป็นดังนี้
<img src = “/myphp/img/logo.png” />
<a href = “/myphp/example/login.php “>เข้าสู้ระบบ < /a>
146 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
จะเห็นว่าการอ้างอิงพาธแบบ Absolute นี้ต้องไปเริ่มจาก Document Root เสมอ (เริ่มพาธ
ด้วยเครื่องหมาย / ) แล้วไล่เข้าไปตามลาดับจนถึงไฟล์ที่ต้องการ ไม่ว่าจะนาไฟล์ไปใช้ที่เพจใดก็ตาม
เพราะก็จะยืด Document Root เป็นหลักเสมอ อย่างไรก็ตามการระบุพาธแบบ Absolute ตามวิธี
ดังกล่าวมานี้ จะใช้ได้ผลเฉพาะกับแท็ก HTML เท่านั้น แต่หากใช้ร่วมกับฟังก์ชันเกี่ยวกับระบบไฟล์ของ
PHP จะเกิดปัญหา เว้นแต่จะระบุตาแหน่ง Document Root นาหน้าแบบ Full Path เช่น
ตัวอย่างที่ 9.1 การระบุตาแหน่ง Document Root นาหน้าแบบ Full Path
$root = $_SERVER ['DOCUMENT _ ROOT'] ;
$path = "myphp/example/inc/header.inc.php";
include (“$root . $path” ) ;
//ลักษณะผลลัพธ์ C:/AppServ/www/myphp/example/inc/header.inc.php
การอ้างอิงพาธแบบ Relative
การอ้างอิงแบบ Relative นี้จะเทียบกับตาแหน่งไฟล์ที่เป็นผู้เรียกไฟล์อื่นมาใช้เป็นหลัก โดยมี
สัญลักษณ์การเปรียบเทียบตาแหน่งเพิ่มเติมเข้ามาอีก 2 แบบ คือ
แบบที่ 1 . (จุดหนึ่งจุด) ใช้แทนไดเรกทอรีปัจจุบัน (ปกติไม่นิยมใช้สัญลักษณ์นี้กันมากนัก)
แบบที่ 2 .. (จุ ดสองจุด ) ใช้แทนไดเรกทอรีก่อนหน้านี้อีก 1 ระดับ เช่น หากปัจจุบันอยู่ที่
ไดเรกทอรี /myphp/example ถ้าใช้ .. จะหมายถึง /myphp เป็นต้น ลักษณะแนวทางการอ้างอิงพาธ
แบบ Relative มีดังนี้ คือ
 สมมติต้องนาไฟล์รูปภาพ logo.png มาใช้เพจ test. Html แต่ทั้งสองไฟล์อยู่คนละระดับ
จึงต้องออกไปข้างนอกอีก 1 ชั้นก่อน แล้วค่อยไปตามลาดับดังนี้
<img src = "../img/logo.png” />
 ถ้าต้องการนาไฟล์รูปภาพ logo.png มาใช้ที่เพจ index.php แสดงว่าต้องออกไปข้างนอก
อีก 2 ชั้นก่อน แล้วค่อยไล่เข้าไปตามลาดับดังนี้
<img src = "../../img/logo.png” />
 ถ้าต้องการนาไฟล์ header.inc.php มาใช้เป็นเพจindex.php เนื่องจากไฟล์ header.inc นี้
อยู่ที่ไดเรกทอรีชั้นในถัดไปจากไฟล์ index.php ดังนั้นจึงกาหนดเป็น
include ("inc/header.inc.php”) ;
 ถ้าต้องการสร้างลิงก์จากเพจ index.php ไปยังเพจ login.php เนื่องจากทั้งสองไฟล์นี้อยู่ใน
ระดับเดียวกัน ดังนั้นจึงกาหนดเป็น
<a href = "login.php"> เข้าสู้ระบบ </a>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 147
จากการอ้างอิงพาธทั้งสองแบบนี้ ก็คงต้องขึ้นอยู่กับความถนัดของผู้ใช้เองว่าเลือกใช้แบบไหน
สาหรับวิธีในหนังสือเล่มนี้จะใช้แบบ Relative Path ทั้งหมด
การจัดการกับไฟล์
การจัดเก็บข้อมูลลงในไฟล์ทาได้ 2 วิธี คือ จัดเก็บในรูปของแฟลตไฟล์ (Flat File) หรือเท็กซ์ไฟล์
(Text File) และจัดเก็บในรูปของฐานข้อมูล (Database) แต่ไม่ว่าจะจัดเก็บใดก็ตาม จะมีการเขียนและ
อ่านข้อมูลในไฟล์เสมอ ซึ่งมีขั้นตอนดังนี้
ตารางที่ 9.1 ขั้นตอนการเขียนและอ่านข้อมูลในไฟล์
การทางาน
ขั้นตอน
การทางาน
ขั้นตอน
การเขียน (Writing) 1. เปิ ด ไฟล์ ที่ ต้ อ งการ
การอ่าน (Reading) 1. เปิดไฟล์
หรือสร้างไฟล์ใหม่
2. อ่านข้อมูลจากไฟล์
2. เขียนข้อมูลลงไฟล์
3. ปิดไฟล์
3. ปิดไฟล์
ในหัวข้อนี้จะกล่าวถึงการจัดการกับไฟล์ประเภทเท็กซ์ไฟล์ ซึ่งมีฟังก์ชันในการจัดการดังต่อไปนี้
การเปิดไฟล์
ในการอ่านข้อมูลจากไฟล์หรือบันทึกข้อมูลลงไฟล์ จะต้องเริ่มด้วยการเปิดไฟล์ขึ้นมาก่อนโดยใช้
ฟังก์ชัน fopen ( ) โดยการเปิดไฟล์เพื่องานงานใดๆ นั้น สามารถระบุได้ในส่วนของไฟล์โหมด หากเปิด
ไฟล์ได้จะคืนค่าเป็นตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล (Resource) หากเปิดไม่ได้ หรือไม่พบไฟล์ที่ระบุ
จะคืนค่าเป็นเท็จ (False) รูปแบบคาสั่งมีดังนี้
รูปแบบ
resource fopen ( string $filename, string $mode [, bool $use_include_path = false] )
เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการเปิด
$mode หมายถึง ไฟล์โหมด (File Mode) ใช้ระบุว่าเปิดไฟล์เพื่อวัตถุประสงค์ใด (ดูค่า
ของไฟล์โหมดได้จากตารางที่ 9.2)
$use_include_path หมายถึง หากกาหนดพารามิเตอร์เป็น 1 หรือ True ฟังก์ชันจะ
ค้ น ห า ไ ฟ ล์ ต า ม ไ ด เ ร ก ท อ รี ที่ ก า ห น ด ใ น "include_path"
(กาหนดค่าในไฟล์ php.ini)
ตารางที่ 9.2 ไฟล์โหมด
ไฟล์โหมด (File Mode)
ความหมาย
r
โหมดอ่าน – เปิดไฟล์สาหรับการอ่าน เริ่มทางานจากตอนต้นไฟล์
r+
โหมดอ่าน – เปิดไฟล์สาหรับการอ่านและเขียน เริ่มทางานจากตอนต้นไฟล์
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
148 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
ตารางที่ 9.2 (ต่อ)
w
w+
a
a+
b

t

โหมดเขียน – เปิดไฟล์สาหรับการเขียน เริ่มทางานจากตอนต้นไฟล์ ถ้าไฟล์
มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่
โหมดเขียน – เปิดไฟล์สาหรับการเขียนและอ่าน เริ่มทางานจากตอนต้นไฟล์
ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่
โหมดเพิ่ม – เปิดไฟล์สาหรับการเพิ่ม (เขียน) เริ่มทางานจากจุดสิ้นสุดของ
ข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่
โหมดเพิ่ม – เปิดไฟล์สาหรับการเพิ่ม (เขียน) และอ่าน เริ่มทางานจาก
จุดสิ้นสุดของข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่
โหมดไบนารี – ใช้ร่วมกับโหมดอื่น โดยอาจจะจาเป็น ถ้าระบบไฟล์แยก
ระหว่างไฟล์ไบนารีและไฟล์ข้อความ ระบบ Windows มีการแยก แต่ระบบ
Unix ไม่มีการแยก
ใช้ร่วมกับโหมดอื่นๆ ที่กล่าวมาข้างต้น เพื่อเป็นการเปิดไฟล์ในโหมดเท็กซ์
ไฟล์ธรรมดา

หมายเหตุ
ตั ว ชี้ (Pointer) คื อ ตั ว แปรส าหรั บ ชี้ ข้ อ มู ล ในไฟล์ เมื่ อ เปิ ด ไฟล์ ตั ว ชี้ ข้ อ มู ล ในไฟล์ จ ะถู ก
กาหนดให้ชี้ไปยังข้อมูลแรกในไฟล์ โดยทุกครั้งหลังจากการอ่านหรือเขียนข้อมูลในไฟล์ ตัวชี้จะ
เลื่อนไปยังข้อมูลที่อยู่ตาแหน่งถัดไปโดยอัตโนมัติ
ตัวอย่างที่ 9.2 การเปิดไฟล์เพื่อเขียน ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่
<?php
$fp = fopen ("test.txt", "w");
?>
ตามตัวอย่างมีการกาหนดโหมดเป็น “w” เป็นโหมดสาหรับเปิดไฟล์เพื่อเขียน ถ้าไฟล์มีอยู่แล้วจะ
ลบข้อมูลทั้งหมด ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่ แต่หากต้องการเพิ่มข้อมูลต่อท้ายเรื่อยๆ จะต้องเปลี่ยนโหมด
ใหม่ตามตัวอย่างที่ 2
ตัวอย่างที่ 9.3 การเปิดไฟล์เพื่อเขียนต่อท้าย
<?php
$fp = fopen ("test.txt", "a");
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 149
หมายเหตุ
หากไฟล์ที่ต้องการเปิดกับไฟล์ PHP ที่รันโค้ดเก็บอยู่คนละไดเรกทอรี จะต้องระบุไดเรกทอรีของ
ไฟล์ที่ต้องการเปิดด้วย เช่น "C:/AppServ/www/file/test.txt" โดย "test.txt" คือ ชื่อไฟล์ ส่วน
"C:/AppServ/www/file/" คือ ไดเรกทอรีที่เก็บไฟล์ "test.txt" นอกจากนี้ยังอ้างถึ งไฟล์ใน
Internet/Intranet ได้ โดยระบุเป็น URL เช่น "http://www.freebsd.sru.ac.th" หรือเรียกไฟล์
ผ่านโปรโตคอล FTP เช่น ftp://user:password@www.freebsd.sru.ac.th/file/test.txt
ปัญหาที่อาจจะเกิดขึ้นจากการเปิดไฟล์หรือเขียนไฟล์ด้วย fopen ( ) คือ ผู้ใช้อาจไม่มีสิทธิ์ในการ
อ่านหรือเขียนข้อมูลลงบนไฟล์ที่เซิร์ฟเวอร์ ซึ่งส่วนใหญ่จะพบในระบบปฏิบัติการ Unix หรือ Linux
เนื่องจากมีการกาหนดสิทธิการใช้งานของไฟล์แต่ละไฟล์ไว้ ดังนั้นถ้าผู้อ่านใช้ฟังก์ชัน fopen ( ) แล้วเกิด
error ในลักษณะของ “Permission denied” ก็ให้ลองย้อนกลับไปตรวจสอบ สิทธิ์ ในการใช้งานไฟล์อีก
ครั้งว่าสามารถใช้งานได้หรือไม่
ในกรณีที่ไม่สามารถใช้ฟังก์ชัน fopen ( ) เปิดไฟล์ได้ก็จะมี error เกิดขึ้น สามารถใช้คาสั่ง if ใน
การตรวจสอบ error ที่อาจเกิดขึ้นได้ดังนี้
ตัวอย่างที่ 9.4 การใช้ฟังก์ชัน fopen ( )
<?php
$fp = @open (“/usr/local/apache/data/doc/customer.txt”. “w”)
If (!$fp)
{
echo “ ไม่สามารถเปิดไฟล์ได้”;
exit;
}
?>
ตัวอย่างข้างต้นจะเห็นว่าได้เติมสัญลักษณ์ @ ไว้หน้าฟังก์ชัน fopen ( ) เพื่อไม่ให้ต้องการให้
ฟังก์ชันแสดง error ขึ้นมาในกรณีที่ไม่สามารถเปิดไฟล์ได้ แต่จะใช้คาสั่ง if ในการตรวจสอบผลลัพธ์ที่ได้
จากการเปิดไฟล์เอง และแสดงข้อความแจ้งเตือนโดยสามารถนาเทคนิคการใช้สัญลักษณ์ @ ไปประยุกต์
ใช้งานได้กับทุกฟังก์ชัน
การปิดไฟล์
ทุกครั้งที่มีการเปิดไฟล์ เมื่อใช้งานเสร็จแล้วจะต้องปิ ดไฟล์ด้วย โดยใช้ฟังก์ชัน fclose ( ) เพื่อ
ทาลาย Resource ของฟังก์ชัน fopen ( ) หากปิดไฟล์เรียบร้อย ฟังก์ชันจะคืนค่าเป็นจริง (True) แต่หาก
ปิดไฟล์ไม่สาเร็จ จะคืนค่าเป็นเท็จ (False) รูปแบบคาสั่งมีดังนี้
รูปแบบ
bool fclose ( resource $handle )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
150 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
เมื่อ $handle หมายถึง Resource หรือตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล ซึ่งเป็นค่าที่
ส่งคืนมาจากฟังก์ชัน fopen ( )
ตัวอย่างที่ 9.5 การใช้ฟังก์ชัน fclose ( )
<?php
$handle = fopen ("somefile.txt", "r");
fclose ($handle);
?>
การเขียนไฟล์
การเขียนข้อมูลลงในไฟล์ สามารถทาได้โดยใช้ฟังก์ชัน fwrite ( ) หรือ fputs ( ) หรือ
file_put_content ( ) โดยก่อนจะเขียนไฟล์จะต้องเปิดไฟล์ด้วยฟังก์ชัน fopen ( ) ก่อนเสมอ
 ฟังก์ชัน fwrite ( )
เป็นฟังก์ชันสาหรับเขียนข้อมูลลงไฟล์ มีรูปแบบคาสั่งดังนี้
รูปแบบ
int fwrite ( resource $handle , string $string [, int $length ] )
เมื่อ $handle หมายถึง Resource หรือตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล
$string หมายถึง ข้อมูลหรือข้อความที่ต้องการจัดเก็บลงไฟล์
$length หมายถึง จานวนตัวอักษรที่ต้องการบันทึกลงไฟล์ (มีหน่วยเป็นไบต์) หากไม่
กาหนดจะบันทึกกลุ่มตัวอักษรทั้งหมดจากตัวแปร $string ลงในไฟล์
ตัวอย่างที่ 9.6 การใช้ฟังก์ชัน fwrite ( )
<?php
$path = "C:/AppServ/www/file";
$filename = "testfwrite.txt";
$file = fopen ( $path . "/" . $filename, "w");
$data = "ทดสอบการเขียนข้อมูลลงไฟล์ด้วยฟังก์ชัน fwrite()";
if (fwrite ($file, $data)==True) echo "เขียนข้อมูลลงไฟล์เรียบร้อยแล้ว";
fclose ($file);
?>
 ฟังก์ชัน fputs ( )
เป็นฟังก์ชันสาหรับเขียนข้อมูลลงไฟล์ โดยการเรียกใช้และการทางานจะเหมือนกับฟังก์ชัน
fwrite ( )

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 151
รูปแบบ
int fputs ( resource $handle , string $string [, int $length ] )
เมื่อ $handle หมายถึง Resource หรือตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล
$string หมายถึง ข้อมูลหรือข้อความที่ต้องการจัดเก็บลงไฟล์
$length หมายถึง จานวนตัวอักษรที่ต้องการบันทึกลงไฟล์ (มีหน่วยเป็นไบต์) หากไม่
กาหนดจะบันทึกกลุ่มตัวอักษรทั้งหมดจากตัวแปร $string ลงในไฟล์
ตัวอย่างที่ 9.7 การใช้ฟังก์ชัน fputs ( )
<?php
$filename = 'sitevisitors.txt';
if (file_exists ($filename)) {
$count = file('sitevisitors.txt');
$count [0] ++;
$fp = fopen ("sitevisitors.txt", "w");
fputs ($fp, "$count[0]");
fclose ($fp);
echo $count[0];
} else {
$fh = fopen ("sitevisitors.txt", "w");
if ($fh==false) die ("unable to create file");
fputs ($fh, 1);
fclose ($fh);
$count = file ('sitevisitors.txt');
echo $count[0];
}
?>
 ฟังก์ชัน file_put_content ( )
เป็นฟังก์ชันสาหรับเขียนข้อมูลลงไฟล์ เช่นเดียวกับฟังก์ชัน fwrite ( ) และ fputs ( ) แต่
ฟังก์ชันนี้จาดาเนินการเองตั้งแต่เปิดไฟล์ เขียนข้อมูลลงไฟล์ และปิดไฟล์ ซึ่งต่างจากวิธีเดิมที่ต้องใช้ฟังก์ชัน
fopen ( ) เปิดไฟล์ก่อน แล้วจึงใช้ฟังก์ชัน fwrite ( ) หรือฟังก์ชัน fputs ( ) เขียนข้อมูลลงไฟล์ เมื่อการ
ทางานเสร็จสิ้นจึงใช้ฟังก์ชัน fclose ( ) ปิดไฟล์ รูปแบบคาสั่งของฟังก์ชัน file_put_content ( ) มีดังนี้
รูปแบบ
int file_put_contents ( string $filename , mixed $data )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
152 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
เมื่อ $filename หมายถึง ชื่อไฟล์ที่จะเขียนข้อมูล
$data
หมายถึง ข้อมูลที่ต้องการบันทึกลงไฟล์
ตัวอย่างที่ 9.8 การใช้ฟังก์ชัน file_put_content ( )
<?php
$file = 'people.txt';
$current = file_get_contents ($file);
$current .= "John Smith n";
file_put_contents ($file, $current);

// เปิดไฟล์รับข้อมูลเดิม
// เพิ่มข้อมูลบุคลากร
// เขียนข้อมูลลงไฟล์

?>
การอ่านข้อมูลจากไฟล์
การอ่านข้อมูลจากไฟล์ มีขั้นตอนการทางานเหมือนกับการเขียนไฟล์ คือ เปิดไฟล์ด้วยฟังก์ชัน
fopen ( ) ก่อนจึงจะสามารถอ่านไฟล์ได้ เมื่อเลิกใช้ไฟล์แล้วจะต้องปิดไฟล์ด้วยฟังก์ชัน fclose ( ) สาหรับ
ฟังก์ชันที่ใช้อ่านไฟล์มีดังนี้
 ฟังก์ชัน feof ( )
เป็นฟังก์ชันที่ใช้ตรวจสอบว่า อ่านข้อมูลในไฟล์หมดแล้วหรือไม่ ถ้าอ่านครบหมดแล้ว จะส่งคืน
ค่าเป็นจริง (True) แต่ถ้ายังอ่านไม่หมด จะส่งคืนค่าเป็นเท็จ (False) มีรูปแบบคาสั่งดังนี้
รูปแบบ
bool feof ( resource $handle )
เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์
ตัวอย่างที่ 9.9 การใช้ฟังก์ชัน feof ( )
<?php
$file = fopen ("data.txt", "r");
while (!feof ($file)) {
$char = fgetc ($file); echo $char . "<br/>";
}
fclose($file);
?>
 การอ่านอักขระจากไฟล์
 ฟังก์ชัน fgetc ( ) ใช้อ่านข้อมูลจากไฟล์ครั้งละ 1 อักขระ รูปแบบคาสั่งมีดังนี้
รูปแบบ
string fgetc ( resource $handle )

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 153
เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์
ตัวอย่างที่ 9.10 การใช้ฟังก์ชัน fgetc ( )
<?php
$fp = fopen ('somefile.txt', 'r');
if (!$fp) {
echo 'ไม่สามารถเปิดไฟล์ somefile.txt ได้';
} else {
while (false !== ($char = fgetc ($fp))) {
echo "$char<br/>";
}
}
?>
 ฟังก์ชัน fread ( ) ใช้อ่านข้อมูลจากไฟล์ตามความยาวของอักขระที่ระบุ รูปแบบ
คาสั่งมีดังนี้
รูปแบบ
string fread ( resource $handle , int $length )
เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์
$length หมายถึง ความยาวของอักขระที่ต้องการอ่าน
ตัวอย่างที่ 9.11 การใช้ฟังก์ชัน fread ( )
<?php
$filename = "/usr/local/something.txt";
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize ($filename));
fclose ($handle);
?>
 การอ่านข้อมูลจากไฟล์ครั้งละ 1 บรรทัด
 ฟังก์ชัน fgets ( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลจากไฟล์ครั้งละ 1 บรรทัด และจะอ่าน
ข้อมูลจนกระทั่งพบอักขระสาหรับขึ้นบรรทัดใหม่ (n) หรือสิ้นสุดไฟล์ จึงหยุดอ่าน มี รูปแบบคาสั่งมีดังนี้
รูปแบบ
string fgets ( resource $handle [, int $length ] )
เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
154 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
$length หมายถึง ความยาวของอักขระที่ต้องการอ่าน
ตัวอย่างที่ 9.12 การใช้ฟังก์ชัน fgets ( )
<?php
$handle = @fopen ("/tmp/inputfile.txt", "r");
if ($handle) {
while (($buffer = fgets ($handle, 4096)) !== false) echo $buffer;
if (!feof ($handle)) {
echo "Error: unexpected fgets ( ) failn";
}
fclose ($handle);
}
?>
 ฟังก์ชัน fgetss ( ) เป็นฟังก์ชันที่ให้ผลลัพธ์เหมือนกับฟังก์ชัน fgets ( ) แต่ต่างกันที่
ฟังก์ชัน fgetss ( ) สามารถกาหนดให้แสดงหรือไม่แสดงแท็ก HTML หรือ PHP ได้ โดยฟังก์ชัน fgets ( ) จะ
ข้ามแท็กของ HTML หรือ PHP ไป แต่จะสนใจเฉพาะสตริงตัวอื่น ฟังก์ชัน fgetss ( ) มีรูปแบบคาสั่งดังนี้
รูปแบบ
string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )
เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์
$length หมายถึง ความยาวของอักขระที่ต้องการอ่าน
$allowable_tags หมายถึง อนุญาตให้แท็กทางานหรือไม่ทางาน
ตัวอย่างที่ 9.13 การใช้ฟังก์ชัน fgetss ( )
<?php
$str = <<<EOD
<html><body>
<p>Welcome! Today is the <?php echo (date ('jS')); ?> of <?= date ('F'); ?>.</p>
</body></html>
Text outside of the HTML block.
EOD;
file_put_contents ('sample.php', $str);
$handle = @fopen ("sample.php", "r");
if ($handle) {
while (!feof ($handle)) {
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 155
$buffer = fgetss ($handle, 4096);
echo $buffer;
}
fclose ($handle);
}
?>
 การอ่านข้อมูลในไฟล์ทั้งหมด
 ฟังก์ชัน readfile ( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลในไฟล์ทั้งหมด ซึ่งสามารถเปิดไฟล์
ได้เอง โดยไม่ต้องใช้ฟังก์ชัน fopen ( ) ฟังก์ชันจะแสดงข้อมูลที่อ่านได้ทางหน้าจอ พร้อมคืนค่าเป็นขนาด
ของข้อมูล (หน่วยเป็นไบต์) หากเกิดข้อผิดพลาด จะคืนค่าเป็นเท็จ (False) รูปแบบคาสั่งมีดังนี้
รูปแบบ
int readfile ( string $filename [, bool $use_include_path = false] )
เมื่อ $filename หมายถึง ชื่อไฟล์ที่จะอ่านข้อมูล
$use_include_path หมายถึง กาหนดเป็น True หากต้องการให้ค้นหาไฟล์
ใน include_path
ตัวอย่างที่ 9.14 การใช้ฟังก์ชัน readfile ( )
<?php
$file = 'monkey.gif';
if (file_exists ($file)) {
header ('Content-Description: File Transfer');
header ('Content-Type: application/octet-stream');
header ('Content-Disposition: attachment; filename='.basename ($file));
header ('Content-Transfer-Encoding: binary');
header ('Expires: 0');
header ('Cache-Control: must-revalidate');
header ('Pragma: public');
header ('Content-Length: ' . filesize ($file));
ob_clean ( ); flush ( );
readfile ($file); exit;
}
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
156 บทที่ 9 การจัดการไฟล์และไดเรกทอรี

ภาพที่ 9.1 แสดงการเปิดไฟล์รูปภาพ
 ฟังก์ชัน fpassthru ( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลในไฟล์เหมือนกับฟังก์ชัน
readfile ( ) แต่จะต้องเปิดไฟล์ด้วยฟังก์ชัน fopen ( ) ก่อน จึงจะใช้ฟังก์ชัน fpassthru ( ) อ่านข้อมูลได้
มีรูปแบบคาสั่งดังนี้
รูปแบบ
int fpassthru ( resource $handle )
เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์
ตัวอย่างที่ 9.15 การใช้ฟังก์ชัน fpassthru() สาหรับไฟล์ชนิดไบนารี
<?php
$name = './img/ok.png';
$fp = fopen ($name, 'rb');
// เปิดไฟล์ด้วยโหมดไบนารี
header ("Content-Type: image/png");
header ("Content-Length: " . filesize ($name));
fpassthru ($fp);
exit;
?>

 ฟังก์ชัน file ( ) เป็นฟังก์ชันสาหรับอ่านข้อมูลในไฟล์ทั้งหมดเหมือนกับฟังก์ชัน
readfile ( ) แต่ต่างกันที่ฟังก์ชัน file ( ) จะนาข้อมูลเก็บลงอาร์เรย์ มีรูปแบบคาสั่งดังนี้
รูปแบบ
array file ( string $filename )
เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการอ่านข้อมูล
ตัวอย่างที่ 9.16 การใช้ฟังก์ชัน file ( )
<?php
// Get a file into an array. In this example we'll go through HTTP to get
// the HTML source of a URL.

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 157
$lines = file ('http://www.example.com/');
// Loop through our array, show HTML source as HTML source; and line numbers too.
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />n";
}
$html = implode ('', file ('http://www.example.com/'));
// Using the optional flags parameter since PHP 5
$trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
?>

 ฟังก์ชัน file_get_content ( ) เป็นฟังก์ชันสาหรับอ่ านข้อมูลในไฟล์ทั้งหมด
เหมือนกับฟังก์ชัน file ( ) แต่ต่างกันที่ฟังก์ชัน file_get_content ( ) จะคืนค่าเป็นสตริง มีรูปแบบคาสั่งดังนี้
รูปแบบ
string file_get_contents ( string $filename )
เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการอ่านข้อมูล
ตัวอย่างที่ 9.17 การใช้ฟังก์ชัน file_get_content ( ) หน้าโฮมเพจของเว็บไซต์
<?php
$homepage = file_get_contents ('http://www.example.com/');
echo $homepage;
?>
ตัวอย่างที่ 9.18 การใช้ฟังก์ชัน file_get_content ( ) ค้นหาในตาแหน่ง include_path
<?php
$file = file_get_contents ('./people.txt', FILE_USE_INCLUDE_PATH);
?>
การลบไฟล์
สามารถใช้ฟังก์ชัน unlink ( ) ได้ ซึ่งมีรูปแบบคาสั่งดังนี้
รูปแบบ
bool unlink ( string $filename )
เมื่อ $filename หมายถึง ชื่อไฟล์ที่จะลบ
ตัวอย่างที่ 9.19 การใช้ฟังก์ชัน unlink ( )
<?php
$fh = fopen ('test.html', 'a');
fwrite ($fh, '<h1>Hello world!</h1>');
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
158 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
fclose ($fh);
unlink ('test.html');
?>
ฟังก์ชันอื่นๆ ที่ใช้จัดการกับไฟล์
 การตรวจสอบเกี่ยวกับไฟล์
จากตัวอย่างก่อนหน้านี้ หากไฟล์ที่ต้องการเปิดไม่มีอยู่จริง หรือไฟล์นั้นไม่อนุญาตให้มีการเขียน/
อ่านไฟล์ จะทาให้ฟังก์ชันคืนค่าเป็นความผิดพลาด ซึ่งหากไม่ดักจับหรือตรวจสอบความผิดพลาดเหล่านั้น
อาจทาให้มีผลกระทบต่อการทางานของส่วนอื่นๆ สาหรับฟังก์ชันที่ใช้ตรวจสอบเกี่ยวกับไฟล์ มีดังต่อไปนี้
ตารางที่ 9.3 ฟังก์ชันที่ใช้ตรวจสอบเกี่ยวกับไฟล์
ฟังก์ชัน
การทางาน
รูปแบบ
is_file ( )
ตรวจสอบว่าเป็นไฟล์ทั่วไปหรือไม่ หากใช่ bool is_file ( string $filename )
จะคืนค่าเป็น True หากไม่ใช่ จะคืนค่า
เป็น False
is_writable ( ) ตรวจสอบว่าสามารถเขียนข้อมูลลงในไฟล์ bool is_writable ( string $filename )
ได้หรือไม่ หากได้จะคืนค่าเป็น True หาก
ไม่ได้ จะคืนค่าเป็น False
is_readable ( ) ตรวจสอบว่าสามารถอ่านข้อมูล จากไฟล์ bool is_readable ( string $filename )
นั้ น ได้ ห รื อ ไม่ การคื น ค่ า จะเหมื อ นกั บ
ฟังก์ชัน is_writable ( )
 การตรวจสอบเวลาที่เกี่ยวข้องกับไฟล์
ตารางที่ 9.4 ฟังก์ชันที่ใช้ตรวจสอบเวลาที่เกี่ยวข้องกับไฟล์
ฟังก์ชัน
การทางาน
รูปแบบ
fileatime ( ) ใช้หาเวลา (ค่า Unix Timestamp) ที่มีการ int fileatime ( string $filename )
เข้าถึงไฟล์ครั้งล่าสุด
filectime ( ) ใช้หาเวลา (ค่า Unix Timestamp) ที่มีการ int filectime ( string $filename )
เปลี่ ย นแปลงข้ อมู ล ของไฟล์ ครั้ งล่ าสุ ด ซึ่ ง
ข้อมูลของไฟล์ ที่จะบันทึกได้แก่ การกาหนด
กลุ่มผู้ใช้งาน ซึ่งมี 3 กลุ่ม ได้แก่ user, group
และ ownership การกาหนดสิทธิ์การเข้าถึง
ไฟล์ ซึ่งเวลานี้จะถูกบันทึกตอนสร้างไฟล์ และ
ทุกครั้งที่มีการเปลี่ยนแปลงข้อมูล
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 159
ตารางที่ 9.4 (ต่อ)
ฟังก์ชัน
การทางาน
รูปแบบ
filemtime ( ) ใช้หาเวลา (ค่า Unix Timestamp) ที่มีการ int filemtime ( string $filename )
แก้ไขข้อมูลในไฟล์ครั้งล่าสุด ซึ่งเวลานี้จะถูก
บั น ทึ ก ตอนสร้ า งไฟล์ และทุ ก ครั้ ง ที่ มี ก าร
แก้ไขข้อมูล
การจัดการกับไดเรกทอรี
ภาษา PHP มีฟังก์ชันที่ใช้จัดการเกี่ยวกับไดเรกทอรี ดังนี้
การอ่านไดเรกทอรี
 ฟังก์ชัน opendir ( )
เป็ น ฟั งก์ ชั น ส าหรั บ เปิ ดไดเรกทอรี เ พื่ อ อ่ า นรายชื่ อไฟล์ ภ ายใน โดยจะส่ งคื นค่ าเป็ น
Directory Hander (ตัวชี้ที่ใช้ชี้ไดเรกทอรี) หากเปิดไดเรกทอรีไม่ได้ จะคืนค่าเป็น False มีรูปแบบคาสั่งดังนี้
รูปแบบ
resource opendir ( string $path )
เมื่อ $path หมายถึง ไดเรกทอรีที่ต้องการเปิด
 ฟังก์ชัน closedir ( )
เป็นฟังก์ชันสาหรับปิดไดเรกทอรี มีรูปแบบคาสั่งดังนี้
รูปแบบ
void closedir ([ resource $dir_handle ] )
เมื่อ $dir_handle หมายถึง ตัวแปรที่ใช้เก็บค่าของตัวชี้ที่ใช้ชี้ไดเรกทอรี
 ฟังก์ชัน readdir ( )
เป็นฟังก์ชันสาหรับอ่านไดเรกทอรี มีรูปแบบคาสั่งดังนี้
รูปแบบ
string readdir ([ resource $dir_handle ] )
เมื่อ $dir_handle หมายถึง ตัวแปรที่ใช้เก็บค่าของตัวชี้ที่ใช้ชี้ไดเรกทอรี
ตัวอย่างที่ 9.20 การใช้ฟังก์ชัน opendir ( ), closedir ( ) และ readdir ( )
<?php
$dir = "/etc/php5/";
if (is_dir ($dir)) {
if ($dh = opendir ($dir)) {
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
160 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
while (($file = readdir ($dh)) !== false) {
echo "filename: $file : filetype: " . filetype ($dir . $file) . "<br/>";
}
closedir ($dh);
}
}
?>
 ฟังก์ชัน rewinddir ( )
เป็นฟังก์ชันสาหรับกลับไปที่ส่วนต้นของไดเรกทอรี มีรูปแบบคาสั่งดังนี้
รูปแบบ
void rewinddir ([ resource $dir_handle ] )
เมื่อ $dir_handle หมายถึง ตัวแปรที่ใช้เก็บค่าของตัวชี้ที่ใช้ชี้ไดเรกทอรี
การดูรายละเอียดของไดเรกทอรี
 ฟังก์ชัน dirname ( )
เป็นฟังก์ชันที่ใช้สาหรับแสดงพาธของไดเรกทอรี มีรูปแบบคาสั่งดังนี้
รูปแบบ
string dirname ( string $path )
เมื่อ $path หมายถึง พาธของไดเรกทอรี
 ฟังก์ชัน basename ( )
เป็นฟังก์ชันที่ใช้สาหรับแสดงชื่อของไฟล์ มีรูปแบบคาสั่งดังนี้
รูปแบบ
string basename ( string $path [, string $suffix ] )
เมื่อ $path หมายถึง พาธของไดเรกทอรี
$suffix หมายถึง ส่วนขยายไฟล์นั้น เช่น .php, .html, .txt หากไม่กาหนดค่าที่ได้จะ
มีทั้งชื่อไฟล์ และส่วนขยาย
ตัวอย่างที่ 9.21 การใช้ฟังก์ชัน basename ( )
<?php
$p = “c:/windows/php.ini” ;
$basel1 = basename ($p);
$basel2 = basename ($p, “ .ini”);

// ผลลัพธ์ คือ $base1 =” php.ini”
// ผลลัพธ์ คือ $base2 = “php”

?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 161
 ฟังก์ชัน realpath ( )
เป็นฟังก์ชันที่ใช้สาหรับแสดงพาธจริงทั้งหมด มีรูปแบบคาสั่งดังนี้
รูปแบบ
string realpath ( string $path )
เมื่อ $path หมายถึง พาธของไดเรกทอรี
ตัวอย่างที่ 9.22 การใช้ฟังก์ชัน realpath ( )
<?php
echo realpath('/windows/system32');

// ผลลัพธ์ คือ C:WINDOWSSystem32

?>
 ฟังก์ชัน pathinfo ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบพาธโดยการส่งคืนค่ากลับมาเป็นอาร์เรย์ที่สมาชิกแต่ละ
ตัวประกอบไปด้วย ชื่อไดเรกทอรี , basenameและส่วนขยายของไฟล์ อาร์เรย์ผลลัพธ์ที่จะได้อยู่ใน
รูปแบบ Key/Value โดยค่า Key จะประกอบไปด้วย dirname , basename และ extension มีรูปแบบ
คาสั่งดังนี้
รูปแบบ
mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME |
PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
เมื่อ $path หมายถึง พาธของไดเรกทอรี
$options หมายถึง กาหนดเพื่อดึงเฉพาะข้อมูลที่ต้องการ มี 4 ค่า ได้แก่
PATHINFO_DIRNAME เฉพาะข้อมูลไดเรกทอรี
PATHINFO_BASENAME เฉพาะข้อมูลชื่อไฟล์และนามสกุลไฟล์
PATHINFO_EXTENSION เฉพาะข้อมูลนามสกุลของไฟล์
PATHINFO_FILENAME เฉพาะข้อมูลชื่อไฟล์
หมายเหตุ
หากไม่ ระบุ option ฟังก์ชัน pathinfo ( ) จะคืน ค่า เป็ นอาร์เ รย์ ประกอบด้ว ยอิ นเด็ก ซ์
dirname, basename, extention, และ filename ซึ่งเก็บค่าไดเรกทอรี ชื่อไฟล์ (รวม
นามสกุลไฟล์) และชื่อไฟล์ ตามลาดับ
ตัวอย่างที่ 9.23 การใช้ฟังก์ชัน pathinfo ( )
<?php
$path_parts = pathinfo ('/www/htdocs/inc/lib.inc.php');
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
162 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
echo $path_parts ['dirname']. "<br/>";
echo $path_parts ['basename'] . "<br/>";
echo $path_parts ['extension'] . "<br/>"";
echo $path_parts ['filename'] . "<br/>";
?>
ผลลัพธ์
/www/htdocs/inc
lib.inc.php
php
lib.inc
การสร้างและลบไดเรกทอรี
 ฟังก์ชัน mkdir ( )
เป็นฟังก์ชันที่ใช้สาหรับสร้างไดเรกทอรี หากสร้างได้ ฟังก์ชันจะส่งคืนค่าเป็นจริง (True)
หากสร้างไม่ได้ เพราะมีไดเรกทอรีนั้นอยู่แล้ว หรือไม่ได้รับสิทธิ์ให้สร้างไดเรกทอรี (ขึ้นอยู่กับระบบความ
ปลอดภัยของแต่ละเครื่อง และการกาหนดค่า mode) ฟังก์ชันจะส่งคืนค่าเป็นเท็จ (False) มีรูปแบบ
คาสั่งดังนี้
รูปแบบ
bool mkdir ( string $pathname [, int $mode = 0777 ] )
เมื่อ $pathname คือ พาธของไดเรกทอรี
$mode
คือ โหมดของไดเรกทอรีที่ใช้ใน Unix เท่านั้น ในระบบปฏิบัติการ
MS-Windows พารามิเตอร์ตัวนี้จะไม่ถูกนามาใช้ โดยปริยาย
กาหนดให้ มีค่าโหมดเป็น 0777 สามารถศึกษารายละเอียด
เพิ่มเติมโหมดในฟังก์ชัน chmod ( )
ตัวอย่างที่ 9.24 การใช้ฟังก์ชัน mkdir ( )
<?php
mkdir ("/path/to/my/dir", 0700);
// สร้างไดเรกทอรีพร้อมกาหนดโหมดเป็น 0700
?>
 ฟังก์ชัน rmdir ( )
เป็นฟังก์ชันที่ใช้สาหรับลบไดเรกทอรี มีรูปแบบคาสั่งดังนี้
รูปแบบ
bool rmdir ( string $dirname )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 163
เมื่อ $dirname หมายถึง พาธของไดเรกทอรีที่ต้องการลบ
ตัวอย่างที่ 9.25 การใช้ฟังก์ชัน rmkdir ( )
<?php
if (!is_dir ('examples')) {
mkdir ('examples');
}
rmdir ('examples');
?>
การตรวจสอบการมีอยู่ของไฟล์และไดเรกทอรี
 ฟังก์ชัน file_exists ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่ามีไฟล์ หรือไดเรกทอรีตามที่ระบุอยู่หรือไม่ หากมีจะ
คืนค่ากลับมาเป็นค่า true
รูปแบบ
bool file_exists ( string $filename )
เมื่อ $filename หมายถึง ชื่อของไฟล์หรือไดเรกทอรีที่ต้องการตรวจสอบ
ตัวอย่างที่ 9.26 การใช้ฟังก์ชัน file_exists ( )
<?php
$filename = '/path/to/foo.txt';
if (file_exists ($filename)) {
echo "ตรวจพบไฟล์เอกสาร $filename";
} else {
echo "ไม่พบไฟล์เอกสาร $filename";
}
?>

การคัดลอกไฟล์และการเปลี่ยนแปลงชื่อไฟล์ พร้อมกับการย้ายไดเรกทอรี
 ฟังก์ชัน copy ( )
เป็นฟังก์ชันที่ใช้สาหรับ คัดลอกไฟล์ โดยกาหนดชื่อไฟล์ต้นฉบับ และชื่อไฟล์ปลายทางที่
น าไฟล์ คั ด ลอกไปไว้ หากก าหนดไดเรกทอรี ร วมกั บ ชื่ อ ไฟล์ จะหมายความว่ า ให้ คั ด ลอกไฟล์ ไ ปยั ง
ไดเรกทอรีที่ระบุ หากไดเรกทอรีของปลายทางมีชื่อไฟล์ซ้ากัน ฟังก์ชันจะนาไฟล์ที่คัดลอกทับไฟล์เดิมที่มี
อยู่ มีรูปแบบคาสั่งดังนี้
รูปแบบ
bool copy ( string $source , string $dest )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
164 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
เมื่อ $source หมายถึง ชื่อไฟล์ต้นฉบับ
$dest หมายถึง ชื่อไฟล์หรือตาแหน่งปลายทางที่จะคัดลอกไฟล์
ตัวอย่างที่ 9.27 การใช้ฟังก์ชัน copy ( )
<?php
$file = 'example.txt';
$newfile = 'example.txt.bak';
if (!copy ($file, $newfile)) {
echo "ไม่สามารถคัดลอกไฟล์ $file... ได้ <br/>";
}
?>
การเปลี่ยนชื่อไฟล์และย้ายไดเรกทอรี
 ฟังก์ชัน rename ( )
เป็นฟังก์ชันที่ใช้สาหรับ เปลี่ยนชื่อไฟล์ หากมีการกาหนดไดเรกทอรีร่วมกับชื่อไฟล์ใหม่
จะหมายถึงให้ย้ายไฟล์ไปยังไดเรกทอรีที่กาหนดด้วย และหากไดเรกทอรีนั้นมีชื่อไฟล์ซ้ากัน ฟังก์ชันจะ
เขียนไฟล์ใหม่ทับไฟล์เดิมที่มีอยู่ มีรูปแบบคาสั่งดังนี้
รูปแบบ
bool rename ( string $oldname , string $newname )
เมื่อ $oldname หมายถึง ชื่อไฟล์เดิม
$newname หมายถึง ชื่อไฟล์ใหม่
ตัวอย่างที่ 9.28 การใช้ฟังก์ชัน rename ( )
<?php
rename ("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>
การอัพโหลดไฟล์
ตัวแปร $_FILES
ตัวแปร $_FILES เป็นตัวแปรประเภท Superglobal ซึ่งเป็นตัวแปรพิเศษที่โปรแกรมสร้างขึ้นเพื่อ
เข้าถึงการทางานได้ทุกส่วนของสคริปต์ โดยตัวแปร $_FILES จะเก็บข้อมูลที่เกี่ยวกับไฟล์อัพโหลด (จะต้อง
ใช้รูปแบบการส่งฟอร์มแบบ HTTP POST method เท่านั้น) มีรูปแบบคาสั่งดังนี้
รูปแบบ
$_FILES [userfile] [key]

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 165
เมื่อ

userfile หมายถึง ชื่อที่กาหนดในแอทริบิวต์ name ที่ใช้รับชื่อไฟล์ที่ต้องการอัพ
โหลดจากเว็บฟอร์ม
key
หมายถึง คีย์ในตัวแปร $_FILES ที่ใช้เก็บค่าต่างๆ ของไฟล์ โดยที่ค่าคีย์
ของตัวแปร $_FILES มีดังนี้

ตารางที่ 9.5 ค่าคีย์ของตัวแปร $_FILES
คีย์
คาอธิบาย
name
ชื่อของไฟล์อัพโหลด
type
ชนิดของไฟล์อัพโหลด
tmp_name ไดเรกทอรี ฝั่ ง เซิ ร์ ฟ เวอร์ ส าหรั บ เก็ บ ไฟล์ อั พ โหลดชั่ ว คราว ซึ่ ง พาธก็ คื อ ค่ า ของ
"upload_tmp_dir" ส่วนชื่อไฟล์ PHP จะสร้างให้โดยอัตโนมัติ
error
ข้อผิดพลาดที่เกิดจากการอัพโหลด ซึ่งจะส่งคืนค่าแสดงเป็นตัวเลข มี 4 ค่า ได้แก่
 0 หมายถึง การอัพโหลดสมบูรณ์
 1 หมายถึง ขนาดไฟล์ใหญ่กว่าที่กาหนดใน upload_max_filesize (กาหนดใน
php.ini)
 2 หมายถึง ขนาดไฟล์ใหญ่กว่าที่กาหนดใน MAX_FILE_SIZE ซึ่งกาหนดในฟอร์ม
 3 หมายถึง มีเพียงเฉพาะบางส่วนของไฟล์เท่านั้นที่ถูกอัพโหลด
 4 หมายถึง ไม่มีไฟล์ที่อัพโหลด
size
ขนาดของไฟล์อัพโหลด (หน่วยเป็นไบต์)
ฟังก์ชันเกี่ยวกับการอัพโหลด
 ฟังก์ชัน is_upload_file ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่ามีการส่งไฟล์ที่ต้องการอัพโหลดหรือไม่ และไฟล์ที่ส่ง
มาเป็นแบบ POST หรือไม่ ซึ่งการอัพโหลดไฟล์จากเว็บฟอร์มจะต้องส่งแบบ POST เท่านั้น เพราะ
สามารถส่งข้อมูลที่มีความยาวไม่จากัด (การส่งแบบ GET จะจากัดความยาวในการส่งได้ไม่เกิน 255
ตัวอักษร) มีรูปแบบคาสั่งดังนี้
รูปแบบ
bool is_uploaded_file ( string $filename )
เมื่อ $filename หมายถึง ชื่อไฟล์ทต้องการตรวจสอบ
ี่
ตัวอย่างที่ 9.29 การใช้ฟังก์ชัน is_upload_file ( )
<?php
if (is_uploaded_file ($_FILES ['userfile'] ['tmp_name'])) {
echo "ไฟล์ ". $_FILES ['userfile'] ['name'] ." อัพโหลดสาเร็จแล้ว<br/>";
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
166 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
echo "มีรายละเอียด ดังต่อไปนี้ <br/>";
readfile ($_FILES ['userfile'] ['tmp_name']);
} else {
echo "การอัพโหลดไม่สาเร็จ กรุณาตรวจสอบไฟล์ใหม่ ::";
echo "ชื่อไฟล์ คือ '". $_FILES ['userfile'] ['tmp_name'] . "'.";
}
?>
 ฟังก์ชัน move_upload_file ( )
เนื่องจากการอัพโหลดไฟล์ของ PHP จะเก็บในไดเรกทอรีชั่วคราวก่อน แล้วจึงใช้ฟังก์ชัน
move_upload_file ( ) ย้ายไฟล์ที่ได้ไปเก็บในไดเรกทอรีปลายทางที่กาหนด หากย้ายไฟล์ได้สาเร็จ จะ
คืนค่าเป็นจริง (True) หากไม่สาเร็จ จะคืนค่าเป็นเท็จ (False) มีรูปแบบคาสั่งดังนี้
รูปแบบ
bool move_uploaded_file ( string $filename , string $destination )
เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการอัพโหลด
$destination หมายถึง ตาแหน่งไดเรกทอรีปลายทางที่จะเก็บไฟล์อัพโหลด
ตัวอย่างที่ 9.30 ฟอร์มอัพโหลดไฟล์ (แบบครั้งละ 1 ไฟล์)
//ก่ อ นอื่ น จะส่ ง ไฟล์ เ ข้ า เครื่ อ งเซิ ร์ ฟ เวอร์ ต้ อ งแก้ ฟ อร์ ม โดยเพิ่ ม enctype="multipart/form-data"
//และส่งไฟล์โดยใช้อินพุทชนิดไฟล์
<form action="uploading.php" method="post" enctype="multipart/form-data">
<br /><input type="file" name="picture" />
</form>
<?php // การใช้ฟังก์ชัน move_upload_file ( ) เพื่ออัพโหลดไฟล์
if (isset ($_FILES ['picture'])) { // ตรวจดูก่อนว่าอัพโหลดไฟล์เข้ามาจริงๆ
move_uploaded_file ($_FILES ['picture'] ['name']
,'uploads/' . $_FILES ['picture'] ['tmp_name']);
}
?>
ตัวอย่างที่ 9.31 ฟอร์มอัพโหลดไฟล์ (แบบหลายไฟล์)
//ก่ อ นอื่ น จะส่ ง ไฟล์ เ ข้ า เครื่ อ งเซิ ร์ ฟ เวอร์ ต้ อ งแก้ ฟ อร์ ม โดยเพิ่ ม enctype="multipart/form-data"
//และส่งไฟล์โดยใช้อินพุทชนิดไฟล์
<form action="uploading.php" method="post" enctype="multipart/form-data">
<br /><input type="file" name="pictures [ ]" />
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 9 การจัดการไฟล์และไดเรกทอรี 167
<br /><input type="file" name="pictures [ ]" />
<br /><input type="file" name="pictures [ ]" />
<br /><input type="file" name="pictures [ ]" />
<br /><input type="file" name="pictures [ ]" />
<input type="submit" />
</form>
<?php // move_upload_file ( ) เพื่ออัพโหลดไฟล์
if ( isset($_FILES ['pictures'])) {
foreach ($_FILES ['pictures'] ['error'] as $index => $value) {
if ($value == UPLOAD_ERR_OK) {
move_uploaded_file($_FILES['pictures']['tmp_name'][$index]
,'uploads/'.$_FILES['pictures']['name'][$index]);
}
}
}
?>
ฟังก์ชนการหาขนาด และชนิดของไฟล์
ั
ฟังก์ชันการหาขนาด และชนิดของไฟล์ มีดังนี้
ฟังก์ชัน filesize ( )
เป็นฟังก์ชันที่ใช้สาหรับหาขนาดของไฟล์ ซึ่งค่าที่ได้จะมีหน่วยเป็น byte หากต้องการเปลี่ยน
หน่วยเป็น KB ต้องหารด้วย 1,024 หากต้องการเปลี่ยนเป็น MB ต้องหารด้วย 1,048,576
รูปแบบ
int filesize ( string $filename )
เมื่อ $filename หมายถึง ชื่อของไฟล์ที่ต้องการหาขนาดของไฟล์
ตัวอย่างที่ 9.32 การใช้ฟังก์ชัน filesize ( )
<?php
$filename = 'somefile.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
168 บทที่ 9 การจัดการไฟล์และไดเรกทอรี
ฟังก์ชัน filetype ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่าไฟล์หรือไดเร็กทอรีที่ระบุ
• หากเป็นไฟล์ (File) จะคืนค่ากลับมาเป็นคาว่า file
• หากเป็นไดเร็กทอรี (Directory) จะคืนค่าเป็นคาว่า dir
นอกจากนี้แล้วอาจเป็นไปได้อื่นๆ เช่น char, block, link, unknown
รูปแบบ
string filetype ( string $filename )
เมื่อ $filename หมายถึง ชื่อของไฟล์ที่ต้องการหาขนาดของไฟล์
ตัวอย่างที่ 9.33 การใช้ฟังก์ชัน filetype ( )
<?php
echo filetype ('/etc/passwd');
echo filetype ('/etc/');

// file
// dir

?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10
การจัดการข้อมูลจากฟอร์ม
กระบวนการที่สาคัญของการสร้างเว็บแอปพลิเคชัน (Web Application) ก็คือ การนาข้อมูลที่ถูก
ส่งจากทางด้านบราวเซอร์ไปประมวลผลในฝั่งของเซิร์ฟเวอร์ จึงทาให้ต้องมีส่วนในการกาหนดข้อมูลที่จะ
ส่งไปประมวลผล ดังนั้ นในบทนี้จ ะศึกษาเกี่ยวกับการสร้างส่ วนสาหรับรับข้อมูล จากผู้ ใช้งาน เรียกว่า
"ฟอร์ม (Form)" โดยภายในฟอร์มนี้จะประกอบด้วยการรับข้อมูลได้หลายชนิด การรับข้อมูลในรูปแบบที่
แตกต่างกัน และขั้นตอนทางด้านเซิร์ฟเวอร์ก็จะเป็นวิธีการรับข้อมูลจากฟอร์มซึ่งจะแตกต่างตามชนิดของ
ข้อมูลที่รับเข้าไปประมวลผล
ลักษณะของฟอร์ม
ฟอร์มใช้การกาหนดองค์ประกอบต่างๆ ที่จะใช้ในการรับข้อมูลจากผู้ใช้ เพื่อจะส่งไปประมวลผล
ด้วย PHP ที่เซิร์ฟเวอร์ โดยภายในฟอร์มจะประกอบด้วยการรับข้อมูลในรูปแบบที่ต่างกัน เช่น Text Field
ใช้สาหรับรับข้อมูลชนิดสตริงหรือข้อความ หรือ Checkbox สาหรับแสดงข้อมูลแบบตัวเลือก เป็นต้น
ตัวอย่างลักษณะของตัวรับข้อมูล (HTML <input> Tag) ที่สาคัญของฟอร์ม มีรายละเอียดโดยสังเขปของ
ตัวรับข้อมูลแต่ละชนิด มีดังต่อไปนี้
ตารางที่ 10.1 ตัวรับข้อมูลที่สาคัญของฟอร์ม
แท็ก
คาอธิบาย
<form>
กาหนดฟอร์มเพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์
<input />
กาหนดการป้อนข้อมูล
<textarea>
กาหนดการป้อนข้อความแบบหลายบรรทัด
<label>
กาหนดป้ายชื่อตัวรับข้อมูล
<fieldset>
กาหนดขอบเขตของการป้อนข้อมูล
<legend>
กาหนดป้ายชื่อสาหรับขอบเขตของการป้อนข้อมูล (fieldset)
<select>
กาหนดรายการที่ให้เลือก (แบบ Drop-down)
<optgroup> กาหนดกลุ่มของตัวเลือก (options) ที่เกี่ยวข้องในรายการที่ให้เลือก
<option>
กาหนดตัวเลือกสาหรับรายการที่ให้เลือก
170 บทที่ 10 การจัดการข้อมูลจากฟอร์ม
Select

Text

Textarea
Radio
Checkbox
Button
ภาพที่ 10.1 แสดงตัวอย่างตัวรับข้อมูลของฟอร์ม
คานิยามและการใช้งานแท็ก form
แท็ก form ใช้ในการสร้างแบบฟอร์มสาหรับให้ผู้ใช้งานป้อนข้อมูล แบบฟอร์มสามารถบรรจุแท็ก
รับข้อมูล เช่น กล่องรับข้อความ (text fields) ช่องทาเครื่องหมาย (checkboxes) ปุ่มแบบเลือกตัวเดียว
(radio button) ปุ่มยืนยัน (submit buttons) และ อื่น ๆ แบบฟอร์มใช้ในการส่งข้อมูลไปยังเซิฟเวอร์
รูปแบบพื้นฐานของฟอร์ม มีรูปแบบดังต่อไปนี้
<form แอตทริบิวต์>
.
ตัวรับข้อมูลแบบต่าง ๆ
.
</form>
ตัวอย่างที่ 10.1 การสร้างแบบฟอร์มสาหรับให้ผู้ใช้งานป้อนข้อมูล
<form action="form_action.php" method="get">
ชื่อ: <input type="text" name="fname" />
นามสกุล: <input type="text" name="lname" />
<input type="submit" value="Submit" />
</form>
ตารางที่ 10.2 แสดงแอตทริบิวต์เฉพาะแท็ก form
แอตทริบิวต์ (Attribute)
ค่า
accept
MIME_type

คาอธิบาย
กาหนดชนิดของไฟล์ที่สามารถยืนยัน
เพื่อส่งผ่านการอัพโหลดไฟล์

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10 การจัดการข้อมูลจากฟอร์ม 171
ตารางที่ 10.2 (ต่อ)
แอตทริบิวต์ (Attribute)
ค่า
accept-charset
ชื่อชุดตัวอักษร
enctype

method
name
target

application/x-www-formurlencoded
multipart/form-data
text/plain
Get
post
ชื่อฟอร์ม
_blank
_parent
_self
_top
ชื่อเฟรมเซท

คาอธิบาย
กาหนดชุดตัวอักษรที่เซิฟเวอร์สามารถ
จัดการข้อมูลได้ เช่น utf-8
กาหนดวิธีในการเข้ารหัส ก่อนที่จะส่ ง
ข้อมูลให้เซิฟเวอร์

กาหนดวิธีในการส่งข้อมูล

กาหนดชื่อให้แบบฟอร์ม
ระบุที่ที่จะให้ลิงค์เปิด
_blank = เปิดวินโดว์ใหม่
_parent = เปิดในเอกสารหน้าที่เรียก
เอกสารนี้มา
_self = เปิดเอกสารหน้าเดิม
_top = เปิดเอกสารด้านบน
ชื่ อ เฟรมที่ ก าหนด (กรณี มี ก ารใช้
Frameset)
ตัวรับข้อมูล ที่สาคัญของฟอร์ม คือ ตัวรับข้อมูล ที่ใช้สาหรับรับ ข้อมูลจากผู้ใช้งาน ตัวรับข้อมูล
สามารถสร้างได้หลายแบบ ขึ้นอยู่กับแอตทริบิวต์ (Attribute) และชนิด (Type) เช่น ตัวรับข้อมูล เป็น
กรอบข้อความ กล่องตัวเลือก กล่องรหัสผ่าน ปุ่มส่งข้อมูล และอื่นๆ มีรายละเอียดดังต่อไปนี้
แท็ก input
แท็ก input ใช้ในการป้อนข้อมูลและส่งไปยังเซิ ร์ฟเวอร์ สามารถกาหนดได้หลายแบบ ขึ้นอยู่กับ
แอตทริบิวต์ type โดยสามารถกาหนดให้เป็นข้อมูลแบบข้อความ ช่องทาเครื่องหมาย (checkbox) ข้อมูล
แบบรหัสผ่าน และอื่นๆ
ตัวอย่างที่ 10.2 แท็ก input ใช้ในการป้อนข้อมูลและส่งไปยังเซิร์ฟเวอร์
<form action="input_action.php" method="post">
ชื่อ: <input type="text" name="fname" value="FirstName" />
นามสกุล: <input type="text" name="lname" value="LastName" />
<input type="submit" value="ยืนยัน" />
</form>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
172 บทที่ 10 การจัดการข้อมูลจากฟอร์ม

ภาพที่ 10.2 แสดงตัวอย่างผลลัพธ์ของฟอร์มโดยใช้แท็ก input ชนิด "Text"
ตารางที่ 10.3 แสดงแอตทริบิวต์เฉพาะแท็ก input
แอตทริบิวต์ (Attribute)
ค่า
accept
MIME_type
align

left
right
top
middle
bottom

alt

ข้อความ

checked

checked

disabled

disabled

maxlength

ตัวเลข

name
readonly

ชื่อ
readonly

คาอธิบาย
ก า ห น ด ช นิ ด ข อ ง ไ ฟ ล์ ที่ ส า ม า ร ถ
อัพโหลดได้ (เฉพาะ type="file")
กาหนดการวางแนวของการป้อนข้อมูล
แบบรูปภาพ (เฉพาะ type="image")
left=ชิดซ้าย
right=ชิดขวา
top=ชิดด้านบน
middle=กึ่งกลาง
bottom=ชิดด้านล่าง
กาหนดข้อความสารองให้กับการป้อน
ข้ อ มู ล แ บ บ รู ป ภ า พ ( เ ฉ พ า ะ
type="image")
ก าหนดให้ เ ลื อ กข้ อ มู ล นั้ น ในตอน
เริ่ ม ต้ น (ส าหรั บ type="checkbox"
หรือ type="radio")
กาหนดให้แท็ก input นั้นๆ ปิดการใช้
งาน (ไม่ ส ามารถใช้ง านได้ ) เมื่ อหน้ า
เพจโหลด
ก าหนดความยาวสู ง สุ ด (ตั ว อั ก ษร)
สาหรับการป้อนแบบข้อความ (สาหรับ
type="text" หรือ type="password")
กาหนดชื่อใหักับแท็ก input
กาหนดให้แท็ก input นั้น สามารถอ่าน
ได้ อ ย่ า งเดี ย ว (ส าหรั บ type="text"
หรือ type="password")

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10 การจัดการข้อมูลจากฟอร์ม 173
ตารางที่ 10.3 (ต่อ)
แอตทริบิวต์ (Attribute)
size
ตัวเลข
src

URL

type

button
checkbox
file
hidden
image
password
radio
reset
submit
text

value

ค่าเริ่มต้น

ค่า

คาอธิบาย
กาหนดความกว้างของการป้อนข้อมูล
แบบข้อความ
กาหนดที่ อยู่ (URL) ของรู ปภาพที่จ ะ
แ ส ด ง เ ป็ น ปุ่ ม ยื น ยั น ( ส า ห รั บ
type="image")
กาหนดชนิดของการป้อนข้อมูล
button=ปุ่ม
checkbox=ช่องทาเครื่องหมาย
file=ไฟล์
hidden=ซ่อนไว้
image=รูปภาพ
password=รหัสผ่าน
radio=ช่องแบบเลือกอย่างเดียว
reset=ปุ่มเคลียร์ข้อมูล
submit=ปุ่มยืนยันข้อมูล
text=ข้อความ
กาหนดค่าให้กับแท็ก input

แท็ก textarea
แท็ก textarea ใช้ในการป้อนข้อมูลแบบหลายบรรทัด สามารถรับข้อความได้ไม่จากั ด และ
ข้อความจะแสดงผลในฟอนต์มาตรฐาน (ปรกติ คือ Courier) ขนาดของ textarea จะกาหนดได้โดย
แอตทริบิวต์ cols และ rows และจะดีกว่าถ้ากาหนดผ่านทาง css ทางคุณสมบัติ height และ width
ตัวอย่างที่ 10.3 แท็ก textarea ใช้ในการป้อนข้อมูลแบบหลายบรรทัด
<textarea rows="2" cols="20">
textarea แสดงผล 2 บรรทัด และยาว 20 ตัวอักษร
</textarea>

ภาพที่ 10.3 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก textarea

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
174 บทที่ 10 การจัดการข้อมูลจากฟอร์ม
ตารางที่ 10.4 แสดงแอตทริบิวต์เฉพาะแท็ก textarea
แอตทริบิวต์ (Attribute)
ค่า
cols
ตัวเลข
rows
ตัวเลข
disabled
disabled

name
readonly

ชื่อ
readonly

คาอธิบาย
กาหนดความกว้างของ textarea
กาหนดจานวนแถวของ textarea
กาหนดให้ textarea ปิดการใช้งาน
(ไม่ ส ามารถใช้ ง านได้ ) เมื่ อ หน้ า เพจ
โหลด
กาหนดชื่อใหักับ textarea
กาหนดให้ textarea สามารถอ่านได้
อย่างเดียว

แท็ก label
แท็ก label ใช้ในการกาหนดป้ายหรือข้อความให้กับ แท็ก input โดยที่แท็ก label ไม่ได้แสดง
อะไรเป็นพิเศษสาหรับผู้ใช้ อย่างไรก็ตาม แท็ก label ได้พัฒนาการใช้งานของเมาส์ เพราะถ้าผู้ใช้คลิ กบน
ข้อความของแท็ก label มันจะสลับการควบคุมที่ผู กติดอยู่ ดังตัวอย่าง ถ้าคลิ กที่ "ผู้ชาย" ก็จะเป็นการ
เลือกตัวเลือกของแท็ก input ที่เป็นผู้ชาย (male)
แอตทริบิวต์ for ของแท็ก label ควรมีค่าเท่ากับแอตทริบิวต์ id ของแท็กที่เกี่ยวข้อง เพื่อจะผูก 2
แท็กเข้าด้วยกัน ดังตัวอย่าง แอตทริบิวต์ for ="male" ของแท็ก label มีค่าเท่ากับ แอตทริบิวต์
id = "male" ของแท็ก input
ตัวอย่างที่ 10.4 แท็ก label ใช้ในการกาหนดป้ายหรือข้อความให้กับแท็ก input
<form>
<label for="male">ผู้ชาย</label>
<input type="radio" name="sex" id="male" />
<br />
<label for="female">ผู้หญิง</label>
<input type="radio" name="sex" id="female" />
</form>

ภาพที่ 10.4 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก label

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10 การจัดการข้อมูลจากฟอร์ม 175
ตารางที่ 10.5 แสดงแอตทริบิวต์เฉพาะแท็ก label
แอตทริบิวต์ (Attribute)
ค่า
for
ไอดีของแท็กอื่นๆ

คาอธิบาย
กาหนดแท็ก label ไปผู กติดกับตัว
ควบคุมของแท็กนั้นๆ

แท็ก fieldset
แท็ก fieldset ใช้ในการจัดกลุ่มในทางลอจิกในแบบฟอร์ม โดยใช้แท็ก fieldset วาดกรอบ
ล้อมรอบแบบฟอร์ม และใช้แท็ก legend ในการระบุชื่อของแต่ละแท็ก fieldset
ตัวอย่างที่ 10.5 แท็ก fieldset ใช้ในการจัดกลุ่มในทางลอจิกในแบบฟอร์ม
<form>
<fieldset>
<legend>ข้อมูลส่วนบุคคล:</legend>
ชื่อ: <input type="text" size="30" /><br />
e-mail: <input type="text" size="30" /><br />
วันเดือนปีเกิด: <input type="text" size="10" />
</fieldset>
</form>

ภาพที่ 10.5 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก fieldset ในการจัดกลุ่มของแท็ก input
แท็ก legend
แท็ก legend ใช้ในการกาหนดหัวข้อให้กับแท็ก fieldset
ตารางที่ 10.6 แสดงแอตทริบิวต์เฉพาะแท็ก legend
แอตทริบิวต์ (Attribute)
ค่า
align
top
bottom
left
right

คาอธิบาย
กาหนดการวางแนวสาหรับหัวข้อของ
แท็ก fieldset

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
176 บทที่ 10 การจัดการข้อมูลจากฟอร์ม
แท็ก select
แท็ก select ใช้ในการสร้างรายการแบบเลือก (drop-down list) โดยใช้แท็ก option ภายใน
แท็ก select เป็นการสร้างรายการตัวเลือกให้กับรายการแบบเลือก
ตัวอย่างที่ 10.6 แท็ก OPTION ภายในแท็ก select
<select>
<option value="Bangkok">กรุงเทพฯ</option>
<option value="Nonthaburi">นนทบุรี</option>
<option value="Nakhonratchasima">นครราชสีมา</option>
<option value="Srisaket">ศรีสะเกษ</option>
</select>

ภาพที่ 10.6 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select
ตารางที่ 10.7 แสดงแอตทริบิวต์เฉพาะแท็ก select
แอตทริบิวต์ (Attribute)
ค่า
disabled
disabled
multiple
multiple
name
size

ชื่อ
ตัวเลข

คาอธิบาย
กาหนดให้ไม่สามารถใช้งานตัวเลือกได้
ก าหนดให้ ส ามารถเลื อ กได้ ห ลายๆ
ตัวเลือก
กาหนดชื่อให้กับรายการตัวเลือก
กาหนดตัวเลขของตัว เลือกที่จะแสดง
ในรายการตั ว เลื อ ก (ถ้ า ตั ว เลื อ ก
มากกว่าเลขจานวนนี้ จะขึ้นแถบเลื่อน)

แท็ก optgroup
แท็ก optgroup ใช้ในการจัดกลุ่มตัวเลือกที่เกี่ยวข้องกันในรายการการเลือก (select list) จะใช้
ในกรณีทมีรายการมากๆ เป็นลักษณะของกลุ่มตัวเลือก ซึงจะทาให้จัดการได้ง่ายกว่าสาหรับผู้ใช้งาน
ี่
่
ตัวอย่างที่ 10.7 แท็ก optgroup ใช้ในการจัดกลุ่มตัวเลือกที่เกี่ยวข้องกันในรายการการเลือก
<select>
<optgroup label="ภาคกลาง">

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10 การจัดการข้อมูลจากฟอร์ม 177
<option value="Bangkok">กรุงเทพฯ</option>
<option value="Nonthaburi">นนทบุรี</option>
</optgroup>
<optgroup label="ภาคตะวันออกเฉียงเหนือ">
<option value="Nakhonratchasima">นครราชสีมา</option>
<option value="Srisaket">ศรีสะเกษ</option>
</optgroup>
</select>

ภาพที่ 10.7 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTGROUP
ตารางที่ 10.8 แสดงแอตทริบิวต์เฉพาะแท็ก OPTGROUP
แอตทริบิวต์ (Attribute)
ค่า
label
ข้อความ
disabled
disabled

คาอธิบาย
กาหนดคาอธิบายสาหรับกลุ่มตัวเลือก
ก าหนดให้ ไ ม่ ส ามารถใช้ ง านกลุ่ ม
ตัวเลือกได้

แท็ก option
แท็ก option กาหนดตัวเลือกสาหรับรายการเลือก โดยแท็ก option จะอยู่ภายในแท็ก select
ตัวอย่างที่ 10.8 แท็ก option กาหนดตัวเลือกสาหรับรายการเลือก
<select>
<option value="Bangkok">กรุงเทพฯ</option>
<option value="Nonthaburi">นนทบุรี</option>
<option value="Nakhonratchasima">นครราชสีมา</option>
<option value="Srisaket">ศรีสะเกษ</option>
</select>

ภาพที่ 10.8 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
178 บทที่ 10 การจัดการข้อมูลจากฟอร์ม
ตารางที่ 10.9 แสดงแอตทริบิวต์เฉพาะแท็ก OPTION
แอตทริบิวต์ (Attribute)
ค่า
disabled
disabled
label
ข้อความ
selected
selected
value

ข้อความ

คาอธิบาย
กาหนดให้ไม่สามารถใช้งานตัวเลือกได้
กาหนดป้ายชื่อแบบสั้นให้กับตัวเลือก
ก าหนดให้ ตั ว เลื อ กถู ก เลื อ กเป็ น ค่ า
เริ่มต้น
ก าหนดค่ า ที่ จ ะส่ ง ให้ เ ซิ ฟ เวอร์ เ มื่ อ
แบบฟอร์มได้รับการยืนยัน

แท็ก button
แท็ก button จะกาหนดปุ่มขึ้นมา ภายในแท็ก button สามารถใส่เนื้อหา เช่น ข้อความหรือ
รูปภาพได้ และมีความแตกต่างจากปุ่มที่ถูกสร้างโดยแท็ก input โดยจะต้องกาหนดแอตทริบิวต์ type
สาหรับปุ่มเสมอ แอตทริบิวต์ type เริ่มต้นสาหรับ Internet Explorer คือ "button" ในขณะที่
เบราว์เซอร์อนๆ (และในข้อกาหนดของ W3C) จะกาหนดเป็น "submit"
ื่
ตัวอย่างที่ 10.9 แท็ก button
<button type="button">บันทึก</button>

ภาพที่ 10.9 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก button
ตารางที่ 10.10 แสดงแอตทริบิวต์เฉพาะแท็ก button
แอตทริบิวต์ (Attribute)
ค่า
disabled
disabled
name
ชื่อ
type
button
reset
submit

value

ข้อความ

คาอธิบาย
กาหนดให้ปุ่มไม่สามารถใช้งานได้
กาหนดชื่อให้กับปุ่ม
กาหนดชนิดของปุ่ม
button=ปุ่ม
reset=ปุ่มลบข้อความในแบบฟอร์ม
submit=ปุ่ ม กดยื น ยั น ส่ ง ข้ อ ความใน
แบบฟอร์ม
กาหนดค่าเริ่มต้นของปุ่ม

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10 การจัดการข้อมูลจากฟอร์ม 179
การจัดการข้อมูลจากฟอร์มในฝั่งเซิร์ฟเวอร์
โดยปกติแล้วข้อมูลที่รับผ่านฟอร์มต้องถูกส่งไปประมวลผลด้วย PHP ที่เซิร์ฟเวอร์ ดังนั้นต้องสร้าง
ส่วนสาหรับรับข้อมูลจากฟอร์มนี้ไปประมวลผล ในลักษณะดังนี้
ฟอร์มผ่านบราวเซอร์ฝั่งไคลเอนต์

การทางานของ PHP ในฝั่งเซิร์ฟเวอร์
<?php
รับข้อมูล
ประมวลผล
แสดงผล
?>

ภาพที่ 10.10 แสดงการจัดการข้อมูลจากฟอร์มทางด้านเซิร์ฟเวอร์
ในการรับข้อมูลในฝั่งเซิร์ฟเวอร์นั้น ก่อนอื่นต้องทราบก่อนว่าข้อมูลนั้นถูกส่งมาด้วยเมธอดใด ซึ่งดู
ได้จากแท็ก form แอตทริบิวต์ method ของฟอร์มตามที่ได้กล่าวมาแล้วข้างต้น ทั้งนี้เพราะวิธีการอ่าน
ข้อมูลที่ส่งด้วยเมธอด GET และ POST จะแตกต่างกัน มีรายละเอียดดังต่อไปนี้
การอ่านข้อมูลที่ส่งด้วยเมธอด GET
หากข้อมูลถูกส่งมาด้วยเมธอด GET การอ่านข้อมูลในฝั่งเซิร์ฟเวอร์จะใช้ตัวแปร $_GET ใน
รูปแบบดังนี้
$_GET ['ชื่อ input'];
เมื่อ ชื่อ input คือ แอตทริบิวต์ "name" ของ input ที่ต้องการอ่านข้อมูลนั่งเอง เช่น หากที่
ฟอร์มกาหนดชื่อ input เป็น "keyword" จะอ่านข้อมูลที่เซิร์ฟเวอร์ดังนี้
$test = $_GET ['keyword'];
หมายเหตุ
ในกรณีที่ฟอร์มไม่ได้ระบุเมธอดเอาไว้ บราวเซอร์จะเลือกใช้เมธอด GET เป็นค่าปริยายในการส่ง
ข้อมูล

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
180 บทที่ 10 การจัดการข้อมูลจากฟอร์ม
การอ่านข้อมูลที่ส่งด้วยเมธอด POST
หากข้อมูลถูกส่งมาด้วยเมธอด POST การอ่านข้อมูลในฝั่งเซิร์ฟเวอร์จะใช้ตัวแปร $_POST ใน
รูปแบบดังนี้
$_POST ['ชื่อ input'];
เช่น หากที่ฟอร์มกาหนดชื่อ input เป็น "login" จะอ่านข้อมูลในฝั่งเซิร์ฟเวอร์ดังนี้
$login = $_POST ['login'];
การตรวจสอบเมธอดที่ส่งข้อมูล
บางครั้งการเขียนโปรแกรมนั้นจะต้องรองรับการทางานแบบไดนามิก จึงไม่อาจกาหนดได้ล่วงหน้า
ว่า ข้อมูลถูกส่งมาด้วยเมธอดใด แต่สามารถตรวจสอบได้จากตัวแปร $_SERVER ['REQUEST_METHOD']
มีตัวอย่างดังนี้
ตัวอย่างที่ 10.10 การใช้ตัวแปรจาก ตัวแปร $_SERVER ['REQUEST_METHOD']
<?php
$method = $_SERVER ['REQUEST_METHOD'];
if ($method == "GET"){
$x = $_GET ['x'];
} else if ($method == "POST") {
$x = $_POST ['x'];
}
?>
การอ่านข้อมูลจาก input ชนิดข้อความ
input ประเภทข้อความที่สาคัญ ได้แก่ Text, Password, Textarea และ Hidden ซึ่งการอ่าน
ข้อมูลจาก input ประเภทนี้ ก็อ่านจากตั วแปร $_GET หรือ $_POST ตามเมธอดที่ถูกส่งเข้ามา โดย
ผลลัพธ์ที่ได้ คือ ข้อมูลที่ใส่ลงไปใน input แต่ถ้าเป็น Hidden จะได้เป็นข้อมูลที่กาหนดให้แก่ input ใน
ส่วนของแอตทริบิวต์ "value" ตัวอย่างดังนี้
ตัวอย่างที่ 10.11 การอ่านข้อมูลจาก input ชนิดข้อความ
<form action="form_action.php" method="GET">
ชื่อ: <input type="text" name="fname" />
นามสกุล: <input type="text" name="lname" />
รหัสผ่าน: <input type="password" name="pswd" />
<input type="submit" value="Submit" />
</form>
ที่ฝั่งของเซิร์ฟเวอร์จะอ่านข้อมูลในลักษณะ ดังต่อไปนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10 การจัดการข้อมูลจากฟอร์ม 181

<?php
$fname = $_GET ['fname'];
$lname = $_GET ['lname'];
$pswd = $_GET ['pswd'];
?>
การอ่านข้อมูลจาก input ชนิด Radio
จากที่ได้กล่าวไปแล้วข้างต้นเกี่ยวกับ input ชนิด Radio ว่า ตัวเลือกที่อยู่ในกลุ่มเดียวกันต้อง
กาหนดแอตทริบิวต์ "name" ให้เป็นชื่อเดียวกัน เพื่อให้เลือกได้เพียงรายการเดียวในกลุ่มนั้น ซึ่งในการ
อ่านข้อมูลจาก input ชนิด Radio จะใช้วิธีการเดียวกับ input อื่นๆ โดยค่าที่อ่านได้จะเป็นค่าที่กาหนด
ให้แก่แอตทริบิวต์ "value" ของ input ที่ถูกเลือก แต่อย่างไรก็ตามหากผู้ใช้ไม่ได้เลือกรายการใดๆ เลยจะ
ไม่มีข้อมูลของ input ชนิด Radio ที่ถูกส่งไปยังเซิร์ฟเวอร์ ดังนั้นเพื่อป้องกันข้อผิดพลาดของการนาข้อมูล
ไปใช้งานในขั้นตอนต่อๆ ไป จึงควรตรวจสอบด้วยฟังก์ชัน isset ( ) ก่อนการอ่านข้อมูลจาก input ชนิดนี้
เสมอ ตัวอย่างดังต่อไปนี้
ตัวอย่างที่ 10.12 การตรวจสอบข้อมูลด้วยฟังก์ชัน isset ( )
<form action="form_action.php" method="POST">
<input type="radio" name="animal" value="แมว" /> แมว
<input type="radio" name="animal" value="หนู" /> หนู
<input type="radio" name="animal" value="สุนัข" /> สุนัข
<input type="radio" name="animal" value="นก" /> นก
</form>
ตัวอย่างที่ 10.13 การตรวจสอบและอ่านข้อมูล
<?php
if (isset ($_POST ['animal'])) {
$animal = $_POST ['animal'];
echo "สัตว์ที่ท่านเลือก คือ $animal <br/>";
}
?>
การอ่านข้อมูลจาก input ชนิด Checkbox
การอ่านข้อมูลจาก Checkbox จะคล้ายกับ input ประเภทข้อความ แต่ข้อมูลจะถูกส่งไปยัง
เซิร์ฟเวอร์เฉพาะรายการที่ถูกเลือก (checked) เท่านั้น ส่วนรายการที่ไม่ได้เลือกจะไม่ถูกส่งไป ตัวอย่าง
ดังต่อไปนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
182 บทที่ 10 การจัดการข้อมูลจากฟอร์ม
ตัวอย่างที่ 10.14 การอ่านข้อมูลจาก Checkbox
<form action="form_action.php" method="POST">
<input type="checkbox" name="red" value="แดง" /> แดง
<input type="checkbox" name="green" value="เขียว" /> เขียว
<input type="checkbox" name="yellow" value="เหลือง" /> เหลือง
<input type="checkbox" name="blue" value="น้าเงิน" /> น้าเงิน
</form>
ตัวอย่างการอ่านค่าข้อมูล (จากตัวอย่างสมมติว่าเลือกเฉพาะ "แดง เขียว และเหลือง" เพียง 3
รายการเท่านั้น)
ตัวอย่างที่ 10.15 การกาหนดค่าข้อมูลที่ได้รับมาจาก Checkbox
<?php
$red = $_POST ['red'];
// $red = "แดง"
$green = $_POST ['green']; // $green = "เขียว"
$yellow = $_POST ['yellow']; // $yellow = "เหลือง"
$blue = $_POST ['blue'];
// $blue = null มีค่าเป็นค่าว่าง
?>
แต่เนื่องจากไม่สามารถทราบได้ล่ว งหน้าได้ว่า ผู้ใช้จะเลือกรายการใดบ้าง ดังนั้นเพื่อป้องกัน
ข้อผิดพลาดของการนาข้อมูลไปใช้ในขั้นตอนต่อๆ ไป ก่อนที่จะอ่านข้อมูลจาก input ประเภท checkbox
ควรตรวจสอบก่อนว่าผู้ใช้เลือกรายการนั้นหรือไม่ โดยใช้ฟังก์ชัน isset ( ) มีตัวอย่างรูปแบบดังนี้
<?php
if (isset ($_POST ['red'])) {
...
...
}
if (isset ($_POST ['green'])) {
...
...
}
?>
แต่อย่างไรก็ตาม กรณีที่ฟอร์มมี input ชนิด checkbox อยู่เป็นจานวนมาก การที่จะคอย
ตรวจสอบ input ทีละตัวแบบนี้อาจไม่สะดวกนัก ซึ่งหากมี checkbox จานวนมาก สามารถเปลี่ยนไปใช้
วิธีส่งข้อมูลแบบอาร์เรย์แทนก็ได้ ซึ่งจะกล่าวถึงในลาดับต่อไป
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 10 การจัดการข้อมูลจากฟอร์ม 183
การอ่านข้อมูลจาก input ชนิด Select
การอ่านข้อมูลจาก input ชนิด Select หากไม่ได้กาหนดให้เลือกได้หลายค่า จะทาให้เลือกได้
เพียงรายการเดียว ซึ่งกรณีนี้การอ่านข้อมูลจะคล้ายกับ input ประเภทข้อความ โดยค่าที่กาหนดให้แก่
แอตทริบิวต์ "value" ของแท็ก "Option" ที่ถูกเลือก ตัวอย่างดังต่อไปนี้
ตัวอย่างที่ 10.16 การอ่านข้อมูลจาก input ชนิด Select
<form action="form_action.php" method="POST">
<select name = "color">
<option value="red" /> แดง </option>
<option value="green" /> เขียว </option>
<option value="blue" /> น้าเงิน </option>
</select>
</form>
ตัวอย่างที่ 10.17 ตัวอย่างการอ่านค่าข้อมูล
<?php
$color = $_POST ['color'];
?>
จากตัวอย่าง หากเลือกรายการ "น้าเงิน" ตัวแปร $color จะมีค่าเป็น "blue" แต่สาหรับกรณีที่
กาหนดแอตทริบิวต์เป็นแบบ multiple ด้วย จะทาให้สามารถเลือกได้มากกว่า 1 รายการ ดังนั้นจะต้อง
กาหนดแอตทริบิวต์ "name" ให้เป็นแบบอาร์เรย์
การส่งข้อมูลแบบอาร์เรย์
ในกรณีที่ฟอร์มจะต้องมี input ชนิดเดียวกันอยู่เป็นจานวนมาก เช่น มี Checkbox จานวน 10
รายการ เป็นต้น ซึ่งหากจะต้องเขียนโปรแกรมเพื่ออ่านข้อมูลจาก input เหล่านั้นทีละรายการ คงจะไม่
สะดวกนัก ดังนั้นเพื่อเป็นการแก้ปัญ หานี้ จะเปลี่ยนมาใช้การส่งและการรับข้อมูลแบบอาร์เรย์แทน โดยมี
วิธีการดังต่อไปนี้
การเตรียมการทางด้านฟอร์ม
ทางด้านฟอร์ม ต้องกาหนดแอตทริบิวต์ "name" ของ input ชนิดเดียวกัน และอยู่ในกลุ่ม
เดียวกันให้เป็นชื่อเดียวกัน และลงท้ายชื่อนั้นด้วยเครื่องหมาย [ ] เพื่อทาให้อยู่ในรูปแบบของอาร์เรย์นั่ง
เอง ซึ่งวิธีการนี้สามารถนาไปใช้ได้กับ input ทุกประเภท
ตัวอย่างที่ 10.18 กาหนดแอตทริบิวต์ "name" ของ input ชนิดเดียวกัน
<form action="form_action.php" method="POST">
<input type="text" name="mytext [ ]" /> <br/>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
184 บทที่ 10 การจัดการข้อมูลจากฟอร์ม
<input type="text" name="mytext [ ]" /> <br/>
<input type="text" name="mytext [ ]" /> <br/>
<input type="text" name="mytext [ ]" /> <br/>
</form>
การจัดการทางด้านเซิร์ฟเวอร์
ด้านเซิร์ฟเวอร์จะอ่านข้อมูลที่ถูกส่งเข้ามา โดยใช้รูปแบบดังนี้
$_POST [ ชื่อ input ] [ เลขลาดับอาร์เรย์ ];
โดยที่ "เลขลาดับอาร์เรย์" คือ ลาดับของข้อมูลที่ถูกส่งมายังเซิร์ฟเวอร์ เช่น ถ้ามี input ชนิด
Text จานวน 10 รายการๆ แรกจะมีลาดับเป็น 0 ต่อไปเป็น 1, 2, 3, ... ตามลาดับ ตัวอย่างดังนี้
ตัวอย่างที่ 10.19 การอ่านค่าจาก input ชนิดเดียวกันในรูปแบบอาร์เรย์
<?php
$text1 = $_POST ['mytext'] [0];
$text2 = $_POST ['mytext'] [1];
$text3 = $_POST ['mytext'] [2];
?>
ตัวอย่างที่ 10.20 การอ่านค่าจาก input ชนิดเดียวกันในรูปแบบอาร์เรย์ โดยใช้คาสั่งทาซ้า for
หรือ foreach อ่านข้อมูลได้ ดังนี้
<?php
$count = count ($_POST ['mytext']); // ใช้สาหรับนับจานวนสมาชิกในอาร์เรย์ mytext
for ($loop = 0; $loop < $count; $loop++) {
echo $_POST ['mytext'] [$loop] . "<br />";
}
// หรือใช้ foreach ดังนี้
foreach ($_POST ['mytext'] as $value) {
echo $value . "<br/>";
}
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 11
คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ
การเชื่อมต่อระหว่างบราวเซอร์และเซิร์ฟเวอร์นั้น จะเกิดขึ้นเมื่อบราวเซอร์ส่ง Request ออกไป
และเมื่อเซิร์ฟเวอร์ส่งข้อมูลผลลัพธ์กลับมาครบทั้งหมดแล้ว การเชื่อมต่อก็เป็นอันสิ้นสุดลง ซึ่งก็จะส่งผลให้
ข้อมูลต่างๆ ที่ถูกสร้างขึ้นภายในเพจที่เรียกใช้ในขณะนั้นถูกทาลายลงไปด้วย แต่ถ้าข้อมูลที่ถูกสร้างขึ้นใน
เพจนี้เรามีความจาเป็นต้องนาไปใช้ในเพจอื่นๆ ด้วย ทาอย่างไรจึงจะเก็บรักษาข้อมูลนั้นเอาไว้ได้ ดังนั้นใน
บทนี้จะมาศึกษาถึงวิธีการที่จะจัดเก็บข้อมูลเพื่อให้สามารถนาไปใช้งานระหว่างเพจได้ ที่จะกล่าวถึงในที่นี้
คือ Cookie, Session, Hidden และ Query String
เฮดเดอร์ (Header)
เฮดเดอร์ เป็นข้อมูลบางอย่างที่ใช้ในการสื่อสารกันระหว่างเซิร์ฟเวอร์ และบราวเซอร์ เฮดเดอร์นี้อาจ
เป็นข้อมูลที่ส่งจากเซิร์ฟเวอร์ไปยังบราวเซอร์ หรือส่งจากบราวเซอร์ไปยังเซิร์ฟเวอร์ก็ได้ โดยวัตถุประสงค์ของ
การส่งเฮดเดอร์นั้นมีหลายลักษณะ การกาหนดเฮดเดอร์จะใช้ฟังก์ชัน header ( ) ซึ่งมีรูปแบบดังนี้
รูปแบบ
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
เมื่อ $string หมายถึง ชื่อ เฮดเดอร์ มี ห ลายลั ก ษณะขึ้ น อยู่กั บ ว่ าจะส่ งข้ อ มู ล อะไรไปยั ง
บราวเซอร์
$replace หมายถึง การแทนที่ ค่าโดยปริยายคือ true
$http_response_code หมายถึง ลักษณะการตอบสนอง จะต้องกาหนดให้อยู่ในสตริง
เดียวกันกับชื่อเฮดเดอร์
ตัวอย่างที่ 11.1 การย้ายหน้าเว็บเพจ (Webpage Redirect) ไปยัง URL อื่น ๆ
<?php
header ('Location: http://www.freebsd.sru.ac.th/');
?>
ตัวอย่างที่ 11.2 การย้ายหน้าเว็บเพจแบบ refresh (หน่วงเวลาก่อนเปลี่ยนหน้าเว็บเพจ มีหน่วยเป็นวินาที)
<?php
header ('Refresh: 10; url=http:// www.freebsd.sru.ac.th/');
?>
186 บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ
ตัวอย่างที่ 11.3 การกาหนดภาษาที่ใช้ในหน้าเว็บ
<?php
header ('Content-language: en');
?>
ตัวอย่างที่ 11.4 header สาหรับการสร้าง file download
<?php
header ('Content-Type: application/octet-stream');
header ('Content-Disposition: attachment; filename="example.zip"');
header ('Content-Transfer-Encoding: binary');
?>
ตัวอย่างที่ 11.5 การสร้าง webpage โดยไม่ให้มีการเขียน cache
<?php
header ('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
?>
ตัวอย่างที่ 11.6 การกาหนดประเภทของ content เว็บ
<?php
header ('Content-Type: text/html; charset=iso-8859-1');
header ('Content-Type: text/html; charset=utf-8');
header ('Content-Type: text/plain');
// plain text file
header ('Content-Type: image/jpeg');
// JPG picture
header ('Content-Type: application/zip'); // ZIP file
header ('Content-Type: application/pdf'); // PDF file
header ('Content-Type: audio/mpeg');
// Audio MPEG (MP3,...) file
?>
การส่งข้อมูลระหว่างเพจแบบ Query String
Query String คือ รูปแบบการส่งข้อมูลจากเพจหนึ่งไปยังอีกเพจหนึ่ง โดยแนบข้อมูลต่อท้าย
URL มีตัวอย่างดังต่อไปนี้
ตัวอย่างที่ 11.7 การส่งข้อมูลระหว่างเพจแบบ Query String
http://localhost/login.php?username=admin&password=123
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ 187
จากตัวอย่าง มีความหมายดังนี้
? หมายถึง ใช้คั่น URL กับข้อมูลที่จะแนบไป
& หมายถึง ใช้คั่นตัวแปรแต่ละตัว
= หมายถึง ใช้คั่นระหว่างตัวแปรและค่าของตัวแปร เช่น password=123
+ หมายถึง ใช้แทนช่องว่าง 1 ช่องของชุด URL เช่น keyword=parinya+noidonprai
% หมายถึง ใช้แทนอักขระพิเศษที่ไม่ใช่ตัวอักษรหรือตัวเลข โดยจะใช้เครื่องหมาย % นาหน้า
เลขฐาน 16 ที่จะใช้แทนอักขระตัวนั้นๆ เช่น %28 ใช้แทนเครื่องหมายวงเล็บเปิด เป็นต้น
สาหรับการอ่านข้อมูลที่เพจปลายทางที่รับข้อมูล ทาได้หลายลักษะ ดังนี้
 ใช้ตัวแปร $_GET เหมือนกับการอ่านข้อมูลที่ส่งจากฟอร์มด้วยเมธอด GET ตามปกติ
เช่น $x = $_GET ['x'];
 ถ้าต้องการอ่าน Query String ทั้งหมดออกมาจาก URL เช่น อาจเพื่อส่งต่อไปยังเพจอื่นๆ ก็
สามารถอ่านจากตัวแปร $_SERVER ['Query_STRING']
ตัวอย่างที่ 11.8 ต้องการอ่าน Query String ทั้งหมดออกมาจาก URL
$qrystr = $_SERVER ['Query_STRING'];
// $qrystr = "x=123&y=abc"
$goto = "nextpage.php" . "?" . $qrystr;
header ("Location: $goto");
 ใช้ฟังก์ชัน parse_str ( ) ซึ่งจะได้ผลลัพธ์เป็นตัวแปรพารามิเตอร์ และค่าของตัวแปรนั้น ดังนี้
ตัวอย่างที่ 11.9 การใช้ฟังก์ชัน parse_str ( )
$qrystr = $_SERVER ['Query_STRING'];
parse_str ($qrystr); // จะได้ตัวแปรดังนี้ คือ $x = 123 และ $y = "abc"
การจัดเก็บข้อมูลแบบคุกกี้
คุกกี้ (Cookie) เป็น รูป แบบของการเก็บรักษาข้อมูลบางอย่างไว้บนเครื่องของผู้ ใช้ เพื่อจะนา
ข้อมูลนี้กลับมาใช้ใหม่ภายหลังได้ โดยข้อมูลที่เก็บในแบบคุกกี้ไม่ควรเป็นข้อมูลที่ต้องเก็บเป็นความลับ เช่น
รหัสผ่าน เป็นต้น เนื่องจากข้อมูลคุกกี้จะเก็บไว้ในรูปแบบของ Text File ธรรมดา ระดับความปลอดภัยจึง
ค่อนข้างต่า แต่อย่างไรก็ตาม เนื่องจากผู้ใช้บางกลุ่มกลับเห็นว่า คุกกี้นั้นเป็นการล่วงละเมิดสิทธิของผู้ใช้
ดังนั้นโปรแกรมเว็บบราวเซอร์จึงมีตัวเลือกสาหรับให้ผู้ใช้ สามารถปฏิเสธการบันทึกคุกกี้จากเว็บไซต์ที่ไม่
ต้องการได้ ด้วยเหตุนี้การใช้คุกกี้จึงอาจไม่บรรลุผลเสมอไป
นอกจากการปฏิเสธคุกกี้จากผู้ใช้แล้ว ยังมีสาเหตุอื่นๆ ที่อาจทาให้ไม่สามารถใช้คุกกี้ได้ เช่น การ
หมดอายุของคุกกี้ หรือไฟล์ที่จัดเก็บคุกกี้อาจเสียหาย ใช้การไม่ได้ หรือถูกทาลาย เช่น การติดตั้งระบบใหม่
เป็นต้น ดังนั้นต้องจัดเตรียมทางเลือกไว้เผื่อกรณีนี้ด้วย

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
188 บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ
การสร้างคุกกี้
ฟังก์ชันหลักในการใช้งานเกี่ยวกับคุกกี้ก็ คือ ฟังก์ชัน setcokkie ( ) ซึ่งมีรูปแบบดังนี้
รูปแบบ
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain]]]])
เมื่อ $name หมายถึง ชื่อคุกกี้ที่ต้องการสร้าง
$value หมายถึง ค่าที่จะกาหนดให้กับคุกกี้
$expire หมายถึง อายุของคุกกี้
$path หมายถึง พาธบนเซิร์ฟเวอร์ที่คุกกี้สามารถใช้งานได้
$domain หมายถึง กาหนดโดเมนที่สามารถอ่านคุกกี้ได้
ตัวอย่างที่ 11.10 การใช้ฟังก์ชัน setcokkie ( )
<?php
$value = 'something from somewhere';
setcookie ("TestCookie", $value);
setcookie ("TestCookie", $value, time()+3600); /* หมดอายุใน 1 ชั่วโมง */
setcookie ("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
?>
หากกาหนดชื่อคุกกี้ซ้ากับชื่อที่มีอยู่แล้ว จะเป็นการแทนที่ข้อมูลเดิม หรือเท่ากับเป็นการแก้ไขค่า
ของคุกกี้นั่งเอง สาหรับรูปแบบของฟังก์ชัน setcookie ( ) นี้เป็นแบบอย่างง่ายเท่านั้น ความจริงยัง
สามารถกาหนดพารามิเตอร์เพิ่มเติมได้อีกหลายตัว
การอ่านข้อมูลจากคุกกี้
การอ่านคุกกี้จะใช้ตัวแปร $_COOKIE ซึ่งเป็นตัวแปรแบบอาร์เรย์ โดยระบุชื่อของคุกกี้เป็นค่าคีย์
ก็จะได้ค่า value ที่กาหนดในตอนสร้างคุกกี้ แต่อย่างไรก็ตาม หากคุกกี้นั้นไม่มีอยู่จริง หรือหมดอายุไป
แล้ว การอ่านคุกกี้นั้นโดยไม่ตรวจสอบก่อนจะเกิดข้อผิดพลาดขึ้น ดังนั้ นเพื่อให้แน่ใจว่ามีคุกกี้นั้นอยู่จริง
หรือไม่ ควรตรวจสอบด้วยฟังก์ชัน isset ( ) ก่อนอ่านเสมอ ตัวอย่างดังนี้
ตัวอย่างที่ 11.11 การอ่านข้อมูลจากคุกกี้
if (isset ($_COOKIE ['book'])) {
$b = $_COOKIE ['book'];
}
การกาหนดอายุ และลบคุกกี้
ปกติแล้วหากสร้างคุกกี้ด้วยวิธีการตามที่กล่าวมาแล้ว คือ ไม่ได้กาหนดอายุ จะทาให้คุกกี้หมดอายุ
ทันทีที่ปิดบราวเซอร์ แต่โดยทั่วไปมักจะเก็บข้อมูลคุกกี้นี้ไว้ใช้ในคราวต่อๆ ไปด้วย

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ 189
การกาหนดอายุของคุกกี้จะกาหนดเป็นเวลาในหน่วยวินาทีโดยเทียบกับเวลาปัจจุบัน โดยทั่วไปแล้ว
มักอ้างอิงเวลาปัจจุบันด้วยฟังก์ชัน time ( ) ซึ่งฟังก์ชันนี้จะคืนค่า timestamp ของเวลาปัจจุบัน ดังนั้น
สามารถนาอายุของคุกกี้มาบวกเพิ่มเข้าไปได้เลย เช่น time ( ) + 30 หมายความว่า กาหนดให้คุกกี้หมดอายุ
ภายใน 30 วินาที หลังจากนี้ หรือหากต้องการกาหนดเวลาในหน่วยที่ยาวนานกว่านี้ต้องนามาแปลงเป็นวินาที
เช่น หากต้องการให้คุกกี้มีอายุ 1 วัน ต้องเขียนเป็น time ( ) + (24 * 60 * 60) เป็นต้น มีตัวอย่างดังนี้
ตัวอย่างที่ 11.12 การกาหนดอายุของคุกกี้
<?php
$expire = time ( ) + (24 * 60 * 60);
setcookie ("mycookie", "Parinya Noidonprai", $expire);
?>

หากต้องการลบคุกกี้ที่ชื่อ "mycookie" สามารถประยุกต์ตามตัวอย่าง ดังนี้
ตัวอย่างที่ 11.13 การลบคุกกี้
<?php
$expire = time ( ) - 3600;
// ลบด้วยเลขอะไรก็ได้เพื่อให้เป็นเวลาที่ผ่านมาแล้ว
setcookie ("mycookie", "", $expire);
?>

การจัดเก็บข้อมูลแบบเซสชัน
เซสชัน (Session) เป็นการจัดเก็บข้อมูลบางอย่างไว้ชั่วคราวที่เครื่องเซิร์ฟเวอร์ เพื่อให้สามารถนา
ข้อมูลนั้นมาใช้งานใหม่หลังจากที่เพจนั้นสิ้นสุดการทางานไปแล้ว และยังสามารถนาไปใช้งานที่เพจอื่นๆ
ได้ สาหรับลักษณะทั่วๆ ไปของเซสชันมีดังนี้
 เมื่อผู้ใช้เชื่อมต่อไปยังเว็บไซต์แต่ละแห่ง เซิร์ฟเวอร์จะสร้างรหัสสาหรับการอ้างอิงถึงผู้ใช้คนนั้น
โดยรหัสนี้เรียกว่า Session ID หรือ SID ซึ่งประกอบด้วยตัวเลข 0 - 9 และตัวอักษร a - z จานวน 32 ตัว
เช่น d77a4f704b938b240e4228a7e0847895 ทั้งนี้ค่า SID ของผู้ใช้แต่ละคนที่เชื่อมต่อกับเว็บไซต์แห่ง
นั้นในช่วงเวลาเดียวกันจะต้องไม่ซ้ากันเลย
 ค่า SID นี้จะถูกนาไปใช้ในการอ้างอิงถึงผู้ใช้คนนั้นตลอดการเชื่อมต่อ และเมื่อใดก็ตามที่ผู้ใช้
เลิกการเชื่อมต่อ เช่น การปิดบราวเซอร์ จะส่งผลให้ค่า SID ของผู้ใช้คนนั้นถูกยกเลิกไป จนกว่าจะมีการ
เชื่อมต่อไปยังเว็บไซต์แห่งนั้น ครั้งต่อไปค่า SID จึงจะถูกสร้างขึ้นมาให้ใหม่เป็นเช่นนี้ไปตลอด
 เมื่อสร้างข้อมูลแบบเซสชันสาหรับผู้ใช้คนใด ข้อมูลนั้นก็จะมีผลหรือใช้งานได้เฉพาะกับผู้ใช้คนนั้น
ส่วนคนอื่นๆ ไม่สามารถเรียกใช้งานได้ เนื่องจากข้อมูลเซสชันของผู้ใช้แต่ละคนจะถูกแยกออกจากกันนั่นเอง
 ข้อมูลแบบเซสชันที่สร้างขึ้นจากเพจหนึ่งจะสามารถนาไปใช้งานที่เพจอื่นๆ ที่ถูกเรียกใช้โดย
ผู้ใช้ที่เป็นผู้สร้างเซสชันนั้นได้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
190 บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ
 ข้อมูลเซสชันที่ถูกสร้างขึ้นจะสามารถใช้งานได้ชั่วระยะเวลาที่เปิดใช้บราวเซอร์อยู่ แต่ไม่เกิน
180 นาที ถ้าปิดบราวเซอร์หรือเวลาเกินกว่า 180 นาที ข้อมูลก็จะถูกยกเลิกไป หรือนอกจากนี้เราสามารถ
สั่งลบข้อมูลเซสชันเมื่อไม่ต้องการใช้งานต่อไปได้
 เซสชันจะมีความเกี่ยวข้องกับคุกกี้ โดยเซสชันจะใช้การเก็บข้อมูลรหัสแบบคุกกี้ไว้ที่เครื่องของ
ผู้ใช้แต่ละคน และเมื่อเชื่อมต่อไปยังเซิร์ฟเวอร์ ข้อมูลนี้จะถูกนาไปใช้ในการตรวจสอบว่าเป็นผู้ใช้คนใด
ดังนั้นหากเครื่องของผู้ใช้คนใดปฏิเสธการใช้คุกกี้ก็จะส่งผลถึงเซสชันด้วย แต่ปัจจุบันนี้มีการใช้เทคนิค
URL Rewriting หรือนารหัสเซสชันไปต่อท้าย URL ในแบบ Query String ในชื่อตัวแปร PHPSESSID
 แม้เซสชันจะเป็น การพักเก็บ ข้อมูลไว้ชั่ว คราวคล้ ายกับคุกกี้ แต่ทั้งคุกกี้และเซสชันก็มีแนว
ทางการนาไปใช้งานที่แตกต่างกัน
การเริ่มการทางานของเซสชัน
ก่ อ นที่ จ ะเริ่ ม ใช้ ง านเซสชั น ต้ อ งเริ่ ม ด้ ว ยการสั่ ง ให้ เ ซสชั น เริ่ ม ท างานเสี ย ก่ อ นด้ ว ยฟั ง ก์ ชั น
session_start ( ) โดยต้องกาหนดไว้ที่ส่วนบนสุดของเพจ ตัวอย่างการใช้งานดังนี้
ตัวอย่างที่ 11.14 การเริ่มการทางานของเซสชัน
<?php
session_start ( );
?>

หมายเหตุ
ข้อควรระวัง คือ เนื่องจากเซสชันต้องอาศัยคุกกี้เป็นกลไกร่วมด้วย และคุกกี้จะอาศัยการส่ ง
ข้ อมู ล แบบเฮดเดอร์ ท าให้ เซสชั นมี ความเกี่ ยวพั นกั บเฮดเดอร์ ด้ ว ย ดั งนั้ นการใช้ ฟั งก์ ชั น
session_start ( ) ต้องทาก่อนการส่งข้อมูลใดๆ ไปที่บราวเซอร์เช่นเดียวกับเฮดเดอร์และคุกกี้
การเก็บข้อมูลด้วยตัวแปร $_SESSION
ตัวแปร $_SESSION เป็ นตัว แปรอาร์เรย์สาหรับจัดเก็บข้อมูล แบบเซสชัน ซึ่งตัวแปรนี้จะมี
ลักษณะเป็น Key/Value โดยที่ Key คือ ชื่อของเซสชัน (คล้ายกับชื่อของคุกกี้) และ Value ก็คือค่าของ
เซสชัน ทั้งนี้จะสร้างตัวแปร $_SESSION จานวนกี่ตัวก็ได้ ตัวอย่างดังนี้
ตัวอย่างที่ 11.15 การเก็บข้อมูลด้วยตัวแปร $_SESSION
<?php
session_start ( );
$_SESSION ['user'] = "Parinya";
$_SESSION ['pass'] = $_POST ['pass'];
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ 191
และเมื่อต้องการนาค่าเซสชันใดไปใช้งานก็ระบุผ่านตัวแปร $_SESSION พร้อมระบุชื่อเซสชันที่
ต้องการแต่ต้องทาหลังจากที่ได้สั่งเซสชันเริ่มทางานด้วย session_start ( ) แล้ว แต่อย่างไรก็ตาม
เนื่องจากเซสชันสามารถถูกลบ หรือหมดอายุได้ ซึ่งก่อนอ่านต้องแน่ใจว่าเซสชันนั้นมีอยู่จริง ดังนั้นควร
ตรวจสอบด้วยฟังก์ชัน isset ( ) ก่อนอ่าน ตัวอย่างดังนี้
ตัวอย่างที่ 11.16 การใช้งานตัวแปร $_SESSION
<?php
session_start ( );
if (isset ($_SESSION ['login'])) $login = $_SESSION ['login'];
?>

การลบข้อมูลเซสชัน
ปกติแล้วเมื่อบราวเซอร์ที่เปิดเอาไว้ถูกปิดทั้งหมด หรือระยะเวลาที่สร้างเซสชันเอาไว้นานเกินกว่า
180 นาที (3 ชั่วโมง) ค่าตัวแปรเซสชันที่ถูกสร้างขึ้นก็จะยกเลิกไปเองโดยอัตโนมัติอยู่แล้ว แต่บางครั้งก็
ต้องการยกเลิกข้อมูลเซสชันที่เวลาใดเวลาหนึ่งขณะที่ยังใช้งานเว็บไซต์อยู่ เช่น กรณีการออกจากระบบ
(Logout) เป็นต้น การลบข้อมูลเซสชันสามารถใช้ฟังก์ชันดังนี้
 ฟังก์ชัน unset ( )
เป็นฟังก์ชันที่ใช้ในการยกเลิกตัวแปรทั่วๆ ไปของ PHP ซึ่งสามารถนามาใช้กับตัวแปรเซสชันได้
เช่นกัน มีรูปแบบดังนี้
void unset ( mixed $var [, mixed $... ] )

เมื่อ $var หมายถึง ชื่อของตัวแปรที่จะลบหรือยกเลิก
ตัวอย่างที่ 11.17 การใช้ฟังก์ชัน unset ( )
<?php
session_start ( );
$_SESSION ['name'] = "Mr.Parinya";
echo $_SESSION ['name'] . "<br/>";
unset ($_SESSION ['name']);
echo $_SESSION ['name'] . "<br/>";

// จะไม่พบข้อมูลใดๆ เนื่องจากได้ลบแล้ว

?>

 ฟังก์ชัน session_destroy ( )
เป็นฟังก์ชันที่ใช้การลบข้อมูลหรือยกเลิกตัวแปรเซสชันทั้งหมดที่ได้สร้างขึ้นให้กับผู้ใช้คนนั้น
อย่าลืมว่าฟังก์ชันนี้มีผลกับตัวแปรเซสชันทุกตัว มีรูปแบบดังนี้
bool session_destroy ( void )

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
192 บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ
หมายเหตุ
ฟังก์ชัน session_destroy ( ) ใช้สาหรับลบหรือยกเลิกตัวแปรเซสชันทั้งหมด หากต้องการลบตัว
แปรเซสชันตัวใดตัวหนึ่ง ขอแนะนาให้เลือกใช้ฟังก์ชัน unset ( )
ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับเซสชัน
 ฟังก์ชัน session_id ( )
เป็นฟังก์ชันที่ใช้สาหรับคืนค่า session id ( SID ) มีรูปแบบดังนี้
string session_id ([ string $id ] )

ตัวอย่างที่ 11.18 การใช้ฟังก์ชัน session_id ( )
<?php
session_start ( );
echo session_id ( );
?>

 ฟังก์ชัน session_regenerate_id ( )
เป็นฟังก์ชันที่ใช้สาหรับการสร้าง session id ( SID ) ขึ้นมาใหม่ มีรูปแบบดังนี้
bool session_regenerate_id ([ bool $delete_old_session = false ] )

ตัวอย่างที่ 11.19 การใช้ฟังก์ชัน session_regenerate_id ( )
<?php
session_start ( );
echo session_id ( );
session_regenerate_id ( );
echo session_id ( );
?>

 ฟังก์ชัน session_encode ( )
เป็นฟังก์ชันที่ใช้สาหรับเข้ารหัสข้อมูล session ทั้งหมด โดยจะคืนค่าข้อมูลที่เข้ารหัสไว้แล้ว
รูปแบบ คือ ชื่อเซสซัน ชนิดข้อมูล ค่าข้อมูล ชื่อเซสซัน.. มีรูปแบบดังนี้
่
string session_encode ( void )

ตัวอย่างที่ 11.20 การใช้ฟังก์ชัน session_encode ( )
<?php
session_start ( );
$_SESSION ["user"] = "bamboo";
$_SESSION ["pass"] = "1234";

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ 193
echo session_encode ( );
?>

 ฟังก์ชัน session_decode ( )
เป็นฟังก์ชันที่ใช้สาหรับถอดรหัสข้อมูล ที่ถูกเข้ารหัสโดย session_encode ( ); มีรูปแบบดังนี้
bool session_decode ( string $data )

ตัวอย่างที่ 11.21 การใช้ฟังก์ชัน session_decode ( )
<?php
session_start ( );
$_SESSION["user"] = "bamboo";
$_SESSION["pass"] = "1234";
$secret = session_encode ( );
session_decode ( $secret );
?>

 ฟังก์ชัน session_register ( )
เป็นฟังก์ชันที่ใช้สาหรับใช้ลงทะเบียน ตัวแปร ให้เป็นตัวแปร session มีรูปแบบดังนี้
bool session_register ( mixed $name [, mixed $... ] )

ตัวอย่างที่ 11.22 การใช้ฟังก์ชัน session_register ( )
<?php
session_start ( );
$user = "bamboo";
session_register ( "user" );
echo $_SESSION["user"];
?>

 ฟังก์ชัน session_unregister ( )
เป็นฟังก์ชันที่ใช้สาหรับยกเลิกการลงทะเบียนตัวแปร session มีรูปแบบดังนี้
bool session_register ( mixed $name [, mixed $... ] )

ตัวอย่างที่ 11.23 การใช้ฟังก์ชัน session_unregister ( )
<?php
$user = "bamboo";
session_register ( "user" );
echo $_SESSION ["user"];
session_unregister ("user");

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
194 บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ
echo $user;
?>

 ฟังก์ชัน session_unset ( )
เป็นฟังก์ชันที่ใช้สาหรับใช้ยกเลิกตัวแปร session ทั้งหมด คือ ยกเลิกตัวแปร ที่ได้ลงทะเบียน
ไว้มีรูปแบบดังนี้
void session_unset ( void )
ตัวอย่างที่ 11.24 การใช้ฟังก์ชัน session_unset ( )
<?php
session_start ( );
$user = "bamboo";
session_register ( "user" );
session_unset ( );
?>
 ฟังก์ชัน session_is_registered ( )
เป็นฟังก์ชันที่ใช้สาหรับใช้ตรวจสอบว่าตัวแปรนั้นได้ลงทะเบียน seesion หรือยังมีรูปแบบดังนี้
bool session_is_registered ( string $name )
ตัวอย่างที่ 11.25 การใช้งานฟังก์ชัน session_is_registered ( )
<?php
session_start ( );
$user = "bamboo";
if ( ! session_is_registered ( $user ) ) {
session_register( $user );
}
?>
ขั้นตอนการประยุกต์ใช้เซสชั่น เพื่อเป็นแนวทางในการพัฒนาระบบ Login
1. สร้างแบบฟอร์มสาหรับการ Login ประกอบด้วย User Name และ Password ดังภาพ

ภาพที่ 11.1 สร้างฟอร์มสาหรับการ Login กรณีศึกษาและประยุกต์ใช้งานเซสชั่น
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ 195
ตัวอย่างที่ 11.26 หน้าฟอร์ม กาหนดให้ใช้ชื่อ index.php และเขียนโค้ดคาสั่ง ดังนี้
<?php
session_start ( );
session_destroy ( );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ตัวอย่างหน้า Login</title>
</head>
<body>
<form id="form1" name="form1" method="post" action=" check_login.php">
<table width="300" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="117">User:</td>
<td width="283"><label>
<input type="text" name="user" id="user" />
</label></td>
</tr>
<tr>
<td>Password:</td>
<td><label>
<input type="password" name="pass" id="pass" />
</label></td>
</tr>
<tr>
<td colspan="2" align="center"><label>
<input type="submit" name="login" id="login" value="Login" />
</label></td>
</tr>
</table>
</form>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
196 บทที่ 11 คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ
</body>
</html>

2. สร้างไฟล์เพื่อตรวจสอบข้อมูลที่ผู้ใช้ Login เข้ามา กาหนดให้ใช้ชื่อ check_login.php และเขียนโค้ด
คาสั่ง ดังนี้
ตัวอย่างที่ 11.27 ไฟล์เพื่อตรวจสอบข้อมูลที่ผู้ใช้ Login เข้ามา
<?php
session_start ( );
$user_check="testuser"; // กาหนดชื่อผู้ใช้เป็น testuser
$pass_check="testpass";// กาหนดรหัสผ่านเป็น testpass
if (($_POST['user']==$user_check) && ($_POST['pass']==$pass_check)) {
$user = $_POST['user']; // $_POST['user'] คือ ตัวแปรที่รับมาจาก input form
$pass = $_POST['pass']; // $_POST['pass'] คือ ตัวแปรที่รับมาจาก input form
$fullname = "Mr.Parinya Noidonprai";
session_register ("fullname"); // ลงทะเบียน ตัวแปร fullname ให้เป็นตัวแปร session
session_register ("user"); // ลงทะเบียน ตัวแปร user ให้เป็นตัวแปร session
session_register ("pass"); // ลงทะเบียน ตัวแปร pass ให้เป็นตัวแปร session
header ("location: member.php");
// ส่งต่อไปยังหน้า member.php
} else header ("location: index.php");
// ส่งกลับไปยังหน้า index.php
?>

3. กาหนดหน้า เว็บ เพจที่จะประมวลผลต่อ เมื่อตรวจสอบชื่อผู้ใช้และรหัส ผ่ านถูกต้องให้ ทางานต่อที่
เว็บเพจ member.php มีโค้ดคาสั่ง member.php ดังนี้
ตัวอย่างที่ 11.28 กาหนดหน้าเว็บเพจที่จะประมวลผลต่อ เมื่อตรวจสอบชื่อผู้ใช้และรหัสผ่านถูกต้อง
<?php
session_start ( );
if (isset ($_SESSION[fullname])) // ตรวจสอบตัวแปร ได้ถูกสร้างแล้วหรือไม่
echo "Congratulation, You are login with: $_SESSION[fullname]";
else header ("location: index.php"); // ในกรณีไม่พบตัวแปรให้กลับไป login ใหม่
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 12
การเขียนโปรแกรมแบบ OOP
ในบทนี้จะกล่าวถึงการเขียนโปรแกรมแบบ OOP (Object Oriented Programming) ซึ่งแม้ว่า
ในความเป็นจริงแล้ว ไม่จาเป็นต้องมีความรู้เกี่ยวกับ OOP เลย ก็สามารถสร้างเว็บด้วย PHP ได้ แต่ว่าใน
ปัจจุบันมักจะมีผู้สร้างส่วนที่มาขยายขีดความสามารถของ PHP (หรือ Extension) ใหม่ๆ เพิ่มขึ้นมา
เรื่อยๆ ซึ่ง Extension เหล่านี้ มักถูกสร้างในรูปแบบของคลาส ดังนั้นจึงควรมีพื้นฐานความรู้เกี่ยวกับ
OOP เพื่อจะนาไปใช้กับการเขียนโปรแกรมในบางเรื่องได้
คลาส (Class)
โดยปกติแล้ว PHP จะเป็นภาษาแบบ Procedural โดยไม่ได้อยู่ภายใต้ข้อกาหนด หรือโครงสร้าง
แบบ OOP จะเห็นได้ว่า PHP นั้นประกอบด้วยฟังก์ชันต่างๆ เป็นจานวนมาก และก็สามารถใช้ ฟังก์ชัน
เหล่านี้ได้โดยตรง และตั้งแต่ PHP4 เป็นต้นมา PHP ได้รองรับการเขียนโปรแกรมทางด้าน OOP เพิ่มเข้า
มา โดยรูปแบบของ OOP นั้นจะช่วยให้สามารถรวบรวมการกระทาที่เกี่ยวข้องกับเรื่องใดเรื่องหนึ่งให้มา
รวมเป็นหน่วยเดียวกัน หรือที่เรียกว่า "ออบเจ็กต์" นั่นเอง โดยภายในตัวออบเจ็กต์นั้นก็จะมีองค์ประกอบ
หลายอย่าง เช่น เมธอด (Method) ฟิลด์ (Field) พร็อปเพอร์ตี้ (Property) เป็นต้น ซึ่งมักเรียกสิ่งที่อยู่ใน
ออบเจ็กต์ว่าเป็น "สมาชิกของออบเจ็กต์" และการเรียกใช้งานสมาชิกเหล่านี้ก็จะต้องทาผ่านออบเจ็กต์
เท่านั้น ดังนั้น OOP จึงช่วยให้สร้างขึ้นมานี้ จะเรียกว่า "คลาส" ดังนั้นจากที่ได้กล่าวมาทั้งหมดก็พอสรุปได้
ว่า คลาส คือ โครงร่างที่ใช้ในการกาหนดองค์ประกอบ และวิธีการทางานของออบเจ็กต์
ก่อนที่จะเรียนรู้เกี่ยวกับออบเจ็กต์ และองค์ประกอบภายในออบเจ็กต์ ต้องเริ่มศึกษาจากรูปแบบ
ของคลาสไปก่อน โดยลักษณะทั่วไปของคลาสจะเป็นดังนี้
รูปแบบ
Class ชื่อคลาส {
.
.
}
โดยทั่วไปนิยมตั้งชื่อคลาสให้ขึ้นต้นด้วยตัวพิมพ์ใหญ่ (แต่ไม่จาเป็น) ส่วนข้อกาหนดอื่นๆ ในการตั้ง
ชื่อจะคล้ายกับการตั้งชื่อตัวแปร เช่น
198 บทที่ 12 การเขียนโปรแกรมแบบ OOP
Class MyClass {
.
.
}
การนาคลาสมาใช้ในสคริปต์ PHP
เนื่องจาก PHP ไม่ได้มีโครงสร้างแบบ OOP อย่างแท้จริง การนาคลาสที่สร้างขึ้นมาใช้ก็จะใช้
รูปแบบเดียวกับการ include file นั่นเอง โดยมีแนวทางดังนี้
 สร้างเอกสารเว็บเพจ ชนิด PHP
 เขียนคลาสที่จะสร้างลงไปเหมือนการเขียนสคริปต์ PHP ปกติ เช่น
<?php
Class PHPMySQL {
.
.
}
?>
 การบั น ทึ ก ให้ ก าหนดชื่ อ เหมื อ นกั บ ไฟล์ เ ว็ บ เพจทั่ ว ไป แต่ ใ ห้ มี ส่ ว นขยายเป็ น .php เช่ น
MyClass.php หรือบางคนอาจต้องการให้ต่างจากไฟล์เว็บเพจทั่วไป อาจกาหนดชื่อในรูปแบบ ชื่อไฟล์ .
class.php เช่น สมมติคลาสชื่อ "PHPMySQL" ก็บันทึกไฟล์นี้ด้วยชื่อ "PHPMySQL.class.php" เป็นต้น
เมื่อจะนาคลาสนี้มาใช้ในเพจใด ก็ใช้ฟังก์ชัน include ( ) หรือ require ( ) เพื่อนาคลาสนั้นเข้ามา


<?php
include ("PHPMySQL.class.php");
.
.
?>
ออบเจ็กต์ และอินสแตนซ์
คลาสที่สร้างขึ้นเป็นเพียงข้อกาหนดหรือวิธีในการประมวลผลข้อมูลเท่านั้น แต่ยังไม่สามารถนา
คลาสไปใช้งานได้ จนกว่าคลาสนั้นจะถูกสร้างเป็นออบเจ็กต์เสียก่อน ดังนั้นคลาสกับออบเจ็กต์ก็คือ สิ่ง
เดียวกันเพียงแต่อยู่คนละสถานภาพ ด้วยเหตุนี้จึงเรียกออบเจ็กต์ว่าเป็นอินสแตนซ์ (Instance) ของคลาส
หรือสิ่งที่ใช้แทนคลาสนั่นเอง การสร้างออบเจ็กต์มีรูปแบบดังนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 12 การเขียนโปรแกรมแบบ OOP 199
รูปแบบ
$ชื่อของอินสแตนซ์ = new ชื่อคลาส ( );
ตัวอย่างที่ 12.1 การสร้างออบเจ็กต์
$mycls = new MyClass ( );
ขั้นตอนในการสร้างออบเจ็กต์ของคลาสนี้เรียกว่า Instantiate ซึ่งหลังจากออบเจ็กต์ถูกสร้างขึ้น
แล้วก็จะมีความสามารถตามที่ระบุไว้ในคลาสทุกประการโดยคลาสแต่ละคลาสสามารถนาไปสร้างเป็น
ออบเจ็กต์ได้มากกว่า 1 ออบเจ็กต์ มีตัวอย่างดังนี้
ตัวอย่างที่ 12.2 การสร้างเป็นออบเจ็กต์ได้มากกว่า 1 ออบเจ็กต์
<?php
$myclass1 = new MyClass ( );
$myclass2 = new MyClass ( );
?>
เมธอด (Method)
เมธอดเป็นองค์ประกอบของคลาสสาหรับการกระทาอย่างใดอย่างหนึ่ง ซึ่งโดยทั่วไปแล้วคลาส
จะต้องประกอบด้วยเมธอดอย่างน้อย 1 เมธอดเสมอ รายละเอียดเกี่ยวเมธอดมีดังนี้
การสร้างเมธอด
ความจริ งแล้ ว เมธอดก็คือ ฟังก์ชัน ของคลาสนั่ นเอง ดังนั้นรูปแบบ และวิธีการสร้างเมธอดก็
เหมือนกันกับการสร้างฟังก์ชันธรรมดานั่นเอง และภายในคลาสหนึ่งๆ จะมีกี่เมธอดก็ได้ ตัวอย่างลักษณะ
ของการสร้างเมธอด ตัวอย่างดังนี้
ตัวอย่างที่ 12.3 ลักษณะของการสร้างเมธอด
<?php
class Circle {
function area ($radius) return pi ( ) * $radius * $radius;
function perimeter ($radius) return 2 * pi ( ) * $radius;
}
?>
การเรียกใช้เมธอด
การเรียกใช้เมธอดจะใช้โอเปอเรเตอร์ -> ในการระบุเมธอดที่ต้องการเรียกใช้งาน โดยหากเป็น
การเรียกใช้ภายในคลาสเดียวกัน (เรียกใช้เมธอดหนึ่งจากอีกเมธอดหนึ่ง) ก็ใช้รูปแบบดังนี้
$this -> เมธอด (อาร์กิวเมนต์)
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
200 บทที่ 12 การเขียนโปรแกรมแบบ OOP
เช่น สมมติว่าต้องการเรียกใช้เมธอด area ( ) ภายในคลาส Circle ก็ทาดังนี้
ตัวอย่างที่ 12.4 ตัวอย่างการเรียกใช้เมธอด
$a = $this -> area (10);
หากเป็นการเรียกจากนอกคลาส ก็ต้องเรียกผ่านอินสแตนซ์ในรูปแบบดังนี้
$อินสแตนซ์ -> เมธอด (อาร์กิวเมนต์)
เช่น สมมติว่าต้องการเรียกใช้เมธอด area ( ) ของคลาส Circle
ตัวอย่างที่ 12.5 ตัวอย่างการเรียกใช้เมธอด area ( ) ของคลาส Circle
<?php
$cir = new Circle ( );
echo $cir -> area(10);
?>
ตัวอย่าง เป็นการทดสอบการสร้าง และการใช้คลาส โดยเป็นคลาสง่ายๆ เกี่ยวกับการคานวณเลข
ทั้งนี้ต้องสร้างขึ้นมา 2 เพจ โดยเพจแรกเป็นคลาส ส่วนอีกเพจสาหรับทดสอบคลาส ดังนี้
ตัวอย่างที่ 12.6 ตัวอย่าง เป็นการทดสอบการสร้าง และการใช้คลาส โดยเป็นคลาสง่ายๆ
ชื่อไฟล์ calculator.class.php
<?php
class Calculator {
function showResult ($num1, $num2, $op) {
if (!is_numeric ($num1) || !is_numeric ($num2)) {
echo "ตัวแปรที่รับมาไม่ใช่ตัวเลขไม่สามารถคานวณได้ <br/>";
} else if ( !in_array ($op, array ("+", "-" , "*", "/"))) {
echo "เครื่องหมายดาเนินการไม่ถูกต้อง <br/>";
} else {
echo "$num1 $op $num2 = ";
eval ("echo $num1 $op $num2;");
// ฟังก์ชัน eval ( ) ใช้ประมวลผล คาสั่ง PHP ที่เขียนในแบบสตริง
}
}
}
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 12 การเขียนโปรแกรมแบบ OOP 201
ชื่อไฟล์ที่จะเรียกใช้งานคลาส index.php
<?php
include ("calculator.class.php");
$cal = new Calculator ( );
$cal -> showResult (10, 20, " * ");
?>

การกาหนดค่า Default Parameter ให้กับเมธอด
เนื่องจากเมธอดนั้นก็คือฟังก์ชัน และฟังก์ชันใน PHP สามารถกาหนดค่าดีฟอลต์ให้ได้ ซึ่งสามารถ
นารูปแบบตรงนี้มาใช้เพื่อเป็นทางเลือกให้ผู้ใช้สามารถที่จะกาหนดพารามิเตอร์บางตัวหรือไม่ก็ได้ ทั้งนี้
วิธีการต่างๆ ก็เหมือนกับฟังก์ชันที่ได้ศึกษามาแล้ว มีตัวอย่างดังนี้
ตัวอย่างที่ 12.7 การกาหนดค่า Default Parameter ให้กบเมธอด
ั
<?php
class Payment {
function total ($quantity, $price, $vat=7) {
return $quantity * $price * (1+$vat/100);
}
}
?>
จากคลาส Payment เมื่อเรียกใช้เมธอด total ( ) จะกาหนด %VAT หรือไม่ก็ได้ โดยหากไม่
กาหนดก็จะใช้ค่าดีฟอลต์ คือ 7% แต่หากต้องการใช้ค่าอื่นก็กาหนดลงไปโดยตรง มีตัวอย่างดังนี้
ตัวอย่างที่ 12.8 การเรียกใช้คลาส Payment
<?php
$p = new Payment();
$t1 = $p -> total (10, 20);
//VAT 7%
$t2 = $p -> total (30, 40, 10);
//VAT 10%
?>
โมดิฟายเออร์ (Modifier) แบบ public และ private
โมดิฟายเออร์ เป็นการควบคุมการเข้าใช้งานสมาชิกของคลาส เช่น เมธอด และพร็อปเพอร์ตี้ทั้งนี้
เนื่องจากตามข้อกาหนดของ OOP นั้น สามารถที่จะเรียกใช้สมาชิกของคลาสหนึ่งจากภายนอกคลาสได้
แต่ภายในคลาสอาจมีข้อมูลบางอย่างที่มีความสาคัญ จึงจาเป็นต้องมีวิธีการที่จะจากัดขอบเขตในการเข้าใช้
งานข้อมูลเหล่านี้ โดยใช้คีย์เวิร์ดกลุ่มหนึ่งเรียกว่า โมดิฟายเออร์ สาหรับใน PHP มีโมดิฟายเออร์หลายตัว
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
202 บทที่ 12 การเขียนโปรแกรมแบบ OOP
แต่ตัว ที่น่ าสนใจที่จ ะพบเห็น ได้บ่ อยๆ มีเพียงไม่กี่ตัว ส าหรับในที่นี้จะกล่ าวถึงเฉพาะตัว ที่ควรรู้จักใน
เบื้องต้น ดังนี้
public ใช้ public เมื่อไม่ต้องการปกป้องสิทธิการเข้าใช้สมาชิกนั้น
private ใช้ private เมื่อไม่ต้องให้เข้าถึงสมาชิกนั้นจากภายนอกคลาสได้ จึงมักใช้ private กับ
สมาชิกที่มีความสาคัญ และต้องการสงวนไว้ใช้เฉพาะภายในคลาสเองเท่านั้น
ลักษณะการนาไปใช้กับเมธอด มีตัวอย่างดังนี้
ตัวอย่างที่ 12.9 ตัวอย่างลักษณะการนาไปใช้กับเมธอด
<?php
class Cylinder {
private function CircleArea ($radius){
return pi ( ) * $radius * $radius;
}
public function volume ($radius, $height) {
$base_area = $this -> circleArea ($radius);
$volume = $base_area * $height;
return $volume;
}
}
?>
ตัวอย่างที่ 12.10 ลักษณะผลการเรียกใช้ใช้เมธอดแบบ private และ public
<?php
include ("Cylinder.class.php");
$cyl = new Cylinder ( );
echo $cyl -> circleArea (10); //ไม่สามารถใช้งานได้เพราะ circleArea( ) เป็น private method
echo $cyl -> volume (10, 20); //สามารถใช้งานได้เพราะ volume ( ) เป็น public method
?>
พร็อปเพอร์ตี้ (Property) และฟิลด์ (Field)
พร็อปเพอร์ตี้ คือ ข้อมูลประจาตัวของคลาส ส่วนใหญ่แล้วมักเป็นข้อมูลที่ต้องใช้ร่วมกันในหลายๆ
เมธอด หรื อ ไม่ ก็ เ ป็ น ข้ อ มู ล เบื้ อ งต้ น ที่ จ าเป็ น ต่ อ การท างานของคลาส เช่ น หากเป็ น วงกลมข้ อ มู ล ที่
จาเป็นต้องใช้เสมอ คือ รัศมี เป็นต้น ซึ่งแม้ว่าข้อมูลนี้จะรับผ่านทางพารามิเตอร์ของเมธอดได้ แต่ก็จะต้อง
ระบุข้อมูลนี้ทุกๆ ครั้ง ทั้งนี้การสร้างพร็อปเพอร์ตี้มีรูปแบบดังนี้
public $ชื่อพร็อปเพอร์ตี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 12 การเขียนโปรแกรมแบบ OOP 203
สาหรับโมดิฟายเออร์ โดยทั่วไปจะกาหนดเป็น public เนื่องจากในกรณีของพร็อปเพอร์ตี้นั้น
จะต้องสามารถเข้าถึงจากภายนอกคลาสได้ มีตัวอย่างดังนี้
class Cylinder {
public $radius;
public $height;
.
.
}
หมายเหตุ
การเขียน OOP สาหรับ PHP ในยุคแรกการกาหนดพร็อปเพอร์ตี้จะใช้คีย์เวิร์ด "var" ตามด้วย
ชื่อพร็อปเพอร์ตี้ เช่น var $radius; แต่ในปัจจุบันนิยมกาหนดโดยโมดิฟายเออร์ "public"
แทน แต่หากกาหนดโมดิฟายเออร์เป็น "private" มักเรียกว่า "ฟิลด์"
เนื่องจากพร็อปเพอร์ตี้ คือ ข้อมูลของคลาส ดังนั้นจึงอาจถูกเรียกใช้จากทั้งภายใน และภายนอก
คลาส หากเป็นการเรียกภายในคลาสจะต้องระบุผ่านคีย์เวิร์ดพิเศษ $this และหากเป็นการอ้างอิง
ภายนอกคลาสจะต้องระบุผ่านอินสแตนซ์ ตามรูปแบบดังนี้
เรียกใช้ภายในคลาส: $this -> ชื่อพร็อปเพอร์ตี้
เรียกใช้ภายนอกคลาส: $อินสแตนซ์ -> ชื่อพร็อปเพอร์ตี้
ตัวอย่างที่ 12.11 การเรียกใช้ภายในคลาสผ่านคีย์เวิร์ดพิเศษ $this
<?php
class Cylinder {
public $radius = 0;
public $hight = 0;
private function CircleArea ( ) {
return pi ( ) * $this -> circleArea ($this -> radius);
}
public function volume ( ) {
$base_area = $this -> circleArea($this -> radius);
$volime = $base_area * $this -> hight;
return $volume;
}
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
204 บทที่ 12 การเขียนโปรแกรมแบบ OOP
}
?>
ตัวอย่างที่ 12.12 การใช้พร็อปเพอร์ตี้จากภายนอกคลาสผ่านอินสแตนซ์
<?php
include ("Cylinder.class.php");
$cy1 = new Cylinder ( );
$cy1 -> redius = 10;
$cy2 -> redius = 20;
echo $cy1 -> volume();
?>
ฟิลด์ตามรูปแบบ OOP ของ PHP จะมีลักษณะคล้ายกับพร็อปเพอร์ตี้ คือ เป็นข้อมูลของคลาส
แต่ละข้อมูลแบบฟิลด์นี้มักจะใช้เฉพาะภายในคลาสเท่านั้น โดยไม่อนุญาตให้เข้าถึงจากนอกคลาสได้ ดังนั้น
จึงต้องกาหนดโมดิฟายเออร์เป็น "private" ขณะที่พร็อปเพอร์ตี้นั้นสามารถเข้าถึงจากนอกคลาสได้ ซึ่ง
โดยทั่วไปแล้วมักใช้ฟิลด์ร่วมกับคอนสตรักเตอร์เป็นหลัก เพื่อรับข้อมูลที่จาเป็นเบื้องต้นจากนอกคลาสเข้า
มา ตัวอย่างลักษณะการกาหนดฟิลด์ดังนี้
class Cylinder {
private $redius = 0;
private $hight = 0;
.
}
ค่าคงที่ (Constant)
ค่าคงที่ คือ ค่าที่กาหนดไว้อย่างตายตัว ซึ่งเหมือนกับค่าคงที่ที่ใช้ในการเขียนสคริปต์ปกตินั่นเอง
โดยรูปแบบการกาหนดดังนี้
const ชื่อค่าคงที่ = ค่าที่กาหนด;
ค่าคงที่นี้ ไม่ต้องกาหนดโมดิฟายเออร์ใดๆ และชื่อค่าคงที่ก็ไม่มีเครื่องหมาย $ นาหน้าและวิธีการ
เรียกใช้ค่าคงที่ก็จ ะต่างไปจากการเรียกใช้พร็อปเพอร์ตี้ โดยสามารถเรียกผ่านชื่อคลาสได้โดยตรงโดย
ไม่ต้องเรียกผ่านอินสแตนซ์ของคลาส มีรูปแบบดังนี้
ชื่อคลาส :: ชื่อค่าคงที่

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 12 การเขียนโปรแกรมแบบ OOP 205
ตัวอย่างที่ 12.13 การกาหนดค่าคงทีภายในคลาส
่
<?php
class Circle {
const PI = 3.14;
public function area($radius) {
return Circle :: PI * $radius * $radius;
}
}
?>
คอนสตรักเตอร์ (Constructor)
คลาสบางคลาสก่อนที่จะทาการประมวลผลใดๆ ได้ จาเป็นต้องอาศัยข้อมูลพื้นฐานบางอย่าง
เสียก่อน ซึ่งหากขาดข้อมูลเหล่านี้ไปแล้ว คลาสจะทางานไม่ได้เลย เช่น คลาสวงกลม หากขาดข้อมูลที่เป็น
ค่ารัศมี ก็ไม่อาจคานวณหาค่าพื้นที่ และเส้นรอบวงได้ และผู้ใช้คลาสก็อาจไม่ทราบว่าต้องกาหนดข้อมูล
พื้นฐานอะไรให้แก่คลาสนั้นบ้าง ด้วยเหตุนี้คลาสจึงต้องมรเมธอดพิเศษที่เรียกว่าคอนสตรักเตอร์ เพื่อใช้ใน
การกาหนดข้อมูลที่จาเป็นเริ่มแรกให้แก่คลาส โดยลักษณะที่สาคัญของคอนสตรักเตอร์ คือ
 คอนสตรั ก เตอร์ เ ป็ น เมธอดพิ เ ศษที่ ใ ช้ ใ นการรั บ ข้ อ มู ล เริ่ ม ต้ น เข้ า มายั ง คลาสในรู ป แบบ
พารามิเตอร์ แต่คอนสตรักเตอร์ไม่จาเป็นต้องมีพารามิเตอร์เสมอไป
 เมธอดที่ เ ป็ น คอนสตรั ก เตอร์ จ ะถู ก เรี ย กขึ้ น มาท างานโดยอั ต โนมั ติ ใ นขั้ น ตอนการสร้ า ง
ออบเจ็กต์
 สาหรับ PHP คอนสตรักเตอร์จะถูกกาหนดตายตัวไปเลยว่าต้องใช้ชื่อ __construct ( )
เท่านั้น (หน้า construct มีเครื่องหมาย underscore 2 ขีด) ส่วนโมดิฟายเออร์ไม่จาเป็นต้องกาหนด หรือ
กาหนดเป็น public เท่านั้น
 พารามิเตอร์ที่คอนสตรักเตอร์รับเข้ามาจะต้องนาไปเก็บไว้ในตัวแปรฟิลด์ เพื่อรอการนาไปใช้
งานเมธอดอื่นๆ ต่อไป
ตัวอย่างที่ 12.14 การสร้างคอนสตรักเตอร์ของคลาส
<?php
class Circle{
private $redius = 0;
function __construct($radius) {
$this -> radius = $radius;
//นาค่าพารามิเตอร์ไปเก็บไว้ในตัวแปรฟิลด์
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
206 บทที่ 12 การเขียนโปรแกรมแบบ OOP
}
}
?>
การเรียกใช้ Constructor
เมธอดที่เป็นคอนสตรักเตอร์จะถูกเรียกขึ้นมาทางานโดยอัตโนมัติในขั้นตอนการสร้างออบเจ็กต์
ทั้งนี้หากคอนสตรักนั้นมีพารามิเตอร์ ต้องระบุลงไปด้วย เช่น
$cir = new Circle(10);
//กาหนดรัศมีเท่ากับ 10
โมดิฟายเออร์ Static
โมดิฟายเออร์แบบ static ใช้เมื่อต้องการให้เกิดการอ้างอิงข้อมูลเดียวกันของทุกออบเจ็กต์ที่สร้าง
มาจากคลาสเดียวกัน ทาให้เมื่อเปลี่ย นแปลงข้อมูลที่ออบเจ็กต์ตัว ใด จะส่ งผลให้ข้อมูลอันเดียวกันใน
ออบเจ็กต์อื่นๆ เปลี่ยนตามไปด้วย เพราะเป็นการอ้างอิงค่าเดียวกัน ทั้งนี้ static ใช้ได้กับทั้งพร็อปเพอร์ตี้
และเมธอด โดยแต่ละคลาสจะมรสมาชิกที่เป็นแบบ static มีดังต่อไปนี้
โมดิฟายเออร์ static $พร็อปเพอร์ตี้;
โมดิฟายเออร์ static function เมธอด ( ) {
.
.
}
ตัวอย่างที่ 12.15 โมดิฟายเออร์ Static
private static $field;
public static $property;
public static function method ( ) {
.
.
}
การเรียกใช้งานสมาชิกแบบ static ภายในคลาส
ภายในคลาสเมื่อต้องการเรียกใช้สมาชิกแบบ static จะต้องระบุด้วยคาว่า self ตามด้วย
โอเปอเรเตอร์ :: และชื่อพร็อปเพอร์ตี้หรือเมธอด ตามรูปแบบคือ
self :: $พร็อปเพอร์ตี้
หรือ
self :: เมธอด ( )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 12 การเขียนโปรแกรมแบบ OOP 207
ตัวอย่างที่ 12.16 การเรียกใช้งานสมาชิกแบบ static ภายในคลาส
self :: $x
//พร็อปเพอร์ตี้
self :: f1 ( );
//เมธอด
การเรียกใช้งานสมาชิกแบบ static จากนอกคลาส
ส่วนภายนอกคลาสการระบุถึงสมาชิกที่เป็น static จะระบุผ่านชื่อคลาสโดยตรง หรือระบุผ่าน
อินสแตนซ์ก็ได้ ในรูปแบบดังนี้
คลาส :: เมธอด
คลาส :: พร็อปเพอร์ตี้
หรือเรียกใช้ผ่านอินสแตนซ์
อินสแตนซ์ -> เมธอด
อินสแตนซ์ -> พร็อปเพอร์ตี้
นอกจากนี้ในการเรียกใช้สมาชิกแบบ static มีข้อกาหนดที่สาคัญดังนี้
 สามารถเรียกใช้สมาชิกแบบ static ได้โดยตรง โดยไม่จาเป็นต้องเรียกผ่านอินสแตนซ์
 เฉพาะเมธอดแบบ static เท่านั้นที่สามารถเรียกพร็อปเพอร์ตี้แบบ static ได้
ตัวอย่างการทดสอบการกาหนดสมาชิกแบบ static โดยประกอบด้วย 2 เพจ สาหรับคลาสและ
ทดสอบการใช้คลาส
ตัวอย่างที่ 12.17 การกาหนดคลาสภายในไฟล์ Visitor.class.php
<?php
class Visitor {
private static $num_visitor = 0;
function _construct ( ) {
self :: $num_visitor++;
}
public static function getVisitor ( ) {
return self :: $num_visitor;
}
}
?>
ตัวอย่างที่ 12.18 การเรียกใช้คลาสในไฟล์ index.php
<?php
include ("Visitor.class.php");
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
208 บทที่ 12 การเขียนโปรแกรมแบบ OOP
$v1 = new Visitor();
echo "Visitors :" . $v1 -> getVisitor ( ) . "<br/>";
$v2 = new Visitor ( );
echo "Visitors :" . $v2 -> getVisitor ( ) . "<br/>";
$v3 = new Visitor ( );
echo "Visitors :" . $v3 -> getVisitor ( ) . "<br/>";
?>
ตัวอย่างนี้ สร้างออบเจ็กต์ของคลาส Visitor จานวน 3 ครั้ง โดยที่คอนสตรักเตอร์ได้เพิ่มค่า
ให้แก่พร็อปเพอร์ตี้ $num_visitor ซึ่งเป็นแบบ static ไปอีก 1 และเมื่อเรียกเมธอด getVisitor ( ) ซึ่ง
เมธอดนี้ จ ะไปอ่านข้อมู ล จาก $num_visitor จะพบว่าค่ าจะเพิ่ม ขึ้นเรื่ อยๆ แสดงว่ าพร็ อปเพอร์ ตี้
$num_visitor นั้นอ้างอิงข้อมูลเดียวกัน จึงทาให้ค่าเพิ่มขึ้นจากค่าเดิมได้ ไม่เช่นนั้นแล้วค่าจะต้องเป็น 1
ทั้งหมด
การสืบทอด (Inheritance)
การสืบทอด หมายถึง การที่คลาสหนึ่งถูกสร้างขึ้นโดยการสืบทอดมาจากอีกคลาสหนึ่ง ผลจาก
การสืบทอดจะทาให้คลาสที่เป็นผู้สืบทอดมีองค์ประกอบทั้งหมดเหมือนกับคลาสต้นแบบ เรียกคลาสที่เป็น
คลาสต้นแบบว่า Parent Class ส่วนคลาสที่เป็นผู้ทาการสืบทอดมาเรียกว่า Sub Class ทั้งนี้การสืบทอด
จะใช้คีย์เวิร์ด extends เป็นตัวกาหนด เช่น
class Shape {
.
.
} class Rectangle extends Shape {
//Rectangle สืบทอดมาจาก Shape
.
.
}
การสืบทอดมักทาเพื่อความสามารถบางอย่างเข้าไปใน Sub Class โดยนาความสามารถเดิม
บางอย่างของ Parent Class มาใช้ เนื่องจากภายหลังการสืบทอดจะทาให้สามารถเรียกสมาชิกต่างๆ ของ
Parent Class จาก Sub Class ได้เหมือนกับคลาสเดียวกัน ยกเว้นสมาชิกที่มีโมดิฟายเออร์เป็น private
มีตัวอย่างดังนี้
ตัวอย่างที่ 12.19 การสืบทอดคลาส
<?php
class circle {
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 12 การเขียนโปรแกรมแบบ OOP 209
function circle_area ($radius) {
return pi ( ) * pow ($radius, 2);
}
}
class Cylinder extends Circle {
function volume ($radius, $height) {
$base_area = $this -> circle_area ($radius); //ปริมาตร=พื้นที่ฐาน*สูง
return $base_area * $height;
}
}
$cyl = new Cylinder ( );
echo $cyl -> volume (10, 20);
echo $cyl -> circle_area (30);
?>
จากโค้ดตัวอย่างนี้จะพบว่าคลาส Cylinder นั้นสืบทอดมาจาก Circle และได้เพิ่มเมธอด
volume ( ) เข้ามาในคลาส Cylinder จึงสามารถเข้าถึงเมธอด circle_area ( ) ของคลาส Circle จาก
คลาส Cylinder ได้โดยใช้ $this -> เหมือนกับอยู่ในคลาสเดียวกัน รวมถึงการเข้าถึงผ่านทางอินสแตนซ์ได้
เช่นกัน
แต่ทั่วไปแล้วคลาสมักต้องมีคอนสตรักเตอร์ และกรณีการสืบทอด Sub Class สามารถมี
คอนสตรักเตอร์เป็นของตนเองที่ต่างไปจาก Parent Class ได้ และสามารถเข้าถึงคอนสตรักเตอร์ของ
Parent Class ด้วยการอ้างอิงในรูปแบบดังนี้
parent :: _construct (อาร์กิวเมนต์)
ซึ่งจากการสืบ ทอดระหว่างคลาส Circle/Cylinder ที่ผ่ านมา สามารถแก้ไขให้ ถูกต้องตาม
แนวทาง OOP ยิ่งขึ้นได้ดังนี้
ตัวอย่างที่ 12.20 การสืบทอดระหว่างคลาส
<?php
class Circle {
private $radius = 0;
function _construct($radius) {
$this -> radius = $radius;
}
function area ( ) {
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
210 บทที่ 12 การเขียนโปรแกรมแบบ OOP
return pi ( ) * pow ($this -> radius, 2);
}
}
class Cylinder extends Circle {
private $height = 0;
function _construct ($radius, $height) {
$this -> height = $height;
private :: _construct($radius); //เรียกคอนสตรักเตอร์ของคลาส Circle
}
function volume ( ) {
$base_area = $this -> area ( );
return $base_area * $this -> height;
}
}
//--------------------------------------------------------------------------------------------------------$cy = new Cylinder (10, 20);
echo $cy -> volume();
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13
การใช้เทคนิค AJAX ร่วมกับ PHP
ปัจจุบันนี้ ลักษณะการทางานแบบ ไคลเอนต์ - เซิร์ฟเวอร์ เริ่มถูกนามาใช้งานอย่างแพร่หลายใน
ลักษณะการติดต่อสื่อสารผ่านทางเว็บบราวเซอร์ ซึ่งการทางานแบบนี้ จะมีการทางานโดย ไคลเอนต์ จะ
ร้องขอและต้องการข้อมูลบางอย่างจาก เซิร์ฟเวอร์ ดังนั้นการโหลดและการรีเฟรชหน้าจอ เป็นสิ่งที่
หลีกเลี่ยงไม่ได้ จึงเป็นผลให้การทางานของฝั่ง ไคลเอนต์ นี้ทาให้ผู้ใช้ต้องหยุดรอการโหลดและการรีเฟรช
หน้าจอ ซึ่งถือว่าเป็นการทางานที่ไม่มีประสิทธิภาพ
AJAX (Asynchronous JavaScript and XML)
AJAX ไม่ใช่ชื่อของการเขียนโปรแกรมหรือเป็นชื่อของภาษาที่ใช้ในการโปรแกรม แต่เป็นชุดของ
เทคโนโลยีต่างๆ AJAX ย่อมาจาก Asynchronous JavaScript And XML หมายถึง การทางานร่วมกัน
ของ JavaScript และ XML แบบ Asynchronous มีหลักการทางาน 2 ประเด็น คือ การ update
หน้าจอแบบบางส่วน และการติดต่อสื่อสารกับ เซิร์ฟเวอร์ โดยใช้หลักการ Asynchronous ทาให้ผู้ใช้ไม่
ต้องหยุดการทางาน เพื่อรอการประมวลผลจาก เซิร์ฟเวอร์ รวมถึงการโหลดและการรีเฟรชหน้าจอ ของ
บราวเซอร์ทางฝั่ง ไคลเอนต์ มีการใช้ AJAX โดยการเพิ่มเลเยอร์ระหว่างเว็บบราวเซอร์ของผู้ใช้ กับ
เซิร์ฟเวอร์ ทาให้ผู้ใช้สามารถทางานได้โดยไม่ต้องรอให้ ไคลเอนต์ติดต่อไปยังเซิร์ฟเวอร์ รวมถึงการโหลด
และการรีเฟรชหน้าจอทั้งหมดด้วย ดังนั้นผู้ใช้สามารถใช้งาน application ได้อย่างมีประสิทธิภาพมากขึ้น
AJAX จึงไม่ใช่เทคโนโลยีในตัวของมันเอง แต่ว่าเป็นการนาเทคโนโลยีหลายๆ ตัวมารวมกันเช่น
JavaScript, DHTML, XML, CSS, DOM และ XMLHTTPRequest
AJAX Engine ทาหน้าที่เป็นตัวกลางระหว่าง ไคลเอนต์และเซิร์ฟเวอร์ ฉะนั้นเมื่อ ไคลเอนต์ มีการ
ร้องขอแทนที่จะส่ง HTTP request ไปยังเซิร์ฟเวอร์โดยตรง ไคลเอนต์จะส่ง JavaScript call ไปยัง AJAX
Engine เพื่อโหลดข้อมูลที่ผู้ใช้ต้องการ และหาก AJAX Engine ต้องการข้อมูลเพิ่มเติมในการตอบสนอง
ต่อ AJAX Engine ของผู้ใช้จะส่งการร้องขอไปยังเซิร์ฟเวอร์ โดยใช้ XML
เทคโนโลยีต่างๆ ที่เป็นส่วนประกอบของ AJAX ได้แก่
 HTML/XHTML เป็นภาษาในการจัดแสดงข้อมูล
 CSS เป็นรูปแบบการจัดแต่ง XHTML
 Document Object Model (DOM) สาหรับ dynamic display and interaction
 XML เป็นรูปแบบการแลกเปลี่ยนข้อมูล
 XSLT สาหรับ แปลง XML เป็น XHTML
212 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
 XMLHTTPRequest สาหรับ asynchronous data retrieval
 JavaScript เป็นภาษาในการใช้งาน AJAX Engine
ประวัติความเป็นมา
ในช่วงแรกๆ ของการพัฒนา คือ ปี 1997 นั้น Component แรกที่เกิดขึ้นทางฝั่งไคลเอนต์ ถูก
เขียนขึ้นโดยทีมพัฒนา Outlook Web Access ซึ่งต่อมาถูกนามาใช้เป็นส่วนหนึ่งของ Internet Explorer
5.0 นั่นก็คือจุดเริ่มต้นที่เริ่มรู้จักการทางานแบบ AJAX และในปี 2005 Google ได้ใช้การติดต่อสื่อสาร
แบบ Asynchronous เพื่อเป็นรากฐานที่ทาให้รู้จักกับ AJAX กันอย่างแพร่หลาย การทางานแบบ
ไคลเอนต์ - เซิร์ฟเวอร์ ถูกนามาใช้งานเป็นจานวนมาก เช่น การติดต่อกับฐานข้อมูลที่ เซิร์ฟเวอร์ หรือการ
ให้บริการทางอินเทอร์เน็ต ซึ่ง Google เป็นผู้ลงทุนลงแรงอย่างหนัก ในพัฒนาและการทดสอบ AJAX จึง
สังเกตได้ว่า ผลผลิตใหญ่ของ Google คริส อัลแมน และลูซินดา ดิเคส (Chris Ullman and Lucinda
Dykes, 2007, p.3) ได้กล่าวไว้ว่า ในช่วงต้นปี 2005 ได้มีการนาการนา AJAX มาประยุกต์ใช้งานกับ
เว็บไซต์ต่างๆ ทั่วโลก เช่น Flickr (www.flickr.com), Basecamp (basecamp.com), Amazon
CloudSearch (www.A9.com), Google Suggest and Google Maps และอีกหลายเว็บไซต์ทั่วโลก
ที่มาของปัญหา
เนื่ องจากแอพลิ เ คชั่น ที่ ใช้งานในปั จจุบัน นี้ มีห ลั กการที่ทางานแล้ ว เกิ ดการสู ญเสี ยเวลาและ
ทรัพยากรของผู้ใช้ในการรอคอยการทางานต่างๆ ทาให้ผู้ใช้ต้องหยุดคอย ดังนั้นการทางานของผู้ใช้จึง
เป็นไปอย่างไม่ต่อเนื่อง ซึ่งหลักการดังกล่าวคือ
1. "Click, wait, and refresh" user interaction paradigm
การที่บราวเซอร์ตอบสนองต่อการทางานของผู้ใช้ โดยจะทิ้งหน้าเว็บที่แสดงอยู่ในขณะนั้น แล้วไป
ทาการส่ง HTTP request กลับไปยังเซิร์ฟเวอร์แทน ซึ่งทาให้ผู้ใช้ไม่สามารถทาอะไรได้เลยในขณะนั้น
นอกจากการรอคอย เมื่อเซิร์ฟเวอร์ทาการประมวลเสร็จก็จะส่งหน้า HTML กลับมายังบราวเซอร์ ต่อจากนั้น
บราวเซอร์ก็จะรีเฟรชและแสดงหน้า HTML หน้าใหม่ และนี้เองที่ทาให้ผู้ใช้สามารถใช้งานต่อไปได้
จะเห็ น ว่ า ผู้ ใ ช้ มี ช่ ว งเวลาของการหยุ ด รอคอยเป็ น เวลานานส าหรั บ การประมวลผลของ
เซิร์ฟเวอร์ และการรีเฟรชหน้า HTML ใหม่ทั้งหน้า ซึ่งเป็นสิ่งที่ไม่มีประสิทธิภาพในเชิง Dynamic ของการ
ทางานบนเว็บแอพลิเคชั่น
2. Synchronous "request/response" communication mode
การที่บราวเซอร์เริ่มทาการร้องขอข้อมูลและเซิร์ฟเวอร์ ก็ตอบสนองเฉพาะการร้องขอที่
บราวเซอร์ร้องขอมาเซิร์ฟเวอร์ จะไม่สามารถส่งข้อมูลได้ถ้าบราวเซอร์ไม่ได้ร้องขอข้อมูลในขณะนั้น ซึ่งถือ
ว่าเป็นการติดต่อสื่อสารเป็นแบบทิศทางเดียว

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 213
วงจรการ Request/Response แบบ Synchronous คือ การทางานแบบประสานจังหวะ
ระหว่างบราวเซอร์กับเซิร์ฟเวอร์ ทาให้เกิดความล่าช้าในการทางานทาให้ผู้ใช้ทาอะไรไม่ได้อีก นอกจาก
การคอยการตอบสนองกลับมาจากเซิร์ฟเวอร์ เมื่อเซิร์ฟเวอร์ประมวลผลเสร็จ

ภาพที่ 13.1 เปรียบเทียบการทางานแบบเดิม กับ AJAX
ที่มา: http://wiki.nectec.or.th/gitiwiki/pub/Knowledge/Ajax/ajax2.png
โครงสร้างของ AJAX
มุมมองของโครงสร้างของ AJAX ต่างจากเว็บแอพลิเคชั่นในทุกวันนี้ เนื่องจากมีการเพิ่ม Engine
ทางฝั่งไคลเอนต์

ภาพที่ 13.2 โครงสร้างของ AJAX ในปัจจุบัน
ที่มา: http://wiki.nectec.or.th/gitiwiki/pub/Knowledge/Ajax/ajax_archi.gif
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
214 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
จากภาพ AJAX Engine นี้ อยู่ระหว่างผู้ใช้งานกับเซิร์ฟเวอร์ ซึ่งจะมองว่าเป็นการทางานที่
ไคลเอนต์ การทางานต่างๆ ของผู้ใช้ โปรแกรมจะไปเรียก AJAX Engine ตัวนี้ขึ้นมา แทนที่การร้องขอหน้า
เว็บจากเซิร์ฟเวอร์โดยตรง และจะใช้โครงสร้างข้อมูลแบบ XML ในการขนย้ายข้อมูลระหว่า งเซิร์ฟเวอร์
กับ AJAX Engine เมือบราวเซอร์ทาการร้องขอข้อมูลจากเซิร์ฟเวอร์
่
นอกจากนี้ AJAX Engine ไม่ต้องทาการติดตั้งส่วนเสริมการทางานต่างๆ และไม่สามารถดาวน์
โหลดได้ เพราะ AJAX เป็นแนวคิดในการแก้ปัญหาการหยุดชะงักการทางานของผู้ใช้
การทางานของ AJAX
AJAX จะช่วยลดการติดต่อระหว่างไคลเอนต์กับเซิร์ฟเวอร์ โดยในการโหลดหน้าเว็บนั่น บราวเซอร์
จะโหลดข้อมูลจาก AJAX Engine แทนการร้องขอข้อมูลจากเซิร์ฟเวอร์ โดยตรง ดังนั้น AJAX จะทาหน้าที่ทั้ง
การแสดงผลรวมทั้งติดต่อกับผู้ใช้ และติดต่อไปยัง เซิร์ฟเวอร์ แล้ว AJAX Engine อนุญาตให้การกระทาต่างๆ
ใน web application เป็นแบบ Asynchronous คือ ความเป็นอิสระในการติดต่อไปยังเซิร์ฟเวอร์นั่นเอง
ดังนั้นผู้ใช้จะไม่พบกับบราวเซอร์หน้าขาวๆ อีกต่อไป และไม่ต้องรอการโหลดข้อมูลต่างๆ จากเซิร์ฟเวอร์

ภาพที่ 13.3 หลักการทางานของ AJAX
ที่มา: http://wiki.nectec.or.th/gitiwiki/pub/Knowledge/Ajax/ajax_work.gif
Asynchronous
ลักษณะของ Asynchronous ในที่นี้คือ ไม่ต้องหยุดรอข้อมูล หมายความว่า หลังจากส่งข้อมูล
ออกไปแล้วก็ยังสามารถใช้งานส่วนอื่น ๆ ในเพจนั้นได้ตามปกติ เพราะกระบวนทั้งหมดเป็นแบบ behind
the scene
JavaScript
เนื่องจาก AJAX คือ การเอาเทคโนโลยีอื่นๆ มาใช้ร่วมกัน ซึ่งการที่จะใช้เทคโนโลยีต่างๆ เหล่านั้น
ได้ จาเป็นต้องใช้ภาษาอย่าง JavaScript มาเป็นตัวจัดการให้ และสาหรับ AJAX ต้องใช้ JavaScript เป็น
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 215
ตัวควบคุมกระบวนการทั้งหมด นับตั้งแต่เริ่มต้นจนสิ้นสุดการติดต่อสื่ อสาร ดังนั้นผู้จะศึกษาเทคนิค AJAX
นี้ได้จึงจาเป็นต้องมีพื้นฐานด้านภาษา JavaScript และ DHTML ที่ดีพอสมควร ยิ่งรู้เกี่ยวกับ DHTML/
JavaScript มากเท่าใด ก็ยิ่งมีแนวทางในการประยุกต์ใช้ AJAX มากเท่านั้น
XML
XML (Extensible Markup Language) เป็นภาษาที่ใช้สาหรับการเขียนเอกสาร markup
(markup document) โดยที่เอกสาร markup นั้นมีการใช้ metadata หรือ tags เพื่อบอกหน้าที่และ
ประเภทของข้อมูลของส่วนต่างๆ ของเอกสารนั้นได้โดยชัดเจน การเพิ่ม metadata หรือ tags เข้าไปใน
เอกสารสามารถทาให้โครงสร้างของเอกสารชัดเจนขึ้น และทาให้การประมวลผลเอกสารเป็นไปโดยง่าย
และไม่จาเป็นที่จะต้องอาศัยมนุษย์เพื่อตีความเอกสาร
การใช้เทคโนโลยี XML ในการพัฒนามาตรฐานเพื่อการกระจายข่าวเนื่องจาก XML เป็นภาษาที่
เหมาะกับการแลกเปลี่ยนข้อมูลผ่านเครือข่ายคอมพิ วเตอร์ เนื่องจาก XML ไม่ได้ขึ้นอยู่กับโปรแกรม
ประยุกต์หรือระบบปฏิบัติการใด นอกจากนี้ XML ยังเป็นภาษาที่มีความยืดหยุ่น เนื่องจากผู้ใช้สามารถที่
จะกาหนดและตั้งค่า metadata หรือ tags ให้เหมาะกับเอกสารเฉพาะที่ต้องการได้อย่างอิสระ และยัง
สามารถเพิ่มเติม metadata หรือ tags ได้ในภายหลังโดยไม่มีผลกระทบต่อโปรแกรมที่มีอยู่ก่อนหน้า
XML สาหรับการพัฒนาร่วมกับ AJAX Application แล้วนั้น อาจไม่จาเป็นต้องรู้ XML เลยก็ได้
เพราะ AJAX มีเมธอดที่ใช้แปลงข้อมูลให้อยู่ในรูปแบบสตริงธรรมดาแบบง่ายๆ ได้
Server Side Script กับ AJAX
ตามหลักการของ AJAX จาเป็นต้องส่งข้อมูลบางอย่างไปยัง เซิร์ฟเวอร์ ดังนั้นทางฝั่งเซิร์ฟเวอร์ก็
จาเป็นต้องเขียนสคริปต์ไว้สาหรับรับข้อมูลเข้ามาประมวลผล และส่งผลลัพธ์กลับไปให้ ซึ่งสามารถเลือกใช้
Engine ตัวใดก็ได้ที่ถนัด เช่น PHP, ASP, NET, JSP เป็นต้น ทั้งนี้การเขียนสคริปต์ทางฝั่ง เซิร์ฟเวอร์นั้น ก็
เหมือนกับการเขียนสาหรับเพจทั่วไปตามปกติ ไม่มีวิธีการหรือองค์ประกอบใดๆ เป็นพิเศษสาหรับ AJAX
การใช้ AJAX Framework
ตามขั้นตอนที่แท้จริงของเทคนิค AJAX นั้น ต้องเริ่มจากการใช้ JavaScript สร้างแบบเจ็กต์
XMLHTTP (สาหรับ IE 5-6) หรือไม่ก็ XMLHttpRequest (สาหรับ IE 7 ขึ้นไป และบราวเซอร์อื่นๆ)
ขึ้นมาก่อน แล้วขั้นตอนต่าง ๆ ของ AJAX ก็ทาผ่านเมธอด และพร็อปเพอร์ตี้ ของออบเจ็กต์นี้ แต่เนื่องจาก
ลาดับขั้นตอนมีค่อนข้างมาก ซึ่งเพื่อเป็นการลดความยุ่งยากดังกล่าวนี้ ในที่นี้จะนา AJAX Framework มา
ใช้แทน ซึ่งลักษณะของเฟรมเวิร์กนี้ก็คือจะแยกส่วนที่เป็น JavaScript ที่ต้องทาซ้าๆ เหมือนกันทุกครั้งใน
รั บ ส่ ง ข้อมู ล ไปไว้ใ นไฟล์ ต่า งหาก แล้ ว สามารถน าเข้า มาใช้งานได้ ในทุ กเพจที่ต้ องการ (คล้ ายกั บการ
include file ใน PHP นั่งเอง) ซึ่งก็จะช่วยลดขั้นตอนการเขียน JavaScript ลงไปได้มากทีเดียว ข้อกาหนด
เบื้องต้นที่ต้องรู้ที่เอาไว้ในเบื้องต้นของการใช้ AJAX Framework มีดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
216 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
เมธอดที่ใช้ในการส่งข้อมูล
ใน AJAX ต้องกาหนดเมธอดในการส่งข้อมูลเช่นเดียวกับฟอร์ม โดยเมธอดที่กาหนดได้ก็ คือ
POST หรือ GET หากเป็นข้อมูลสั้นๆ ไม่เน้นความปลอดภัยนักก็ใช้เมธอด GET หากเป็นข้อมูลยาวและ
ต้องการความปลอดภัยก็ใช้แบบ POST
เพจปลายทางด้านเซิร์ฟเวอร์
เพจปลายทาง คือ เพจที่ จะเป็ นผู้ รับข้อมูล มาประมวลผล เหมือนกับการกาหนดแอตตริบิว ต์
"action" ของฟอร์ ม ทั้งนี้ เพจปลายทางควรแยกไปสร้างไว้อีกเพจหนึ่งต่างหาก มากกว่าที่จะใช้วิธี
Postback (การทางานทั้งหมดอยู่ในหน้าเดียวกัน)
ข้อมูลที่จะส่งออกไป
ถ้าหากเขียนโปรแกรมตามขั้นตอนปกติ จะต้องนาข้อมูลจากฟอร์มมาเรียงต่อกันในลักษณะของ
Query String เช่น
Keyword=AJAX&page=2&rowperpage=20
แต่เพื่อลดความยุ่งยากตรงจุดนี้ ผู้เขียนจึงได้ สร้างฟังก์ชันไว้ใน AJAX Framework สาหรับการ
อ่านข้อมูลจากฟอร์มเพื่อมาเรียงต่อกันแบบ Query String ให้เรียกใช้งานแบบง่ายๆ แต่หากข้อมูลนั้น
ไม่ได้อ่านจากฟอร์มต้องกาหนดวิธีการจัดเรียงเอง แต่ก็ไม่มีอะไรยุ่งยาก สามารถนาความรู้เรื่องการสร้าง
Query String ใน PHP ซึ่งใช้ลักษณะเดียวกันมาใช้ได้เลย
การแสดงผลลัพธ์
หลังส่งข้อมูลขึ้นไปประมวลผลที่ เซิร์ฟเวอร์แล้ว เมื่อผลลัพธ์ถูกส่งกลับมา หากเป็นข้อมูลสตริง
ธรรมดา (หรืออาจมีแท็ก HTML รวมอยู่ด้วย) ต้องกาหนดว่าจะนาไปแสดงที่อิลิเมนต์ (Element หรือ
input form คือ ตัวเดียวกัน) ใดภายในเพจนั้น นั่นแสดงว่าต้องสร้างอิลิเมนต์ที่ใช้แสดงผลเอาไว้ล่วงหน้า
แล้ว ก่อนที่จะเริ่มการทางานของ AJAX ซึ่งโดยทั่วไปมักใช้ div หรือไม่ก็ span พร้อมกาหนดค่า id ให้กับ
มันเพื่อนามาใช้อ้างอิงได้
การสร้างออบเจ็กต์ XMLHTTP/XMLHttpRequest
บัญชา ปะสีละเตสัง (2551, หน้า 174) ได้กล่าวไว้ว่า คลาส XMLHTTP และ XMLHttpRequest
คือ คลาสที่ใช้จัดการข้อมูลของ AJAX ทั้งหมด ตั้งแต่การส่งข้อมูลไปจนถึงการรับข้อมูลผลลัพธ์กลับมา แต่
อย่างไรก็ตาม เนื่องบราวเซอร์แต่ละตัวนั้นรองรับการใช้คลาสนี้แตกต่างกันออกไป ถ้าเป็น IE จะใช้คลาสที่
มีชื่อว่า XMLHTTP แต่ถ้าเป็น Netscape/Firefox/Mozilla จะใช้คลาสที่ชื่อว่า XMLHttpRequest แต่
สมาชิกภายในคลาส คือ เมธอด และพร็อปเพอร์ตี้สาคัญที่จะใช้งานหลักๆ จะคล้ายกัน แต่เนื่องจากทั้ง
XMLHTTP/XMLHttpRequest อยู่ในรูปแบบของคลาสไม่ใช่ออบเจ็กต์ จึงยังไม่สามารถนามาใช้งาน
โดยตรงได้ ต้องสร้างเป็นออบเจ็กต์เสียก่อน โดยแยกพิจารณาตามชนิดของบราวเซอร์ดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 217
ตัวอย่างที่ 13.1 การออบเจ็กต์ XMLHTTP สาหรับ IE
<script>
var ajax = null;
if (window.ActiveXObject) {
ajax = new ActiveXObject ("Microsoft.XMLHTTP");
}
.
// เขียนโค้ดคาสั่งตามความต้องการของผู้ใช้
.
</script>
จากตัวอย่าง สามารถอธิบายได้ดังนี้
1. สร้างตัวแปรอินสแตนซ์สาหรับออบเจ็กต์ โดยกาหนดตัวแปรชื่อ ajax
2. ตรวจสอบว่าบราวเซอร์รองรับการใช้ ActiveX หรือไม่ ถ้ารองรับแสดงว่าเป็น IE เพราะ
เทคโนโลยี ActiveX นั้นจะมีเฉพาะในไมโครซอฟต์ แต่ถ้าไม่รองรับแสดงว่าเป็นบราวเซอร์ชนิดอื่นๆ
3. สร้างออบเจ็กต์สาหรับ AJAX เพื่อนาไปใช้งานต่อไป
ตัวอย่างที่ 13.2 การออบเจ็กต์ XMLHttpRequest สาหรับบราวเซอร์ที่ไม่ใช่ IE
<script>
var ajax = null;
if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest;
}
.
// เขียนโค้ดคาสั่งตามความต้องการของผู้ใช้
.
</script>
จากตัวอย่าง สามารถอธิบายได้ดังนี้
1. สร้างตัวแปรอินสแตนซ์สาหรับออบเจ็กต์ โดยใช้ตัวแปรชื่อ ajax แบบ XMLHttpRequest
2. ตรวจสอบว่าบราวเซอร์ รองรับการใช้ XMLHttpRequest หรือไม่ ถ้ารองรับจึงจะสร้าง
ออบเจ็กต์นี้ได้
3. สร้างออบเจ็กต์สาหรับ AJAX เพื่อนาไปใช้งานต่อไป
แม้ว่าผู้ใช้โดยส่สวนใหญ่จะใช้ IE เป็นหลัก และมีเพียงส่วนน้อยที่ใช้บราวเซอร์อื่นๆ แต่การสร้าง
เว็บไซต์ที่ดีควรสามารถใช้ได้ในหลายๆ บราวเซอร์ จะได้ไม่ เกิดปัญหา จากการสร้างออบเจ็กต์สาหรับ
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
218 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
AJAX ที่ผ่านมาจะเห็นว่าสามารถตรวจสอบบราวเซอร์ของผู้ใช้งานได้ ดังนั้นการประยุกต์ใช้ในขั้นตอนนี้
คือ การตรวจสอบบราวเซอร์ก่อนการใช้งานดังนี้
ตัวอย่างที่ 13.3 การออบเจ็กต์ของ AJAX ให้รองรับในทุกบราวเซอร์
<script>
var ajax = null;
if (window.ActiveXObject) {
ajax = new ActiveXObject ("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest;
} else {
alert ("บราวเซอร์ของคุณไม่รองรับการใช้งาน AJAX");
}
.
// เขียนโค้ดคาสั่งตามความต้องการของผู้ใช้
.
</script>
ฟังก์ชันที่ใช้จัดการข้อมูล
ภายใน AJAX Framework ผู้เขียนได้สร้างฟังก์ชันเพิ่มเติมขึ้นมา 2 ฟังก์ชัน เพื่อใช้ในการรับส่ง
ข้อมูล และอ่านข้อมูลจากฟอร์มดังนี้
ฟังก์ชัน AJAXLoad ( )
ใช้ในการส่งข้อมูลจากบราวเซอร์ไปยัง เซิร์ฟเวอร์ และรับผลลัพธ์กลั บมาแสดงผลที่อิลิเมนต์ที่
กาหนด มีรูปแบบดังนี้
รูปแบบ
AJAXLoad (เมธอดเพจปลายทาง, ข้อมูลที่จะส่งออกไป, อิลิเมนต์แสดงผล)
ตัวอย่างที่ 13.4 ฟังก์ชัน AJAXLoad ( )
AJAXLoad ("post,test.php","kw=AJAX&page=10","mydiv");
ฟังก์ชัน getFormData( )
ใช้ในการอ่านข้อมูลจากฟอร์มมาต่อกันแบบ Query String โดยต้องระบุ id หรือชื่อแอตตริบิวต์
ของฟอร์มที่ต้องการอ่านข้อมูล
รูปแบบ
getFormData (form_id หรือ form_name)
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 219
ตัวอย่างที่ 13.5 ฟังก์ชัน getFormData( )
var data = getFromData ("from1");
แนวทางการพัฒนา AJAX Application
กระบวนการของ AJAX สามารถแยกกระบวนการทางานเป็น 2 ส่วน คือ กระบวนการฝั่ง
บราวเซอร์ และกระบวนฝั่งเซิร์ฟเวอร์ มีรายละเอียดดังนี้
การบวนการฝังบราวเซอร์
่
1. ถ้าจะส่งข้อมูลจากฟอร์มออกไป ก็ให้นาฟอร์มและอินพุตมาวางตามปกติ ทั้งนี้ต้องกาหนดค่า
id หรือ name ให้กับฟอร์มด้วย เพื่อใช้อ้างถึงในการอ่านข้อมูล
2. จัดวางอิลิเมนต์ที่จะใช้แสดงผลลงไป ณ ตาแหน่งที่ต้องการ ซึ่งอาจใช้ Div หรือ Span และ
จะต้องกาหนดค่า id ให้กับอิลิเมนต์ด้วย ตัวอย่างดังนี้
<div id="diplayAJAX"> </div>
3. สร้างฟังก์ชัน JavaScript สาหรับจัดการ AJAX โดยภายในฟังก์ชันเป็นการจัดเตรียมข้อมูล
สาหรับฟังก์ชัน AJAXLoad ( ) ตามที่ได้กล่าวถึงมาแล้ว ตัวอย่างดังนี้
ตัวอย่างที่ 13.6 การสร้างฟังก์ชัน JavaScript สาหรับจัดการ AJAX
<head>
<script src="../AJAX/framework.js"> </script>
<script>
function AJAXCall ( ) {
var data = getFromdataa ('form1');
var URL = 'AJAX_test.php'; // นาข้อมูลไปกาหนดให้แก่ฟังก์ชัน AJAXLoad()
// เพื่อส่งออกไป ซึ่งฟังก์ชันนี้อยู่ใน framework.js
AJAXLoad ('post', URL,data, 'DisplayAJAX');
}
</script>
</head>
4. จากฟังก์ชัน AJAXCall ( ) ที่สร้างขึ้นในข้อที่ 3 ต้องพิจารณาต่อไปอีกว่า จะเรียกฟังก์ชันนี้
ขึ้นมาทางานเมื่อใด เช่นอาจเพิ่มปุ่ม Button เข้าไป แล้วเพื่อเรียกใช้ฟังก์ชัน AJAXCall ดังนี้
ตัวอย่างที่ 13.7 การสร้างปุ่มเพื่อเรียกใช้ฟังก์ชัน AJAXCall
<input type="button" value="OK" onclick = "AJAXCall ( )"/>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
220 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
กระบวนการฝั่งเซิร์ฟเวอร์
ทางด้านเซิร์ฟเวอร์นั้ น ก็ใช้วิธีที่เหมือนกับการเขียนเพจปกติ โดยไม่มีอะไรเป็นพิเศษส าหรับ
AJAX แต่ก็พอสรุปเป็นหลักการได้ดังนี้
 การรับข้อมูลที่ถูกส่งเข้ามาผ่านตัวแปร $_GET หรือ $_POST ขึ้นอยู่กับเมธอดที่ถูกส่งเข้ามา
 หลังการประมวลผล ก็ส่งข้อมูลกลับออกไปด้วยเพื่อแสดงผลด้วยฟังก์ชัน echo ( ) หรือ
print ( ) ตามปกติ ถ้าข้อมูลที่ส่งนั้นยาวมากก็ควรนามารวมเป็นสตริงเดียวกันก่อนส่ง
ปัญหาภาษาไทยใน AJAX
ในการใช้ AJAX ร่วมกับPHPจะมีปัญหาสาคัญอย่างหนึ่ง คือ การแสดงภาษาไทยจะกลายเป็น
อักขระที่อ่านไม่รู้เรื่อง เช่น จากตัวอย่างที่แล้ว หากไม่ใช้ฟังก์ชัน header ( ) และถ้าใส่ข้อมูลที่ไม่ใช่ตัวเลข
จะได้ผลลัพธ์เป็นคาว่า "ค่าที่ใส่ไม่ใช่ตัวเลข"
สาหรับปัญหาอักขระภาษาไทยที่เกิดขึ้นกับAJAX/PHPโดยส่วนใหญ่จะมี2ลักษณะ คือ
1. ถ้าผลลัพธ์ที่ส่งกลับมาแสดงผลภาษาไทยไม่ถูกต้อง แก้ปัญหาโดยใช้ ฟังก์ชัน header ( ) แล้ว
กาหนด Content-Type เป็น tis-620 หรือ utf-8 เช่น
ตัวอย่างที่ 13.8 การใช้ฟังก์ชัน header ( ) เพื่อควบคุมการแสดงผลภาษาไทย
header ("Content-Type:text/plain; charset=tis-620");
2. ถ้ามีการส่งข้อมูลที่มีภาษาไทยจากฝั่ง บราวเซอร์ขึ้นไป ก่อนส่ง JavaScript จะเปลี่ยนเป็น
Unicode แบบ utf-8 ซึ่งแม้ว่า utf-8 จะรองรับภาษาไทยได้ แต่ก็อาจเกิดปัญหาในบางกรณี ดังนั้นเพื่อ
เป็นการป้องกันปัญหาเกี่ยวกับอักขระ ทางฝั่งเซิร์ฟเวอร์ที่รับข้อมูลควรเข้ารหัสใหม่ให้เป็น tis-620 ด้วย
ฟังก์ชัน iconv ( ) ซึงฟังก์ชันนี้ก็คุ้นเคยกันดีอยู่แล้วเพราะในหลายๆ บทที่ผ่านมาก็ใช้งานมาตลอด เช่น
่
ตัวอย่างที่ 13.9 การส่งข้อมูลที่มีภาษาไทยจากฝั่งบราวเซอร์ขึ้นไป ก่อนส่ง JavaScript
$input = iconv ("utf-8","tis-620",$_POST["input"]);
ในทางปฏิบัติ การรับข้อมูลของทางฝั่งเซิร์ฟเวอร์ที่ส่งผ่าน AJAX เข้ามา ควรเข้ารหัสก่อนเสมอ ซึ่ง
ถึงแม้ข้อมูลที่ผ่านส่งไปจะไม่มีภาษาไทยอยู่ด้วยก็ไม่มีปัญหา หลังการใช้ ฟังก์ชัน iconv ( ) ข้อมูลที่ได้จะ
ตรงกับข้อมูลที่ส่งไปเสมอ
การส่งผลลัพธ์กลับมาเป็น JavaScript
การส่ ง ผลลั พ ธ์ ก ลั บ มาในรู ป แบบสตริ ง ธรรมดา อาจท าให้ ไ ม่ ส ามารถแก้ ไ ขอะไรได้ ม ากนั ก
โดยเฉพาะอย่างยิ่งในกรณีที่ต้องควบคุมการทางานจากเซิร์ฟเวอร์ ซึ่งวิธีที่จะทาได้ก็คือ ส่งผลลัพธ์กลับคืน
มาในรูปแบบคาสั่งของ JavaScript โดยแยกพิจารณาระหว่างฝั่งเซิร์ฟเวอร์และบราวเซอร์ดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 221
การส่งผลลัพธ์ที่เป็น JavaScript ในฝั่งเซิร์ฟเวอร์
จะต้องสร้างคาสั่ง JavaScript ในรูปแบบของสตริงธรรมดา โดยจะมีจานวนคาสั่งเท่าไหร่ก็ได้ แต่
ต้องไม่มีแท็ก <script> และ </script> คร่อมระหว่างคาสั่งเหล่านั้น นอกจากนี้เพื่อให้ทางฝั่งบราวเซอร์
สามารถตรวจสอบได้ว่า ผลลัพธ์ที่ได้รับมานั้นเป็น JavaScript ควรกาหนดเฮดเดอร์กากับไว้ด้วยฟังก์ชัน
header ( ) ในลักษณะดังนี้
header ("Content-type:text/javascript; charset=tis-620");
หรือบางครั้งการจะส่งผลลัพธ์กลับไปแบบใด อาจขึ้นกับเงื่อนไข ดังนั้นอาจตรวจสอบเงื่อนไปก่อน
กาหนดเฮดเดอร์ เช่น
ตัวอย่างที่ 13.10 การเขียนคาสั่งเพื่อให้รองรับภาษาไทยผ่านฟังก์ชัน header ( )
<?php
$x = ...;
if (empty($x)) {
header ("Content-Type: text/plain; charset=tis-620");
echo"...";
} else {
header ("Content-Type: text/javascript;charset=tis-620");
//สร้างคาสั่ง JavaScriptในแบบสตริง กี่คาสั่งก็ได้ แล้วส่งออกไป
$js = ''
var el = document.getElementById('x');
el.style.display='none
alert ('...');
";
echo $js;
}
?>
การจัดการผลลัพธ์ที่เป็น JavaScript ฝังบราวเซอร์
่
หากเขียนโปรแกรม Javascript เอง ปกติก็ต้องมีการตรวจสอบเฮดเดอร์ของผลลัพธ์ก่อน แล้วใช้
ฟังก์ชัน eval ( ) ของใน JavaScript ในการประมวลผล แต่เนื่องจากใน AJAX Framework นั้น ผู้เขียน
ได้ทาให้รองรับผลลัพธ์ที่เป็นคาสั่ง JavaScript โดยอัตโนมัติอยู่แล้ว ดังนั้นจึงไม่ต้องทาอะไร เพียงแต่ ฝั่ง
เซิร์ฟเวอร์ต้องกาหนดเฮดเดอร์ก่อนไม่เช่นนั้นจะไม่สามารถจาแนกได้ว่า ผลลัพธ์เป็นสตริงธรรมดาหรือเป็น
JavaScript และสาหรับอิลิเมนต์ที่จะใช้แสดงผล หากจะกาหนดวิธีการผ่าน JavaScript อาจไม่มีอิลิเมนต์
นี้กได้ และกาหนดค่าให้กับฟังก์ชัน AJAXLoad ( ) เป็น null เช่น
็
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
222 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
AJAXLoad ('get', URL, data, null);
เพื่อให้เข้าในแนวทางการส่งผลลัพธ์เป็น JavaScript มากยิ่งขึ้น ลองมาทดสอบด้วยตัวอย่างง่ายๆ
ดังนี้
ตัวอย่าง การส่งผลลัพธ์เป็น JavaScript โดยการจะเป็นการรับข้อมูลตัวเลข 2 ตัวและ
เครื่องหมายแล้วส่งด้วยเทคนิค AJAX ไปคานวณที่เซิร์ฟเวอร์ หลังจากนั้นส่งผลลัพธ์กลับมาในแบบคาสั่ง
JavaScript
ตัวอย่างที่ 13.11 ตัวอย่างการเรียกใช้ฟังก์ชัน AJAXcall ในไฟล์ index.html
<head>
.
.
<script src="../AJAX/framwork.js"></script>
<script>
function AJAXcall ( ) {
var data = getFormData ('from1');
var URL = 'calculator.php';
AJAXLoad ('post', URL, date, null);
//ให้อิลิเมนต์ที่ใช้แสดงผลเป็น null เพราะส่งผลลัพธ์เป็น JavaScript
}
</script>
</head>
เพิ่มตัวจัดการอีเวนต์ (Event) ให้กับปุ่ม Button โดยการเรียกใช้ฟงก์ชัน AJAXCall ( )
ั
<input type="button" value"คานวน" onclick = "AJAXCall ( )"/>
ตัวอย่างที่ 13.12 ไฟล์ calculator.php เป็นเพจฝั่งเซิร์ฟเวอร์สาหรับรับข้อมูลเพื่อประมวลผล
<?php
$num1 = $_POST ['num1'];
$num2 = $_POST ['num2'];
$op = $_POST ['op'];
$result = 0 ;
switch ($op) {
case "+" : $result = num1 + $num2; break;
case "-" : $result = num1 - $num2; break;
case "*" : $result = num1 * $num2; break;
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 223
case "/" : $result = num1 / $num2; break;
}
// สร้างคาสั่ง JavaScript ในแบบสตริงของ PHP มาแทรกลงไปได้
$js = "
var msg = '$num1 $op $num2 =$result';
";
header ("Content-Type:Text/javascript;Charset=tis-620");
echo $js;
?>
การใช้ AJAX กับการตรวจสอบข้อมูล ซึ่งเทคนิคนิยมที่ใช้กันมากในปัจจุบัน สาหรับตัวอย่างนี้จะ
เป็นการตรวจสอบล็อกอินว่าใช้งานได้หรือไม่ โดยส่งล็อกอินผ่าน AJAX ไปยังเซิร์ฟเวอร์ แล้วส่งผลลัพธ์
เป็น JavaScript
ตัวอย่างที่ 13.13 การใช้ AJAX กับการตรวจสอบข้อมูล ภายในไฟล์ index.php
<head>
.
.
<script src="../AJAX/framework.js"></script>
<script>
function AJAXCall ( ) {
var date = getFormData ('form1');
var url = 'check_login.php';
AJAXLoad ('post', url. date, 'displayAJAX');
}
// ฟังก์ชันนี้จะถูกเรียกขึ้นมาทางานจากฝั่งเซิร์ฟเวอร์
// เพื่อแสดงผลลัพธ์ว่าล็อกอินนั้นสามารถใช้ได้หรือไม่
function displayResult (valid) {
var el = document.getElementById('displayAJAX');
If (!valid) {
el.style.color = 'red';
el.innerHTML ='ชื่อนี้ใช้ไม่ได้ หรือมีผู้อื่นใช้แล้ว กรุณาเปลี่ยนชื่อใหม่'
Document.getElementById('login').select();
} else {
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
224 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
el.sytle.color = 'black';
el.innerHTML = 'ชื่อนี้สามารถใช้งานได้';
}
}
</script>
</head>
กาหนดอีเวนต์ onblur เพื่อว่าหลังป้อนข้อมูลไปแล้ว และย้ายไปยังอินพุตอื่นๆ จะใช้อีเวนต์นี้ในการ
ส่งล็อกอินผ่าน AJAX ไปตรวจสอบ โดยในมุมมองโค๊ดให้เพิ่มอีเวนต์ onblur และ เพิ่มแท็ก <span> ดังนี้
<input name="login" type="text" id="login" onblur="AJAXCall ( )"/>
<span id="displayAJAX"></span>
ตัวอย่างไฟล์ check_login.php เป็นเพจฝั่งเซิร์ฟเวอร์ที่รับข้อมูลล็อกอินไปตรวจสอบ แล้วส่ง
ผลลั พธ์เป็ น JavaScript กลับ มาโดยในที่นี้จะเป็นพียงการเรียกใช้ฟังก์ชัน displayReuslt ที่เพจ
index.php ขึ้นมาทางาน
ตัวอย่างที่ 13.14 รับข้อมูลล็อกอินไปตรวจสอบ แล้วส่งผลลัพธ์เป็น JavaScript
<?php
$login = $_POST['LOGIN'];
$patter = "^[a-zA-Z0-9]{3,10}$";
$users = array ("abc","123","xyz"); //สมมติชื่อผู้ใช้ที่มีอยู่แล้ว
// ตรวจสอบ login แล้วเรียกฟังก์ชัน Javascripth displayResult ( )
// ที่เพจ index.php ขึ้นมาทางาน
If (!eregi (pattern,$login) || in_array ($login,$users)) { //ถ้าล็อกอินไม่สาเร็จ
$js = "displayResult (false);";
} else { //ถ้าล็อกอินสาเร็จ
$js = "displayResult (ture);";
}
header ("Content-Type:text/javascript;Charset=tis-620");
echo $js;
?>
การอัปเดทอินพุต Select ด้วยเทคนิค AJAX
โดยปกติแล้วตัวเลือก (option) ของอินพุต Select จะสร้างไว้ล่วงหน้าด้วยแท็ก <option> เช่น
อัปเดตอินพุต Select ด้วยเทคนิค AJAX
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 225
การเปลี่ยนแปลงตัวเลือกของอินพุต Select จะต้องอาศัยคาสั่ง JavaScript เป็นหลัก ดังนั้น
ก่อนที่จะกล่าวถึงเทคนิคการใช้ร่วมกับ AJAX จะกล่าวถึงการใช้ JavaScript ในการแปลงรายการใน
Select ก่อน
การสร้างตัวเลือกด้วย JavaScript
หากต้องการจะเพิ่มตัวเลือกนั้นต้อ งเริ่มที่การสร้างตัวเลือกใหม่ขึ้นมาก่อน ซึ่ งการสร้างตัวเลือก
ใหม่นั้นวิธีที่ง่ายที่สุด คือ การสร้างด้วยออบเจ็กต์ Option โดยมีรูปแบบดังนี้
option ('text', 'value')
เมื่อ text หมายถึง ข้อความที่ปรากฏบนตัวเลือกนั้น ต้องกาหนดในรูปแบบสตริง
value หมายถึง ค่าของตัวเลือกนั้น ต้องกาหนดในรูปแบบสตริง
ตัวอย่างที่ 13.15 การสร้างตัวเลือกด้วย JavaScript
var opt = new option ('Thailand', 'th');
เทียบได้กับในรูปแบบ HTML ต่อไปนี้
<option value="th">Thailand</option>
การเพิ่มตัวเลือกด้วย JavaScript
การเพิ่มตัว เลื อกเข้าไปในอินพุต Select นั้นปกติทาได้หลายวิธี แต่บางวิธีจะได้ผ ลเฉพาะกับ
บราวเซอร์ IE เท่านั้น ดังนั้นจะกล่าวถึงเฉพาะวิธีที่ใช้ได้ทั้ง IE และ Firefox โดยใช้วิธีการกาหนดค่าให้แก่
คุณสมบัติ option เช่น ถ้าต้องการเพิ่มตัวเลือกเข้าไปให้เป็นรายการลาดับที่สาม ก็กาหนดโค้ดคาสั่งดังนี้
ตัวอย่างที่ 13.16 การเพิ่มตัวเลือกด้วย JavaScript
Document.getElementById ('id').option [2] = opt; // เมื่อรายการแรกลาดับเป็น0
การลบตัวเลือกด้วย JavaScript
การลบนั้นเพื่อให้เป็นแนวทางเดียวกับการเพิ่ ม ก็อาจใช้วิธีกาหนดคุณสมบัติ options ของ
รายการลาดับนั้นให้เป็น Null เช่น
ตัวอย่างที่ 13.17 การลบตัวเลือกด้วย JavaScript
Document.getElementById ('id').option [2] = Null; // ลบรายการที่ 3
การใช้ AJAX กับการอัปเดตอินพุต Select
หลั งจากที่ทราบเทคนิ คการเปลี่ ยนแปลงตัว เลื อกด้ว ย JavaScript แล้ว ต่อไป คือ การนามา
ประยุกต์ใช้ร่วมกับ AJAX ซึ่งการเปลี่ยนแปลงตัวเลือกที่ได้กล่าวมานั้น ข้อมูลที่จะทาตัวเลือกถูกกาหนด
ตายตัวมาแล้ว แต่เป็นกรณีที่ข้อมูลเก็บอยู่ในฐานข้อมูลทางฝั่งเซิร์ฟเวอร์ อาจไม่สามารถใช้วิธีตามที่กล่าว
มาแล้วได้ แต่จากการที่สร้างคาสั่งที่เซิร์ฟเวอร์ แล้วส่งผ่านทาง AJAX มันรันที่บราวเซอร์ได้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
226 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
เว็บเพจที่จะแสดงตัวเลือกทางด้านบราวเซอร์ ต้องประกอบด้วยสิ่งที่จะใช้กาหนดเงื่อนไขในการ
เปลี่ยนตัวเลือก โดยทั่วไปนิยมใช้อินพุต Select คู่กัน เช่น Select อันแรกแสดงชื่อฐานข้อมูลที่มีใน
MySQL และอีกอันแสดงชื่อตารางที่มีอยู่ในฐานข้อมูลที่เลือกใน Select อันแรก เป็นต้น
เมื่อส่งข้อมูลจาก Select อันแรกผ่าน AJAX ขึ้นไป ทางฝั่งเซิร์ฟเวอร์จะนาข้อมูลนั้นไปใช้เป็น
เงื่อนไขในการอ่านข้อมูลจากตาราง เพื่อนามาสร้างตัวเลือกใน Select อันที่สอง
หลังจากได้ข้อมูลต่อไป คือ การส่งผลลัพธ์กลับไปเพื่ออัปเดตอินพุต Select โดยก่อนที่จะอัปเดต
ต้องลบตัวเลือกเดิมทั้งหมดออกไปก่อน แต่การลบตัวเลือกนั้นไม่ขึ้นกับข้อมูล ดังนั้นในที่นี้การลบตัวเลือก
จะสร้างเป็นฟังก์ชันเอาไว้ที่เพจด้านบราวเซอร์ แล้วใช้วิธีสั่งคาสั่ง JavaScript จากด้านเซิร์ฟเวอร์มาเรียก
ฟังก์ชันนี้ขึ้นมา
ต่อไปคือ การนาข้อมูลที่อ่านได้จากฐานข้อมูลจากขั้นตอนก่อนนี้ มาสร้างเป็นตัวเลือกในรูปแบบ
คาสั่ง JavaScript เพื่อส่งกลับไปประมวลผลที่ด้านบราวเซอร์ ทั้งนี้ตัวเลือกอาจมีมากกว่า 1 รายการดังนั้น
อาจต้องใช้การวนลูปเพื่อสร้างคาสั่ง JavaScript ตามจานวนตัวเลือกที่มี
ขั้นตอนการออกแบบ และเขียนโค๊ด
สร้างเพจจานวน 2 เพจ โดยเพจแรกสาหรับวางอินพุต Select จานวน 2 รายการ เอาไว้ทดสอบ
ส่วนอีกเพจหนึ่งฝั่งเซิร์ฟเวอร์สาหรับอ่านชื่อตารางฐานข้อมูล แล้วส่งผลลัพธ์กลับมาในแบบ JavaScript
ตัวอย่างที่ 13.18 ตัวอย่างข้อมูลภายในไฟล์ index.php
<head>
.
.
<script>
function AJAXCall ( ) {
var data = getFormData ('form1');
var URL = 'update_tables.php';
AJAXLoad ('get', URL, data, null);
}
function removeOption ( ) {
var el = document.getElementByld ('table');
while (el.length > 0) {
el.option [0] = null;
}
}
</script>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 227
</head>
ตาแหน่งอินพุต Select อันแรก (ที่ใช้เก็บชื่อฐานข้อมูล) สิ่งที่ต้องทาก็คือ
 เพิ่มอีเวนต์ change เพื่อเรียกใช้ AJAX ในการอัปเดต Select
 เนื่องจากเป็นการแสดงชื่อฐานข้อมูล ซึ่งควรอ่านจาก MySQL โดยตรงมากกว่าที่จะสร้างเป็น
รายการไว้ล่วงหน้าดังนั้นในส่วนรายตัวเลือกใช้ สคริปต์ PHP ในการอ่านชื่อฐานข้อมูลแล้วนามาสร้างเป็น
รายการตัวเลือก
ตัวอย่างที่ 13.19 แสดงส่วนของการติดต่อกับฐานข้อมูล
<select id = "database" name = "database" onchange = "AJAXCall ( )">
<?php
@mysql_connect ("localhost", "root", "leaf") or die (mysql_error ( ))'
$dbs = mysql_list_dbs();
while (list ($db) = mysql_fetch_row ($dbs)) {
echo "<option value = $db</option>";
}
?>
</select>
เพื่อให้เกิดการอัปเดตทันทีที่เปิดเพจ ให้เพิ่มการเรียกใช้ฟังก์ชัน AJAXCall ( ) ไว้ที่ส่วนท้ายของ
เพจดังนี้
</form>
<script> AJAXCall ( ); </script>
</body>
update_tables.php เพจนี้ จ ะน าชื่ อ ฐานข้ อ มู ล ที่ รั บ เข้ า มาไปใช้ ก ารอ่ า นชื่ อ ตารางที่ มี อ ยู่ ใ น
ฐานข้อมูลนั้น แล้วนามาสร้างเป็นคาสั่ง JavaScript เพื่อส่งกลับไปอัปเดตที่อินพุต Select ที่แสดงชื่อ
ตาราง ตามหลักการที่ได้กล่าวมาแล้ว
ตัวอย่างที่ 13.20 ส่วนของการ Update ข้อมูลภายในไฟล์ update_tables.php
<?php
@mysql_connect ("localhost", "root", "leaf"> or die (mysql_error ( ));
$db = $_GET ['database'];
$tbs = mysql_list_tables($db);
// คาสั่ง JavaScript สาหรับลบ Option เดิม โดยเรียกฟังก์ชัน remeveOption ( )
// ซึ่งสร้างไว้ที่เพจ index.php
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
228 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
$js = "removeOption ( );";
If (mysql_num_rows($tbs) == 0 { // ถ้าฐานข้อมูลนั้นไม่มีตารางอยู่เลย
$js .= "
var opt = new Option ('', '');
Document.getElementByID ('table') .options [0] = opt;
} else {
$i = 0;
while (list ($tb) = mysql_fetch_row ($tbs)) {
//คาสั่ง javascript สาหรับสร้าง และเพิ่ม Option ใหม่จนครบทุกตัว
$js .= "
var opt = new Option ('$tb', '$tb');
Document.getElementByID ('table') .options [$i] = opt;
";
$i++;
}
}
header ("Content-Type:text/Javascript; charset=tis-620);
echo $js;
?>
อีเวนต์ (Event)
บัญชา ปะสีละเตสัง (2551, หน้า 103) อธิบายความหมายของอีเวนต์ คือ เหตุการณ์หรือการ
กระทาบางอย่างที่เกิดขึ้น เช่น การคลิกหรือเคลื่อนย้ายเมาส์ การกดปุ่มคีย์บอร์ด เป็นต้น ทั้งนี้มักใช้อีเวนต์
ที่เกิดขึ้นเป็นตัวกาหนดให้เกิดการตอบสนอง หรือกระทาบางอย่างต่อไป เช่น เมื่อคลิกปุ่มก็ให้ส่งข้อมูลจาก
ฟอร์มไปยังเซิร์ฟเวอร์ หรือ เมื่อมีการพิมพ์คีย์บอร์ด ก็อาจตรวจสอบว่าข้อมูลที่ใส่เข้ามาตรงตามเงื่อนไขที่
กาหนดหรือไม่ เป็นต้น
ชนิดของการเกิดอีเวนต์
เนื่ องจากอี เวนต์เกิด ได้จ ากหลายสาเหตุ เช่น การคลิ กเมาส์ การเคลื่ อ นย้ายเมาส์ การพิม พ์
ข้อความ เป็ น ต้ น นอกจากนี้ แต่ ล ะอิ ลิ เ มน์ ก็ส ามารถเกิ ดอี เวนต์ ได้เ พีย งบางลั ก ษณะเท่ านั้ น เช่ น div
สามารถเกิดอีเวนต์เกี่ยวกับเมส์ได้ แต่ไม่สามารถเกิดอีเวนต์เกี่ยวกับคีย์บอร์ด เป็นต้น ดังนั้นจึงควรทราบ
ก่อนว่าใน JavaScript มีอีเวนต์ชนิดใดบ้าง เพื่อจะได้นาไปใช้ร่วมกันได้อย่างถูกต้อง มีรายละเอียดดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 229
ตารางที่ 13.1 แสดงอีเวนต์ของ JavaScript สาหรับกาหนดให้กับอิลิเมนต์
Event Handler
การเกิดอิลิเมนต์
onclick
เกิดเมื่อคลิกที่อิลิเมนต์ (กดแล้วปล่อย)
ondblclick
เกิดเมื่อดับเบิลคลิก
onmousedown เกิดเมื่อกดเมาส์ลงไป (เกิดทันที่กด)
onmouseup
เกิดเมื่อปล่อยมือจากการกดเมาส์
onmouseover
เกิดเมื่อเคลื่อนย้ายเมาส์เข้าไปในอิลิเมนต์
onmouseout
เกิดเมื่อนาเมาส์ออกจากอิลิเมนต์
onmousemove เกิดเมื่อเคลื่อนย้ายเมาส์ไปบนอิลิเมนต์
onkeypress
เป็นลักษณะการพิมพ์ทั่วไป คือ กดแล้วปล่อย
onkeydown
เกิดเมื่อกดปุ่มคีย์บอร์ด (เกิดทันทีที่กด)
onkeyup
เกิดเมื่อปล่อยมือจากปุ่มคีย์บอร์ด
onabort
เกิดเมื่อขัดจังหวะขณะที่กาลังโหลดรูปภาพ เช่น คลิกปุ่ม Stop ของบราวเซอร์
ขณะที่ยังโหลดภาพไม่สมบูรณ์
onblur
เกิดเมื่ออิลิเมนต์นั้นเสียโฟกัส หรือย้ายโฟกัสไปยังอิลิเมนต์
onchange
เกิดเมื่อเปลี่ยนข้อความใช้ช่องรับข้อมูล เช่น text, textarea หรือเกิดเมื่อเปลี่ยน
รายการที่เลือกจากเดิมไปเป็นรายการอื่นใน <select>
onerror
เกิดเมื่อมีข้อผิดพลาดเกิดขึ้นขณะที่กาลังโหลดภาพ
onfocus
เกิดเมื่ออิลิเมนต์นั้นได้รับโฟกัส
onload
เกิดเมื่อเริ่มทาการโหลดเอกสารหรือรูปภาพ
onreset
เกิดเมื่อคลิกปุ่ม Reset ของฟอร์ม
onresize
เกิดเมื่อเปลี่ยนขนาดของวินโดว์
onselect
เกิดเมื่อทาแถบสีเพื่อเลือกข้อความ
onsubmit
เกิดเมื่อส่งข้อมูลจากฟอร์มไปยังเซิร์ฟเวอร์
onunload
เกิดเมื่อยกเลิกการโหลดเอกสาร เช่น คลิกปุ่ม Stop
หมายเหตุ
Event Handler คือ ตัวจัดการอีเวนต์ หรือทาหน้าที่การเรียกสคริปต์ส่วนที่ใช้ตอบสนองอี
เวนต์ขึ้นมาทางานเมื่อเกิดอีเวนต์ขึ้น ซึ่งถ้าตัดคาว่า "on" ข้างหน้า Event Handler ออกก็จะ
กลายเป็นชนิดของอีเวนต์นั้นๆ

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
230 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
การกาหนดอีเวนต์
ก่อนการกาหนดอีเวนต์จะต้องตรวจสอบและพิจารณาก่อนว่าต้องการกระทาเมื่อเกิดอีเวนต์ใด
และเกิดกับอิลิเมนต์ใด โดยดูว่าอิลิเมนต์นั้นรองรับอีเวนต์ที่ต้องการหรือไม่ เช่น หากต้องการจะกระทา
บางอย่างเมื่อผู้ใช้คลิกที่ <div> ก็ต้องดูว่า <div> รองรับอีเวนต์ที่เกี่ยวกับ "click" หรือไม่เป็นต้น
การกาหนดอีเวนต์แบบแอททริบิวต์
วิธีนี้จะเขียนสคริปต์แทรกไว้ในแท็กของอิลิเมนต์ที่เกิดอีเวนต์ โดยนา Event Handler ของอี
เวนต์นั้นมาเป็นแอททริบิวต์ตัวหนึ่ง เช่น
ตัวอย่างที่ 13.21 การแทรกสคริปต์ในแท็กของอิลิเมนต์ที่เกิดอีเวนต์
<body onclick = "alert ('Hello')">
หมายความว่าเมื่อคลิกที่เอกสารจะเกิด alert ที่แสดงข้อความ Hello ซึ่งวิธีนี้เหมาะสาหรับ
สคริปต์ที่ไม่ยาวมากนัก เพราะหากเป็นสคริปต์ยาวๆ อาจจะเขียนไม่สะดวก เช่น
ตัวอย่างที่ 13.22 การแทรกสคริปต์ในแท็กของอิลิเมนต์ที่เกิดอีเวนต์ แบบมีเงื่อนไข
<div id="dv" onmousedown="if (confirm ('Are you 18+')) {
location.href='index.html'; } else { window.close ( ) }" > 18+ ? </div>

จากโค้ด หมายถึง เมื่อเกิดอีเวนต์ mousedown ที่ <div> จะปรากฏกล่องโต้ตอบ (Dialog box)
ยืนยันอายุ โดยหากยืนยันว่าคุณอายุมากกว่า 18 จะโหลดหน้า index.html หากไม่จะปิดบราวเซอร์ที่
กาลังเรียกใช้งานอยู่
การกาหนดอีเวนต์แบบพร็อปเพอร์ตี้
วิธีนี้จะไม่เขียน Event Handler ไว้ในแท็กของอิลิเมนต์ที่ต้องการดักอีเวนต์ แต่จะนามากาหนด
ในรูปแบบพร็อปเพอร์ตี้ของอิลิเมนต์นั้นแทน เช่น
ตัวอย่างที่ 13.23 การกาหนดอีเวนต์แบบพร็อปเพอร์ตี้
<script>
function fa ( ) {
.
.
}
</script>
<div id="dv"> Click Me </div>
<script>
document.getElementById ("dv").onclick = f1;
</script>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 231
จะพบว่าชื่อฟังก์ชันที่นามากาหนดให้กับ Event Handler นั้นจะต้องไม่มีวงเล็กต่อท้าย ต้องมี
เฉพาะชื่อฟังก์ชันอย่างเดียวเท่านั้น ทั้งนี้อิลิเมนต์เดียวกันสามารถมีได้มากกว่า 1 Event Handler เช่น
ตัวอย่างที่ 13.24 การกาหนดให้อิลิเมนต์เดียวมีมากกว่า 1 Event Handler
var el = document.getElementById ("dv");
el.onclick = f1;
el.onmouseover = f2;
el.onmousout = f3;

หรือจะเขียนแบบ Anonymous Function ก็ได้ เช่น
ตัวอย่างที่ 13.25 การกาหนดอิลิเมนต์เดียว แบบ Anonymous Function
var el = document.getElementById ("dv");
el.onclick = function ( ) {
.
.
}

ออบเจ็กต์อีเวนต์ (Object Event)
เมื่อเกิดอีเวนต์ขึ้นอาจจะมีข้อมูลบางอย่างเกี่ยวกับอีเวนต์นั้นที่อาจต้องการทราบ เช่น ปุ่มเมาส์
หรือคีย์บอร์ดที่ถูกกด หรือตาแหน่งที่เกิดอีเวนต์ เป็นต้น เมื่อมีอีเวนต์เกิดขึ้น สาหรับ IE แล้วข้อมูลต่างๆ
เกี่ยวกับอีเวนต์จะถูกเก็บไว้ในออบเจ็กต์อีเวนต์ ทั้งนี้จะต้องอ้างถึงข้อมูลเหล่านั้นในแบบพร็อปเพอร์ตี้
ซึ่งพร็อปเพอร์ตี้ที่น่าสนใจมีรายละเอียดดังนี้
ตารางที่ 13.2 แสดงอีเวนต์ของ JavaScript แบบพร็อปเพอร์ตี้
พร็อปเพอร์ตี้
ความหมาย
allKey
ตรวจสอบว่าคีย์บอร์ดปุ่ม "Alt" ถูกกดขณะเกิดอีเวนต์หรือไม่
ctrlKey
ตรวจสอบว่าคีย์บอร์ดปุ่ม "Ctrl" ถูกกดขณะเกิดอีเวนต์หรือไม่
shiftKey
ตรวจสอบว่าคีย์บอร์ดปุ่ม "Shift" ถูกกดขณะเกิดอีเวนต์หรือไม่
keyCode
รหัสของปุ่มคีย์บอร์ดที่ถูกกด
button
ตรวจสอบว่าปุ่มของเมาส์ปุ่มใดที่ถูกคลิ ก โดย 1=ซ้าย, 2=ขวา, 4=กลาง
และ 3=ซ้าย+ขวา
fromElement
อิลิ เมนต์ ที่เ มาส์ ชี้อ ยู่ก่ อนจะมาที่ อิลิ เมนต์ ปัจ จุ บัน เช่น ตอนแรกเมาส์ ชี้อ ยู่ ที่
<div id="div1"> ต่อมาเลื่อนเมาส์มายัง <div id="div2"> ถ้าอ่านค่า
fromElement ที่ div2 จะได้ค่าเป็น div1

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
232 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
ตารางที่ 13.2 (ต่อ)
พร็อปเพอร์ตี้
toElement

ความหมาย
อิลิเมน์ที่เมาส์ชี้อยู่หลังจากเลื่อนไปจากอิลิเมนต์เดิม เช่น ตอนแรกเมาส์ชี้อยู่ที่
<div id="div1"> ต่อมาเลื่อนเมาส์มายัง <div id="div2"> ถ้าอ่านค่า
fromElement ที่ div1 จะได้ค่าเป็น div2
srcElement
อิลิ เ มนต์ที่ ทาให้ เ กิด อีเ วนต์ เช่น ถ้ าคลิ กที่ <div id="div1"> จะได้ค่ า
srcElement เป็น div1
type
ชนิดของอีเวนต์ที่เกิดขึ้น คือ การนาชื่อ Event Handler มาตัดคาว่า "on"
ออกไป เช่น เป็นอีเวนต์ "onclick" จะได้ type เป็น "click" เป็นต้น
clientX, clientY
เป็นการวัดระยะโดยเทียบกับพื้นที่ในการแสดงผลของบราวเซอร์
offsetX, offsetY
เป็นการวัดค่าจะวัดจากขอบด้านซ้าย และด้านบนของอิลิเมนต์ที่ทาให้เกิดอีเวนต์
screenX, screenY เป็นการวัดระยะโดยเทียบกับหน้าจอด้านซ้าย และด้านบนมายังจุดที่เกิดอีเวนต์
cancelButton
ใช้ในการหยุดการเกิด Event Bubbling จาก child ไปยังพาเรนต์
returnValue
กาหนดค่าที่ส่งคืนให้แก่ระบบ มักใช้เพื่อยกเลิกพฤติกรรมปกติของอีเวนต์ เช่น
ไม่ต้องการแสดงเมนูเมื่อคลิกขวาก็กาหนดค่า returnValue เป็น false เป็นต้น
เนื่องจากในแต่ละพร็อปเพอร์ตี้ยังมีรายละเอียดเพิ่มเติมอีกมาก ซึ่งจะนาไปกล่าวถึงในหัวข้อต่อๆ ไป
แยกตามความเกี่ยวข้องของอีเวนต์ สาหรับแนวทางการใช้พร็อปเพอร์ตี้ของออปเจ็กต์อีเวนต์ มีตัวอย่างดังนี้
ตัวอย่างที่ 13.26 การใช้พร็อปเพอร์ตี้ของออปเจ็กต์อีเวนต์
<script>
function eventType ( ) {
var ev_type = event.type;
alert ("อีเวนต์ที่เกิดขึ้น คือ " + ev_type);
}
</script>
<body onclick = "eventType ( )" onmousedown = "eventType ( ) ">
อีเวนต์เกี่ยวกับเมาส์
จากเรื่ อ งออบเจ็ กต์อี เวนต์ จะเห็ นว่า เมื่ อเกิ ดอี เ วนต์ เกี่ย วกับ เมาส์ ขึ้น มีข้ อมูล หลายอย่ างที่
สามารถตรวจสอบ หรือนามาใช้งานต่อไปได้ เช่น ปุ่มหรือตาแหน่งที่ถูกคลิก เป็นต้น
อีเวนต์เกี่ยวกับการเคลื่อนไหวของเมาส์
อีเวนต์ที่เกี่ยวกับการเคลื่อนไหวของเมาส์ได้แก่ mousemove, mouseover และ mouseout
โดยมีรายละเอียดดังนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 233
 เมื่อเคลื่อนเมาส์เข้ามาแตะของของอิลิเมนต์จะเกิดอีเวนต์ mouseover
 ถ้าเคลื่อนเมาส์เข้าไปอยู่เหนืออิลิเมนต์จะเกิดอีเวนต์ mousemove แม้จะหยุดการเคลื่อนไหว
ก็ยังเป็นอีเวนต์ mousemove
 หากนาเมาส์ออกไปจากอิลิเมนต์จะเกิดอีเวนต์ mouseout
 หากไม่กาหนดอีเวนต์ mousemove แต่กาหนดเฉพาะ mouseover เมื่อเคลื่อนที่เมาส์มา
วางเหนืออิลิเมนต์ก็จะเกิดอีเวนต์ mousemove
อีเวนต์เกี่ยวกับการกดเมาส์
อีเวนต์ที่เกี่ยวกับการกดเมาส์ได้แก่ click, dblclick, mousedown และ mouseup มีตัวอย่างดังนี้
ตัวอย่างที่ 13.27 อีเวนต์ที่เกี่ยวกับการกดเมาส์
<body onmousedown = "window.status=event.type"
onmouseup = "alert (event.type)"
>
การตรวจสอบปุ่มเมาส์ที่ถูกกด
ปุ่มเมาส์ที่ถูกกดสามารถตรวจสอบได้จากพร็อปเพอร์ตี้ button ของออบเจ็กต์อีเวนต์ ค่าที่ได้
สาหรับบราวเซอร์ IE มีตัวอย่างดังนี้
ตัวอย่างที่ 13.28 การตรวจสอบปุ่มเมาส์ที่ถูกกด
<script>
function mouseButton ( ) {
var bt = event.button;
switch (bt) {
case 1 : window.status = "ซ้าย"; break;
case 2 : window.status = "ขวา"; break;
case 4 : window.status = "กลาง"; break;
case default : window.status = "ไม่สามารถระบุได้"; break;
}
}
</script>
อีเวนต์เกี่ยวกับคีย์บอร์ด
อีเวนต์ที่เกี่ยวกับคีย์บอร์ด เช่น การตรวจสอบว่าปุ่มถูกกดหรือมีการปุ่ม Alt/Ctrl/Shift ด้วย
หรือไม่ เป็นต้น ทั้งนี้การตรวจสอบปุ่มนั้น สามารถนาไปใช้ในการป้องกันไม่ให้ผู้ใช้ใส่ข้อมูลที่ไม่ตรงตาม
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
234 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
เงื่อนไข เช่น ต้องการระบุให้ป้อนข้อมูลชนิดตัวเลข 0-9 เท่านั้น หากผู้ใช้กดปุ่มคีย์ที่ไม่ใช่ 0-9 ก็จะไม่
ยอมรับข้อมูลนั้น เป็นต้น
อีเวนต์ที่เกี่ยวกับคีย์บอร์ดมี 3 อีเวนต์ คือ keypress, keydown และ keyup มีตัวอย่างดังนี้
ตัวอย่างที่ 13.29 อีเวนต์ที่เกี่ยวกับคีย์บอร์ด
<body onkeydown = "window.status = event.type" onkeypress = "alert (event.type)"
onkeyup = "alert (event.type)"
>

การตรวจสอบปุ่มคีย์ที่ถูกกด
เมื่อคีย์บ อร์ ดปุ่มใดๆ ถูกกดสามารถตรวจสอบได้ว่าปุ่มนั้น คือ ปุ่มอะไร โดยใช้พร็อปเพอร์ตี้
keyCode แต่ค่า keyCode ที่ได้จะเป็นตัวเลขรหัสที่ใช้แทนปุ่มนั้น มีรายละเอียดของรหัสดังตารางต่อไปนี้
ตารางที่ 13.3 แสดงตัวอย่างรหัสที่ใช้แทนปุ่มคีย์บอร์ด
ปุ่มคีย์บอร์ด
keyCode
ปุ่มคีย์บอร์ด
backspace
8
right window key
tab
9
select key
enter
13
numpad 0-9
shift
16
multiply
ctrl
17
add
alt
18
subtract
pause/break
19
decimal point
caps lock
20
divide
escape
27
F1-F12
page up
33
num lock
page down
34
scroll lock
end
35
semi-colon
home
36
equal sign
left arrow
37
comma
up arrow
38
dash
right arrow
39
period
down arrow
40
forward slash
insert
45
grave accent
delete
46
open bracket

keyCode
92
93
96-105
106
107
109
110
111
112-123
144
145
186
187
188
189
190
191
192
219

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 235
ตารางที่ 13.3 (ต่อ)
ปุ่มคีย์บอร์ด
keyCode
ปุ่มคีย์บอร์ด
keyCode
เลข 0-9
48-57
back slash
220
อักขระ a-z
65-90
close braket
221
left window key
91
single quote
222
ก-ฮ
3585-3630
๐-๙
3664-3673
ในทางตรงข้าม ถ้าทราบค่า keyCode และต้องการทราบว่าตรงกับอักขระใด ให้ใช้เมธอด
fromCharCode ( ) ของออบเจ็กต์ String ในการแปลง เช่น
var char = String.fromCharCode (65);
ตัวอย่างที่ 13.30 การเขียนคาสั่งเพื่อควบคุมการป้อนเลข 0-9 เท่านั้น
<html>
<head>
<script>
function isValidKey ( ) {
var keyCode = event.keyCode;
if (keyCode < 48 || event.keyCode > 57) {
window.status = "key invalid";
alert ("กรุณาป้อนตัวเลข 0-9 เท่านั้น");
} else {
window.status = String.fromCharCode (keyCode);
}
}
</script>
</head>
<body onkeydown = "isValidKey ( )">
</body>
</html>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
236 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
ตัวอย่างการสร้าง AJAX dictionary จาก longdo ด้วย jQuery
ตั ว อ ย่ า ง ก า ร ใ ช้ ง า น ต่ อ ไ ป นี้ เ ป็ น ก า ร น า ร ะ บ บ ค้ น ห า ค า ศั พ ท์ จ า ก เ ว็ บ ไ ซ ต์
http://dict.longdo.com/ เหมาะสาหรับใครที่ต้องการนาระบบค้นหาคาศัพท์ dictionary รูปแบบ
AJAX ไปตกแต่งเว็บไซต์ โดยเฉพาะเว็บไซต์เกี่ยวกับการศึกษา มีขั้นตอนดังต่อไปนี้
1. สร้างไฟล์ php ชื่อ ajax_translate.php มีคาสั่งดังต่อไปนี้
ตัวอย่างที่ 13.31 การสร้าง AJAX dictionary ในไฟล์ ajax_translate.php
<?php
header("Content-type:text/html; charset=UTF-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// ตรวจสอบว่ามีการส่งคาค้นมาหรือไม่
if(isset($_GET['keyword']) && trim($_GET['keyword'])!=""){
$keyword=trim($_GET['keyword']);
// นาผลลัพธ์การค้นหา จาก longdo dictionary มาไว้ในตัวแปร
$data=file_get_contents("http://dict.longdo.com/mobile.php?search=".$keyword);
// แสดงส่วนของเนื้อหาที่จาเป็นต้องแสดง
echo strip_tags($data,"<a><table><td><tr><font><style><meta><br>");
} else { // กรณีไม่มีการส่งคาค้นมา
echo "โปรดระบุคาที่ต้องการแปล";
// แสดงข้อความแจ้งเตือน
}
?>
2. สร้างไฟล์สาหรับทดสอบ demo_ajax_translate.php โดยจะมีอยู่ 3 ส่วน หลักๆ ดังนี้
2.1 ส่วนของ css สาหรับกาหนดรูปแบบ สีข้อความ พื้นหลัง หรืออื่นๆ ตามต้องการ
2.2 ส่วนของ element องค์ประกอบในการใช้งาน
2.3 ส่วนของ javascript โดยใช้งานผ่าน jQuery
ตัวอย่างที่ 13.32 ไฟล์สาหรับทดสอบ demo_ajax_translate.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 237
<title>longdo ajax dictionary</title>
<!--1.ส่วนของ css สาหรับกาหนดรูปแบบ สีข้อความ พื้นหลัง หรืออื่นๆ ตามต้องการ-->
<style type="text/css">
div#myblock_dict{
font-family:tahoma, "Microsoft Sans Serif", sans-serif, Verdana;
font-size:12px;
margin:auto;
width:350px;
}
input#translate_it{
background-color:#F6C;
color:#FFF;
border:1px groove #F9C;
cursor:pointer;
}
div#input_search{
background-color:#000;
color:#FFF;
text-align:center;
}
div#context_search{
border:1px solid #F9C;
height:300px;
overflow:auto;
}
div#context_search{
font-family:tahoma, "Microsoft Sans Serif", sans-serif, Verdana;
font-size:12px;
padding:5px;
background-color:#FDEDFE;
}

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
238 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
div#context_search a{
margin-left:3px !important;
color:#F09;
}
div#context_search td{
padding:5px !important;
}
</style>
</head>
<body>
<!--2.ส่วนของ element องค์ประกอบในการใช้งาน-->
<div id="myblock_dict">
<div id="input_search">คาค้น
<input type="text" name="keyword_q" id="keyword_q" />
<input type="button" name="translate_it" id="translate_it" value="แปล" />
</div>
<div id="context_search">
</div>
</div>
<!--3.ส่วนของ javascript โดยใช้งานผ่าน jQuery-->
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
$(function(){
// กาหนดตัวแปรสาหรับแสดงรูปกาลังโหลด
var loading_img='<center>';
loading_img+='<img
src="http://static.ak.fbcdn.net/rsrc.php/z5R48/hash/ejut8v2y.gif">';
loading_img+='</center>';
$("#keyword_q").click(function(){ // เมื่อคลิกที่ช่องคาค้น
// เพื่อสะดวกในการพิมพ์คาค้นใหม่ได้เลย
$(this).select(); // ถ้ามีขอความอยู่ ให้ทาการเลือกข้อความนั้น
้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP 239
$("#context_search").html(""); // ล้างค่าข้อความผลลัพธ์เดิม ถ้ามี
});
$("#translate_it").click(function(){ // เมื่อคลิกที่ปุ่มคาว่า แปล
// แสดงรูปกาลังโหลดในส่วนผลลัพธ์
$("#context_search").html(loading_img);
// ใช้ ajax ใน jQuery ส่งข้อมูลแบบ get
$.get("ajax_translate.php",{keyword:$.trim($("#keyword_q").val())
},function(data) {
$("#context_search").html(data); // แสดงผลลัพธ์จากการค้นหา
});
});
$("#keyword_q").keyup(function(event){
if(event.keyCode==13) { // เมื่อกดปุ่ม Enter ให้เริ่มการค้นหา
// แสดงรูปกาลังโหลดในส่วนผลลัพธ์
$("#context_search").html(loading_img);
$.get("ajax_translate.php",{keyword:$.trim($("#keyword_q").val())},function(data){
// แสดงผลลัพธ์จากการค้นหา
$("#context_search").html(data);
});
}
});
// เมื่อคลิกที่ Link ในผลลัพธ์
$("div#context_search a").live("click",function(){
// นาคาจาก Link ที่คลิก มาเก็บในตัวแปร
var text_search=$.trim($(this).text());
// แสดงรูปกาลังโหลดในส่วนผลลัพธ์
$("#context_search").html(loading_img);
// นาคาจาก Link ไปแสดงที่ช่อง คาค้น
$("#keyword_q").val(text_search);
$.get("ajax_translate.php",{keyword:text_search},function(data){
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
240 บทที่ 13 การใช้เทคนิค AJAX ร่วมกับ PHP
$("#context_search").html(data); // แสดงผลลัพธ์จากการค้นหา
});
return false;
});
});
</script>
</body>
</html>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14
ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
MySQL จัดอยู่ในกลุ่มของระบบริหารจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS : Relational
Database Management System) ชนิดหนึ่ง และเป็นที่นิยมใช้กันมากในปัจจุบัน โดยเฉพาะอย่างยิ่งใน
โลกของอินเทอร์เน็ตเนื่องจาก
 MySQL เป็นฟรีแวร์ทางด้านฐานข้อมูลที่มีประสิทธิภาพสูง
 นักพัฒนาฐานข้อมูลที่เคยใช้ MySQL ต่างยอมรับในความรวดเร็ว การรองรับจานวนผู้ใช้ และ
ขนาดของข้อมูลจานวนมหาศาล
 สนับสนุนการใช้งานบนระบบปฏิบัติการมากมาย เช่น UNIX OS/2 MAC OS Windows
 สามารถใช้งานร่วมกับ Web Development platform เช่น C, C++ , Java, Perl, PHP,
Python, TCL, หรือ ASP
 ได้รับความนิยมอย่างมากในปัจจุบัน และมีแนวโน้มสูงขึ้นเรื่อยๆ ในอนาคต
คาสั่งพื้นฐานของ MySQL
บัญชา ปะสีละเตสัง (2553, หน้า 194) ได้กล่าวไว้ว่า การศึกษา MySQL ควรเริ่มต้นจากการใช้
คาสั่งพื้นฐานให้เกิดความคุ้น เคยเสียก่อน แม้ในการใช้งานจริง จะส่งคาสั่งผ่านฟังก์ชันต่างๆ ของ PHP ก็
ตาม แต่หากไม่มีพื้นฐานในการใช้งานกับตัวฐานข้อมูลโดยตรงจะทาให้เข้าใจในขั้นตอน และหลักการ
ทางานที่แท้จริง
คาสั่ง SHOW DATABASES;
เป็นคาสั่งในการแสดงรายชื่อฐานข้อมูลทั้งหมด มีตัวอย่างดังนี้
ตัวอย่างที่ 14.1 การใช้คาสั่ง SHOW DATABASES;
mysql> SHOW DATABASES;
+-------------------------+
|
Database
|
+-------------------------+
|
mysql
|
|
test
|
|
parinya_db
|
+-------------------------+
242 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
คาสั่ง USE;
เป็นคาสั่งที่ใช้สาหรับเลือกใช้งานฐานข้อมูล มีตัวอย่างดังนี้
ตัวอย่างที่ 14.2 การใช้คาสั่ง USE;
USE tablename;
เมื่อ tablename หมายถึง ชื่อตารางที่จะเลือก
ตัวอย่างที่ 14.3 ตัวอย่างการใช้ฐานข้อมูลชื่อ parinya_db จะใช้คาสั่งดังนี้
mysql>USE parinya_db;
คาสั่ง SHOW TABLES;
เป็นคาสั่งในการแสดงรายชื่อ ตาราง (Table) ที่มีในฐานข้อมูลที่เลือกจากการใช้คาสั่ง USE มี
ตัวอย่างดังนี้
ตัวอย่างที่ 14.4 การใช้คาสั่ง SHOW TABLES;
mysql> USE parinya_db;
Database changed
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_parinya_db
|
+-----------------------+
| question_suit1
|
| question_user
|
+-----------------------+

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 243
| user_id
| varchar(30) | NO |
| NULL |
|
| password | varchar(30) | NO |
| NULL |
|
| before_name | varchar(20) | YES |
| NULL |
|
| name
| varchar(60) | YES |
| NULL |
|
| lastname | varchar(60) | YES |
| NULL |
|
| privilege
| varchar(1) | NO |
|3
|
|
+-------------+-------------+------+-----+---------+----------------+
คาสั่ง DROP
เป็นคาสั่งในการลบฐานข้อมูล หรือตารางข้อมูลที่ไม่ต้องการทิ้งไป โดยมีรูปแบบดังนี้
DROP ชื่อตาราง หรือชื่อฐานข้อมูล
หากลบฐานข้อมูลจะทาให้ทุกๆ ตารางที่อยู่ในฐานข้อมูลนั้นถูกลบออกไปด้วย ตัวอย่างดังนี้
ตัวอย่างที่ 14.6 การใช้คาสั่ง DROP
mysql>DROP parinya_db;
คาสั่ง Quit หรือ Exit
เป็นคาสั่งในการออกจากโปรแกรม MySQL
ลักษณะองค์ประกอบของฐานข้อมูล
โดยทั่วไปแล้ว องค์ประกอบหลักของระบบฐานข้อมูล MySQL จะมีลักษณะดังต่อไปนี้
ฐานข้อมูล (Database) ในการที่จะจัดเก็บข้อมูลใน MySQL ได้ จะต้องเริ่มต้นที่การสร้าง
"ฐานข้อมูล" ก่อน ซึ่งฐานข้อมูลนี้อาจเปรียบได้กับโฟลเดอร์ที่อยู่ในไดเรกทอรี
ตาราง (Table) ลาดับถัดไปจากฐานข้อมูลก็คือ ตารางฐานข้อมูล ซึ่งตารางเป็นการแยกจัดเก็บ
ข้อมูล ในแต่ละเรื่องออกจากกัน เช่น ตารางพนักงาน ตารางสินค้า ตารางลูกค้า เป็นต้น ทั้งนี้ตารางอาจ
เปรี ย บได้กับ ไฟล์ ต่างๆ ที่อยู่ ในโฟลเดอร์นั่นเอง และฐานข้อมูล หนึ่งๆ จะมีตารางจานวนเท่าไหร่ ก็ได้
(ขึ้นอยู่กับการวิเคราะห์ความสัมพันธ์ของข้อมูลภายในระบบที่จะพัฒนา) เช่นเดียวกับโฟลเดอร์หนึ่งๆ จะมี
ไฟล์อยู่กี่ไฟล์ก็ได้
คอลัมน์ (Column) หรือขอบเขตข้อมูล (Field) ภายในตารางฐานข้อมูลจะประกอบไปด้ว ย
คอลัมน์ต่างๆ เพื่อกาหนดว่า ตารางนั้นจะเก็บข้อมูลอะไรบ้าง ซึ่งโดยปกติแล้วข้อมูลที่จัดเก็บในตาราง
เดียวกัน จะต้องมีความเกี่ยวข้องอย่างใดอย่างหนึ่งต่อกัน เช่น หากเป็นตารางที่จัดเก็บข้อมูลของพนั กงาน
ก็อาจประกอบไปด้วยคอลัมน์เกี่ยวกับรหัส ชื่อ ที่อยู่ ตาแหน่ง เงินเดือน เป็นต้น นอกจากนี้แล้ว แต่ละ
คอลัมน์จะต้องระบุชนิดข้อมูลให้สัมพันธ์กับข้อมูลที่จะจัดเก็บในคอลัมน์นั้นด้วย

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
244 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
ชนิดข้อมูลของคอลัมน์
เนื่องจากคอลัมน์ใช้สาหรับเก็บข้อมูลในแต่ละเรื่อง โดยข้อมูลเหล่านี้อาจจะมีหลายชนิดแตกต่าง
กันออกไป เช่น ชื่อ หรือ ที่อยู่เป็นข้อมูลชนิดสตริง หรืออายุ หรือเงินเดือนมักจะเป็นชนิดตัวเลข และถ้า
เป็นวันเกิดก็มักจะเป็นข้อมูลชนิดวันเวลา เป็นต้น ทั้งนี้เนื่องจากวิธีในการจัดการกับข้อมูลเหล่านี้ จะ
ต่างกันออกไปตามลักษณะของข้อมูล ดังนั้นทุกคอลัมน์ของตารางฐานข้อมูล จะต้องกาหนดชนิดข้อมูล
ให้กับมันเสมอ สาหรับ MySQL ได้แบ่งชนิดข้อมูลของคอลัมน์ออกเป็นดังนี้
ข้อมูลชนิดตัวเลข
ข้อมูล ชนิ ดตัว เลขนั้ น มีอยู่ ห ลายชนิดตามขนาดของตัว เลข และในแต่ล ะชนิดนั้น ยังสามารถ
กาหนดได้อีกว่าจะเป็นได้ทั้ งจานวนบวกและลบ (SIGNED) หรือเป็นได้เฉพาะจานวนบวกอย่างเดียว
(UNSIGNED) ดังตารางต่อไปนี้
ตารางที่ 14.1 แสดงชนิดข้อมูลของ MySQL ชนิดตัวเลข
ชนิด
ไบต์
ไซน์
ค่าต่าสุด
ค่าสูงสุด
TINYINT
1 SIGNED
-128
127
UNSIGNED 0
255
SMALLINT
2 SIGNED
-32768
32767
UNSIGNED 0
65535
MEDLUMINT 3 SIGNED
-8388608
8388067
UNSIGNED 0
16777215
INT
4 SIGNED
-2147483648
2147483647
UNSIGNED 0
4294967295
BIGINT
8 SIGNED
-9223372036854775808
9223372036854775807
UNSIGNED 0
18446744073709551615
FLOAT
4 SIGNED
-3.402823466E+38
-1.1754966E-38
UNSIGNED 1.7976931348632157E+38 3.402823466+38
DOUBLE
8 SIGNED
-1.7976931348623157E+308 -2.2250738585072014E-308
UNSIGNED 2.225073858072014E-308 1.7976931348623157E+308
ข้อมูลชนิดสตริง
ข้อมูลชนิดสตริงที่กาหนดได้มีดังตารางด้านล่ าง ทั้งนี้ข้อมูลชนิด CHAR หรือ VARCHAR จะต้อง
ระบุความยาวสูงสุดของสตริงลงไปด้วย ซึ่งกาหนดได้ไม่เกินค่า Maximum คือ 255 เช่น CHAR(50) หรือ
VARCHAR(250) เป็นต้น

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 245
ตารางที่ 14.2 แสดงชนิดข้อมูลของ MySQL ชนิดสตริง
ชนิด
ค่าสูงสุด
CHAR(length)
255
VARCHAR(length)
255
YINYTEXT
255
TEXT
65535
MEDIUMTEXT
16777215
LONGTEXT
4294967295
ข้อมูลชนิด BLOB (Binary Large Object)
ข้อมูลชนิด BLOB มักใช้กับข้อมูลประเภทรูปภาพ หรือมั ลติมีเดีย ซึ่งเป็นข้อมูลแบบไบนารี
มีรายละเอียดดังตารางต่อไปนี้
ตารางที่ 14.3 แสดงชนิดข้อมูลของ MySQL ชนิด BLOB
ชนิด
TINYBLOB
255
BLOB
65535
MEDIIUMBLOB
16777215
LONGBLOB
4294967295

ค่าสูงสุด

ข้อมูลชนิด SET และ ENUM
ข้อมูลชนิด SET และ ENUM คือ กลุ่มของข้อมูลที่ทราบค่าที่แน่นอนแล้ วจานวนหนึ่ง ข้อมูลที่จะ
กาหนดให้แก่คอลัมน์ชนิดนี้ได้ต้องเป็นข้อมูลที่เป็นสมาชิกของ SET หรือ ENUM เท่านั้น โดยข้อมูลชนิด
SET จะมีสมาชิกได้ไม่เกิน 64 ตัว และ ENUM มีสมาชิกได้ไม่เกิน 65,535 ตัว รูปแบบของคอลัมน์
ประเภทนี้คือ
ตารางที่ 14.4 แสดงชนิดข้อมูลของ MySQL ชนิด SET และ ENUM
ชนิด
รูปแบบ
SET
SET ("member1”, "member2”,…, "member64”)
ENUM
ENUM ("member1”, "member2”,…, "member65535”)

ค่าสูงสุด
64
65535

ข้อมูลชนิดวันเวลา
โดยปกติข้อมูลชนิดวันเวลาของ MySQL จะอยู่ในรูปแบบต่อไปนี้
YYYY-MM-DD หรือ Year-Month-Date
เช่น วันที่ 20 เดือนตุลาคม ปี ค.ศ. 2010 จะต้องเขียนเป็น 2010-10-20
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
246 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
ตารางที่ 14.5 แสดงชนิดข้อมูลของ MySQL ชนิดวันเวลา
ชนิด
รายละเอียด
ค่าสูงสุด
DATE
เฉพาะข้อมูลวันเดือนปี
1000 01 01 ถึง 9999 12 31
TIME
เฉพาะข้อมูลเวลา
-838:59:59 ถึง 838:59:59
DATETIME ทั้งวันเดือนปีและเวลา
1000-01-01 00:00:00 ถึง 9999-12-31 23-59-59
แอททริบิวต์ของคอลัมน์
แอททริบิวต์ (Attribute) หรือแฟล็ก (Flag) คือ ข้อกาหนดเพิ่มเติมนอกเหนือจากชนิดข้อมูลที่กาหนด
ให้แก่คอลัมน์ ซึ่งแอททริบิวต์นี้จะช่วยให้จัดการข้อมูลได้สะดวกขึ้นและบางแอททริบิวต์ก็ยังช่วยตรวจสอบความ
ถูกต้องของข้อมูลได้ด้วย แต่ต้องกาหนดให้สัมพันธ์กับชนิดข้อมูลของคอลัมน์ แอททริบิวต์ของคอลัมน์มดังนี้
ี
ตารางที่ 14.6 แสดงแอททริบิวต์ของคอลัมน์ใน MySQL
แอททริบิวต์
รายละเอียด
NOT NULL
ห้ามคอลัมน์ เป็นค่าว่าง (NULL) คือ จะต้องใส่ข้อมูลให้กับคอลัมน์เสมอแอททริ
บิวต์ NOT NULL มักจะใช้เพื่อควบคุมความถูกต้องของตารางฐานข้อมูล
BINARTY
ใช้กับข้อมูลชนิด CHAR หรือ VARCHAR เพื่อให้ข้อมูลนาความแตกต่างของ
รูปแบบตัวพิมพ์เล็ก-ตัวพิมพ์ใหญ่มาพิจารณาด้วย หรือเป็นแบบ case-sensitive
นั่นเอง เพราะโดยปกติแล้วฐานข้อมูลจะจัดการสตริงในแบบ case-insensitive
AUTO_INCREMENT กาหนดให้ใส่ตัวเลขลงไปในคอลัมน์แบบอัตโนมัติ ซึ่งตัวเลขที่ใส่เข้าไปโดยปกติจะ
เริ่มจาก 1 แล้วเพิ่มค่าทีละ 1 ไปเรื่อยๆ ซึ่งค่าที่โปรแกรมใส่ให้ จะไม่สามารถ
เปลี่ยนแปลงแก้ไขได้ ทั้งนี้คอลัมน์ที่จะกาหนดให้เป็นแบบ AUTO_INCREMEN
ได้ ต้องกาหนดชนิดข้อมูลให้เป็นแบบเลขจานวนเต็ม เช่น INT เป็นต้น และห้ามใช้
ร่วมกับแอททริบิวต์ NULL แต่ส่วนมากนิยมใช้ร่วมกับ NOT NULL
DEFAULT
เป็นการกาหนดค่าให้แก่คอลัมน์ ด้วยค่าใดค่าหนึ่งเอาไว้ล่วงหน้า ซึ่งมักเป็นค่าที่ใช้
กั น บ่ อ ยๆ เช่ น พนั ก งานส่ ว นใหญ่ เ ป็ น เพศหญิ ง ดั ง นั้ น จึ ง อาจก าหนดค่ า
DEFAULT ให้แก่คอลัมน์ sex เป็น 'female' เป็นต้น แต่หากไม่ต้องการใช้ค่า
DEFAULT ที่กาหนดไว้ ก็สามารถกาหนดเป็นอย่างอื่นได้
INDEX
ใช้ในการจัดเรียงลาดับข้อมูลจากน้อยไปหามาก หรือมากไปหาน้อย ซึ่งข้อมูลที่
เรียงลาดับจะช่วยให้ค้นหารวดเร็วขึ้น สามารถจัดเรียงลาดับข้อมูลได้มากกว่า 1
คอลัมน์ เมื่อสร้าง index โปรแกรมฐานข้อมูลจะสร้างไฟล์ index แยกออกไป
ต่างหาก เนื่องจากเรื่อง index ถือว่าเป็นเรื่องสาคัญอย่างหนึ่งของฐานข้อมูล
ดังนั้นจะได้ศึกษารายละเอียดเพิ่มเติมอีกครั้งในเรื่อง index
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 247
ตารางที่ 14.6 (ต่อ)
แอททริบิวต์
UNIQUE

PRIMARY KEY

รายละเอียด
เป็น index ในอีกลักษณะหนึ่ง โดยมีข้อกาหนดที่สาคัญ คือ ห้ามมีข้อมูลซ้ากันใน
คอลัมน์เดียวกัน ซึ่งที่มักใช้กับข้อมูลที่คาดว่า ข้อมูลในแต่ละแถวจะไม่ มีทางซ้ากัน
ได้ เ ลย เช่ น รหั ส พนั ก งาน อี เ มล เป็ น ต้ น และถ้ า ใส่ ข้ อ มู ล ซ้ ากั บ ที่ มี อ ยู่ แ ล้ ว
โปรแกรมจะไม่ยอมรับข้อมูลนั้น ดังนั้น แอททริบิวต์ UNIQUE สามารถนามาช่วย
ในการตรวจสอบความถูกต้องได้อีกทางหนึ่ง
เป็น index ในอีกลักษะหนึ่ง โดย Primary Key คือ คอลัมน์ที่จะใช้เป็นคอลัมน์
หลักของตาราง แต่ Primary Key มีข้อกาหนดที่สาคัญคือ คอลัมน์ที่จะใช้เป็น
Primary Key ข้อมูลในคอลัมน์นั้นต้องไม่ซ้ากันเลย โดยทั่วไปทุกๆ ตารางนิยมให้
มี Primary Key เสมอ

การสร้างฐานข้อมูล
เจย์ กรีนสแปน และแบรด บุลเกอร์ (Jay Greenspan and Brad Bulger, 2001, p.28) ได้กล่าว
ไว้ว่า ขั้นตอนการสร้างฐานข้อมูลเป็นขั้นตอนแรกสุดก่อนเริ่มขั้นตอนต่อๆ ไป โดยใช้รูปแบบคาสั่งพื้นฐาน
ของ SQL (Structure Query Language) การสร้างฐานข้อมูลมีรูปแบบดังนี้
CREATE DATABASE (IF NOT EXISTS) tablename;
หมายเหตุ
คาสั่ง IF NOT EXISTS ใช้ป้องกันข้อผิดพลาดในกรณีที่มีฐานข้อมูลนั้นอยู่ก่อนหน้าแล้ว ซึ่งจะ
ระบุหรือไม่ก็ได้
ตัวอย่างที่ 14.6 การใช้คาสั่ง CREATE DATABASE เพื่อสร้างฐานข้อมูลใหม่ดังนี้
mysql> CREATE DATABASE guestbook;
จากตัวอย่างเป็นการสร้างฐานข้อมูลชื่อ guestbook โดยฐานข้อมูลที่สร้างขึ้นนี้ใช้เพื่อเก็บตาราง
ต่ า งๆ ที่ เ กี่ ย วข้ อ ง สามารถตรวจสอบได้ ว่ า ฐานข้ อ มู ล ได้ ถู ก สร้ า งแล้ ว หรื อ ยั ง โดย ใช้ ค าสั่ ง SHOW
DATABASES ก่อนหน้าที่ได้อธิบายไปแล้ว
การสร้างตารางฐานข้อมูล
การสร้างตารางฐานข้อมูลจะต้องเขียนเป็นคาสั่ง SQL เพื่อกาหนดโครงสร้างของตาราง การสร้าง
ตารางตามชื่อที่กาหนดไว้ในฐานข้อมูลที่กาลังเปิดอยู่ โดยมีกฎการตั้งชื่อตาราง คือ อนุญาตให้ตั้งชื่อที่มี
ความยาวได้ไม่เกิน 64 ตัวอักษร และห้ามใช้อักขระ "/" หรือ "." ในชื่อตาราง เพราะอาจเกิดข้อผิดพลาดใน
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
248 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
การอ้างถึงตารางฐานข้อมูล ตารางจะมีโครงสร้างประกอบด้วย ชื่อตาราง ชื่อขอบเขตข้อมูล ชนิดข้อมูล
ขนาด และแอททริบิวต์เพิ่มเติมอื่นๆ มีตัวอย่างการใช้คาสั่งดังนี้
ตัวอย่างที่ 14.7 การสร้างตารางชื่อ guestbook ในฐานข้อมูลชื่อ guestbook
mysql> USE guestbook;
Database changed
mysql> CREATE TABLE guestbook (
-> name VARCHAR (40) NULL,
-> location VARCHAR (40) NULL,
-> email VARCHAR (40) NULL,
-> url VARCHAR (40) NULL,
-> comment TEXT NULL);
จากโค้ดคาสั่งนี้ แสดงว่าตาราง guestbook ประกอบด้วย 5 คอลัมน์ ประกอบด้วย name,
location, email, url และ comment นอกจากนี้ตารางยังสามารถสร้างได้หลายวิธีและสามารถกาหนด
แอททริบิวต์ให้กับคอลัมน์ได้มากกว่า 1 แอททริบิวต์ มีตัวอย่างดังนี้
ตัวอย่างที่ 14.8 การสร้างตารางและกาหนดแอททริบิวต์ให้กับคอลัมน์มากกว่า 1 แอททริบิวต์
mysql> CREATE TABLE employees (
-> emp_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> firstname VARCHAR (20) NOT NULL,
-> lastname VARCHAR (30) NOT NULL,
-> position VARCHAR (20),
-> salary
MEDIUMINT UNSIGNED,
-> address TEXT,
-> email
VARCHAR (40) UNIQUE ) ;
การกาหนด Primary Key
Primary key คือ คอลัมน์ที่ใช้เป็นคอลัมน์หลักของตาราง โดยมีข้อกาหนดที่สาคัญ คือ คอลัมน์ที่
จะใช้เป็น Primary key ต้องไม่มีข้อมูลที่ซ้ากันเลย แต่กรณีที่คอลัมน์ที่ต้องการใช้เป็น Primary key มี
โอกาสที่ข้อมูลจะซ้ากัน ก็สามารถเลือกมากกว่า 1 คอลัมน์ มาเป็น Primary key ร่วมกันได้ เช่น สมมติ
ตารางฐานข้อมูลพนักงานประกอบด้วยคอลัมน์ "firstname" และ "lastname" หากคาดว่าชื่อของ
พนักงานอาจซ้ากันได้ ดังนั้นจึงไม่สามารถใช้คอลัมน์ "firstname" เป็น Primary key เพียงคอลัมน์เดียว
ได้ จึงอาจเลือกใช้ทั้ง firstname และ lastname เป็น Primary key ร่วมกัน
กรณีที่ต้องใช้หลายคอลัมน์เป็น Primary key ร่วมกัน จึงไม่สามารถระบุแอททริบิวต์ Primary
key แบบแยกคอลัมน์ได้ จะต้องกาหนดในรูปแบบของฟังก์ชันตามรูปแบบต่อไปนี้
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 249
PRIMARY KEY (column1, column2,…)
โดยการระบุไว้ต่อจากคอลัมน์สุดท้ายของตารางตามรูปแบบที่ได้กล่าวมาแล้ว เช่น
ตัวอย่างที่ 14.9 การระบุ PRIMARY KEY ให้กับคอลัมน์ของตารางใดๆ
mysql>CREATE TABLE employees (
-> firstname VARCHAR (30),
-> lastname VARCHAR (30),
-> address TEXT ,
-> PRIMARY KEY (firstname, lastname));
คอลัมน์แบบ Unique
จากข้อกาหนดของ Unique ข้อมูลในคอลัมน์นั้นจะต้องไม่ซ้ากันเลย ซึ่งสามารถสร้างคอลัมน์
แบบ Unique ได้หลายคอลัมน์ และแต่ละคอลัมน์จะเป็นอิสระจากกัน (ต่างจาก Primary Key ที่จะนา
คอลัมน์ที่เป็น Primary Key มาพิจารณาร่วมกัน) นั่นคือ ไม่ว่าจะสร้างคอลัมน์แบบ Unique ขึ้นมากี่
คอลัมน์ก็ตาม คอลัมน์เหล่านั้น ในคอลัมน์เดียวกันต้องไม่มีข้อมูลที่ซ้ากันเลย ดังนั้นการสร้ าง Unique
แบบระบุแยกคอลัมน์ หรือจะสร้างรวมด้วยฟังก์ชัน UNIQUE ( ) ก็ให้ผลที่ไม่แตกต่างกัน เช่น คาสั่งต่อไปนี้
ให้ผลลัพธ์ที่เหมือนกัน
ตัวอย่างที่ 14.10 ตัวอย่างการกาหนดคอลัมน์แบบ UNIQUE
mysql>CREATE TABLE friends (
-> name CHAR (30) ,
-> email CHAR (40) UNIQUE ,
-> phone CHAR (30) UNIQUE ) ;
หรือ
mysql>CREATE TABLE friends (
-> name CHAR (30), email CHAR (40), phone CHAR (30) ,
-> UNIQUE (email, phone)) ;
การสร้าง Index
Index เป็นการจัดเรียงลาดับข้อมูลเพื่อให้สามารถค้นหาข้อมูลได้รวดเร็วยิ่งขึ้นโดย MySQL จะ
สร้างไฟล์ Index แยกจากข้อมูลไว้ต่างหาก ซึ่งเรียงลาดับข้อมูลสามารถเรียงได้ทั้งแบบจากน้อยไปหามาก
หรือถ้าเป็นตัวอักษรคือ เรียงจาก A ไป Z โดยเขียนแทนด้วย ASC และเรียงจากมากไปหาน้อย หรือจาก
Z ไป A เขียนแทนด้วย DESC สาหรับค่าโดยปริยาย คือ ASC ทั้งนี้สามารถสร้าง Index ให้กับคอลัมน์ใด
คอลัมน์หนึ่ง หรือกาหนดให้กับหลายๆ คอลัมน์ได้ เช่นเดียวกับ UNIQUE หรือ PRIMARY KEY ด้วยการ
กาหนดแบบฟังก์ชัน เช่น

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
250 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
ตัวอย่างที่ 14.11 การสร้าง Index
mysql>CREATE TABLE employees (
-> firstname VARCHAR (20) ,
-> lastname VARCHAR (30) ,
-> address TEXT ,
-> INDEX (firstname, lastname));
การกาหนดหลายๆ แอททริบิวต์แบบฟังก์ชัน
หากต้อ งการก าหนดหลายๆ แอททริ บิ ว ต์ แ บบฟั ง ก์ชั น ก็ใ ห้ ว างต่ อท้ า ยคอลั ม น์ สุ ดท้ า ย โดย
เรียงลาดับอย่างไรก็ได้ ตัวอย่างดังนี้
ตัวอย่างที่ 14.12 การกาหนดหลายๆ แอททริบิวต์แบบฟังก์ชัน
mysql>CHEATE TABLE employees (
-> id INT AUTO_INCREMENT ,
-> firstname VARCHAR (30) ,
-> lastname VARCHAR (30) ,
-> phone VARCHAR (30) ,
-> PRIMARY KEY (id) , INDEX (firstname, lastname) , UNIQUE (email, phone)) ;
การสร้างตารางจากตารางอื่นที่มีอยู่แล้ว
การสร้างตารางฐานข้อมูล อาจสร้างโดยการคัดลอกมาจากตารางที่มีอยู่แล้ว ถ้าคัดลอกมาทั้งหมด
ก็จะทาให้ตารางใหม่มีลั กษณะเหมือนกับตารางต้นแบบทุกประการ หรืออาจเลือกเพียงบางคอลัมน์ก็ได้
รูปแบบการคัดลอกตารางคือ
CREATE TABLE ชื่อตารางใหม่
SELECT คอลัมน์_1, คอลัมน์_2, …, คอลัมน์_N
FROM ชื่อตารางเดิม
[WHERE เงื่อนไข]
คาสั่ง SELECT…FROM เป็นคาสั่งสาหรับการคัดเลือกคอลัมน์ที่ต้องการ ในการเลือกคอลัมน์ หาก
ต้องการคัดลอกทุกคอลัมน์ อาจใช้เครื่องหมาย * แทนการระบุชื่อคอลัมน์ เช่น
ตัวอย่างที่ 14.13 การใช้คาสั่ง SELECT…FROM เป็นคาสั่งสาหรับการคัดเลือกคอลัมน์ที่ต้องการ
mysql>CREATE TABLE employee2 SELECT * FROM employees;
หากต้องการคัดเลือกเพียงบางคอลัมน์ ก็ให้ระบุชื่อคอลัมน์ลงไป เช่น
mysql>CREATE TABLE employee2 SELECT firstname, lastname FROM employees;

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 251
ปกติหากไม่ระบุ เงื่อนไข ถ้าตารางต้นแบบมีข้อมูลอยู่แล้ว ข้อมูลนั้นก็จะถูกคัดลอกมาทั้งหมด
ทุกแถว แต่สามารถกาหนดเงื่อนไขเพื่อคัดลอกเฉพาะข้อมูลที่ต้องการได้ เช่น
ตัวอย่างที่ 14.14 การใช้คาสั่ง SELECT…FROM แบบมีเงื่อนไข
mysql>CREATE TABLE emp
-> SELECT * FROM employees
-> WHERE position = "Programmer";
การแทรก ปรับปรุง ลบ และเรียกดูข้อมูลในตาราง
การแทรกข้อมูลในตารางด้วยคาสั่ง INSERT
การแทรกข้อมูลลงในตารางด้วยคาสั่ง INSERT มีรูปแบบคาสั่งดังนี้
INSERT INTO tablename [column1, column2,… )] VALUES (value1, value2, ...) ;
เมื่อ tablename หมายถึง ชื่อตาราง
column
หมายถึง ชื่อคอลัมน์ ซึ่งจะกาหนดหรือไม่ก็ได้ โดยหากกาหนด จะต้องระบุ
value เรียงตามลาดับการจัดเรียงของ column หากไม่กาหนด
จะต้องระบุ value ให้ครบทุกคอลัมน์ และเรียงตามลาดับการ
จัดเรียงของคอลัมน์ในตาราง
ตัวอย่างที่ 14.15 การแทรกข้อมูลในตารางด้วยคาสั่ง INSERT
mysql>INSERT INTO employees VALUES (123, "John", "john@example.com");
จากรูปแบบของ INSERT ที่กล่าวมานี้ จะสามารถใส่ข้อมูลได้เพียงครั้งละ 1 แถว หากจะแทรก
ข้อมูลมากกว่า 1 แถว ก็ต้องใช้คาสั่ง INSERT ซ้าๆ ในทุกแถว ซึ่งอาจดูไม่สะดวกนัก แต่ใน MySQL ยังมี
วิธีที่สามารถแทรกข้อมูลพร้อมกันครั้งละหลายๆ แถว โดยคาสั่ง INSERT เพียงครั้งเดียว ในรูปแบบดังนี้
INSERT INTO tablename VALUES
(ค่าคอลัมน์_1_ของแถวที่_1,ค่าของคอลัมน์_2_ของแถวที่_1,…) ,
(ค่าคอลัมน์_1_ของแถวที่_2,ค่าของคอลัมน์_2_ของแถวที่_2,…) ,
.
.
.
(ค่าคอลัมน์_N_ของแถวที่_N,ค่าของคอลัมน์_N_ของแถวที่_N,…);

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
252 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
ตัวอย่างที่ 14.16 การแทรกข้อมูลในตารางด้วยคาสั่ง INSERT หลายระเบียนในครั้งเดียว
mysql>INSERT INTO employees VALUES
-> (123, "John", "john@example.com") ,
-> (456, "Jim", "jim@yahoo.com") ,
-> (789, "Jane", "jane@hotmail.com") ;
การปรับปรุงข้อมูลในตารางด้วยคาสั่ง UPDATE
คาสั่งที่ใช้สาหรับปรับปรุงข้อมูลในตารางด้วยคาสั่ง UPDATE สามารถทาการปรับปรุงข้อมูลได้
หลายคอลัมน์และหลายระเบียนภายในคาสั่ง 1 คาสั่ง ทั้งนี้ขึ้นอยู่กับ WHERE ที่ผู้ใช้ได้เขียนขึ้น การ
ปรับปรุงข้อมูลลงในตารางจะต้องใช้คาสั่ง SQL มีรูปแบบโดยทั่วไปดังนี้
UPDATE tablename SET column1=expression1, column2=expression2, ...
[WHERE condition] [LIMIT limit_criteria] ;
เมื่อ tablename หมายถึง ชื่อตารางที่ต้องการปรับปรุงข้อมูล
column
หมายถึง คอลัมน์ที่ต้องการปรับปรุงข้อมูล
expression หมายถึง รูปแบบการคานวณหรือค่าใหม่ที่ต้องการกาหนด
condition
หมายถึง เงื่อนไข
limit_criteria หมายถึง กาหนดแถวเริ่มต้นและจานวนแถวที่จะปรับปรุงข้อมูล
ตัวอย่างที่ 14.17 การปรับปรุงข้อมูลในตารางด้วยคาสั่ง UPDATE
mysql> UPDATE country SET CountryCode='JP',CountryName='Japan' WHERE CountryCode='CH';
จากตัวอย่างเป็นการปรับปรุงข้อมูลในตาราง country โดยกาหนดให้คอลัมน์ CountryCode มี
ค่าเท่ากับ 'JP' และ CountryName มีค่าเท่ากับ 'Japan' โดยมีเงื่อนไขว่าจะปรับปรุงข้อมูลก็ต่อเมื่อ
คอลัมน์ CountryCode มีค่าเท่ากับ 'CH' เท่านั้น
การลบข้อมูลในตารางด้วยคาสั่ง DELETE
คาสั่งที่ใช้สาหรับลบข้อมูลในตารางด้วยคาสั่ง DELETE สามารถทาการลบได้หลายระเบียนภายใน
คาสั่งเดียว หรือว่าระเบียนเดียว ทั้งนี้ขึ้นอยู่กับ WHERE ที่ผู้ใช้เขียนขึ้นด้วย การลบข้อมูลลงในตาราง
จะต้องใช้คาสั่ง SQL ซึ่งมีรูปแบบโดยทั่วไปดังนี้
DELETE FROM tablename [WHERE condition] [LIMIT limit_criteria] ;
เมื่อ tablename หมายถึง ชื่อตาราง
condition
หมายถึง เงื่อนไข
limit_criteria หมายถึง กาหนดแถวเริ่มต้นและจานวนแถวที่จะลบข้อมูล

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 253
ตัวอย่างที่ 14.18 การลบข้อมูลในตารางด้วยคาสั่ง DELETE
mysql>DELETE FROM country WHERE CountryCode = 'JP';
จากตัวอย่างเป็นการลบข้อมูลในตารางด้วยคาสั่ง DELETE ในตาราง "country" โดยมีเงื่อนไข
การลบ คือ คอลัมน์ "CountryCode" จะต้องมีค่าเท่ากับ 'JP' จึงจะลบข้อมูล
การเรียกดูข้อมูลด้วยคาสั่ง SELECT
คาสั่งที่ใช้สาหรับการเรียกดูข้อมูลในตาราง จะใช้คาสั่ง SELECT ซึ่งสามารถระบุเงื่อนไขต่างๆ ได้
การใช้คาสั่ง SELECT สามารถแบ่งตามลักษณะการใช้งาน มีรูปแบบดังนี้
 การเรียกดูข้อมูลอย่างง่าย
มีรูปแบบดังนี้
SELECT item FROM tablename;
เมื่อ item
หมายถึง ชื่ อ คอลั ม น์ ที่ ต้ อ งการเรี ย กดู หากมี ห ลายคอลั ม น์ จ ะคั่ น ด้ ว ย
เครื่องหมาย Comma หากต้องการเรียกดูข้อมูลทุกคอลัมน์
สามารถใช้เครื่องหมาย * แทน
tablename หมายถึง ชื่อตาราง
ตัวอย่างข้อมูล (ชื่อตาราง customer)
Customer
Name
Email
Country Budget Used
ID
Code
C001
Parinya Noidonprai parinya@hotmail.com
TH
1000000 600000
C002
John Smith
john.smith@ya.com
EN
2000000 300000
C003
Jame Born
jame.born@test.com
US
3000000 600000
C004
Chalee Angel
chalee@hotmail.com
US
4000000 100000
ตัวอย่างที่ 14.19 การใช้คาสั่งสาหรับเรียกดูข้อมูล
mysql>SELECT CustomerID, Name, Email FROM customer;
ผลลัพธ์ที่ได้จากคาสั่ง
Customer
Name
Email
ID
C001
Parinya Noidonprai
parinya@hotmail.com
C002
John Smith
john.smith@ya.com
C003
Jame Born
jame.born@test.com
C004
Chalee Angel
chalee@hotmail.com

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
254 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
 การเรียกดูข้อมูลแบบมีเงื่อนไข
มีรูปแบบดังนี้
SELECT item FROM tablename
[WHERE condition]
[GROUP BY group_type]
[HAVING where_definition]
[ORDER BY order_type]
[LIMIT limit_criteria] ;
เมื่อ condition
หมายถึง เงื่อนไขที่ต้องการกาหนด
group_type
หมายถึง รายชื่อคอลัมน์ที่ใช้ในการกาหนดกลุ่ม
where_definition หมายถึง เงื่อนไขที่ใช้ร่วมกับคาสั่ง GROUP BY
order_type
หมายถึง ชนิดของการเรียงลาดับ
limit_criteria
หมายถึง ตาแหน่งและจานวนแถวที่ต้องการเลือก
หมายเหตุ
WHERE ใช้เรียกดูข้อมูลแบบมีเงื่อนไข เป็นการระบุค่าเฉพาะข้อมูลที่ต้องการเรียกดู อาจใช้
เงื่อนไขเพื่อดึงข้อมูลบางแถวจากตารางก็ได้ โดยภายในคาสั่ง WHERE ประกอบด้วยส่วนสาคัญ
ได้แก่ ชื่อคอลัมน์ ได้แก่ ชื่อคอลัมน์โอเปอร์เรเตอร์ และข้อมูลเฉพาะที่ต้องการแสดงเป็นเงื่อนไข
ของคอลัมน์ที่ระบุ
ตารางที่ 14.7 แสดงโอเปอร์เรเตอร์ที่ใช้งานร่วมกับคาสั่ง WHERE
โอเปอร์เรเตอร์
ชื่อ
ตัวอย่าง
=
เท่ากับ
column = 8000
>
มากกว่า
column > 66.00
<
น้อยกว่า
column < 66.00
>=
มากกว่าหรือเท่ากับ
column >= 66.00
<=
น้อยกว่าหรือเท่ากับ
column <= 66.00
!= หรือ <>
ไม่เท่ากับ
column !=0
IS NULL
ค่าว่าง
column IS NULL
IS NOT NULL ไม่ใช่ค่าว่าง
column IS NOT NULL
BETWEEN
ค่าที่อยู่ระหว่าง
column BETWEEN 0 AND 66.00
IN
ค่าที่อยู่ในคอลัมน์ที่กาหนด
column IN ("mai", "mon")

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 255
ตารางที่ 14.7 (ต่อ)
โอเปอร์เรเตอร์
ชื่อ
ตัวอย่าง
NOT IN
ค่าที่ไม่ได้อยู่ในคอลัมน์ที่กาหนด
column NOT IN ("mai", "mon")
LIKE
เหมือนกับรูปแบบที่กาหนด
column LIKE ("mai%")
NOT LIKE
ไม่เหมือนกับรูปแบบที่กาหนด
column NOT LIKE ("mai%")
REGEXP
Regular Expression
column REGEXP
ตัวอย่างที่ 14.20 การเรียกดูข้อมูลจากตาราง "books" ที่มีค่า cat_id เป็น 1 เท่านั้น
mysql>SELECT * FROM books WHERE cat_id = 1;
ตัวอย่างที่ 14.21 การเรียกดูข้อมูลจากตาราง "books" ที่มีค่า price อยู่ระหว่าง 250 ถึง 340
mysql>SELECT * FROM books WHERE price BETWEEN 250 AND 340;
ตัวอย่างที่ 14.22 การเรียกดูข้อมูลจากตาราง "books" โดยกาหนดเงื่อนไขด้วย LIKE (เฉพาะ
หนังสือที่มีคาว่า PHP)
mysql>SELECT * FROM books WHERE book_title LIKE '%PHP%';
การใช้ GROUP BY เพื่อค้นหาข้อมูลแล้วแยกเป็นกลุ่มตามเงื่อนไขที่กาหนด สามารถใช้ร่วมกับ
ฟังก์ชัน Aggregate เพื่อหาค่าทางสถิติของกลุ่มข้อมูล มีรายละเอียดดังนี้
ตารางที่ 14.8 แสดงฟังก์ชัน Aggregate สาหรับใช้ร่วมกับ GROUP BY
ฟังก์ชัน
คาอธิบาย
AVG (column)
หาค่าเฉลี่ยของคอลัมน์
COUNT (item)
นับจานวนรายการ
MIN (column) / MAX (column)
หาค่าต่าสุด / ค่าสูงสุด ในคอลัมน์
STD (column) / STDDEV (column) หาค่า Standard Deviation (ส่วนเบี่ยงเบนมาตรฐาน) ใน
คอลัมน์
SUM (column)
หาค่าผลรวมของคอลัมน์
ตัวอย่างที่ 14.23 การใช้ GROUP BY และฟังก์ชัน COUNT ( )
mysql>SELECT pub_id, COUNT (book_isbn) FROM books GROUP BY pub_id;
จากตัวอย่างเป็นการใช้คาสั่ง SELECT แสดงคอลัมน์ "pub_id" และใช้ฟังก์ชัน COUNT ( ) นับ
คอลัมน์ "book_isbn" จากนั้นใช้คาสั่ง GROUP BY เพื่อหาค่าของข้อมูลตามกลุ่มของคอลัมน์ "pub_id"
การใช้ HAVING ในการกาหนดกลุ่มให้กับข้อมูลด้วยการใช้คาสั่ง GROUP BY เมื่อต้องการกาหนด
เงื่อนไขเพิ่มเติมเพื่อแบ่งกลุ่มข้อมูล ให้กาหนดเงื่อนไขที่ต้องการนั้นในคาสั่ง HAVING มีตัวอย่างดังนี้
ตัวอย่างที่ 14.24 การใช้ HAVING ในการกาหนดกลุ่มให้กับข้อมูล
mysql> SELECT pub_id, COUNT (book_isbn) FROM books GROUP BY pub_id HAVING pub_id=1;
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
256 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
จากตัวอย่างเป็นการใช้คาสั่ง SELECT แสดงคอลัมน์ "pub_id" และใช้ฟังก์ชัน COUNT ( ) นับ
คอลัมน์ "book_isbn" จากนั้นใช้คาสั่ง GROUP BY เพื่อหาค่าของข้อมูลตามกลุ่มของคอลัมน์ "pub_id"
และใช้ HAVING เพื่อแสดงเฉพาะ "pub_id" ที่มีค่าเป็น 1 เท่านั้น
การใช้ ORDER BY ร่วมกับคาสั่ง SELECT เพื่อเลือกข้อมูลโดยการเรียงลาดับตามเงื่อนไขที่
กาหนดจากน้อยไปมา (ASC: Ascending) หรือมากไปน้อย (DESC: Descending) มีตัวอย่างดังนี้
ตัวอย่างที่ 14.25 การใช้ ORDER BY ร่วมกับคาสั่ง SELECT
mysql>SELECT * FROM books ORDER BY price DESC;
จากตัวอย่างเป็นการใช้คาสั่ง SELECT โดยเรียงลาดับค่าในคอลัมน์ "price" จากมากไปน้อย (DESC)
การใช้ LIMIT ร่วมกับคาสั่ง SELECT ใช้เพื่อระบุแนวเริ่มต้นและจานวนแถวที่จะแสดง โดย
จะต้องส่งค่าพารามิเตอร์ 2 ค่า คือ ตาแหน่งของแถวเริ่มต้นและจานวนแถว มีตัวอย่างดังนี้
ตัวอย่างที่ 14.26 การใช้ LIMIT ร่วมกับคาสั่ง SELECT
mysql>SELECT * FROM books LIMIT 3, 2;
จากตัวอย่างเป็นการใช้คาสั่ง SELECT ร่วมกับ LIMIT โดยเริ่มต้นจากแถวที่ 3 (เริ่มนับแถวแรก
คือ 0) แสดงทั้งหมด 2 แถว
จัดการฐานข้อมูลด้วย phpMyAdmin
เนื่องจากฐานข้อมูล MySQL ติดต่อกับผู้ใช้ผ่านทางคอมมานต์ไลน์ (Command Line) ทาให้
ผู้ใช้ต้องพิมพ์คาสั่งต่างๆ ลงไปเอง ทาให้ไม่สะดวกต่อการใช้งาน จากปัญหาดังกล่าวทาให้มีผู้ที่คิดสร้าง
เครื่องมือขึ้นมาช่วยให้บรรดาโปรแกรมเมอร์ PHP สามารถจัดการกับฐานข้อมูล MySQL ได้ง่ายขึ้น โดย
เครื่องมือที่ว่ามีชื่อว่า phpMyAdmin เป็นเว็บแอปพลิเคชั่นที่เขียนด้วย PHP แต่มีความสามารถในการ
จัดการกับ MySQL ได้เกือบทุกอย่าง โดยจะติดต่อกับผู้ใช้ในแบบ GUI ทาให้ใช้งานง่าย ประหยัดเวลาใน
การพิมพ์คาสั่ง และช่วยลดข้อผิดพลาดลงได้ค่อนข้างมาก นอกจากนี้บรรดาผู้ให้บริการ Web Hosting
ส่วนใหญ่จะมี phpMyAdmin ติดตั้งไว้ให้ใช้งานด้วย
สาหรับผู้ที่ติดตั้ง AppServ จะมี phpMyAdmin เป็นองค์ประกอบอย่างหนึ่งอยู่แล้ว และหากใน
ตอนติดตั้ง เลือกให้ติดตั้ง phpMyAdmin ลงไปด้วย ก็พร้อมใช้งานได้ทันที หรือสามารถติดตั้งเวอร์ชั่น
ใหม่ ๆ สามารถดาวน์ โ หลดได้ ที่ http://www.phpmyadmin.net/home_page/downloads.php
เนื่องจาก phpMyAdmin มีหลายเวอร์ชั่น สาหรับหนังสือเล่มนี้ผู้แต่งได้เลือกใช้เวอร์ชั่น 3.5.4
การเริ่มต้นใช้งาน phpMyAdmin
การใช้งาน phpMyAdmin จะต้องทาผ่านบราวเซอร์เท่านั้น หน้าโฮมเพจ (Homepage) ปกติจะ
อยู่ที่ http://localhost/phpmyadmin/index.php เมื่อเปิดเพจนี้ จะพบกับหน้าจอที่ให้ใส่ล็อกอิน และ
พาสเวิร์ด สาหรับพาสเวิร์ดก็เป็นของ MySQL ตามที่กาหนดไว้ตอนติดตั้ง
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 257

ภาพที่ 14.1 หน้าล็อกอินเพื่อเข้าสู่ระบบของ phpMyAdmin เวอร์ชัน 3.5.4
หลังการล็อกอินเข้าสู่ phpMyAdmin จะปรากฏหน้าเพจ ดังรูป

ภาพที่ 14.2 หน้าเพจหลังจากล็อกอินเข้าสู่ระบบ phpMyAdmin เวอร์ชัน 3.5.4
การสร้างฐานข้อมูล
การสร้างฐานข้อมูลนี้ จะเหมือนกับการใช้คาสั่ง CREDATE DATABASE ที่ใช้ผ่านคอมมานด์ไลน์
ของ MySQL นั่นเอง การสร้างฐานข้อมูลให้เริ่มจากเพจ ตามขั้นตอนดังนี้
1. คลิก "Databases"
2. พิมพ์ชื่อฐานข้อมูล ที่ต้องการสร้างใหม่ ส่ ว นการเรียงล าดั บ (Collation) หากมีข้อมูล เป็ น
ภาษาไทย และต้องการใช้เป็นเกณฑ์ในการเรียงลาดับ ก็ให้เลือก utf8_general_ci
3. คลิกที่ปุ่ม "Create" เพื่อเริ่มต้นการสร้างฐานข้อมูลใหม่ หากต้องการสร้างฐานข้อมูลเพิ่ม ก็ให้
ย้อนกลับไปขั้นตอนเริ่มแรกใหม่

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
258 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin






ภาพที่ 14.3 แสดงขั้นตอนการสร้างฐานข้อมูลใหม่
การสร้างตาราง
ก่อนการสร้างตารางต้องสร้างฐานข้อมูลไว้ก่อนแล้ว หลังจากนั้นก็ทาตามขั้นตอนดังนี้
1. เลือกชื่อฐานข้อมูลจากเฟรมด้านซ้ายก่อน ว่าจะสร้างตารางนี้ไว้ในฐานข้อมูลใด
2. หลังการเลือกชื่อฐานข้อมูลในข้อที่ 1 ให้ไปที่กรอบ "Create Table" ที่เฟรมด้านขวา แล้วใส่
ชื่อตาราง และจานวนขอบเขตข้อมูลของตารางนั้นลงไป
3. คลิกปุ่ม "Go" หรือกดปุ่ม Enter เพื่อเริ่มสร้างตาราง
4. ในขั้นตอนต่อไป จะเป็น การกาหนดโครงสร้างของตาราง หลังการสร้างตาราง จะปรากฏ
รายชื่อตารางที่ เฟรมด้านซ้าย (ถ้าไม่ปรากฏ ให้เ ลือกชื่อฐานข้อมูลจากอินพุต Select ก่อน) ซึ่งหาก
ต้องการจัดการใดๆ เกี่ยวกับตาราง เช่น เพิ่มข้อมูล แก้ไขข้อมูล ก็ให้มาเริ่มเลือกที่นี่ก่อน
5. ถ้าต้องการสร้างตารางเพิ่ม ให้ระบุชื่อตารางและจานวนขอบเขตข้อมูล






ภาพที่ 14.4 แสดงขั้นตอนการสร้างตารางใหม่

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 259


ภาพที่ 14.5 แสดงขั้นตอนการสร้างขอบเขตข้อมูลในตาราง
เมื่อ Name
Type
Length/Value
Default
Collation
Attributes
Null
Index
A_I

Comments

คือ
คือ
คือ
คือ
คือ
คือ
คือ
คือ
คือ

ชื่อขอบเขตข้อมูล
ชนิดของขอบเขตข้อมูล
ความกว้างของข้อมูล
กาหนดค่าปริยาย เมื่อผู้ใช้ไม่ป้อนข้อมูล
กาหนดรูปแบบการจัดเรียง
กาหนดรูปแบบการจัดเก็บข้อมูล
อนุญาตให้เป็นค่าว่างหรือไม่ หากเลือกจะหมายถึงอนุญาตให้เป็นค่าว่าง
การกาหนดให้เป็นคีย์ประเภทใด
Auto Increment หากเลือกจะหมายถึงกาหนดให้เพิ่มข้อมูลแบบ
อัตโนมัติ (จะใช้รูปแบบนี้ได้จะต้องกาหนดชนิดข้อมูล เป็นชนิดตัวเลข
จานวนเต็มเท่านั้น)
คือ หมายเหตุเพิ่มเติม



ภาพที่ 14.6 แสดงขั้นตอนการสร้างตารางและกาหนดขอบเขตข้อมูลในตาราง

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
260 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
การแทรกข้อมูลลงในตาราง
การแทรกข้อมูลลงในตารางต้องเลือกที่ตารางนั้นก่อน โดยไปที่เฟรมด้านซ้าย เลือกฐานข้อมูลแล้ว
เลือกชื่อตารางที่ต้องการ จากนั้นไปที่เฟรมด้านขวามือคลิก "Insert" ดังภาพ

ภาพที่ 14.7 แสดงขั้นตอนการแทรกข้อมูลลงในตาราง
หลังจากคลิก "Insert" จะมีฟอร์มมาให้ป้อนข้อมูลลงในแต่ละคอลัมน์โดยมีหลักการสาคัญดังนี้

ภาพที่ 14.8 แสดงตัวอย่างรายการสาหรับการแทรกข้อมูลลงในตาราง
 ช่อง "Function" นั้นใช้ในกรณีที่ต้องการกาหนดค่าด้วยฟังก์ชันบางอย่าง โดยข้อมูลที่ใส่ลงใน
ช่อง Value นั้น จะกลายเป็นอาร์กิวเมนต์ให้กับ ฟังก์ชัน แล้วผลลัพธ์ที่ได้จากฟังก์ชัน จะถูกใส่เป็นข้อมูล
ให้แก่คอลัมน์นั้น
 ถ้าต้องการใส่ข้อมูลไปโดยตรง ก็ให้เว้นช่องฟังก์ชันเอาไว้
 หากดูที่ตัวแอปพลิเคชั่นจริงจะเห็นว่า มีฟอร์มให้ใส่ข้อมูล 2 ฟอร์ม (ในรูปที่แสดงนี้ได้ตัดมา
เฉพาะฟอร์มอันบน) โดยแต่ละฟอร์มใช้สาหรับข้อมูล 1 แถว (ฟอร์มด้านบนจะมีการตรวจสอบรูปแบบของ
ขอบเขตข้อมูลตามโครงสร้างที่ระบุ เช่น ไม่อนุญาตให้เป็นค่าว่าง เป็นต้น ส่วนฟอร์มด้านล่างจะข้ามการ
ตรวจสอบลักษณะดังกล่าว)
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 261
 หากต้องการใส่ข้อมูลพร้อมกัน 2 แถว ต้องคลิกเอาเซ็กบ็อกซ์ "Ignore" ออก แต่ถ้าต้องการใส่
เพียงแถวเดียว ก็ให้คลิกที่เซ็กบ็อกซ์ตัวเลือกนี้ มิฉะนั้นจะเกิดการแทรกแถวว่างเข้าไป 1 แถว
 หลังจากที่ใส่ข้อมูลลงไปจนครบทุกคอลัมน์แล้ว คลิกที่ปุ่ม "Go" เพื่อบันทึกลงฐานข้อมูล และ
ถ้าต้องการใส่ข้อมูลแถวถัดไป ก็ให้เริ่มที่คลิก "Insert" เช่นเดิม
การอ่านข้อมูลจากตาราง
การอ่านข้อมูลทั้งหมดให้เริ่มจากการเลือกฐานข้อมูล และตารางจากเฟรมด้านซ้าย แล้วคลิกที่
"Browse" ดังขั้นตอนในรูปต่อไปนี้

ภาพที่ 14.9 แสดงขั้นตอนการอ่านข้อมูลในตาราง
การปรับปรุงข้อมูล
การที่จะปรับปรุงข้อมูลในตารางใดนั้น ต้องเปิดข้อมูลในตารางนั้นขึ้นมาแสดงก่อน โดยอาจเลือก
จาก "Browse" ตามที่ได้กล่าวมาแล้ว ซึ่งจะสังเกตเห็นว่า ข้อมูลในแต่ละแถวนั้นจะมีไอคอนรูปดินสอหรือ
ข้อความ "Edit" ไอคอนดังกล่าวใช้สาหรับการเลือกข้อมูลเพื่อปรับปรุงข้อมูลแถวที่ถูกเลือก

ภาพที่ 14.10 แสดงขั้นตอนการเลือกข้อมูลเพื่อแก้ไขข้อมูล
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
262 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
ให้คลิกที่รูปดินสอตรงแถวที่ต้องการปรับปรุงข้อมูล "Edit" จากนั้นจะมีฟอร์มแสดงข้อมูลเดิม
ขึ้นมาให้เลือกปรับปรุงข้อมูล สาหรับขั้นตอนนี้ก็เหมือนกับการเพิ่มข้อมูลแถวใหม่นั่นเอง
การลบข้อมูล
การลบก็ต้องเกิดข้อมูลตารางนั้นขึ้นมาก่อน เช่นเดียวกับการแก้ไข จากนั้นคลิกที่ ไอคอนวงกลมสี
แดงหรือที่ข้อความ "Delete" หน้าแถวที่ต้องการลบ ดังภาพ

ภาพที่ 14.11 แสดงขั้นตอนการเลือกข้อมูลเพื่อลบข้อมูล
จากนั้นโปรแกรมจะถามยืนยันการลบอีกครั้ง หากยืนยันที่จะลบ ก็ให้เลือกคลิกที่ปุ่ม OK แต่หาก
ต้องการยกเลิกก็ให้คลิกเลือกที่ปุ่ม Cancel
การเปลี่ยนแปลงโครงสร้างของตาราง
การแก้ไขโครงสร้างของตารางที่ต้องการจากเฟรมด้านซ้ายก่อน แล้วคลิกที่ "Structure" จากนั้น
จะปรากฏโครงสร้างของตารางให้เลือกแก้ไขดังนี้
1. ถ้าต้องการเปลี่ ย นแปลงเพีย งคอลั มน์ห นึ่ง ให้ เลือกคลิ ก "Change" ตามแถวที่ต้องการ
เปลี่ยนแปลง
2. ถ้าต้องการเปลี่ยนแปลงมากกว่า 1 คอลัมน์ ให้คลิกเซ็กบ็อกซ์ที่หน้าคอลัมน์นั้นๆ แล้วเลือกที่
"Change" ด้านล่างของข้อมูล





ภาพที่ 14.12 แสดงตัวอย่างการเลือกข้อมูลเพื่อแก้ไขโครงสร้างข้อมูล
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin 263
การลบฐานข้อมูล และตาราง
การลบฐานข้อมูล หรือตารางใดนั้น โดยแยกพิจารณาได้ดังนี้
การลบฐานข้อมูล
ให้เลือกชื่อฐานข้อมูลจากเฟรมด้านซ้ายก่อน แล้วเลือกที่ "Drop" จากนั้นจะปรากฏข้อความเพื่อ
ถามยืนยันการการลบ ซึ่งการลบฐานข้อมูลจะทาให้ทุกตารางที่อยู่ในฐานข้อมูลนั้นถูกลบทิ้งไปด้วย
การลบตาราง
ต้องเริ่มจากการเลือกตารางที่ต้องการลบจากเฟรมด้านซ้ายก่อน ทั้งนี้การลบตารางจะแบ่งเป็น 2
กรณี คือ ลบเฉพาะข้อมูลในตาราง หรือลบทั้งตาราง ซึ่งจะมี 2 ตัวเลือก มีรายละเอียดดังนี้
1. "Empty" ใช้สาหรับการลบข้อมูลทั้งหมดในตาราง ซึ่งเป็นการลบเฉพาะข้อมูล แต่ตัวตาราง ซึ่ง
เป็นการลบเฉพาะข้อมูลในตาราง แต่โครงสร้างยังอยู่ เมื่อคลิกรายการนี้จะมีข้อความเพื่อให้ยืนยัน
2. "Drop" สาหรับการลบตาราง และข้อมูลทั้งหมดในตารางทิ้งไป เมื่อคลิก รายการนี้จะมี
ข้อความเพื่อให้ยืนยัน





ภาพที่ 14.13 แสดงตัวอย่างการลบข้อมูลในตารางและลบตาราง
ส่วนของการใช้คาสั่ง SQL
เมื่อคลิก SQL จะปรากฏหน้าจอสาหรับพิมพ์คาสั่ง SQL เพื่อประมวลผล เมื่อพิมพ์คาสั่ง SQL
แล้ว ให้คลิกปุ่ม "Go" มีตัวอย่างดังภาพ

ภาพที่ 14.14 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query"
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
264 บทที่ 14 ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin
ส่วนของการค้นหา
ใช้ค้นหาข้อมูลในตารางตามคาและตารางที่ระบุ เมื่อคลิกส่วนของการค้นหา "Search" มีตัวอย่าง
ดังภาพ

ภาพที่ 14.15 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อค้นหาข้อมูล
เมื่อ at least one of the words คือ
all words
คือ
the exact phrase
คือ
as regular expression
คือ

เหมือนอย่างน้อยหนึ่งคาของคาที่ค้นหา
เหมือนทุกคาที่ค้นหา
เหมือนทุกวลีที่ต้องการค้นหา
ค้นหาตามหลัก Regular Expression

ส่วนของการกาหนดสิทธิ์
ใช้กาหนดสิทธิ์การใช้ฐานข้อมูลให้กับผู้ใช้ เมื่อคลิก "Privileges" จะปรากฏหน้าแสดงรายชื่อผู้ใช้
และสิทธิ์ในการเข้าใช้งานฐานข้อมูล มีตัวอย่างดังภาพ

ภาพที่ 14.15 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อกาหนดสิทธิ์

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15
การใช้ PHP ร่วมกับ MySQL
การใช้ PHP ร่วมกับ MySQL
ในบทนี้จะกล่าวถึงฟังก์ชันของ PHP สาหรับการติดต่อ และประยุกต์ใช้งานร่วมกับ MySQL
สาหรับฟังก์ชันที่เกี่ยวข้องนั้นมีจานวนมาก แต่มีข้อแนะนา คือ ชื่อฟังก์ชันที่เกี่ยวข้องเหล่านี้จะขึ้นต้นด้วย
คาว่า mysql เป็นส่วนใหญ่ ทาให้จาได้ไม่ยาก เน้นประยุกต์การใช้งานเป็นสาคัญ เพื่อเป็นพื้นฐานสาหรับ
การนาไปประยุกต์ใช้งานอื่นๆ ต่อไป
ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL
ก่อนที่จะใช้งานฐานข้อมูลได้ จะต้องเปิดการเชื่อมต่อกับฐานข้อมูลให้ได้ก่อน โดยฟังก์ชันที่ใช้ใน
การเปิดการเชื่อมต่อกับ MySQL คือ mysql_connect ( ) หรือ mysql_pconnect ( ) แต่เนื่องจาก
MySQL เป็นโปรแกรมที่มีระบบตรวจสอบสิทธิ์ในการเข้าใช้งาน และจัดการกับฐานข้อมูล ดังนั้นฟังก์ชันที่
ใช้ จ ะต้ อ งระบุ ข้ อ มู ล ที่ ส าคั ญ ประกอบด้ ว ย เซิ ร์ ฟ เวอร์ (Server) ชื่อ ผู้ ใ ช้ (Username) และรหั ส ผ่ า น
(Password) เพื่อใช้ตรวจสอบกับข้อมูลที่อยู่ในฐานข้อมูล "mysql" หากข้อมูลถูกต้องฟังก์ชันจะคืนค่าเป็น
MySQL link identifier (Resource) แต่หากไม่ถูกต้องจะคืนค่าเป็นเท็จ (False) สาหรับความแตกต่าง
ของฟังก์ชัน mysql_connect ( ) และ mysql_pconnect ( ) มี 2 ประการดังนี้
1. ขั้นตอนการเชื่อมต่อกับ MySQL ฟังก์ชัน mysql_pconnect ( ) จะค้นหาว่ามีการเชื่อมต่อ
ของโฮสท์ ชื่อผู้ใช้ และรหัสผ่านนี้หรือไม่ หากพบ จะใช้ MySQL link identifier เดิม (เรียกการเชื่อมต่อ
แบบนี้ว่า "Persistent") แต่หากไม่พบจึงสร้างการเชื่อมต่อใหม่ แต่สาหรับฟังก์ชัน mysql_connect ( )
จะทาการเชื่อมต่อใหม่ทุกครั้ง
2. ยกเลิกการเชื่อมต่อกับ MySQL ฟังก์ชัน mysql_pconnect ( ) ไม่ต้องยกเลิก MySQL link
identifier หลั ง จากที่ ใ ช้ ง านฐานข้ อ มู ล เสร็ จ แล้ ว เพราะเก็ บ ไว้ ใ ช้ ง านในครั้ ง ต่ อ ไป ส่ ว นฟั ง ก์ ชั น
mysql_connect ( ) จะใช้ฟังก์ชัน mysql_close ( ) สาหรับยกเลิก MySQL link identifier เพื่อคืน
หน่วยความจาให้กับระบบ
รูปแบบฟังก์ชัน mysql_connect ( ) และ mysql_pconnect ( ) มีดังนี้
resource mysql_connect | mysql_pconnect (string $server, string $username,
string $password)
266 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
เมื่อ $server
หมายถึง ชื่อเครื่องเซิร์ฟเวอร์หรือหมายเลข IP หรือใช้ localhost ก็ได้
$username หมายถึง ชื่อผู้ใช้
$password หมายถึง รหัสผ่าน
ส่วนรูปแบบคาสั่งของฟังก์ชัน mysql_close ( ) มีดังนี้
bool mysql_close ([ resource $link_identifier = NULL ] )
เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
ตัวอย่างที่ 15.1 ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL
<?php
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
echo "ไม่สามารถเชื่อมต่อกับฐานข้อมูล"; exit;
} else {
echo 'การเชื่อมต่อเสร็จสมบูรณ์';
mysql_close ($link);
}
?>
จากตัวอย่าง นอกจากเรียกใช้ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL
แล้ว ยังมีการตรวจสอบผลลัพธ์ของฟังก์ชันก่อนจะดาเนินการใดๆ ต่อไป หรือหากไม่ใช้ การตรวจสอบตาม
ตัวอย่างข้างต้น อาจใช้เทคนิค Error Suppression คู่กับฟังก์ชัน die ( ) หรือ exit ( ) ก็ได้ มีตัวอย่างดังนี้
ตัวอย่างที่ 15.2 เทคนิค Error Suppression คู่กับฟังก์ชัน die ( ) หรือ exit ( )
<?php
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้: ' . mysql_error ( ));
echo 'การเชื่อมต่อเสร็จสมบูรณ์';
?>
แต่อย่างไรก็ตาม การใช้ฟังก์ชัน mysql_close ( ) ไม่ใช่สิ่งที่จาเป็น เนื่องจาก PHP จะปิดการ
เชื่อมต่อไปโดยอัตโนมัติอยู่แล้วเมื่อสิ้นสุดสคริปต์ของเพจนั้นๆ ซึ่งถ้าไม่จาเป็นต้องปิดการเชื่อมต่อเอง ก็จะ
ทาให้เขียนโปรแกรมได้สะดวกขึ้น เพราะบางครั้งการเปิดการเชื่อมต่อจะขึ้นกับเงื่อนไข จึงไม่ต้องมาคอยสั่ง
ปิดการเชื่อมต่อตามเงื่อนไขนั้นด้วย

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15 การใช้ PHP ร่วมกับ MySQL 267
ฟังก์ชันสาหรับการเลือกฐานข้อมูล
ตามที่ทราบแล้วว่า การจะใช้ตารางใดนั้น ได้ ต้องเลือกฐานข้อมูลที่ตารางนั้นอยู่เสียก่อน หากใช้
คอมมานด์ไลน์โดยตรงก็คือ การใช้คาสั่ง USE นั่นเอง แต่ PHP ได้จัดเตรียมฟังก์ชันให้เลือกฐานข้อมูลได้
สะดวกขึ้น คือ mysql_select_db ( ) เป็นฟังก์ชันในการกาหนดชื่อฐานข้อมูลที่จะใช้งาน มีรูปแบบดังนี้
bool mysql_select_db ( string $database_name [, resource $link_identifier ] )
เมื่อ $database_name หมายถึง ชื่อฐานข้อมูลที่ต้องการใช้งาน
$link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
ตัวอย่างที่ 15.3 ฟังก์ชันสาหรับการเลือกฐานข้อมูล
<?php
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ : ' . mysql_error ( ));
}
$db_selected = mysql_select_db ('foo', $link);
if (!$db_selected) {
die ('ไม่สามารถเลือกฐานข้อมูลได้ : ' . mysql_error ( ));
}
?>
หากไม่ใช้ฟังก์ชัน mysql_select_db ( ) ก็สามารถใช้ฟังก์ชัน mysql_query ( ) แล้วระบุชื่อ
ฐานข้อมูลในรูปแบบคาสั่ง SQL เรียกใช้คาสั่ง USE แทนได้ มีตัวอย่างดังนี้
ตัวอย่างที่ 15.4 การใช้ฟังก์ชัน mysql_query ( ) แทน ฟังก์ชัน mysql_select_db ( )
<?php
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ : ' . mysql_error ( ));
}
$db_selected = mysql_query ("USE foo;");
if (!$db_selected) {
die ('ไม่สามารถเลือกฐานข้อมูลได้ : ' . mysql_error ( ));
}
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
268 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
แต่การใช้ฟังก์ชัน mysql_query จะเร็วกว่ากว่าการใช้ฟังก์ชัน mysql_select_db ( ) สาหรับ
รายละเอียดของฟังก์ชัน mysql_query ( ) จะกล่าวถึงในหัวข้อต่อไป
การส่งคาสั่ง SQL ไปยังฐานข้อมูล
การส่งคาสั่ง SQL ไปยังโปรแกรมฐานข้อมูล หรือการคิวรี (Query) นั้น ขึ้นกับว่าต้องการทาอะไร
เช่น การอ่านข้อมูล การเพิ่ม หรือเปลี่ยนแปลงข้อมูล เป็นต้น ทั้งนี้ PHP ไม่ได้เป็นผู้ประมวลผลคาสั่ง SQL
เอง แต่เป็นเพียงผู้ส่งคาสั่ง SQL ที่กาหนดขึ้นในรูปแบบสตริงไปยังฐานข้อมูลเท่านั้น โดยฟังก์ชันที่ใช้คิวรี
คือ mysql_query ( ) ซึ่งมีรูปแบบดังนี้
resource mysql_query ( string $query [, resource $link_identifier = NULL ] )
เมื่อ $query
หมายถึง ชื่อฐานข้อมูลที่ต้องการใช้งาน
$link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
ตัวอย่างที่ 15.5 การส่งคาสั่ง SQL ไปยังฐานข้อมูล
<?php
$firstname = 'fred';
$lastname = 'fox';
$query = sprintf ("SELECT firstname, lastname, address, age FROM friends WHERE
firstname='%s' AND lastname='%s'",
mysql_real_escape_string ($firstname),
mysql_real_escape_string ($lastname));
$result = mysql_query ($query);
//<<--------- ตัวอย่างการใช้ฟังก์ชัน
if (!$result) {
$message = 'Invalid query: ' . mysql_error ( ) . "n";
$message .= 'Whole query: ' . $query;
die ($message);
}
while ($row = mysql_fetch_assoc ($result)) {
echo $row ['firstname'];
echo $row ['lastname'];
echo $row ['address'];
echo $row ['age'];
}
mysql_free_result ($result);
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15 การใช้ PHP ร่วมกับ MySQL 269
ฟังก์ชัน mysql_query ( ) จะใช้รูปแบบคาสั่ง SQL ในรูปแบบสตริง ดังนั้นจึงสามารถใช้ร่วมกับ
ฟังก์ชัน sprintf ( ) เพื่อต่อสตริงให้ เป็นประโยคเดียวกันก่อนส่ งเข้าไปประมวลผลในฟังก์ชัน
mysql_query ( ) และผลลัพธ์ที่ได้จากฟังก์ชันนี้จะเป็นอะไรนั้น ขึ้นอยู่กับ คาสั่ง SQL ที่กาหนด
สาหรับผลลัพธ์ที่คืนกลับมาจะขึ้นกับคาสั่ง SQL ที่กาหนด ซึ่งสามารถสรุปได้ดังนี้
 หากเป็นคาสั่งสาหรับการอ่านข้อมูล เช่น SELECT, SHOW, DESCRIBE หากทางานสาเร็จจะ
คืนค่ากลับมาเป็นชุดข้อมูล ผลลัพธ์ที่ได้หรือเรียกว่า result set
 คาสั่ง SQL ในกรณีอื่นๆ เช่น การเปลี่ยนแปลงข้อมูล (INSERT, UPDATE, DELETE) หากการ
ทางานสาเร็จจะคืนค่า true
 หากเกิดข้อผิดพลาดจาการใช้ฟังก์ชัน mysql_query ( ) เช่น เขียนคาสั่ง SQL ผิด จะคืนค่า false
การอ่านข้อมูลผลลัพธ์
หลังจากการใช้ฟังก์ชัน mysql_query ( ) หากคาสั่ง SQL เป็นคาสั่งเกี่ยวกับการค้นหาข้อมูล อาจ
ได้ข้อมูลที่เป็นผลลัพธ์มาจากจานวนใดจานวนหนึ่งเรียกว่า result set โดยข้อมูลนี้จะถูกเก็บไว้ในตัวแปรที่ใช้
รับค่าที่ส่งมาจากฟังก์ชัน mysql_query ( ) สาหรับการอ่านข้อมูลไปใช้มีหลายรูปแบบให้เลือกใช้ดังนี้
ฟังก์ชัน mysql_num_rows ( )
ฟังก์ชันสาหรับนับจานวนแถวผลลัพธ์จะต้องใช้ฟังก์ชัน mysql_num_rows ( ) ซึ่งมีรายละเอียดดังนี้
รูปแบบ
int mysql_num_rows ( resource $result )
เมื่อ $result หมายถึง ตัวแปรที่เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
ตัวอย่างที่ 15.6 การใช้ฟังก์ชัน mysql_num_rows ( )
<?php
$link = mysql_pconnect ("localhost", "mysql_user", "mysql_password");
mysql_select_db ("database", $link);
$result = mysql_query ("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows ($result);
echo "$num_rows Rowsn";
?>
ฟังก์ชัน mysql_result ( )
ฟังก์ชันสาหรับการอ่านผลลัพธ์แบบระบุแถวและคอลัมน์ วิธีนี้เป็นการอ่านข้อมูลโดยใช้ ฟังก์ชันใน
การดึงข้อมูล result set ในคอลัมน์ และลาดับแถวทีระบุโดยมีรูปแบบดังนี้
่
string mysql_result ( resource $result , int $row [, mixed $field = 0 ] )
เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
270 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
$row หมายถึง แถวของข้อมูล
$field หมายถึง ขอบเขตข้อมูลหรือคอลัมน์ของข้อมูล (เป็นตัวเลขหรือสตริงก็ได้)
ตัวอย่างที่ 15.7 การใช้ฟังก์ชัน mysql_result ( )
<?php
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die ('ไม่สามารถเชื่อมต่อ MySQL ได้: ' . mysql_error ( ));
}
if (!mysql_select_db ('database_name')) {
die ('ไม่สามารถเลือกฐานข้อมูลได้: ' . mysql_error ( ));
}
$result = mysql_query ('SELECT name FROM work.employee');
if (!$result) {
die ('ไม่สามารถคิวรีข้อมูล:' . mysql_error ( ));
}
echo mysql_result ($result, 2);
// ผลลัพธ์ คือ ชื่อของพนักงานคนที่ 3
?>
ฟังก์ชัน mysql_fetch_rows ( )
การอ่านผลลัพธ์แบบตามลาดับแถว เป็นการอ่านแบบเลื่อนพอยน์เตอร์ (Pointer) ไปยังตาแหน่ง
ที่ต้องการอ่าน แล้วอ่านข้อมูลที่พอยน์เตอร์ชี้อยู่ ด้วยฟังก์ชัน mysql_fetch_rows ( ) ซึ่งข้อมูลที่อ่านได้
จะอยู่ในรูปแบบของอาร์เรย์ รูปแบบของฟังก์ชันมีดังนี้
รูปแบบ
array mysql_fetch_row ( resource $result )
เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
ตัวอย่างที่ 15.8 การใช้ฟังก์ชัน mysql_fetch_rows ( )
<?php
$result = mysql_query ("SELECT id, email FROM people WHERE id = '42'");
if (!$result) {
echo 'ไม่สามารถคิวรีข้อมูล เนื่องจาก: ' . mysql_error(); exit;
}
$row = mysql_fetch_row ($result);
echo $row [0];
// ค่าของคอลัมน์ id คือ 42
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15 การใช้ PHP ร่วมกับ MySQL 271
echo $row [1];

// ค่าของคอลัมน์ email

?>
ฟังก์ชัน mysql_fetch_array ( )
การอ่านผลลัพธ์แบบอาร์เรย์เป็นการอ่านข้อมูลจาก result set ในรูปแบบ Key/Value โดยที่ใช้ Key
จะเป็นชื่อขอบเขตข้อมูล ในขณะที่ Value จะเป็นข้อมูลโดยใช้ฟังก์ชัน mysql_fetch_array ( ) มีรูปแบบดังนี้
array mysql_fetch_array ( resource $result [, int $result_type ] )
เมื่อ $result
หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
$result_type หมายถึง ก าหนดค่ า อิ น เด็ ก ซ์ ของอาร์ เ รย์ (ผลลั พ ธ์ ที่ เ ก็ บ อยู่ ใ น
หน่วยความจา) สามารถกาหนดได้ 3 ค่า คือ MYSQL_ASSOC
(ใช้ชื่อฟิลด์เป็นอินเด็กซ์), MYSQL_NUM (ใช้ตัวเลขลาดับเป็น
อินเด็กซ์) และ MYSQL_BOTH (ใช้ชื่อฟิลด์และตัวเลขลาดับเป็น
อินเด็กซ์ร่วมกัน) หากไม่กาหนด ตัวแปร $result_type จะมีอิน
เด็กซ์เป็นแบบ MYSQL_BOTH เป็นค่าปริยาย
ตัวอย่างที่ 15.9 การใช้ฟังก์ชัน mysql_fetch_array ( )
<?php
mysql_pconnect ("localhost", "mysql_user", "mysql_password") or die ("ไม่สามารถ
เชื่อมต่อฐานข้อมูลได้: " . mysql_error ( ));
mysql_select_db ("mydb");
$result = mysql_query ("SELECT id, name FROM mytable");
while ($row = mysql_fetch_array ($result, MYSQL_NUM)) {
printf ("ID: %s Name: %s", $row [0], $row [1]);
}
mysql_free_result ($result);
?>
ฟังก์ชัน mysql_fetch_object ( )
เป็นฟังก์ชันที่ใช้สาหรับอ่านข้อมูลแบบออบเจ็กต์ ซึ่งการอ่านแบบนี้เหมาะสาหรับผู้ที่ถนัดในแนว
OOP โดยใช้ฟังก์ชัน mysql_fetch_object ( ) ซึ่งผลลัพธ์ที่ได้จะอยู่ในรูปแบบออบเจ็กต์ ทั้งนี้การอ้างถึง
ขอบเขตข้อมูลต่างๆ จะใช้รูปแบบการอ้างถึงพร็อปเพอร์ตี้ของออบเจ็กต์ จะใช้หลักการเลื่อนพอยน์เตอร์ไป
ยังแถวที่ต้องการอ่านข้อมูล คล้ายกับฟังก์ชันที่ได้ศึกษาผ่านมาแล้ว มีรูปแบบดังนี้
รูปแบบ
object mysql_fetch_object ( resource $result )
เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
272 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
ตัวอย่างที่ 15.10 การใช้ฟังก์ชัน mysql_fetch_object ( )
<?php
mysql_pconnect ("hostname", "user", "password");
mysql_select_db ("mydb");
$result = mysql_query ("select * from mytable");
while ($row = mysql_fetch_object ($result)) {
echo $row->user_id;
echo $row->fullname;
}
mysql_free_result ($result);
?>
การแก้ไขข้อมูลภาษาไทยกลายเป็น "?????...."
สาหรับผู้ที่เกิดปัญหาการแสดงข้อมูลที่เป็นภาษาไทย แล้วกลายเป็น "???...." ให้ลองแก้ปัญหาโดย
การกาหนดเซตอักขระใหม่ให้รองรับภาษาไทย ด้วยการส่งคาสั่งต่อไปนี้ก่อนที่จะอ่านข้อมูล
ตัวอย่างที่ 15.11 การแก้ไขข้อมูลภาษาไทยกลายเป็น "?????...."
mysql_query ("SET CHARCTER SET tis620");
//หรือใช้ mysql_query ("SET NANES tis620");
การตรวจสอบการเปลี่ยนแปลงข้อมูล
ถึงแม้คาสั่ง SQL ที่เกี่ยวกับการเปลี่ยนแปลงข้อมูล เช่น คาสั่ง INSERT , UPDATE , DELETL ,
DROP และ ALTER จะไม่มีข้อมูลผลลัพธ์ส่งกลับมา แต่สามารถตรวจสอบการเปลี่ยนแปลงที่เกิดขึ้นใน
กรณีดังต่อไปนี้
ฟังก์ชัน mysql_affected_rows ( )
เป็นฟังก์ชันที่ใช้สาหรับ การนับจานวนแถวที่เปลี่ยนแปลงข้อมูล โดยถ้าต้องการตรวจสอบว่า มี
ข้อมูลจานวนกี่แถว ที่เกิดการเปลี่ยนแปลงจากการคิวรีครั้งล่าสุด ก็สามารถตรวจสอบได้โดยใช้ ฟังก์ชัน
mysql_affected_rows ( ) ซึ่งมีรูปแบบดังนี้
รูปแบบ
int mysql_affected_rows ([ resource $link_identifier = NULL ] )
เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15 การใช้ PHP ร่วมกับ MySQL 273
ตัวอย่างที่ 15.12 การใช้ฟังก์ชัน mysql_affected_rows ( )
<?php
$link = mysql_connect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ เนื่องจาก: ' . mysql_error ( ));
}
mysql_select_db ('mydb');
mysql_query ('DELETE FROM mytable WHERE id < 10');
printf ("Records deleted: %dn", mysql_affected_rows ( ));
?>
ฟังก์ชัน mysql_insert_id ( )
เป็นฟังก์ชันที่ใช้สาหรับ การตรวจสอบ ID ของข้อมูลที่เพิ่มใหม่ จากการที่ขอบเขตข้อมูล แบบ
"AUTO_INCREMENT" นั้ น ข้อมูลจะถูกเพิ่มต่อจากข้อมูล ล่าสุ ดโดยอัตโนมัติ ซึ่งโดยส่ว นใหญ่จะใช้
AUTO_INCREMENT กับข้อมูลที่เป็นค่า ID เนื่องจากจะมีลักษณะการเรียงลาดับที่ต่อเนื่อ ง และไม่ซ้ากัน
และหลังจากที่เพิ่มข้อมูลลงในตารางแล้ว อาจจาเป็นต้องนาค่า ID นั้นไปใช้งานอื่นต่อไป เช่น นาไปใช้กับ
การประมวลผลอื่นๆ ของ PHP หรือการนาไปเติมกับตารางอื่นๆ ที่เกี่ยวข้องกัน เป็นต้น นี่คือเหตุผลที่
จาเป็นต้องทราบว่า แถวล่าสุดที่ถูกเพิ่มลงในตารางมีค่า ID เป็นเท่าไร โดย PHP มีฟังก์ชันในการ
ตรวจสอบค่า ID นี้ได้คือ ฟังก์ชัน mysql_insert_id ( ) โดยมีรูปแบบดังนี้
รูปแบบ
int mysql_insert_id ([ resource $link_identifier = NULL ] )
เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
ฟังก์ชันนี้จะคืนค่ากลับมาเป็นข้อมูลในขอบเขตข้อมูลที่เป็น AUTO_INCREMENT ของแถวล่าสุด
ที่ถูกเพิ่มเข้าไปด้วยคาสั่ง INSERT หรือ REPLACE เช่น สมมติจากเดิมข้อมูลในตารางแรก และขอบเขต
ข้อมูล id เป็นแบบ AUTO_INCREMENT
ตัวอย่างที่ 15.13 การใช้ฟังก์ชัน mysql_insert_id ( )
<?php
$link = mysql_connect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูล เนื่องจาก: ' . mysql_error ( ));
}
mysql_select_db (' mydb');
mysql_query ("INSERT INTO mytable (product) values ('kossu')");
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
274 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
printf ("Last inserted record has id %dn", mysql_insert_id ( ));
?>
แต่อย่างไรก็ตาม ต้องเรียกใช้ฟังก์ชัน mysql_insert_id ( ) ทันทีหลังจากเพิ่มข้อมูล ด้วยคาสั่ง
INSERT หรือคาสั่ง REPLACE ทั้งนี้เพื่อให้ได้ค่า ID ของแถวล่าสุดที่ถูกเพิ่มเข้าใหม่อย่างแท้จริง
ฟังก์ชัน mysql_data_seek ( )
เป็นฟังก์ชันที่ใช้สาหรับระบุตาแหน่งของแถวข้อมูลที่ต้องการให้เริ่มต้น นับแถวแรกเป็น 0 โดยมี
รูปแบบดังนี้
รูปแบบ
bool mysql_data_seek ( resource $result , int $row_number )
เมื่อ $result
หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
$row_number หมายถึง ค่าของแถวที่ต้องการเริ่มต้น
ตัวอย่างที่ 15.14 การใช้ฟังก์ชัน mysql_data_seek ( )
<?php
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ เนื่องจาก: ' . mysql_error());
}
$db_selected = mysql_select_db ('sample_db');
if (!$db_selected) {
die('ไม่สามารถเลือกฐานข้อมูลได้ เนื่องจาก: ' . mysql_error());
}
$query = 'SELECT last_name, first_name FROM friends';
$result = mysql_query ($query);
if (!$result) {
die('การคิวรีเกิดข้อผิดพลาด เนื่องจาก: ' . mysql_error ( ));
}
/* เรียกดูข้อมูลในตาแหน่งลาดับแบบย้อนกลับ */
for ($i = mysql_num_rows ($result) - 1; $i >= 0; $i--) {
if (!mysql_data_seek ($result, $i)) {
echo "ไม่สามารถระบุตาแหน่งแถวข้อมูลแถวที่ $i: " . mysql_error ( ) . "<br/>";
continue;
}
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15 การใช้ PHP ร่วมกับ MySQL 275
if (!($row = mysql_fetch_assoc ($result))) {
continue;
}
echo $row ['last_name'] . ' ' . $row ['first_name'] . "<br />n";
}
mysql_free_result ($result);
?>
การตรวจสอบข้อผิดพลาดระหว่างการทางานร่วมกับ MySQL
เมื่อเกิดข้อผิดพลาดในการทางาน MySQL ขึ้น หากต้องการทราบว่าข้อผิดพลาดนั้นมาจากสาเหตุ
อะไร ก็สามารถตรวจสอบได้โดยใช้ฟังก์ชัน mysql_error ( ) ซึ่งมีรูปแบบดังนี้
รูปแบบ
string mysql_error ([ resource $link_identifier = NULL ] )
เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
ในทางปฏิบัติแล้ว มักจะใช้ ฟังก์ชันนี้ร่วมกับขั้นตอนที่คาดว่า อาจเกิดข้อผิดพลาดขึ้น แล้วอ่าน
ข้อผิดพลาดนั้นมาแสดง
การตรวจสอบชื่อฐานข้อมูลและตาราง
บางครั้งต้องการทราบว่า ภายในฐานข้อมูล MySQL นั้นประกอบด้วยฐานข้อมูล หรือตารางชื่อ
อะไรบ้าง ก็จะมีการตรวจสอบดังนี้
การตรวจสอบชื่อฐานข้อมูล
ชื่อฐานข้อมูลที่ใช้ตรวจสอบได้ต้องเป็นชื่อของฐานข้อมูลที่เป็นผู้สร้างขึ้นมา หรือมีสิทธิ์ในการใช้
งาน โดยการตรวจสอบจะใช้ ฟังก์ชัน mysql_list_dbs ( ) ฟังก์ชันนี้จะคืนค่ากลับคืนมาเป็น result set
โดยที่ข้อมูลในแต่ละแถวก็คือ ชื่อฐานข้อมูลที่อ่านได้ มีรูปแบบดังนี้
รูปแบบ
resource mysql_list_dbs ([ resource $link_identifier = NULL ] )
เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
จากการทีฟังก์ชันนี้คืนมาเป็น result set หากต้องการจะอ่านรายชื่อฐานข้อมูลเหล่านี้ จะต้องใช้
่
ฟังก์ชันที่ใช้ในการอ่านข้อมูลจาก result set เช่น mysql_fetch_row ( ) หรือ mysql_fetch_array ( )
หรือ mysql_fetch_object ( ) หรือ mysql_fetch_assoc ( ) เป็นต้น มีตัวอย่างดังนี้

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
276 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
ตัวอย่างที่ 15.15 การตรวจสอบชื่อฐานข้อมูล
<?php
// ตัวอย่างการใช้งานแบบทั่วไปถ้าไปใช้ฟังก์ชัน mysql_list_dbs ( )
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
$res = mysql_query ("SHOW DATABASES");
while ($row = mysql_fetch_assoc ($res)) {
echo $row ['Database'] . "<br/>";
}
// ตัวอย่างการใช้งานแบบทั่วไปถ้าไปใช้ฟังก์ชัน mysql_list_dbs ( ) สาหรับ PHP 5.4.0
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
$db_list = mysql_list_dbs ($link);
while ($row = mysql_fetch_object ($db_list)) {
echo $row->Database . "<br/>";
}
?>
การตรวจสอบชื่อตารางที่มีอยู่ในฐานข้อมูล
ถ้าต้องการทราบว่า ภายในฐานข้อมูลนั้นมีตารางชื่ออะไรบ้าง ก็สามารถตรวจสอบด้วยฟังก์ชัน
mysql_list_tables ( ) มีรูปแบบดังนี้
รูปแบบ
resource mysql_list_tables ( string $database [, resource $link_identifier = NULL ] )
เมื่อ $database
หมายถึง ชื่อของฐานข้อมูล ต้องกาหนดในแบบสตริงผลลัพธ์ที่ได้จาก
ฟังก์ชันนี้จะอยู่ในรูปแบบของ result set
$link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
ตัวอย่างที่ 15.16 การตรวจสอบชื่อตารางที่มีอยู่ในฐานข้อมูล
<?php
$dbname = 'mysql_dbname';
if (!mysql_pconnect ('mysql_host', 'mysql_user', 'mysql_password')) {
echo 'ไม่สามารถเชื่อต่อกับฐานข้อมูล MySQL ได้ เนื่องจาก:' . mysql_error ( );
exit;
}
$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query ($sql);
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15 การใช้ PHP ร่วมกับ MySQL 277
if (!$result) {
echo "เกิดข้อผิดพลาด ไม่พบข้อมูลตารางในฐานข้อมูล $dbname ";
exit;
}
while ($row = mysql_fetch_row ($result)) {
echo "Table: {$row [0]} <br/>";
}
mysql_free_result ($result);
?>
การตรวจสอบโครงสร้างของขอบเขตข้อมูล
การตรวจสอบโครงสร้างของขอบเขตข้อมูล เป็นการอ่านรายละเอียดทั้งหมดเกี่ยวกับ ขอบเขต
ข้อมูล ชนิดข้อมูล และแอททริบิวต์ต่างๆ สาหรับใน PHP มีฟังก์ชันที่ใช้ในการตรวจสอบองค์ประกอบของ
ขอบเขตข้อมูล ดังต่อไปนี้
การนับจานวนขอบเขตข้อมูล
การนับจานวนฟิวด์จะนับจานวนจากขอบเขตข้อมูลที่มีอยู่ใน result set ที่กาหนด เนื่องจากเป็น
การนับจานวนขอบเขตข้อมูลที่มีอยู่ใน $result ที่ได้จากการใช้ฟังก์ชัน mysql_query ( ) กาหนดให้อ่าน
ข้อมูลจากขอบเขตข้อมูล ใดบ้าง ดังนั้นจานวนขอบเขตข้อมูล ที่นับได้ อาจแตกต่างจานวนจริงที่มีอยู่ใน
ตารางมีรูปแบบดังนี้
รูปแบบ
int mysql_num_fields ( resource $result )
เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
ตัวอย่างที่ 15.17 การนับจานวนขอบเขตข้อมูล
<?php
$result = mysql_query ("SELECT id, email FROM people WHERE id = '42'");
if (!$result) {
echo 'ไม่สามารถคิวรีข้อมูลได้ เนื่องจาก: ' . mysql_error ( );
exit;
}
/* จะมีการคืนค่า 2 ขอบเขตข้อมูล ประกอบด้วย id, email ที่ได้จากฟังก์ชัน mysql_query ( )*/
echo mysql_num_fields ($result);
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
278 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
การตรวจสอบชื่อขอบเขตข้อมูล
การตรวจสอบชื่อขอบเขตข้อมูลในตาราง จะมีฟังก์ชันดังนี้
 ฟังก์ชัน mysql_list_fields ( )
เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบชื่อขอบเขตข้อมูลในตารางของฐานข้อมูลที่กาหนด มี
รูปแบบการใช้งานดังนี้
รูปแบบ
resource mysql_list_fields ( string $database_name , string $table_name
[, resource $link_identifier = NULL ] )
เมื่อ $database_name หมายถึง ชื่อฐานข้อมูล
$table_name หมายถึง ชื่อตาราง
$link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier
ตัวอย่างที่ 15.18 การใช้ฟังก์ชัน mysql_list_fields ( )
<?php
$result = mysql_query ("SHOW COLUMNS FROM sometable");
if (!$result) {
echo 'ไม่สามารถคิวรีข้อมูลได้ เนื่องจาก: ' . mysql_error();
exit;
}
if (mysql_list_fields ($result) > 0) {
while ($row = mysql_fetch_assoc ($result)) {
print_r ($row);
}
}
?>
 ฟังก์ชัน mysql_field_name ( )
เป็นฟังก์ชันที่ใช้สาหรั บตรวจสอบชื่อขอบเขตข้อมูลในตารางของฐานข้อมูลที่กาหนด
เช่นเดียวกับฟังก์ชัน mysql_list_fields ( ) มีรูปแบบการใช้งานดังนี้
รูปแบบ
string mysql_field_name ( resource $result )
เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 15 การใช้ PHP ร่วมกับ MySQL 279
ตัวอย่างที่ 15.19 การใช้ฟังก์ชัน mysql_field_name ( )
<?php /* ตัวอย่าง ตารางประกอบด้วย 3 ขอบเขตข้อมูล ดังนี้:
* user_id , username และ password */
$link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die ('ไม่สามารถเชื่อมต่อกับ MySQL server เนื่องจาก: ' . mysql_error ( ));
}
$dbname = 'mydb';
$db_selected = mysql_select_db ($dbname, $link);
if (!$db_selected) {
die ("ไม่สามารถติดต่อกับฐานข้อมูล $dbname ได้เนื่องจาก: " . mysql_error ( ));
}
$res = mysql_query ('select * from users', $link);
echo mysql_field_name ($res, 0) . "<br/>";
echo mysql_field_name ($res, 2);
?>

ผลลัพธ์
user_id
password

การตรวจสอบความยาวของขอบเขตข้อมูล
การตรวจสอบความยาวของขอบเขตข้อมูลจะใช้ฟังก์ชัน mysql_fields_len ( ) มีรูปแบบดังนี้
รูปแบบ
int mysql_field_len ( resource $result )

เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
ตัวอย่างที่ 15.20 การตรวจสอบความยาวของขอบเขตข้อมูล
<?php
$result = mysql_query ("SELECT id,email FROM people WHERE id = '42'");
if (!$result) {
echo 'ไม่สามารถคิวรีข้อมูลได้ เนื่องจาก: ' . mysql_error ( ); exit;
}
$length = mysql_field_len ($result, 0); // ตรวจสอบความยาวของขอบเขตข้อมูล "id"
echo $length;
?>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
280 บทที่ 15 การใช้ PHP ร่วมกับ MySQL
การตรวจสอบชนิดข้อมูลของขอบเขตข้อมูล
การตรวจสอบชนิดข้อมูลของขอบเขตข้อมูลด้วยฟังก์ชัน mysql_fields_type ( ) มีรูปแบบดังนี้
รูปแบบ
string mysql_field_type ( resource $result )
เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( )
ตัวอย่างที่ 15.21 การตรวจสอบชนิดข้อมูลของขอบเขตข้อมูล
<?php
mysql_pconnect ("localhost", "mysql_username", "mysql_password");
mysql_select_db ("mysql");
$result = mysql_query ("SELECT * FROM func");
$fields = mysql_num_fields ($result);
$rows = mysql_num_rows ($result);
$table = mysql_field_table ($result, 0);
echo "ตาราง '" . $table . "' มี " . $fields . " ขอบเขตข้อมูล จานวน " . $rows . " ระเบียนbr/>";
echo "โดยตารางประกอบด้วยขอบเขตข้อมูลดังนี้:<br/>";
for ($i=0; $i < $fields; $i++) {
$type = mysql_field_type ($result, $i);
$name = mysql_field_name ($result, $i);
$len = mysql_field_len ($result, $i);
$flags = mysql_field_flags ($result, $i);
echo $type . " " . $name . " " . $len . " " . $flags . "<br>";
}
mysql_free_result ($result);
?>
ผลลัพธ์
ตาราง 'func' มี 4 ขอบเขตข้อมูล จานวน 1 ระเบียน
โดยตารางประกอบด้วยขอบเขตข้อมูลดังนี้:
string name 64 not_null primary_key binary
int ret 1 not_null
string dl 128 not_null
string type 9 not_null enum

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16
กรณีศึกษา: ระบบจัดการสมาชิก
กรณีศึกษา: ระบบจัดการสมาชิก ซึ่งเป็นระบบที่ไม่ยุ่งยากและซ้าซ้อนมากนัก เพื่อเป็นกรณีศึกษา
และง่ายส้ าหรั บ ผู้ เริ่ มต้น พัฒ นาระบบ ในที่นีจะกล่ าวถึง วิธีการ เพิ่ม แก้ไข และลบ ข้อมูล สมาชิก มี
รายละเอียดดังนี
โปรเซสการทางานของระบบจัดการสมาชิก
0
เข้าสู่ระบบ
(Login Page)
1
หน้ารายการหลัก
(Main Page)
1.1
กลุ่มสมาชิก
(Cat Member)
1.1.1
เพิ่มกลุ่มสมาชิก
(Add Member)

1.1.2
ลบ/แก้ไข กลุ่ม
(Edit/Del Member)

1.2
ข้อมูลสมาชิก
(Member)
1.2.1
เพิ่มสมาชิก
(Add Member)

1.2.2
ลบ/แก้ไข สมาชิก
(Edit/Del Member)

อธิบายการทางานของระบบ
Level 0 Login Page ใช้ส้าหรับตรวจสอบ username และ password เพื่อเข้าสู่ระบบ
Level 1 Main Page หน้ารายการหลัก คือ ล้าดับถัดไปหลังจากที่ login ถูกต้อง เป็นหน้าเว็บ
เพจเริ่มต้นส้าหรับจัดการข้อมูลภายในระบบ แบ่งเป็น 2 ส่วนย่อย คือ ส่วนที่ใช้ในการ จัดการกับ กลุ่ม
สมาชิก และส่วนที่ใช้ในการจัดการกับข้อมูลสมาชิก
Level 1.1 กลุ่มสมาชิก ใช้ส้าหรับเลือกดู รายการกลุ่มสมาชิกทังหมด แบ่งออกเป็น 2 ส่วนย่อย
ประกอบด้วย 1.1.1) เพิ่มกลุ่มสมาชิกใหม่ และ 1.1.2) ลบ/แก้ไข กลุ่มสมาชิก
Level 1.2 ข้อมูลสมาชิก ใช้ส้าหรับ เลือกดู รายการสมาชิกทังหมด แบ่งออกเป็น 2 ส่วยย่อย
ประกอบด้วย 1.2.1) เพิ่มข้อมูลสมาชิกใหม่ และ 1.2.2) ลบ/แก้ไข ข้อมูลสมาชิกเดิม
282 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
สร้างฐานข้อมูลและตาราง
ก้าหนดให้สร้างฐานข้อมูลชื่อ memberDB และสร้างตาราง 2 ตาราง มีรายละเอียดดังนี
ตารางที่ 16.1 ตารางข้อมูล tblcatmember
ขอบเขต
ชนิด
ว่างเปล่า
ค่าปริยาย
คีย์
หมายเหตุ
ข้อมูล
(null)
catid
int(5)
no
PK
auto_increment
catname
varchar(50)
no
catactive
int(1)
no
1
ค้าสั่ง SQL ส้าหรับสร้างตาราง tblcatmember
CREATE TABLE tblcatmember ( catid INT( 5 ) NOT NULL AUTO_INCREMENT , catname
VARCHAR( 50 ) NOT NULL , catactive INT( 1 ) DEFAULT '1' NOT NULL ,
PRIMARY KEY ( catid ) );
ตารางที่ 16.2 ตารางข้อมูล tblmember
ขอบเขต
ชนิด
ว่างเปล่า
ค่าปริยาย
ข้อมูล
(null)
catid
int(5)
no
catname
varchar(50)
no
catactive
int(1)
no
1
ค้าสั่ง SQL ส้าหรับสร้างตาราง tblmember
CREATE TABLE tblmember (
memid INT( 5 ) NOT NULL AUTO_INCREMENT ,
mem_fullname VARCHAR( 50 ) NOT NULL ,
mem_email VARCHAR( 50 ) NOT NULL ,
mem_username VARCHAR( 30 ) NOT NULL ,
mem_password VARCHAR( 50 ) NOT NULL ,
catid INT( 5 ) NOT NULL ,
PRIMARY KEY ( memid ));
รายละเอียดของไฟล์ที่เกี่ยวข้อง
ชื่อไฟล์
style.css
admin_secure.php
function_validate.php
index.php
chklogin.php
admin_main.php

คีย์

หมายเหตุ

PK

auto_increment

คาอธิบาย
เก็บ css ส้าหรับจัดการกับหน้าเว็บเพจ
เก็บ username และ password ส้าหรับ admin
ระบบ
ฟังก์ชัน Library ที่เกี่ยวข้องทังหมด
เว็บเพจหน้าแรก ใช้ส้าหรับ login เข้าสู่ระบบ
ใช้ส้าหรับตรวจสอบการ login
หน้าเว็บเพจหลัก (Main Page)

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL

เข้าสู่
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 283
ชื่อไฟล์

คาอธิบาย
config.php
ใช้ส้าหรับเก็บตัวแปรของเว็บเพจทังหมด
admin_menu.php
ใช้แสดงผลเมนูหลัก
admin_footer.php
ใช้แสดงส่วนล่างสุดของระบบ (Page Footer)
admin_logout.php
เว็บเพจส้าหรับ logout ออกจากระบบ
admin_catmember.php
เว็บเพจส้าหรับเพิ่มกลุ่มสมาชิกใหม่
admin_catmemberedit.php
เว็บเพจส้าหรับแสดงรายการกลุ่มสมาชิก
admin_catmembereditsave.php เว็บเพจส้าหรับแก้ไขกลุ่มสมาชิก
admin_member.php
เว็บเพจส้าหรับเพิ่มสมาชิกใหม่
admin_memberedit.php
เว็บเพจส้าหรับแสดงข้อมูลสมาชิกทังหมด
admin_membereditsave.php
เว็บเพจส้าหรับแก้ไขสมาชิก
มีรายละเอียดค้าสั่งของไฟล์ทังหมด ดังต่อไปนี
style.css
B {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10pt}
table {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10pt ; color: #333333;}
.Bfont {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 12pt ; color: #666666; }
.sfont {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 8pt ; }
A {COLOR: #000099; FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10pt; TEXT-DECORATION:
none}
A:visited {COLOR: #000099; FONT-SIZE: 10pt; TEXT-DECORATION: none; MS: AngsanaUPC}
a:visited:hover {font-family: MS Sans Serif; font-size: 10px; color: #000000;}
A:hover {COLOR:#FF0000; FONT-FAMILY: MS Sans Serif,AngsanaUPC; FONT-SIZE: 10pt;
text-decoration: none ; }
.borderstyle {border: 1px dotted #d7eadf;}
.gradian_up
{filter:progid:dximagetransform.microsoft.gradient(gradienttype=0,startcolorstr=#FCFBFF,,e
ndcolorstr=#D7D7D7);}
admin_secure.php
<?php
$admin_user="admin";
$admin_pass="123";
?>
function_validate.php
<?php
function connectDB ( ) {
// ฟังก์ชันส้าหรับเชื่อมต่อกับฐานข้อมูล
global $host,$username,$password,$connect,$dberr,$db,$useerr;
// Connect mysql
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
284 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
if (@$connect = mysql_connect($host, $username, $password)) {
if (@!mysql_select_db($db, $connect)) {
exit ($useerr);
}
} else {
exit ($dberr);
}
return false;
}
function closeDB ( ) { // ฟังก์ชันส้าหรับยกเลิกการเชื่อมต่อกับฐานข้อมูล
global $connect;
return mysql_close($connect);
return false;
}
function listcatmember ($sql,$var="") { // ฟังชั่นที่ใช้ในการแสดง list ข้อมูลใน combo box
connectDB ( );
// เรียกใช้ฟังก์ชันเชื่อมต่อฐานข้อมูล
if (!@$result=mysql_query ($sql)) {
$showlist= "<option>ไม่สามารถแสดงรายการได้ </option>";
} else {
//========== หากแสดงข้อมูลเรียบร้อย =============
while ($dbarr=mysql_fetch_array ($result)) {
$showlist
.="<option
value=".$dbarr[0]."
.chkselected($dbarr[0],$var).">".$dbarr[1]."</option>n";
}
} // จบค้าสั่ง if
closeDB ( );
// เรียกใช้ฟังก์ชันยกเลิกการเชื่อมต่อกับฐานข้อมูล
return $showlist;
// return ค่า showlist

"

}
// function chkselected ท้าหน้าที่ตรวจเช็คข้อมูลประเภท Control Select 2 ข้อมูลว่า ได้ถูกเลือกอยู่
// หรือเปล่าโดยเปรียบเทียบค่าที่อยู่ในฐานข้อมูลกับค่าที่จะแสดงโดยอัตโนมัติ
// วิธีการใช้งานคือchkselected (ค่าที่อยู่ในฐานข้อมูล,ค่าของตัวมันเอง);
function chkselected ($var1,$var2) {
if ($var1 == $var2){
$chkselected = "Selected";
} else {
$chkselected = "";
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 285
}
return $chkselected;
}
?>
index.php
<?php
session_start ( );
session_unregister("session_user");
echo $_SESSION["err"];
?>
<html>
<head>
<title>ระบบจัดการข้อมูลสมาชิก</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<form action="chklogin.php" method="post">
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr bgcolor="#CCCCCC">
<td colspan="2">กรอกข้อมูล</td>
</tr>
<tr bgcolor="#E5E5E5">
<td width="25%">username</td>
<td width="75%"><input name="txtuser" type="text" id="txtuser"></td>
</tr>
<tr bgcolor="#E5E5E5">
<td>password</td>
<td><input name="txtpass" type="text" id="txtpass"></td>
</tr>
<tr bgcolor="#E5E5E5">
<td> </td>
<td><input type="submit" name="cmdsubmit" value="Submit">
<input type="reset" name="cmdreset" value="Reset"></td>
</tr>
</table>
</form>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
286 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
</body>
</html>
chklogin.php
<?php
session_start();
include "includes/admin_secure.php";
$submit=$_POST["cmdsubmit"];

// น้าเข้าไฟล์ admin_secure.php

if (isset($submit)) { // ตรวจสอบตัวแปร $submin ว่าถูกส่งมาหรือไม่
$txtuser=$_POST["txtuser"];
$txtpass=$_POST["txtpass"];
if ($txtuser==$admin_user and $txtpass==$admin_pass) {
session_unregister("err");
$_SESSION["session_user"] = $txtuser;
header("Location:admin_main.php");
} else {
$err = "<font color="#ff0000">Login ไม่ ถูกต้อง กรุณา login ใหม่</font>";
$_SESSION["err"] = $err ; // สร้างตัวแปร session err ไว้ส้าหรับ เก็บค่า err
header("Location:index.php");
}
}
?>
config.php
<?php
session_start ( );
$host = "localhost" ;
$username = "parinya" ;
// ชื่อผู้ใช้ส้าหรับเชื่อมต่อฐานข้อมูล
$password = "parinya123456" ;
// รหัสผ่านส้าหรับเชื่อมต่อกับฐานข้อมูล
$db = " memberDB " ;
// ชื่อฐานข้อมูลที่จะเชื่อมต่อ
// ตัวแปรส้าหรับเก็บข้อผิดพลาดต่างๆ ส้าหรับแจ้งกลับ
$dberr ="<center>เกิด ความผิ ดพลาดไม่ ส ามารถเชื่ อมต่อ กับฐานข้อมู ล บนเซิร์ฟเวอร์ นี
</center>";
$useerr = "เรียกใช้ ฐานข้อมูลไม่ส้าเร็จ";
$inserterr = "เกิดข้อผิดพลาดในการเพิ่มข้อมูล กรุณาตรวจสอบ ข้อมูลอีกครังว่าถูกต้องหรือไม่";
$selecterr = "ไม่สามารถ น้าข้อมูลออกมาจากฐานข้อมู ลได้ เนื่องจากปัญหาเกี่ยวกับ ค้าสั่ง
query กรุณาตรวจสอบค้าสั่งอีกครัง";

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 287
$updateerr = "เกิดข้อผิดพลาดในการแก้ไขข้อมูล กรุณาตรวจสอบ ข้อมูลอีกครังว่าถู กต้อง
หรือไม่";
$realdate=date("Y-m-j H:i:s");
include "includes/function_validate.php";

// น้าเข้าไฟล์ function

?>
admin_menu.php
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><div align="center"><strong><font size="5">ยินดีต้อนรับคุณ
<?php echo $_SESSION["session_user"]; ?>
เข้าสู่ระบบ<br>Admin Back office</font></strong></div></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">
<div align="center"><a href="admin_logout.php">[Log out]</a></div></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">
<div align="center">
<a href="admin_main.php">กลับหน้าหลัก</a>
<a href="admin_catmemberedit.php">จัดการหมวดหมู่สมาชิก</a>
<a href="admin_memberedit.php">จัดการสมาชิก</a>
</div></td>
</tr>
</table>
<p></p>
admin_footer.php
<p></p>
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#EAEAEA"><div align="center" style="font-size:11px;">
<font color="#666666">กรณีศึกษา: ระบบจัดการสมาชิก<br>Copyright © 2013 By SRU
Com-SCI, All rights reserved.</font></div></td>
</tr>
</table>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
288 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
admin_logout.php
<?php
// ท้าลายตัวแปร session ทังหมด
session_start ( );
session_destroy ( );
?>
<head><title>ขอบคุณมากครับ</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874">
<link rel="stylesheet" type="text/css" href="css/style.css">
<meta http-equiv="refresh" content="3;URL=index.php">
</head>
<body class="gradian_up">
<table width="300" height="100" border="0" align="center" cellpadding="0"
cellspacing="1" bgcolor="#CCCCCC">
<tr><td colspan="3" bgcolor="#EAEAEA">
<table width="300" border="0" cellspacing="2" cellpadding="0">
<tr><td height="30">
<div align="center">
<font color="#000000"><strong>ออกจากระบบเรียบร้อย</strong></font>
</div></td></tr>
<tr><td height="30">
<div align="center">
<font color="#000000"><strong>โปรดรอซัก 3 วินาที </strong></font>
</div></td></tr>
<tr><td height="30">
<div align="center">
<font color="#000000"><strong>จะกลับไปหน้า homepage</strong></font>
</div></td></tr>
</table></td>
</tr>
</table>
</body>
admin_catmember.php
<?php
include "config.php";
// ตรวจสอบการ login
if (!isset($_SESSION["session_user"])) header("Location:index.php");
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 289
// =========================
$cmdsubmit = $_POST["cmdsubmit"];
if ($cmdsubmit<>"") {
// ตรวจสอบการกดปุ่ม submit
$txtcat=$_POST["txtcat"];
// น้าค่าผ่านฟอร์ม มาเก็บเข้าตัวแปร
$cboactive=$_POST["cboactive"];
connectDB ( );
// เรียกใช้ฟังก์ชันเชื่อมต่อฐานข้อมูล
$sqlinsert = "insert into tblcatmember (catname,catactive) values
('".$txtcat."','".$cboactive."')";
if (@$result = mysql_query ($sqlinsert)) { // ตรวจสอบว่า ค้าสั่ง sql command
$response_text ="<font color=#FF0000>เพิ่มข้อมูลเรียบร้อย</font>";
} else {
$response_text ="<font color=#000099>ติดปัญหาในการเพิ่มข้อมูล</font>";
}
closeDB ( ); // เรียกใช้ฟังก์ชันยกเลิกการเชื่อมต่อฐานข้อมูล
}
?>
<html>
<head>
<title>รายละเอียดข้อมูลกลุ่มสมาชิก</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<?php
include "admin_menu.php";
?>
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#EAEAEA">
<div align="center"><strong>
<a href="admin_catmember.php">เพิ่มกลุ่มสมาชิกใหม่</a>
<a href="admin_catmemberedit.php">รายชื่อกลุ่มสมาชิก </a>
</strong></div></td>
</tr>
</table>
<?php
echo $response_text; // ส่วนส้าหรับ แสดงข้อความ
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
290 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
<table width="300" border="0" align="center" cellpadding="2" cellspacing="1"
bgcolor="#CCCCCC">
<tr><td colspan="2"><strong>กลุ่มสมาชิก</strong></td></tr>
<tr>
<td width="163" bgcolor="#EAEAEA">ชื่อกลุ่มสมาชิก</td>
<td width="326" bgcolor="#EAEAEA"><input name="txtcat" type="text"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">สถานะ</td>
<td bgcolor="#EAEAEA">
<select name="cboactive">
<option value="1"> แสดง </option>
<option value="0"> ซ่อน </option>
</select></td>
</tr>
<tr>
<td bgcolor="#EAEAEA"> </td>
<td bgcolor="#EAEAEA">
<input name="cmdsubmit" type="submit" value="Submit">
<input name="cmdreset" type="reset" value="Reset"></td>
</tr>
</table>
</form>
<?php
include "admin_footer.php";
?>
</body>
</html>
admin_catmemberedit.php
<?php
include "config.php";
// ตรวจสอบการ login
if (!isset ($_SESSION["session_user"])) header ("Location:index.php");
// =========================
// รับค่าตัวแปรแบบ get
$delid=$_GET["delid"];
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 291
// ============================
// หาก มีการกดปุ่ม ลบข้อมูล =======
if ($delid<>"") {
connectDB ( );
$sqldel="delete from tblcatmember where catid=".$delid;
if (!@$resultdel=mysql_query($sqldel)) {
exit("ไม่สามารถลบข้อมูลได้");
} else {
$response_text = "<font color=#FF0000>ลบข้อมูลเรียบร้อย</font>";
}
closeDB ( );
}
?>
<html>
<head>
<title>ข้อมูลกลุ่มสมาชิก</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<link rel="stylesheet" type="text/css" href="css/style.css">
<script language="javascript">
<!-function conf (txt) {
if (confirm (txt)) {
return true;
}
return false;
}
//-->
</script>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<?php
include "admin_menu.php";
?>
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#EAEAEA">
<div align="center"><strong>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
292 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
<a href="admin_catmember.php">เพิ่มกลุ่มสมาชิกใหม่</a>
<a href="admin_catmemberedit.php">รายชื่อกลุ่มสมาชิก </a>
</strong></div></td>
</tr>
</table>
<br>
<?php
echo $response_text;
// แสดงข้อมูลตอบกลับ
?>
<table width="500" border="0" align="center" cellpadding="2" cellspacing="1"
bgcolor="#CCCCCC">
<tr>
<td width="30"> <div align="center">
<strong>ล้าดับ</strong></div></td>
<td width="255"> <div align="center">
<strong>ชื่อกลุ่มสมาชิก</strong></div></td>
<td width="50"> </td>
<td width="50"> </td>
</tr>
<?php
connectDB();
// ดึงข้อมูลจากฐานข้อมูลมาแสดงผล
$sqlselect="select * from tblcatmember";
if (!@$result = mysql_query($sqlselect)) {
exit("ไม่สามารถเลือกข้อมูลได้");
}
$count=1;
while ($dbarr=mysql_fetch_array($result)) {
?>
<tr>
<td width="30" bgcolor="#EAEAEA"><div align="center">
<?php echo $count;?>
</div></td>
<td bgcolor="#EAEAEA"><?php echo $dbarr["catname"];?></td>
<td width="50" bgcolor="#EAEAEA"><div align="center">
<a href="<?php echo "admin_catmembereditsave.php?editid=".$dbarr["catid"];?>">แก้ไข
</a></div></td>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 293
<td width="50" bgcolor="#EAEAEA"><div align="center"><a href="<?php echo
$_SERVER["PHP_SELF"]."?delid=".$dbarr["catid"];?>">ลบ</a></div></td>
</tr>
<?php
$count++;
}
// ปีกกาปิดของฟังก์ชัน while เพื่อวนรอบดึงข้อมูลขึนมาแสดงผล
closeDB();
?>
</table>
<?php
include "admin_footer.php";
?>
</body>
</html>
admin_catmembereditsave.php
<?php
include "config.php";
// ตรวจสอบการ login
if (!isset($_SESSION["session_user"])) header("Location:index.php");
$cmdsubmit = $_POST["cmdsubmit"];
$catid=$_GET["editid"];
// ====================================
connectDB();
if ($cmdsubmit<>"") { // ตรวจสอบการกดปุ่ม submit
// น้าค่าผ่านฟอร์ม มาเก็บเข้าตัวแปร
$catid=$_POST["catid"];
$txtcat=$_POST["txtcat"];
$cboactive=$_POST["cboactive"];
// ====================================
$sqlupdate = "update tblcatmember set ".
"catname='".$txtcat."' , ".
"catactive='".$cboactive."' ".
"where catid=".$catid;
if (!@$result = mysql_query($sqlupdate)) {
$response_text ="<font color=#000099>ติดปัญหาในการแก้ไขข้อมูล</font>";
}else{
$response_text ="<font color=#FF0000>แก้ไขข้อมูลเรียบร้อย</font>";
}
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
294 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
}
// แสดงข้อมูล ที่ต้องการแก้ไข
$sql="select * from tblcatmember where catid=".$catid;
if (!@$result=mysql_query($sql)) {
exit("ไม่สามารถแสดงข้อมูลได้");
}
$dbarr=mysql_fetch_array ($result);
closeDB();
?>
<html>
<head>
<title>แก้ไขกลุ่มสมาชิก</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<?php
include "admin_menu.php";
?>
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#EAEAEA"><div align="center"><strong>
<a href="admin_catmember.php">เพิ่มกลุ่มสมาชิกใหม่</a>
<a href="admin_catmemberedit.php">รายชื่อกลุ่มสมาชิก </a>
</strong></div></td>
</tr>
</table>
<?php
echo $response_text; // ส่วนส้าหรับ แสดงข้อความ
?>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
<table width="300" border="0" align="center" cellpadding="2" cellspacing="1"
bgcolor="#CCCCCC">
<tr>
<td colspan="2"><strong>แก้ไขกลุ่มสมาชิก</strong></td>
</tr>
<tr>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 295
<td width="163" bgcolor="#EAEAEA">ชื่อกลุ่มสมาชิก</td>
<td width="326" bgcolor="#EAEAEA">
<input name="txtcat" type="text" value="
<?php
echo $dbarr["catname"];
?>"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">สถานะ</td>
<td bgcolor="#EAEAEA">
<select name="cboactive">
<option value="1" <?php if ($dbarr["catactive"]=="1") echo "selected" ;?>> แสดง </option>
<option value="0" <?php if ($dbarr["catactive"]=="0") echo "selected" ;?>> ซ่อน </option>
</select></td>
</tr>
<tr>
<td bgcolor="#EAEAEA"> </td>
<td bgcolor="#EAEAEA">
<input type="hidden" name="catid" value="<?php echo $dbarr["catid"];?>">
<input name="cmdsubmit" type="submit" value="Submit">
<input name="cmdreset" type="reset" value="Reset"></td>
</tr>
</table>
</form>
<?php
include "admin_footer.php";
?>
</body>
</html>
admin_member.php
<?php
include "config.php";
// ตรวจสอบการ login
if (!isset($_SESSION["session_user"])) header("Location:index.php");
// =========================
// รับค่าจากฟอร์ม มาเก็บไว้ที่ตัวแปร
$submit = $_POST["cmdsubmit"];
$catmemid=$_POST["cbocatmem"];
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
296 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
$txtname=$_POST["txtfullname"];
$txtemail=$_POST["txtemail"];
$txtusername=$_POST["txtusername"];
$txtpass=$_POST["txtpass"];
// =====================
if ($submit<>"") {
connectDB();
$sqlinsert="insert into tblmember (mem_fullname,mem_email
,mem_username,mem_password, catid) values ".
"('".$txtname."','".$txtemail."','".$txtusername."','".$txtpass."','".$catmemid."')";
if (!@$result=mysql_query($sqlinsert)) {
exit("ไม่สามารถเพิ่มข้อมูลสมาชิกได้");
}
closeDB ( );
$response_text="<font color=#FF0000>เพิ่มข้อมูลคุณ ".$txtname." เรียบร้อย</font>";
}
?>
<html>
<head>
<title>เพิ่มข้อมูลสมาชิก</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<?php
include "admin_menu.php";
?>
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#EAEAEA"><div align="center"><strong>
<a href="admin_member.php">เพิ่มสมาชิก</a>
<a href="admin_memberedit.php">รายชื่อสมาชิก</a></strong></div></td>
</tr>
</table>
<?php
echo $response_text; // ข้อความตอบกลับ
?>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 297
<table width="500" border="0" align="center" cellpadding="2" cellspacing="1"
bgcolor="#CCCCCC">
<tr>
<td colspan="2"><strong>ข้อมูลทั่วไป</strong></td>
</tr>
<tr>
<td width="139" bgcolor="#EAEAEA">ฝ่าย :</td>
<td width="350" bgcolor="#EAEAEA">
<select name="cbocatmem">
<option value="">-- กรุณาเลือกกลุ่มสมาชิก --</option>
<?php
$sql="select catid,catname from tblcatmember";
echo listcatmember($sql);
?>
</select>
</td>
</tr>
<tr>
<td bgcolor="#EAEAEA">ชื่อเต็ม : </td>
<td bgcolor="#EAEAEA"><input type="text" name="txtfullname"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">e-mail :</td>
<td bgcolor="#EAEAEA"><input type="text" name="txtemail"></td>
</tr>
<tr>
<td colspan="2"><strong>ข้อมูลระบบ</strong></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">username</td>
<td bgcolor="#EAEAEA"><input type="text" name="txtusername"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">password</td>
<td bgcolor="#EAEAEA"><input type="password" name="txtpass"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA"> </td>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
298 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
<td bgcolor="#EAEAEA">
<input name="cmdsubmit" type="submit" id="cmdsubmit" value="Submit">
<input name="cmdreset" type="reset" id="cmdreset" value=" clear "></td>
</tr>
</table>
</form>
<?php
include "admin_footer.php";
?>
</body>
</html>
admin_memberedit.php
<?php
include "config.php";
// ตรวจสอบการ login
if (!isset($_SESSION["session_user"])) header("Location:index.php");
// =========================
// รับค่าตัวแปรแบบ get
$delid=$_GET["delid"];
// ============================
// หาก มีการกดปุ่ม ลบข้อมูล =======
if ($delid<>"") {
connectDB ( );
$sqldel="delete from tblmember where memid =".$delid;
if (!@$resultdel=mysql_query($sqldel)) {
exit("ไม่สามารถลบข้อมูลได้");
} else {
$response_text = "<font color=#FF0000>ลบข้อมูลเรียบร้อย</font>";
}
closeDB ( );
}
?>
<html>
<head><title>ลบข้อมูลสมาชิก</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<link rel="stylesheet" type="text/css" href="css/style.css">
<script language="javascript">
<!-ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 299
function conf(txt) {
if (confirm(txt)) {
return true;
}
return false;
}
//-->
</script>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<?php
include "admin_menu.php";
?>
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#EAEAEA"><div align="center"><strong>
<a href="admin_member.php">เพิ่มสมาชิก</a>
<a href="admin_memberedit.php">รายชื่อสมาชิก</a></strong></div></td>
</tr>
</table>
<br>
<?php
echo $response_text; // แสดงข้อมูล ตอบกลับ
?>
<table width="600" border="0" align="center" cellpadding="2" cellspacing="1"
bgcolor="#CCCCCC">
<tr>
<td width="30">
<div align="center"><strong>ล้าดับ</strong></div></td>
<td width="100">
<div align="center"><strong>ชื่อกลุ่ม</strong></div></td>
<td width="210"><strong>ชื่อสมาชิก</strong></td>
<td width="30"> </td>
<td width="30"> </td>
</tr>
<?php
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
300 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
connectDB();
// ดึงข้อมูลจากฐานข้อมูลมาแสดงผล
$sqlselect="select * from tblmember m inner join tblcatmember cm on cm.catid
= m.catid";
if (!@$result = mysql_query($sqlselect)) {
exit("ไม่สามารถเลือกข้อมูลได้");
}
$count=1;
while ($dbarr=mysql_fetch_array($result)) {
?>
<tr>
<td width="30" bgcolor="#EAEAEA">
<div align="center"><?php echo $count;?></div></td>
<td width="100" bgcolor="#EAEAEA">
<?php echo $dbarr["catname"];?></td>
<td bgcolor="#EAEAEA"><?php echo $dbarr["mem_fullname"];?></td>
<td width="30" bgcolor="#EAEAEA">
<div align="center"><a href="
<?php echo "admin_membereditsave.php?editid=".$dbarr["memid"];?>">
แก้ไข</a></div></td>
<td width="30" bgcolor="#EAEAEA">
<div align="center">
<a href="<?php echo $_SERVER["PHP_SELF"]."?delid=".$dbarr["memid"];?>">
ลบ</a></div></td>
</tr>
<?php
$count++;
}
// ปีกกาปิดของฟังก์ชัน while เพื่อวนรอบดึงข้อมูลมาแสดงผล
closeDB();
?>
</table>
<?php
include "admin_footer.php";
?>
</body>
</html>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 301
admin_membereditsave.php
<?php
include "config.php";
// ตรวจสอบการ login
if (!isset($_SESSION["session_user"])) header("Location:index.php");
// =========================
// รับค่าตัวแปรแบบ get
$submit = $_POST["cmdsubmit"];
$memid=$_GET["editid"];
// ====================================
connectDB(); // เรียกใช้ฟังก์ชันเชื่อมต่อฐานข้อมูล
if ($submit<>"") {
// รับค่าจากฟอร์ม มาเก็บไว้ที่ตัวแปร
$memid=$_POST["memid"];
$catmemid=$_POST["cbocatmem"];
$txtname=$_POST["txtfullname"];
$txtemail=$_POST["txtemail"];
$txtusername=$_POST["txtusername"];
$txtpass=$_POST["txtpass"];
// =====================
$sqlupdate="update tblmember set ".
"mem_fullname='".$txtname."' , ". "mem_email='".$txtemail."' , ".
"mem_username='".$txtusername."' , ".
"mem_password='".$txtpass."' , ".
"catid='".$catmemid."' ".
"where memid=".$memid;
if (!@$result = mysql_query($sqlupdate)) {
$response_text ="<font color=#000099>ติดปัญหาในการแก้ไขข้อมูล</font>";
} else {
$response_text ="<font color=#FF0000>แก้ไขข้อมูลเรียบร้อย</font>";
}
}
// แสดงข้อมูล ที่ต้องการแก้ไข
$sql="select * from tblmember where memid=".$memid;
if (!@$result=mysql_query($sql)) {
exit("ไม่สามารถแสดงข้อมูลได้");
}
$dbarr=mysql_fetch_array($result);
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
302 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
closeDB();

// ปิดการเชื่อมต่อกับฐานข้อมูล

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>แก้ไขข้อมูลสมาชิก</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<?php
include "admin_menu.php";
?>
<table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#EAEAEA"><div align="center"><strong>
<a href="admin_member.php">เพิ่มสมาชิก</a>
<a href="admin_memberedit.php">รายชื่อสมาชิก</a></strong></div></td>
</tr>
</table>
<?php
echo $response_text;
// ข้อความตอบกลับ
?>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
<table width="500" border="0" align="center" cellpadding="2" cellspacing="1"
bgcolor="#CCCCCC">
<tr>
<td colspan="2"><strong>ข้อมูลทั่วไป</strong></td>
</tr>
<tr>
<td width="139" bgcolor="#EAEAEA">กลุ่มสมาชิก :</td>
<td width="350" bgcolor="#EAEAEA">
<select name="cbocatmem">
<option value="">-- กรุณาเลือกกลุ่มสมาชิก --</option>
<?php
$sql="select catid,catname from tblcatmember";
echo listcatmember($sql,$dbarr["catid"]);
?>
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก 303
</select>
</td>
</tr>
<tr>
<td bgcolor="#EAEAEA">ชื่อเต็ม : </td>
<td bgcolor="#EAEAEA">
<input type="text" name="txtfullname" value="
<?php echo $dbarr["mem_fullname"];?>"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">e-mail :</td>
<td bgcolor="#EAEAEA"><input type="text" name="txtemail" value="
<?php echo $dbarr["mem_email"];?>"></td>
</tr>
<tr>
<td colspan="2"><strong>ข้อมูลระบบ</strong></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">username</td>
<td bgcolor="#EAEAEA"><input type="text" name="txtusername" value="
<?php echo $dbarr["mem_username"];?>"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA">password</td>
<td bgcolor="#EAEAEA"><input type="text" name="txtpass" value="
<?php echo $dbarr["mem_password"];?>"></td>
</tr>
<tr>
<td bgcolor="#EAEAEA"> </td>
<td bgcolor="#EAEAEA">
<input type="hidden" name="memid" value="
<?php echo $dbarr["memid"];?>">
<input name="cmdsubmit" type="submit" id="cmdsubmit" value="Submit">
<input name="cmdreset" type="reset" id="cmdreset" value=" clear "></td>
</tr>
</table>
</form>
<?php
ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
304 บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก
include "admin_footer.php";
?>
</body>
</html>

ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
บรรณานุกรม
Chris Ullman and Lucinda Dykes. (2007). Beginning Ajax. Canada: Wiley Publishing.
Hege Refsnes, Stale Refsnes, Kai Jim Refsnes, and Jan Egil Refsnes with Kelly Dobbs
Henthorne. (2010). Learn JavaScript and AJAX with w3schools. Canada: Wiley
Publishing.
Jay Greenspan and Brad Bulger. (2001). MySQL/PHP Database Applications. Chicago,
New York: IDG Books Worldwide.
Kevin Yank. (2004). Build Your Own Database Driven Website Using PHP and MySQL. 3rd
Edition, United States of America: SitePoint Pty.
Luke Welling and Laura Thomson. (2001). PHP and MySQL Web Development. United
States of America: SAMS.
PHP Manual. (2012). Available at: http://www.php.net. Accessed October 1, 2012.
Shelley Powers. (2007). Adding Ajax. United States of America: O'Reilly Media.
Tim Converse and Joyce Park with Clark Morgan. (2004). PHP5 and MySQL Bible. Canada:
Wiley Publishing.
The phpMyAdmin devel team. (2012). Available at: http://www.phpmyadmin.net
/home_page/docs.php. Accessed December 04, 2012.
W. Jason Gilmore. (2008). Beginning PHP and MySQL: From Novice to Professional,
Third Edition. United States of America: Apress.
กิตติ ภักดีวัฒนะกุล และจันทรขจร แซ่อุ๊น . (2552). PHP, พิมพ์ครั้งที่ 12. กรุงเทพฯ : เคทีพี คอมพ์ แอนด์
คอนซัลท์.
กิติศักดิ์ เจริญโภคานนท์. (2550). คู่มือเรียนเขียนเว็บอีคอมเมิร์ซด้วย PHP 5, พิมพ์ครั้งที่ 2. กรุงเทพฯ:
ซัคเซส มีเดีย.
บัญชา ปะสีละเตสัง. (2553). พัฒนาเว็บแปพลิเคชั่นด้วย PHP ร่วมกับ MySQL และ Dreamweaver.
กรุงเทพฯ: ซีเอ็ดยูเคชั่น.
______________. (2551). พัฒนาเว็บด้วยเทคนิค Ajax และ PHP. กรุงเทพฯ: ซีเอ็ดยูเคชั่น.
ภาควิชาวิศวกรรมคอมพิวเตอร์ . (2553). Introduction to MySQL Database Server. เชียงใหม่:
คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่.
สาธิต ชัยวิวัฒน์ตระกูล. (2550). เก่ง PHP ให้ครบสูตร. กรุงเทพฯ: วิตตี้กรุ๊ป.

Book sru

  • 3.
    (1) คำนำ ในปัจจุบันเทคโนโลยีสารสนเทศมีบทบาทในชีวิตประจาวันของเรามากขึ้นการที่จะสร้างระบบงานที่ใช้ ในองค์กรในลักษณะของการเขียนโปรแกรมบนเว็บ (Web Programming)เพื่อจัดเก็บข้อมูล และสืบค้นข้อมูล ในระบบฐานข้อมูล การที่จะพัฒนาได้นั้น จาเป็นต้องมีผู้ชานาญในการพัฒนาระบบจึงจะทาให้ระบบนั้นมี ประสิทธิภาพในการใช้งาน ดังนั้นเป้าหมายสาคัญของเอกสารตารา/หนังสือ เล่มนี้จึงต้องการเสริมสร้างทักษะ ความรู้ให้กับนักศึกษาหรือผู้ที่สนใจ การเขียนโปรแกรมบนเว็บตั้งแต่เริ่มต้น จนถึงประยุกต์ใช้ในระดับมืออาชีพ ต่อไป การเขียนโปรแกรมบนเว็บนั้น มีภาษาที่ใช้สาหรับการพัฒนามีอยู่ด้วยกันหลายภาษา เช่น ASP, Perl, JSP และ PHP เป็นต้น แต่ภาษาที่ได้รับความนิยมอย่างแพร่หลาย โดยสังเกตได้จากเว็บไซต์ส่วนใหญ่ เช่น facebook.com และเว็บไซต์หน่วยงานภาครัฐและเอกชน ภาษา PHP นั้น เป็นภาษาสคริปต์ที่ทางานในฝั่ง ของเครื่องแม่ข่าย (Server Side) เพื่อประมวลผลแล้วส่งกลับมายังเครื่องที่ร้องขอในลักษณะของภาษา HTML ลักษณะสาคัญของภาษา PHP จะมีโครงสร้างที่ง่ายแก่การทาความเข้าใจ คล้ายกับภาษาซี (C Language) ซึ่ง เหมาะกับ ผู้ เริ่ มต้ น พัฒ นา และยั งสามารถเขี ย นในลั กษณะของออบเจ็ค (OOP: Object Oriented Programming) ได้อีกด้วย เหมาะสาหรับการย่อโค๊ดภาษาให้สั้นลง ฐานข้อมูลก็เป็นส่วนหนึ่งที่มีความสาคัญ สาหรับการเขียนโปรแกรมบนเว็บด้วยภาษา PHP นั้น ตัวภาษา PHP เองสามารถติดต่อกับฐานข้อมูลหลาย ชนิด เช่น Oracle, Progress, MS-Access และ MySQL เป็นต้น ใน หนังสือเล่มนี้จะใช้ฐานข้อมูล MySQL สาหรับเรียนรู้และฝึกปฏิบัติ หนั ง สื อ เล่ ม นี้ เ ขี ย นขึ้ น เพื่ อ ถ่ า ยทอดความรู้ แ ละประสบการณ์ ข องผู้ เ ขี ย น (จากประสบการณ์ สู่ ภาคปฏิบัติ) ประสบการณ์ของผู้เขียนนั้นได้มาจากงานสอน และพัฒนาเว็บ ด้วยภาษา PHP และ MySQL มา โดยตลอด เป็นเวลานานไม่น้อยกว่า 10 ปี กลั่นจากใจสู่ผู้ที่สนใจ รวมถึง นิสิต นักศึกษา ที่มีความสนใจด้าน การเขียนโปรแกรมหรือพัฒนาเว็บ นาไปศึกษาเรียนรู้ นาไปประยุกต์ใช้งานที่หลากหลายตามลักษณะงานที่ แตกต่าง ดังนั้นผู้เขียนจึงหวังว่า หลังการศึกษาเนื้อหาจากหนังสือเล่มนี้ทั้งหมดแล้ว ผู้อ่านจะสามารถนาความรู้ ไปใช้การโปรแกรมบนเว็บเพื่อใช้งานจริงต่อไป ปริญญา น้อยดอนไพร parinya-2008@hotmail.com
  • 4.
  • 5.
    (3) สำรบัญ หน้ำที่ คำนำ .................................................................................................................................................... (1) สำรบัญ................................................................................................................................................. (3) สำรบัญตำรำง ....................................................................................................................................... (9) สำรบัญภำพ ........................................................................................................................................(11) บทที่ 1 บทนำ .................................................................................................................................. 1 PHP คือ อะไร ............................................................................................................................. 1 PHP สามารถทาอะไรได้บ้าง ....................................................................................................... 1 ประวัติความเป็นมาของ PHP (History of PHP) ....................................................................... 2 PHP เวอร์ชัน 4 ........................................................................................................................... 3 PHP เวอร์ชัน 5 ........................................................................................................................... 4 PHP เวอร์ชัน 6 ........................................................................................................................... 5 MySQL คืออะไร ......................................................................................................................... 6 บทที่ 2 หลักกำรทำงำนของ PHP .................................................................................................. 11 AppServ คืออะไร .....................................................................................................................13 วิธีการติดตั้งโปรแกรม AppServ ...............................................................................................15 XAMPP คืออะไร ....................................................................................................................... 21 วิธีการติดตั้ง XAMPP บนระบบปฏิบัติ Windows ....................................................................22 การเลือกใช้เครื่องมือสาหรับการเขียนโค้ด (Choosing a Code Editor) ................................. 27 บทที่ 3 PHP เบื้องต้น .................................................................................................................... 31 การแทรกคาสั่งภาษา PHP ในเอกสาร HTML .......................................................................... 31 องค์ประกอบพื้นฐานของการเขียน PHP ................................................................................... 32 การแสดงผลข้อมูลผ่านเว็บบราวเซอร์ (Outputting Data to the Browser) ......................... 33 ชนิดข้อมูลที่รองรับใน PHP (PHP's Supported Datatypes) ................................................ 37 การแปลงชนิดข้อมูลโดยใช้ตัวแปร .......................................................................................... 40 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ (Adapting Datatypes with Type Juggling) ....... 41 ฟังก์ชันที่เกี่ยวข้องกับชนิดข้อมูล (Type-Related Function) ................................................ 41 ฟังก์ชันตรวจสอบชนิดของข้อมูล (Type Identifier Functions) ............................................ 43 คาสงวนของ PHP (Reserved Words) .................................................................................... 43 บทที่ 4 ตัวแปร ตัวดำเนินกำรและนิพจน์ (Variables, Operators and Expressions) .............. 45
  • 6.
    (4) สำรบัญ (ต่อ) หน้ำที่ ตัวแปร (Variable).................................................................................................................... 45 ขอบเขตของตัวแปร (Variable Scope) .................................................................................. 47 ตัวแปรพิเศษ (Super global Variables) ................................................................................ 41 ตัวแปรค่าคงที่ (Constants) ..................................................................................................... 53 ตัวแปรที่มีค่า Null .................................................................................................................... 54 การตรวจสอบและยกเลิกตัวแปร ............................................................................................... 55 ตัวดาเนินการ (Operators) และนิพจน์ (Expressions) ........................................................... 56 ตัวดาเนินการในการเชื่อมข้อความ (String) .............................................................................. 62 ตัวดาเนินการอื่น ๆ ....................................................................................................................66 บทที่ 5 โครงสร้ำงควบคุม (Control Structures) ....................................................................... 67 คาสั่งเงื่อนไข (Conditional Statements) .............................................................................. 67 คาสั่งทาซ้า (Looping Statements) ........................................................................................72 คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซ้า (The Other Controls of Looping Statements) ........................................................................................................................... 78 บทที่ 6 ฟังก์ชัน (Functions) ....................................................................................................... 81 ฟังก์ชัน ...................................................................................................................................... 81 การเรียกใช้งานฟังก์ชันมาตรฐานของ PHP ............................................................................... 82 การสร้างฟังก์ชัน (Creating a Function) ................................................................................ 82 การเรียกใช้ฟังก์ชันที่สร้างเอง .................................................................................................... 83 ฟังก์ชันแบบมีการส่งค่าพารามิเตอร์ .......................................................................................... 83 การส่งค่ากลับจากฟังก์ชันด้วยคาสั่ง return (Returning Values from a Function) ............86 ฟังก์ชันแบบเรียกตัวเอง (Recursive Functions) .................................................................... 87 ฟังก์ชันไลบรารี (Function Libraries) ..................................................................................... 88 บทที่ 7 อำร์เรย์ (Arrays) .............................................................................................................. 91 การสร้างอาร์เรย์ (Create arrays) ............................................................................................ 91 การเข้าถึงข้อมูลภายในอาร์เรย์ ................................................................................................. 95 ฟังก์ชันอื่นๆ ที่เกี่ยวกับอาร์เรย์ ................................................................................................. 98 ฟังก์ชันในการเพิ่มสมาชิกในอาร์เรย์ ......................................................................................... 98 ฟังก์ชันในการลบสมาชิกในอาร์เรย์ ......................................................................................... 101
  • 7.
    (5) สำรบัญ (ต่อ) หน้ำที่ ฟังก์ชันในการนับจานวนสมาชิกในอาร์เรย์ .............................................................................102 ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวเลข ............................................ 104 ฟังก์ชันที่ใช้ในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษรหรือข้อความ ............. 105 ฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ (Pointer) ในอาร์เรย์ ............................................... 108 ฟังก์ชันสาหรับการรวมอาร์เรย์ ................................................................................................108 ฟังก์ชันสาหรับการสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูลในอาร์เรย์ ..............................110 ฟังก์ชันสาหรับการค้นหาอินเด็กซ์หรือคีย์และค่าข้อมูลในอาร์เรย์ .......................................... 110 ฟังก์ชันสาหรับการหาค่าข้อมูลสมาชิกที่เหมือนและแตกต่างกันในอาร์เรย์ ............................ 111 การใช้ข้อมูลจากอาร์เรย์ $_SERVER ...................................................................................... 112 การใช้ข้อมูลจากอาร์เรย์ $_FILE ............................................................................................ 114 บทที่ 8 สตริง ตัวเลข และเวลำ ................................................................................................... 117 ฟังก์ชันเกี่ยวกับสตริง .............................................................................................................. 117 ฟังก์ชันเกี่ยวกับรหัสแอสกี (ASCII) ......................................................................................... 117 ฟังก์ชันเกี่ยวกับการหาขนาดของสตริง ................................................................................... 118 ฟังก์ชันในการเปลี่ยนรูปแบบของตัวพิมพ์ ............................................................................... 119 ฟังก์ชันเกี่ยวกับการแยก และรวมข้อความหรือสตริง ............................................................. 121 ฟังก์ชันเกี่ยวกับข้อความหรือสตริงย่อย .................................................................................. 122 ฟังก์ชันในการค้นหาข้อความหรือสตริง .................................................................................. 124 ฟังก์ชันในการแทนที่ข้อความหรือสตริง ................................................................................. 125 ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง .............................................................. 127 ฟังก์ชันเกี่ยวกับอักขระพิเศษของ HTML ................................................................................ 129 ฟังก์ชันเกี่ยวกับจานวนและตัวเลข .......................................................................................... 130 ฟังก์ชันเกี่ยวกับวันเวลา (Date and Time) ............................................................................132 การจัดการกับวันที่และเวลาแบบ Greenwich Mean Time (GMT) ..................................... 139 บทที่ 9 กำรจัดกำรไฟล์และไดเรกทอรี ......................................................................................... 145 การอ้างถึง Document Root .................................................................................................145 การอ้างอิงพาธแบบ Absolute ............................................................................................... 145 การอ้างอิงพาธแบบ Relative ................................................................................................. 146 การจัดการกับไฟล์ ................................................................................................................... 147
  • 8.
    (6) สำรบัญ (ต่อ) บทที่ 10 บทที่11 บทที่ 12 บทที่ 13 หน้ำที่ การจัดการกับไดเรกทอรี ......................................................................................................... 159 การอัพโหลดไฟล์ ..................................................................................................................... 164 ฟังก์ชันการหาขนาด และชนิดของไฟล์ .................................................................................. 167 กำรจัดกำรข้อมูลจำกฟอร์ม ............................................................................................. 169 ลักษณะของฟอร์ม ...................................................................................................................169 คานิยามและการใช้งานแท็ก form ..........................................................................................170 การจัดการข้อมูลจากฟอร์มในฝั่งเซิร์ฟเวอร์ .............................................................................179 การส่งข้อมูลแบบอาร์เรย์ .........................................................................................................183 คุกกี้ เซสชั่น และกำรเชื่อมโยงระหว่ำงเพจ ..................................................................... 185 เฮดเดอร์ (Header) ................................................................................................................. 185 การส่งข้อมูลระหว่างเพจแบบ Query String ......................................................................... 186 การจัดเก็บข้อมูลแบบคุกกี้ ...................................................................................................... 187 การจัดเก็บข้อมูลแบบเซสชัน ...................................................................................................189 กำรเขียนโปรแกรมแบบ OOP .........................................................................................197 คลาส (Class) ..........................................................................................................................197 การนาคลาสมาใช้ในสคริปต์ PHP ........................................................................................... 198 ออบเจ็กต์ และอินสแตนซ์ ....................................................................................................... 198 เมธอด (Method) ................................................................................................................... 199 โมดิฟายเออร์ (Modifier) แบบ public และ private ............................................................ 201 ค่าคงที่ (Constant) .................................................................................................................204 คอนสตรักเตอร์ (Constructor) .............................................................................................. 205 โมดิฟายเออร์ Static ............................................................................................................... 206 การสืบทอด (Inheritance) ..................................................................................................... 208 กำรใช้เทคนิค AJAX ร่วมกับ PHP .................................................................................. 211 AJAX (Asynchronous JavaScript and XML) ....................................................................211 ประวัติความเป็นมา ................................................................................................................. 212 ที่มาของปัญหา ........................................................................................................................ 212 โครงสร้างของ AJAX ............................................................................................................... 213 การทางานของ AJAX ..............................................................................................................214
  • 9.
    (7) สำรบัญ (ต่อ) หน้ำที่ การใช้ AJAXFramework ..................................................................................................... 215 ฟังก์ชันที่ใช้จัดการข้อมูล ......................................................................................................... 218 แนวทางการพัฒนา AJAX Application ................................................................................219 ปัญหาภาษาไทยใน AJAX ....................................................................................................... 220 การส่งผลลัพธ์กลับมาเป็น JavaScript ....................................................................................220 การอัปเดทอินพุต Select ด้วยเทคนิค AJAX ......................................................................... 224 อีเวนต์ (Event) ....................................................................................................................... 228 การกาหนดอีเวนต์ ................................................................................................................... 230 ออบเจ็กต์อีเวนต์ (Object Event) .......................................................................................... 231 อีเวนต์เกี่ยวกับเมาส์ ................................................................................................................ 232 อีเวนต์เกี่ยวกับคีย์บอร์ด .......................................................................................................... 233 บทที่ 14 ฐำนข้อมูล MySQL และกำรใช้งำน phpMyAdmin ...................................................... 241 คาสั่งพื้นฐานของ MySQL .......................................................................................................241 ลักษณะองค์ประกอบของฐานข้อมูล ....................................................................................... 243 ชนิดข้อมูลของคอลัมน์ ............................................................................................................ 244 แอททริบิวต์ของคอลัมน์ .......................................................................................................... 246 การสร้างฐานข้อมูล ................................................................................................................. 247 การสร้างตารางฐานข้อมูล ....................................................................................................... 247 การแทรก ปรับปรุง ลบ และเรียกดูข้อมูลในตาราง .................................................................251 จัดการฐานข้อมูลด้วย phpMyAdmin ....................................................................................256 การเริ่มต้นใช้งาน phpMyAdmin ...........................................................................................256 การลบฐานข้อมูล และตาราง .................................................................................................. 263 ส่วนของการใช้คาสั่ง SQL ....................................................................................................... 263 ส่วนของการค้นหา .................................................................................................................. 264 ส่วนของการกาหนดสิทธิ์ ......................................................................................................... 264 บทที่ 15 กำรใช้ PHP ร่วมกับ MySQL ..........................................................................................265 การใช้ PHP ร่วมกับ MySQL................................................................................................... 265 ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL ................................265 ฟังก์ชันสาหรับการเลือกฐานข้อมูล ..........................................................................................267
  • 10.
    (8) สำรบัญ (ต่อ) หน้ำที่ การส่งคาสั่ง SQLไปยังฐานข้อมูล ...........................................................................................268 การอ่านข้อมูลผลลัพธ์ ............................................................................................................. 269 การแก้ไขข้อมูลภาษาไทยกลายเป็น "?????...." ........................................................................272 การตรวจสอบการเปลี่ยนแปลงข้อมูล ......................................................................................272 การตรวจสอบข้อผิดพลาดระหว่างการทางานร่วมกับ MySQL .............................................. 275 การตรวจสอบชื่อฐานข้อมูลและตาราง ................................................................................... 275 การตรวจสอบโครงสร้างของขอบเขตข้อมูล ............................................................................ 277 บทที่ 16 กรณีศึกษำ: ระบบจัดกำรสมำชิก ..................................................................................... 281 โปรเซสการทางานของระบบจัดการสมาชิก ............................................................................ 281 อธิบายการทางานของระบบ ................................................................................................... 281 สร้างฐานข้อมูลและตาราง ...................................................................................................... 282 รายละเอียดของไฟล์ที่เกี่ยวข้อง .............................................................................................. 282 บรรณำนุกรม ...................................................................................................................................... 305
  • 11.
    (9) สำรบัญตำรำง ตำรำงที่ 3.1 3.2 3.3 4.1 4.2 4.3 4.4 4.5 4.6 4.7 7.1 7.2 7.3 7.4 7.5 8.1 8.2 8.3 8.4 8.5 8.6 8.7 9.1 9.2 9.3 9.4 9.5 10.1 10.2 หน้ำที่ แสดงตัวกาหนดชนิดการแสดงผลที่ใช้ร่วมกับคาสั่ง printf () ...................................................35 ตัวดาเนินการแปลงชนิดของข้อมูล (Type Casting Operators) ............................................. 40 คาสงวนของ PHP ......................................................................................................................44 ตัวดาเนินการพื้นฐานสาหรับการคานวณ .................................................................................. 57 ตัวดาเนินการสาหรับการกาหนดค่า .......................................................................................... 58 ตัวดาเนินการสาหรับเพิ่ม และลดค่า ......................................................................................... 59 ตัวดาเนินการสาหรับการเปรียบเทียบ ....................................................................................... 60 ตัวดาเนินการสาหรับการเปรียบเทียบทางตรรกะ ......................................................................60 ลาดับความสาคัญของตัวดาเนินการ .......................................................................................... 62 Escape Sequence ..................................................................................................................63 แสดงตัวอย่างข้อมูลแบบอาร์เรย์ และแสดงตาแหน่งของอินเด็กซ์ ............................................ 91 แสดงผลสรุปฟังก์ชันที่ใช้สาหรับเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษร ............ 107 สรุปฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ในอาร์เรย์ .......................................................... 108 แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_SERVER .................................................................... 113 แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_FILE .......................................................................... 114 ฟังก์ชันเกี่ยวกับรหัสแอสกี .......................................................................................................117 ฟังก์ชันในการตัดช่องว่าง .........................................................................................................128 ฟังก์ชันเกี่ยวกับการประมาณค่า ..............................................................................................130 ฟังก์ชันในการเปรียบเทียบจานวน .......................................................................................... 131 ฟังก์ชันการตรวจสอบ และจัดรูปแบบตัวเลข .......................................................................... 131 ฟังก์ชันเพิ่มเติมอื่นๆ ................................................................................................................ 132 อาร์เรย์แบบ Key/Value ที่ได้จากการใช้ฟังก์ชัน getdate ( ) ............................................... 137 ขั้นตอนการเขียนและอ่านข้อมูลในไฟล์ ...................................................................................147 ไฟล์โหมด ................................................................................................................................ 147 ฟังก์ชันที่ใช้ตรวจสอบเกี่ยวกับไฟล์ .......................................................................................... 158 ฟังก์ชันที่ใช้ตรวจสอบเวลาที่เกี่ยวข้องกับไฟล์ ......................................................................... 158 ค่าคีย์ของตัวแปร $_FILES ......................................................................................................165 ตัวรับข้อมูลที่สาคัญของฟอร์ม .................................................................................................169 แสดงแอตทริบิวต์เฉพาะแท็ก form ........................................................................................ 170
  • 12.
    (10) สำรบัญตำรำง (ต่อ) ตำรำงที่ 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 13.1 13.2 13.3 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 16.1 16.2 หน้ำที่ แสดงแอตทริบิวต์เฉพาะแท็ก input....................................................................................... 172 แสดงแอตทริบิวต์เฉพาะแท็ก textarea .................................................................................. 174 แสดงแอตทริบิวต์เฉพาะแท็ก label ........................................................................................175 แสดงแอตทริบิวต์เฉพาะแท็ก legend .................................................................................... 175 แสดงแอตทริบิวต์เฉพาะแท็ก select ...................................................................................... 176 แสดงแอตทริบิวต์เฉพาะแท็ก OPTGROUP ............................................................................ 177 แสดงแอตทริบิวต์เฉพาะแท็ก OPTION ...................................................................................178 แสดงแอตทริบิวต์เฉพาะแท็ก button .................................................................................... 178 แสดงอีเวนต์ของ JavaScript สาหรับกาหนดให้กับอิลิเมนต์ .................................................. 229 แสดงอีเวนต์ของ JavaScript แบบพร็อปเพอร์ตี้ .................................................................... 231 แสดงตัวอย่างรหัสที่ใช้แทนปุ่มคีย์บอร์ด ..................................................................................234 แสดงชนิดข้อมูลของ MySQL ชนิดตัวเลข .............................................................................. 244 แสดงชนิดข้อมูลของ MySQL ชนิดสตริง ................................................................................ 245 แสดงชนิดข้อมูลของ MySQL ชนิด BLOB ............................................................................. 245 แสดงชนิดข้อมูลของ MySQL ชนิด SET และ ENUM ............................................................ 245 แสดงชนิดข้อมูลของ MySQL ชนิดวันเวลา ............................................................................ 246 แสดงแอททริบิวต์ของคอลัมน์ใน MySQL ............................................................................... 246 แสดงโอเปอร์เรเตอร์ที่ใช้งานร่วมกับคาสั่ง WHERE ................................................................ 254 แสดงฟังก์ชัน Aggregate สาหรับใช้ร่วมกับ GROUP BY ....................................................... 255 ตารางข้อมูล tblcatmember ................................................................................................ 282 ตารางข้อมูล tblmember ...................................................................................................... 282
  • 13.
    (11) สำรบัญภำพ ภำพที่ 1.1 1.2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 หน้ำที่ ผู้ร่วมพัฒนา PHP ........................................................................................................................2 ผู้ร่วมพัฒนา MySQL ...................................................................................................................6 รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์ผ่านโปรโตคอล HTTP ........12 รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์เพื่อเรียกเว็บเพจธรรมดา ... 12 การร้องขอการใช้งานจากไคลเอ็นท์ ไปยังเครื่องที่ให้บริการเป็น Web Server engine ของ PHP ................................................................................................................................... 13 ภาณุพงศ์ ปัญญาดี ผู้พัฒนา AppServ ......................................................................................13 ขั้นตอนการติดตั้งโปรแกรม AppServ .......................................................................................16 แสดงรายละเอียดเงื่อนไขการ GNU License ........................................................................... 16 เลือกปลายทางการติดตั้งโปรแกรม AppServ ........................................................................... 17 เลือก Package Components ที่ต้องการติดตั้ง .......................................................................17 แสดงการกาหนดค่าคอนฟิกค่า Apache เว็บเซิร์ฟเวอร์ ........................................................... 18 แสดงการกาหนดค่าคอนฟิกของ MySQL Database ............................................................... 19 แสดงการดาเนินการติดตั้งโปรแกรม AppServ ......................................................................... 19 แสดงหน้าจอขั้นตอนสิ้นสุดการติดตั้งโปรแกรม AppServ ........................................................ 20 แสดงการสตาร์ทโปรแกรม Apache และ MySQL ...................................................................20 แสดงผลการทางานของ AppServ บนหน้าเว็บบราวเซอร์ ........................................................20 แสดงโฟลเดอร์องค์ประกอบต่างๆ ที่สาคัญของ AppServ ........................................................ 21 kai 'oswald' seidler ผู้พัฒนา XAMPP ................................................................................... 22 ขั้นตอนการติดตั้ง XAMPP ........................................................................................................ 22 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการสร้าง Shortcut ใน Start menu และ Desktop...23 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการทวนถามความถูกต้องของตาแหน่งติดตั้ง ............... 23 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการติดตั้ง portable แบบ without drive letters..... 24 ขั้นตอนการติดตั้ง XAMPP แสดงผลการดาเนินการติดตั้ง XAMPP แบบพกพา ....................... 24 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับโซนเวลาในไฟล์ php.ini และ my.ini ............ 25 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับเปลี่ยนการใช้งานเพิ่มเติม ............................... 25 แสดงขั้นตอนการเปิด XAMPP Control Panel ....................................................................... 25 แสดงหน้าจอ XAMPP Control Panel เพื่อควบคุมโปรแกรมต่างๆ ที่เกี่ยวข้อง ......................26 แสดงผลการทางานของ XAMPP บนหน้าเว็บบราวเซอร์ .......................................................... 26
  • 14.
    (12) สำรบัญภำพ (ต่อ) ภำพที่ 2.27 2.28 4.1 5.1 5.2 5.3 5.4 5.5 5.6 7.1 8.1 9.1 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 11.1 13.1 13.2 13.3 14.1 14.2 14.3 หน้ำที่ แสดงการสร้างโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP........................................................ 26 แสดงการบันทึกไฟล์ลงในโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP เพื่อทดสอบและใช้งาน... 27 แสดงตัวอย่างตัวดาเนินการและนิพจน์ ......................................................................................58 แสดงแผนภาพการไหล (Flow Chart) ของคาสั่ง if .................................................................. 68 แสดงแผนภาพการไหลของคาสั่ง if ... else .............................................................................. 69 แสดงแผนภาพการไหลของคาสั่ง if ... elseif ............................................................................ 70 แสดงแผนภาพการไหลของคาสั่ง while ................................................................................... 72 แสดงแผนภาพการไหลของคาสั่ง do ... while ......................................................................... 73 แสดงแผนภาพการไหลของคาสั่ง for ........................................................................................ 74 แสดงหน้าเว็บเพจสาหรับเริ่มต้น Upload ไฟล์ ...................................................................... 115 แสดงตัวอย่างผลลัพธ์การสร้างปฏิทินออนไลน์ ....................................................................... 143 แสดงการเปิดไฟล์รูปภาพ ........................................................................................................ 156 แสดงตัวอย่างตัวรับข้อมูลของฟอร์ม ....................................................................................... 170 แสดงตัวอย่างผลลัพธ์ของฟอร์มโดยใช้แท็ก input ชนิด "Text" ............................................. 172 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก textarea ......................................................................173 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก label ............................................................................174 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก fieldset ในการจัดกลุ่มของแท็ก input .......................175 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select ...................................... 176 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTGROUP ................................................................ 177 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select ...................................... 177 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก button ........................................................................ 178 แสดงการจัดการข้อมูลจากฟอร์มทางด้านเซิร์ฟเวอร์ ...............................................................179 สร้างฟอร์มสาหรับการ Login กรณีศึกษาและประยุกต์ใช้งานเซสชั่น .....................................194 เปรียบเทียบการทางานแบบเดิม กับ AJAX ............................................................................ 213 โครงสร้างของ AJAX ในปัจจุบัน ............................................................................................. 213 หลักการทางานของ AJAX ...................................................................................................... 214 หน้าล็อกอินเพื่อเข้าสู่ระบบของ phpMyAdmin เวอร์ชัน 3.5.4 ............................................ 257 หน้าเพจหลังจากล็อกอินเข้าสู่ระบบ phpMyAdmin เวอร์ชัน 3.5.4 ..................................... 257 แสดงขั้นตอนการสร้างฐานข้อมูลใหม่ ..................................................................................... 258
  • 15.
    (13) สำรบัญภำพ (ต่อ) ภำพที่ 14.4 14.5 14.6 14.7 14.8 14.9 14.10 14.11 14.12 14.13 14.14 14.15 14.15 หน้ำที่ แสดงขั้นตอนการสร้างตารางใหม่ ...........................................................................................258 แสดงขั้นตอนการสร้างขอบเขตข้อมูลในตาราง ....................................................................... 259 แสดงขั้นตอนการสร้างตารางและกาหนดขอบเขตข้อมูลในตาราง .......................................... 259 แสดงขั้นตอนการแทรกข้อมูลลงในตาราง ............................................................................... 260 แสดงตัวอย่างรายการสาหรับการแทรกข้อมูลลงในตาราง ...................................................... 260 แสดงขั้นตอนการอ่านข้อมูลในตาราง ......................................................................................261 แสดงขั้นตอนการเลือกข้อมูลเพื่อแก้ไขข้อมูล .......................................................................... 261 แสดงขั้นตอนการเลือกข้อมูลเพื่อลบข้อมูล ..............................................................................262 แสดงตัวอย่างการเลือกข้อมูลเพื่อแก้ไขโครงสร้างข้อมูล ..........................................................262 แสดงตัวอย่างการลบข้อมูลในตารางและลบตาราง ................................................................. 263 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" ...................................................... 263 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อค้นหาข้อมูล ........................... 264 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อกาหนดสิทธิ์ ........................... 264
  • 16.
    บทที่ 1 บทนำ PHP คืออะไร PHPย่อมาจาก ''PHP Hypertext Preprocessor'' เป็นภาษา Server-Side Script อีกภาษาหนึ่งเช่นเดียวกันกับ ASP ที่มีการทางานที่เครื่องคอมพิวเตอร์ฝั่ง Server ซึ่งรูปแบบในการเขียนคาสั่งการทางานนั้นจะมีลักษณะคล้ายกับภาษา Perl หรือภาษา C และสามารถใช้ร่วมงานกันกับ ภาษา HTML ได้อย่างมีประสิทธิภาพ หมำยเหตุ ในการสร้างเว็บจะใช้ Script อยู่ 2 รูปแบบคือ Server-Side Script เป็นลักษณะการทางานบนเครื่อง Server และแปลออกมาเป็นภาษา HTML เช่น PHP, ASP, CGI Client-Side Script เป็นลักษณะการทางานบนเครื่อง Client (เครื่องผู้ใช้) เช่น JavaScript, VBScript PHP สำมำรถทำอะไรได้บ้ำง ความสามารถของ PHP นั้นสามารถที่จะทางานในลักษณะ Dynamic Web ได้ทุกรูปแบบ เหมือนกับ CGI หรือ ASP ไม่ว่าจะเป็นการจัดการดูแลระบบฐานข้อมูล ระบบรักษาความปลอดภัย การรับ – ส่ง Cookies โดยที่ PHP นั้นสามารถที่จะติดต่อกับโปรแกรมจัดการฐานข้อมูลที่มีอยู่มากมาย ดังนี้ Adabas D InterBase Solid Microsoft Access DBase mSQL Sybase Empress MySQL Velocis FilePro Oracle Unix dbm Informix PostgreSQL MS SQL Server แต่ความสามารถที่พิเศษกว่านี้ก็คือ PHP สามารถที่จะติดต่อกับบริการต่างๆ ผ่านทางโพรโตคอล (Protocol) เช่น IMAP, SNMP, NNTP, POP3, HTTP และยังสามารถติดต่อกับ Socket ได้อีกด้วย
  • 17.
    2 บทที่ 1บทนา ประวัติควำมเป็นมำของ PHP (History of PHP) Rasmus Lerdorf Zeev Suraski Andi Gutmans ภำพที่ 1.1 ผู้ร่วมพัฒนา PHP ที่มา: http://lerdorf.com/pics/rl.jpg , http://tec20ten.files.wordpress.com/2010/02/dsc_0156-copy.jpg และ http://tech.ccidnet.com/col/attachment/2010/6/2037287.jpg (W. Jason Gilmore: 2) PHP ถูกคิดค้นขึ้นมาในปี 1995 โดยนักพัฒนาที่ชื่อว่า Rasmus Lerdorf แต่เดิมนั้นเขาได้พัฒนาเว็บเพจของเขาเองเพียงเพื่อแนะนาประวัติส่วนตัวออนไลน์ของเขาด้วย ภาษาสคริปต์ Perl/CGI แต่ภาษาสคริปต์ดังกล่าวค่อนข้างยุ่งยากและมีข้อจากัด เป็นเหตุเริ่ มต้นให้เขา พัฒนาภาษาสคริปต์ใหม่ ง่ายต่อการพัฒนา ในช่วงเริ่มต้นพัฒนานั้น ทาหน้าที่เพียง 2 ประการเท่านั้น คือ 1)เพื่อต้องการทราบถึงผู้เข้าชมเว็บของเขามากน้อยเพียงใด และ 2)เพื่อแสดงผลจานวนผู้เข้าชมเว็บเพจ เครื่องมือในครั้งนั้นเขาได้ตั้งชื่อว่า PHP-toolset (Personal Home Page toolset) PHP-toolset มีเสียงตอบรับจากผู้ใช้งานเป็นจานวนมาก และเขายังคงพัฒนาอย่างต่อเนื่องมี การปรับแต่งการแปลงและส่งข้อมูลตัวแปรผ่าน HTML form และเปลี่ยนภาษาที่ใช้ในการพัฒนา โดยใช้ ภาษาซี (C Language) แทนภาษา Perl และเผยแพร่ผลงานของเขาในเดือนพฤศจิกายน ค.ศ.1997 เป็น เวอร์ชัน PHP 2.0 หรือรู้จักกันในนาม Personal Home Page/Form Interpreter (PHP/FI) และได้เสียง ตอบรับที่ดีจากเหล่าโปรแกรมเมอร์ทั่วโลก PHP เวอร์ชันใหม่ ได้มีการเปลี่ยนแปลงและมีทีมพัฒนาทีมงาน คือ Zeev Suraski และ Adni Gutmans ทาการวิเคราะห์พื้นฐานของ PHP/FI แต่ยังคงแนวคิดเดิม คือ ทางานผสมผสานร่วมกับภาษา HTML และเพิ่มความสมบูรณ์ของภาษา PHP มากขึ้น เป็นเวอร์ชัน 3 และเผยแพร่ในเดือนมิถุนายน ค.ศ.1998 PHP ได้มีการพัฒนาอย่างต่อเนื่องมีหลายร้อยฟังก์ชั นที่เพิ่มเข้ามาและจานวนผู้ใช้ที่กาลังเติบโต ในปี 1999 บริษัท Netcraft (http://www.netcraft.com/) ได้ทาการวิจัยทางอินเทอร์เน็ตและวิเคราะห์ ข้อมูล จากรายงานพบว่า มีผู้ใช้งานภาษา PHP มากกว่า 1 ล้านเว็บไซต์ ทาให้ PHP ได้รับความนิยมมาก ที่สุด และทีมพัฒนา Zeev Suraski และ Andi Gutmans ได้มีความคิดริเริ่มต้องการให้ PHP ทาการ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 18.
    บทที่ 1 บทนา3 ประมวลผลได้เร็วขึ้นในลักษณะ parser PHP เพื่อแยกประมวลผล ร่วมกับ Zend Engine ของบริษัท Zend Technology จากัด (http://www.zend.com/) เป็นเครื่องมือหลักในการขับเคลื่อนสาคัญ ผลได้ เป็น PHP เวอร์ชัน 4 PHP เวอร์ชัน 4 เมื่อวันที่ 22 พฤษภาคม ค.ศ.2000 ประมาณ 18 เดือน หลังจากที่เผยแพร่ใช้งาน PHP เวอร์ชัน 4 อย่างเป็นทางการ หลายคนถือว่าภาษา PHP เป็นภาษาที่มีเสถียรภาพสูงภาษาหนึ่งและได้รับความนิยม อย่างแพร่หลาย ราวๆ ช่วงปลายเดือน บริษัท Netcraft ได้ประมาณการว่า PHP จะมีผู้นาไปติดตั้งและใช้ งาน ประมาณ 3.6 ด้านโดเมน (Domain) สาหรับ PHP เวอร์ชัน 4 ได้เพิ่มและปรับปรุงคุณสมบัติ ดังต่อไปนี้ กำรจัดกำรทรัพยำกรที่ดีขึ้น (Improved resource handling) ปรับแก้หนึ่งในปัญหาหลักของเวอร์ชัน 3 ให้มีความยืดหยุ่น สามารถนาไปออกแบบและ ประยุกต์ใช้กับระบบงานขนาดใหญ่ ในเวอร์ชันก่อนหน้าไม่ได้มีเจตนาจะใช้ในองค์กรขนาดใหญ่ แต่เนื่อง ด้วยมีการใช้อย่างกว้างขวางและประโยชน์ ทาให้ผู้ พัฒ นาได้คิดและพัฒ นาภาษาให้ส ามารถใช้งานได้ หลากหลาย สนับสนุนกำรเขียนโปรแกรมเชิงวัตถุ (Object-oriented support) PHP เวอร์ชัน 4 สามารถพัฒนาระบบในลักษณะของการเขียนโปรแกรมเชิงวัตถุ ซึ่งมีฟังก์ชันที่ช่วย ในการทางาน แต่ยังไม่ครอบคลุมการทางานมากเท่าไหร่ อย่างไรก็ตามคุณสมบัติใหม่มีบทบาทสาคัญและ ดึงดูดให้ผู้ใช้งานหรือนักพัฒนาระบบ ที่ต้องการพัฒนาโปรแกรมเชิงวัตถุแบบดั้งเดิม หรือเรียกว่า ภาษา OOP นอกจากนั้นยังมีคุณสมบัติ เช่น ระบบแจ้งเตือน overloading และ run-time class ที่ช่วยป้องกันปัญหา เวลาพัฒนาระบบ สาหรับการเขียนโปรแกรมเชิงวัตถุที่สมบูรณ์แบบนั้น ควรใช้ PHP เวอร์ชัน 5 สนับสนุนกำรจัดกำรเซสชั่น (Native session-handling support) การจัดการเซสชั่น HTTP ใช้ได้กับทั้งในเวอร์ชัน 3.x โดยผู้ใช้สามารถเรียกใช้งานผ่านบน phplib (http://phplib.sourceforge.net) แต่สาหรับเวอร์ชัน 4 ผู้ใช้งานสามารถใช้งานได้เลย ซึ่งได้รวม ความสามารถไว้แล้ว คุณลักษณะนี้ได้มาจากการสารวจกิจกรรมและความพึงพอใจของผู้ใช้ส่วนใหญ่ กำรเข้ำรหัส (Encryption) นาไลบรารี่มาจาก MCrypt (http://mcrypt.sourceforge.net) มารวมไว้ใน PHP เวอร์ชัน 4 ก่อนการเผยแพร่ ผู้ใช้สามารถเลือกใช้รูปแบบการเข้ารหัสได้แบบ hash โดยมีอัลกอริทึมที่ได้รวมไว้ ได้แก่ Blowfish, MD5, SHA1 และ TripleDES ฯลฯ สนับสนุน ISAPI (ISAPI support) สนับสนุน ISAPI ให้ผู้ใช้สามารถใช้ PHP ร่วมกับเว็บเซิร์ฟเวอร์ของไมโครซอฟท์ คือ IIS และ Apache เว็บเซิร์ฟเวอร์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 19.
    4 บทที่ 1บทนา สนับสนุน COM / DCOM (Native COM/DCOM support) เปิดโอกาสให้ผู้ใช้งานสามารถเรียกใช้และทางานร่วมกันกับโปรแกรมประยุกต์บนระบบปฏิบัติ Windows สนับสนุนกำรทำงำนร่วมกับภำษำ Java (Native Java support) PHP เวอร์ชัน 4 ได้เพิ่มประสิทธิภาพในการทางานร่วมกับภาษา Java รองรับไวยำกรณ์และนิพจน์ภำษำ Perl (Perl Compatible Regular Expressions (PCRE) library) ภาษา Perl เป็นภาษาที่มีความยาวและซับซ้อน มีรูปประโยคที่เป็นอิสระ แต่การทางานของภาษา Perl เป็นภาษาที่ยอมรับอย่างกว้างขวาง มีประสิทธิภาพการ และมีบทบาทสาคัญ ดังนั้น PHP เวอร์ชัน 4 ได้รวม ฟังก์ชันการทางานของภาษา Perl ไว้ด้วย เพื่อเป็นทางเลือกหนึ่งสาหรับการพัฒนาระบบ และทา ให้ใช้งานได้ง่ายขึ้น นอกจากคุณสมบัติต่างๆ เหล่านี้ ยังมีอีกหลายร้อยฟังก์ชันที่ถูกเพิ่มเข้ามาใน PHP เวอร์ชัน 4 รองรับความหลากหลาย ไลบรารี่ และโมดูลดีๆ มากมาย จากแหล่งต่างๆ เปิดใจรับสิ่งดีๆ ที่มีอยู่ มากมาย ในสากล นามาเพิ่มขีดความสามารถของตัวเอง หลายร้อยฟังก์ชันเหล่านี้จะกล่าวถึงรายละเอียดการใช้งาน ต่อไปในหนังสือเล่มนี้ ผู้แต่งหนังสือเล่มนี้หวังเป็นอย่างยิ่งว่า ผู้อ่านจะเปิดใจรับสิ่งดีๆ ที่มอบให้แล้วนาไป พัฒนาตนเองให้มีความรู้ความสามารถ เพิ่มประสิทธิภาพแก่ตนเอง เหมือนดังเช่น PHP PHP เวอร์ชัน 5 PHP เวอร์ชัน 5 ยังคงวิวัฒนาการไม่หยุดยั้งถึงแม้ว่ารุ่นก่อนหน้าจะมีความสามารถมากมาย มหาศาลโดยการเพิ่มฟังก์ชัน ไลบรารี่ และอื่นๆ อีกมากมาย มาถึง PHP เวอร์ชัน 5 ซึ่งมีการปรับปรุงอีก มากมายเช่นเดิม เพิ่มคุณสมบัติอีกหลายประการ ผู้แต่งเองยังใช้ความสามารถของเวอร์ชัน 4 ยังไม่หมด เวอร์ชัน 5 ก็ออกมาทาหัวใจหวั่นไหวใคร่รู้ PHP 5 มีการปรับปรุงความสามารถเพิ่มเติมขึ้นมาจาก PHP 4 มากมาย ในหัวข้อนี้จะกล่าวถึง ความสามารถที่สาคัญหลัก ๆ ที่เพิ่มเติมขึ้นมาใน PHP 5 ดังนี้ 1. ความสามารถทางด้าน OOP (Object-Oriented Programming) ความสามารถทางด้านการ เขียนโปรแกรมเชิงวัตถุหรือ OOP ได้มีมาตั้งแต่ PHP 3 แล้ว และได้ปรับปรุงต่อเนื่องมาจนถึง PHP 4 แต่ ความสามารถทางด้าน OOP ใน PHP 4 นั้นยังไม่สมบูรณ์นักและยังขาดฟีเจอร์ที่สาคัญในหลายด้าน เช่น การประกาศ Constructors และ Destructors การกาหนดขอบเขตของตัวแปรและเมธอดเป็น public, protected, private เป็นต้น โดยใน PHP 5 ได้ปรับปรุงความสามารถทางด้าน OOP ให้สมบูรณ์ขึ้น ทา ให้โปรแกรมเมอร์สามารถเขียน PHP โดยใช้หลักการของ OOP ได้อย่างสมบูรณ์แบบ 2. เพิ่ม MySQLi Extension MySQL นั้นเป็นระบบจัดการฐานข้อมูลที่ได้รับความนิยมในการ นามาพัฒนา Web Application ร่วมกับ PHP มานาน โดยใน MySQL เวอร์ชัน 4.1 และเวอร์ชัน 5 ได้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 20.
    บทที่ 1 บทนา5 เพิ่มเติมฟีเจอร์ที่สาคัญมากมาย เช่น Prepared statement การเชื่อมต่อฐานข้อมูลโดยใช้ SSL การใช้ Multi-query, Transaction เป็นต้น ดังนั้น PHP 5 จึงได้มีการเพิ่ม MySQL Extention ขึ้นมาใหม่โดยใช้ ชื่อว่า MySQLi จะช่วยให้สามารถนาความสามารถใหม่ ๆ ของ MySQL ออกมาใช้ได้อย่างเต็มที่ 3. ผนวก SQLite ไว้ใน PHP แม้ว่า MySQL จะเป็นระบบจัดการฐานข้อมูลที่ได้รับความนิยมและ นามาใช้ร่วมกับ PHP มากที่สุด แต่ใน PHP 5 นั้นได้ผนวกรวมเอา SQLite ซึ่งเป็นระบบจัดการฐานข้อมูล ขนาดเล็กเข้าไว้ด้วย โดยที่ผู้ใช้ไม่ต้องติดตั้งระบบจัดการฐานข้อมูลเพิ่มเติมก็สามารถเขียนโปรแกรม PHP เพื่อติดต่อกับฐานข้อมูลได้เลย ซึ่งช่วยอานวยความสะดวกในการเขียนโปรแกรมได้มากทีเดียว 4. สนับสนุน XML และ SOAP อย่างเต็มประสิทธิภาพ ใน PHP 5 มีการปรับปรุงความสามารถ ของ XML เพิ่มเติมโดยจะมีไลบรารี libxml2 ซึ่งเป็นไลบรารีมาตรฐานที่ PHP ใช้ติดต่อกับ XML นอกจากนี้ยังปรับปรุงและเพิ่มเติมในส่วนของ DOM(Document Object Model), XSLT (Extensible Stylesheet Language Transformations) และ SimpleXML โดยการออกแบบให้สามารถทางาน ร่วมกับ XML ได้ดียิ่งขึ้น นอกจากนี้ใน PHP 5 ยังสนับสนุน SOAP ซึ่งเป็นส่วนประกอบสาคัญในการ พัฒนาเว็บเซอร์วิส 5. การตรวจจับและจั ดการข้อผิดพลาด ใน PHP 5 มีการพัฒนาระบบตรวจจับและจัดการ ข้อผิดพลาดขึ้นมา เรียกว่า exception handling ซึ่งจะคล้ายกับที่มีในภาษา Java และ C++ ซึ่งจะช่วย อานวยความสะดวกและเพิ่มประสิทธิภาพในการตรวจสอบและจัดการข้อผิด พลาดที่อาจจะเกิดขึ้ นในการ รันโปรแกรมได้ 6. เพิ่ม Iterator Iterator ใน PHP 5 เป็นการใช้คาสั่ง foreach ในการวนลูปร่วมกับข้อมูลชนิด ต่าง ๆ ได้หลายชนิด ไม่ว่าจะเป็นอ็อบเจ็กต์ต่าง ๆ เอกสาร XML โครงสร้างไดเรกทอรี่หรือผลลัพธ์จากการ query ฐานข้อมูล เป็นต้น เป็นอย่างไรกันบ้างครับกับความสามารถใหม่ ๆ ของ PHP 5 คงทาให้ผู้อ่านเห็นภาพรวมที่ชัดเจน ขึ้นและหลายคนอาจจะอยากทดลองใช้กันบ้างแล้ว ซึ่ง นอกจากความสามารถหลัก ๆ ทั้ง 6 ข้อที่ได้อธิบาย ไว้ข้างต้น PHP 5 ยังมีความสามารถที่เพิ่มเติมขึ้นใหม่อีกมากมายที่ยังไม่ได้อธิบายไว้ ณ ที่นี้ เช่น การใช้ ส่วนขยายเพิ่มเติม Tidy เพื่อให้มั่นใจได้ว่าผลลัพธ์ที่แสดงออกมานั้นอยู่รูปแบบของ HTML หรือ XHTML ที่ถูกต้อง การจัดการหน่วยความจาที่ดีขึ้นรวมไปถึงการปรับปรุงและแก้ไขข้อผิดพลาดเดิมใน PHP 4 อีก หลายจุดให้ดียิ่งขึ้น PHP เวอร์ชัน 6 PHP เวอร์ชัน 6 ปัจจุบันกาลังอยู่ในขั้นพัฒนาและปรับปรุงขณะนี้ยังเป็น Beta Version ยังคงใช้ Zend engine เป็นแกนหลัก การเปลี่ยนแปลงที่สาคัญ คือ 1. ไม่มีคุณสมบัติ register_global, magic_quote_gpc และ safe_mode ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 21.
    6 บทที่ 1บทนา 2. ยกเลิกตัวแปร HTTP_*_VARS ทั้งหมด เช่น HTTP_POST_VARS และ HTTP_COOKIE_VARS เป็นต้น 3. สนับสนุนการทางานกับสตริงแบบ Unicode 4. เพิ่มชนิดข้อมูลเลขจานวนเต็มขนาด 64 บิต MySQL คืออะไร MySQL เป็ น ระบบจั ด การฐานข้ อ มู ล เชิ ง สั ม พั น ธ์ (Relational Database Management System) โดยใช้ภาษา SQL แม้ว่า MySQL เป็นซอฟต์แวร์โอเพนซอร์ส แต่แตกต่างจาก ซอฟต์แวร์โอเพนซอร์สทั่วไป โดยมีการพัฒนาภายใต้บริษัท MySQL AB ในประเทศสวีเดน โดยจัดการ MySQL ทั้งในแบบที่ให้ใช้ฟรี และแบบที่ใช้ในเชิงธุรกิจ MySQL สร้างขึ้นโดยชาวสวีเดน 3 คน และชาวฟินแลนด์ ชื่อ David Axmark, Allan Larsson และ Michael "Monty" Widenius. David Axmark Allan Larsson Michael "Monty" Widenius ภำพที่ 1.2 ผู้ร่วมพัฒนา MySQL ที่มา: http://www.mccullagh.org/db9/10d-1/david-axmark-mysql.jpg http://www.wire2011.eu/upload/participant/290/Allan_Larsson.JPG และ http://www.abclinuxu.cz/images/screenshots/2/1/150712-ulf-michael-montywidenius-13235.jpg ปัจจุบันบริษัทซันไมโครซิสเต็มส์ (Sun Microsystems, Inc.) เข้าซื้อกิจการของ MySQL AB เรียบร้อยแล้ว ฉะนั้นผลิตภัณฑ์ภายใต้ MySQL AB ทั้งหมดจะตกเป็นของบริษัทซันไมโครซิสเต็มส์ ชื่อ "MySQL" อ่านออกเสียงว่า "มายเอสคิวเอล" (maɪˌɛskjuːˈɛl) หรือ "มายเอสคิวแอล" (ในการอ่านอักษร L ในภาษาไทย) ซึ่งทางซอฟต์แวร์ไม่ได้อ่าน มายซีเควล หรือ มายซีควล เหมือนกั บ ซอฟต์แวร์จัดการฐานข้อมูลตัวอื่น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 22.
    บทที่ 1 บทนา7 รุ่นของผลิตภัณฑ์ รุ่นของผลิตภัณฑ์นั้นแบ่งออกมาได้ 3 สายการผลิ ต ได้แก่ เวอร์ชันใช้ฟรี เวอร์ชันการค้า และ เวอร์ชันที่สนับสนุนกับผลิตภัณฑ์ SAP (MAX DB) ความแตกต่าง คือ เวอร์ชัน community นั้นสามารถ นาไปใช้งานได้ฟรีแต่ขาดการสนับสนุนหรือการช่วยเหลือเมื่อมีปัญหาเกิดขึ้น เวอร์ชันที่เป็นคอมเมอร์เชียลนั้น ให้บริการด้านความสนับสนุนเมื่อมีปัญหา (ซื้อบริการ) สรุปคร่าวๆ ประเภทของ MySQL ให้เลือกใช้ดังนี้ MySQL Enterprise MySQL Cluster MySQL Embedded MySQL Community (opensource) ควำมสำมำรถที่เพิ่มขึ้น ในเวอร์ชัน 5.0 มีความสามารถหลายอย่างที่สาคัญสาหรับระบบฐานข้อมูลขนาดใหญ่หรือระดับ องค์กร (Enterprise Feature) เช่น Store Procedure, database trigger, database view, database schema ซึ่งได้มีการปรับเพิ่มประสิทธิภาพในส่วนของตารางและการทาดัชนี (index) ขึ้นมา อีก ปัจจุบันเวอร์ชัน community หรือเวอร์ชันที่เสถียร (stable) 5.0 และเวอร์ชันทดสอบคือ 5.1 beta release และ 5.2 Alpha ตั้งแต่เวอร์ชัน 5.1 เริ่มสนับสนุนการทา Partition Database ตารางเวลาสาหรับเหตุการณ์ต่างๆ (Event schedule) ประเภทกำรจัดเก็บข้อมูล (Database Storage Engine) ที่สนับสนุน MyISAM ค่าปกติ (default) InnoDB สนับสนุนการทา ทรานแซคชั่น (transaction) แบบ ACID Memory การจัดเก็บในหน่วยความจา ใช้เป็นตารางชั่วคราวเพื่อความรวดเร็ว เนื่องจากเก็บไว้ใน หน่วยความจา ทาให้มีความเร็วในการทางานสูงมาก Merge เป็นการรวม Table หลาย ๆ ตัวให้แสดงผล หรือแก้ไข เสมือนเป็นข้อมูลจาก Table เดียว Archive เหมาะสาหรับการจัดเก็บข้อมูลพวก log file,ข้อมูลที่ไม่ต้องมีการ คิวรี่ (query) หรือใช้ บ่อยๆ เช่น log file เพื่อประโยชน์ในการตรวจสอบย้อนหลัง (Security Audit Information) Federated สาหรับการจัดเก็บแบบปลายทาง (remote server) แทนที่จะเป็นการจัดเก็บแบบ local เหมือนการจัดเก็บ (Storage) แบบอื่นๆ NDB สาหรับการจัดเก็บแบบ คลัสเตอร์ (cluster) CSV เก็บข้อมูลจาก Text ไฟล์โดยอาศัยเครื่องหมาย คอมมา (comma) เป็นตัวแบ่งฟิลด์ ชนิดของข้อมูลที่สนับสนุน ข้อมูลชนิดตัวเลข ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 23.
    8 บทที่ 1บทนา  BIT ใช้สาหรับเก็บข้อมูลชนิดเลขสองที่มีสัญลักษณ์เพียงสองตัว ประกอบด้วย 0 (ศูนย์) กับ 1 (หนึ่ง) บางครั้งอาจหมายถึงการที่มีโอกาสเลือกได้เพียง 2 ทาง เช่น ปิดกับเปิด ไม่ใช่กับใช่ เท็จกับจริง ซ้ายกับขวา เป็นต้น  TINYINT ใช้สาหรับจัดเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 8 บิต  SMALLINT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 16 บิต  MEDIUMINT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 24 บิต  INT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 32 บิต  BIGINT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนเต็ม ขนาด 64 บิต  FLOAT ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนจริง (เลขที่มเศษทศนิยม) ขนาด 32 บิต ี  DOUBLE ใช้สาหรับเก็บข้อมูลชนิดตัวเลขจานวนจริง เช่นเดียวกับ FLOAT ขนาด 64 บิต ข้อมูลชนิดวันที่และเวลา  DATETIME ใช้สาหรับจัดเก็บข้อมูล วันเดือนปีและเวลา ขนาด 64 บิต แสดงผลใน รูปแบบ YYYY-MM-DD HH:MM:SS  DATE ใช้สาหรับจัดเก็บข้อมูลเฉพาะข้อมูลวันเดือนปี ขนาด 24 บิต แสดงผลในรูปแบบ YYYY-MM-DD  TIME ใช้สาหรับจัดเก็บข้อมูลเฉพาะข้อมูลเวลา ขนาด 24 บิต แสดงผลในรูปแบบ HHH:MM:SS โดยที่ HHH จะคืน ค่าจาก -838 ถึง 838  TIMESTAMP ใช้สาหรับเก็บข้อมูลชนิดวันที่และเวลา เช่นเดียวกับ DATETIME แต่จะ เก็ บ ในรู ป แบบของ YYYYMMDDHHMMSS หรื อ YYMMDDHHMMSS หรื อ YYYYMMDD หรือ YYMMDD แล้วแต่ว่าจะระบุค่าแอตทริบิวต์ TIMESTAMP[(M)] โดย กาหนด M เป็น 14 หรือ 12 หรือ 8  YEAR ใช้สาหรับเก็บข้อมูลปีเท่านั้น ขนาด 8 บิต แสดงผลในรูปแบบ YYYY ซึ่งเป็นค่า ตั้งแต่ 1901 - 2155 เท่านั้น ข้อมูลชนิดสตริง  CHAR ใช้สาหรับเก็บข้อมูลชนิดสตริง ขนาดสูงสุดได้ไม่เกิน 255 อักขระ ถ้าอักขระที่ใช้ ยาวไม่เท่ากับที่กาหนดไว้ อักขระที่เหลือ จะถูกแทนที่ด้วยช่องว่าง  VARCHAR (ย่อมาจาก Variable Character Field หมายถึง กลุ่มข้อมูลตัวอักขระที่ไม่ สามารถระบุความยาวได้ ) ใช้สาหรับเก็บข้อมูลชนิดสตริง ชนิดข้อมูลประเภท varchar สามารถเก็บข้อมูลตัวอักขระขนาดเท่าใดก็ได้ที่ไม่เกินความยาวที่จากัดไว้ (เก็บข้อมูล ตามที่รับมาจริงเท่านั้น) ขนาดสูงสุดได้ไม่เกิน 255 อักขระ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 24.
    บทที่ 1 บทนา9  BINARY ใช้ส าหรั บ เก็บข้อมูล ชนิดเลขสองที่มีสั ญลั กษณ์เพียงสองตัว เหมือน BIT ประกอบด้วย 0 (ศูนย์) กับ 1 (หนึ่ง) บางครั้งอาจหมายถึงการที่มีโอกาสเลือกได้เพียง 2 ทาง เช่น ปิดกับเปิด ไม่ใช่กับใช่ เท็จกับจริง ซ้ายกับขวา เป็นต้น  VARBINARY ใช้สาหรับเก็บข้อมูลชนิดสตริง ขนาดสูงสุดไม่เกิน 8,000 อักขระ มีลักษณะ การเก็บคล้าย VARCHA คือ การเก็บข้อมูลตามที่รับมาจริงเท่านั้น  TINYTEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง ขนาดสูงสุดไม่เกิน 255 อักขระ สามารถใช้ งานฟีเจอร์ FULL TEXT SEARCH ของ MySQL  TEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง เช่นเดียวกับ TINYTEXT ขนาดสูงสุดไม่เกิน 65,535 อักขระ (64 KB) เหมาะสาหรับเก็บข้อมูลจาพวกเนื้อหาทีมีความยาวหรือจานวนมาก ่  MEDIUMTEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง เช่นเดียวกับ TINYTEXT ขนาดสูงสุดไม่ เกิน 16,777,215 อักขระ (16 MB)  LONGTEXT ใช้สาหรับเก็บข้อมูลชนิดสตริง เช่นเดียวกับ TINYTEXT ขนาดสูงสุดไม่เกิน 4,294,967,295 อักขระ (4 GB)  ENUM ใช้สาหรับ เก็บ เซตของข้อมูลชุดหนึ่งที่มีจานวนสมาชิกที่กาหนดไว้แน่นอน และทราบค่าทุกตัว มักจะเป็นข้อมูลที่มีลักษณะคงที่ ขนาดสูงสุดไม่เกิน 65,535 อักขระ  SET ใช้สาหรับเก็บข้อมูลที่เป็นกลุ่มของข้อมูลที่ยอมให้เลือกได้ 1 ค่าหรือหลายๆ ค่า ซึ่ง สามารถกาหนดได้ถึง 64 ค่า ข้อมูลชนิด BLOB (Binary Large Object)  TINYBLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี ได้แก่ ไฟล์ข้อมูลต่างๆ เช่น ไฟล์รูปภาพ ไฟล์มัลติมีเดีย เป็นต้น คือ ไฟล์อะไรก็ตามที่อัพโหลดผ่านฟอร์มอัพโหลดไฟล์ในภาษา HTML ขนาดสูงสุดไม่เกิน 256 ไบต์  BLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี เช่นเดียวกับ TINYBLOB ขนาดสูงสุดได้ไม่เกิน 64,000 ไบต์  EDIUMBLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี เช่นเดียวกับ TINYBLOB ขนาดสูงสุดได้ ไม่เกิน 16 เมกะไบต์ (16 MB)  LONGBLOB ใช้สาหรับเก็บข้อมูลชนิดไบนารี เช่นเดียวกับ TINYBLOB ขนาดสูงสุดได้ไม่ เกิน 4 กิกะไบต์ (4 GB) หมำยเหตุ การกาหนดชนิด ค่าสูงสุด ค่าต่าสุด และตัวอย่างการใช้งาน สามารถอ่านรายละเอียดเพิ่มเติม ได้ ในบทที่ 14 เรื่องฐานข้อมูล MySQL และการใช้งาน phpMyAdmin ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 25.
    10 บทที่ 1บทนา กำรใช้งำน MySQL เป็นที่นิยมใช้กันมากสาหรับฐานข้อมูลสาหรับเว็บไซต์ เช่น มีเดียวิกิ และ phpBB และ นิยมใช้งานร่วมกับภาษาโปรแกรม PHP เป็นหลัก ดังนั้นจะเห็นได้จากคู่มือคอมพิวเตอร์ต่างๆ ที่จะสอน การใช้งาน MySQL และ PHP ควบคู่กันไป นอกจากนี้ หลายภาษาโปรแกรมที่สามารถทางานร่วมกับ ฐานข้อมูล MySQL และรวมถึง ภาษาซี (C Language) ซีพลัสพลัส (C++) ซีชาร์ป (C#) ปาสคาล (Pascal) ภาษาจาวา (Java Language) ภาษาเพิร์ล (Perl Language) พีเอชพี (PHP) ไพทอน (Python) รูบี (Ruby) และภาษาอื่น ใช้งานผ่าน API สาหรับโปรแกรมที่ติดต่อผ่าน ODBC หรือ ส่วนเชื่อมต่อกับ ภาษาอื่น (database connector) เช่น ASP สามารถเรียกใช้ MySQL ผ่านทาง MyODBC, ADO, ADO.NET เป็นต้น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 26.
    บทที่ 2 หลักการทางานของ PHP ภาษาPHP นั้น ทางานอยู่บนฝั่งเซิร์ฟเวอร์ (Server) จะไม่สามารถเห็นโค๊ดของภาษา PHP ที่ เครื่องคอมพิวเตอร์ของไคลเอ็นท์ได้เลย เพราะว่าระหว่างที่ใช้งานเว็บบราวเซอร์เพื่อเรียกชมเว็บไซต์นั้น ใน ฝั่งของเซิร์ฟเวอร์ จะทาการประมวลผลภาษา PHP และส่งผลลัพธ์ที่ได้ คือ คาสั่ง HTML หลังจากนั้นจะ ส่ง HTML ที่ได้จากการประมวลผลแล้วนั้นมาให้กับเว็บบราวเซอร์ของไคลเอ็นท์ แล้วก็จะแสดงผล HTML ให้เห็นเป็นรูปร่างเว็บ และเมื่อ View Source ในฝั่งไคลเอ็นท์ จะเห็นโค๊ดของ HTML เพียงอย่างเดียว แต่ ไม่เห็นโค๊ด PHP เลย สามารถสรุปขั้นตอนและหลักการทางานของ PHP ได้ดังต่อไปนี้ 1) เว็บเซิร์ฟเวอร์ (Web Server) คือ โปรแกรมที่อยู่และทางานบนเครื่องฝั่งเซิร์ฟเวอร์ ทาหน้าที่ ในการรับคาสั่งจากการร้องขอของไคลเอ็นท์ (Client) (โดยผู้ใช้จะเรียกชมหน้าเว็บไซต์ได้โดยใช้โปรโตคอล HTTP ผ่านทางเว็บบราวเซอร์) และประมวลผลการทางานจากการร้องขอดังกล่าว แล้วส่งข้อมูลกลับไปยัง เครื่องของไคลเอ็นท์ ที่ร้องขอ สรุป ก็คือ เว็บเซิร์ฟเวอร์ คือ โปรแกรมที่คอยให้บริการแก่ ไคลเอ็นท์ ที่ร้อง ขอข้อมูลเข้ามาโดยผ่านเว็บบราวเซอร์ หรือ จากการร้องขอโดยโปรโตคอล HTTP ดังกล่าว ซึ่งเว็บที่เขียนก็ สามารถเขียนได้หลายภาษา หลายรูปแบบ การเขียนภาษา PHP ระบบจะสามารถทางานได้ก็จะต้องมี เว็บเซิร์ฟเวอร์ เป็นตัว Run Engine ของภาษานั้นๆ อีกทีหนึ่ง ดังนั้นถ้าต้องการให้ คอมพิวเตอร์สามารถ Run ภาษา PHP ได้นั้น จะต้องจาลองเครื่องคอมพิวเตอร์ให้เป็นเซิร์ฟเวอร์ โดยใช้โปรแกรมเว็บเซิร์ฟเวอร์ ซึ่งจะกล่าวถึงในหัวข้อถัดไป (สาหรับในหนังสือเล่มนี้จะใช้โปรแกรม AppServ เป็นโปรแกรมที่ทาหน้าที่ จาลองเซิร์ฟเวอร์) รวมถึงรูปแบบ และวิธีการเข้าถึงข้อมูล จะเรียกใช้ผ่านบริการจากโปรโตคอล HTTP (Hypertext Transfer Protocol) เพื่อให้ผู้ใช้สามารถอ่านข้อมูล ทั้งภาพและเสียง จากเครื่องบริการผ่าน เว็บบราวเซอร์ เช่น บริการ http://www.freebsd.sru.ac.th หรือ http://www.sru.ac.th เป็นต้น เครื่องเว็บเซิร์ฟเวอร์ดังกล่าวที่รอรับคาร้องขอจากเครื่องไคลเอ็นท์ ผ่านทาง เว็บบราวเซอร์ก็จะทาการ ประมวลผลและส่งข้อมูลที่ประมวลผลได้กลับไปยังเครื่องไคลเอ็นท์ ที่จะส่งไปอาจเป็นเว็บเพจ ประเภท ภาพหรือเสียง เป็นต้น 2) หลักการทางานของเว็บเซิร์ฟเวอร์ มีลักษณะเช่นเดียวกันกับบริการอื่นๆ ของอินเทอร์เน็ต คือ อยู่ในรูปแบบไคลเอ็นท์-เซิร์ฟเวอร์ (Client-Server) โดยมีโปรแกรมเว็บไคลเอ็นท์ (Web Client) ทา หน้าที่เป็นผู้ร้องขอบริการ และมีโปรแกรมเว็บเซิร์ฟเวอร์ ทาหน้าที่เป็นผู้ให้บริการ โปรแกรมเว็บไคลเอ็นท์ ก็คือโปรแกรมเว็บบราวเซอร์ (Web Browser) ในเครื่องของผู้ใช้นั่นเอง สาหรับโปรแกรมเว็บเซิร์ฟเวอร์นั้น จะถูกติดตั้งไว้ในเครื่องของผู้ให้บริการเว็บไซต์ (มักเรียกเครื่องคอมพิวเตอร์ที่ติดตั้งโปรแกรมเว็บเซิร์ฟเวอร์
  • 27.
    12 บทที่ 2หลักการทางานของ PHP เพื่อให้บริการ WWW ว่า "เว็บเซิร์ฟเวอร์ " เช่นเดียวกัน) การติดต่อระหว่างโปรแกรมเว็บบราวเซอร์กับ โปรแกรมเว็บเซิร์ฟเวอร์จะกระทาผ่านโปรโตคอล HTTP (Hypertext Transfer Protocol) ดังภาพที่ 2.1 ภาพที่ 2.1 รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์ผ่านโปรโตคอล HTTP 3) กลไกการทางาน สาหรับเว็บเพจธรรมดาที่โดยปกติมีนามสกุลของไฟล์เป็น htm หรือ html นั้น เมื่อใช้เว็บบราวเซอร์ เปิดดูหรือเรียกดูเว็บเพจใด เว็บเซิร์ฟเวอร์ก็จะส่งเว็บเพจนั้นกลับมายังบราวเซอร์ จากนั้นบราวเซอร์จะแสดงผลไปตามคาสั่งภาษา HTML (Hypertext Markup Language) ที่อยู่ในไฟล์ ภาพที่ 2.2 รูปแบบการติดต่อสื่อสารระหว่างเว็บบราวเซอร์และเว็บเซิร์ฟเวอร์เพื่อเรียกเว็บเพจธรรมดา จะเห็นได้ว่าเว็บเพจ ดังภาพที่ 2.2 เป็นเว็บเพจที่มีลักษณะแบบคงที่ (Static Webpage) กล่าวคือ ผู้ใช้จะพบกับเว็บเพจหน้าตาเดิมๆ ทุกครั้ง จนกว่าผู้ดูแลเว็บจะทาการปรับปรุงเว็บเพจนั้น นี่คือข้อจากัด อันมีต้นเหตุมาจากภาษา HTML ซึ่งเป็นภาษาที่ใช้อธิบายหน้าตาของเว็บเพจ (HTML จัดเป็นภาษาในกลุ่ม ที่เรียกว่า page description language) หรือกล่าวอีกนัยหนึ่งคือ HTML สามารถกาหนดให้เว็บเพจมี หน้าตาอย่างที่ต้องการได้ แต่ไม่ช่วยให้เว็บเพจมีความฉลาดได้ แต่ในปัจจุบันมีการพัฒนาโปรแกรมที่ใช้ใน การจัดการเว็บเพจ ให้มีความน่าดึงดูดและน่าสนใจมากยิ่งขึ้นซึ่งจะมีภาษาอื่นๆ อีกหลายภาษาที่เข้ามามี ส่ว นช่ว ยให้ เว็บไซต์ มีลู กเล่ นและความน่ าสนใจโดยการใช้ภ าษาที่มีความสามารถในการจัดการและ ประมวลผลเว็บเพจนั่นเองซึ่ง จะเห็นได้จากตัวอย่างจากการเขียนด้วยภาษา PHP ซึ่งรูปแบบการแสดงก็ จะมีความเป็น Dynamic หรือ สามารถมีการตอบสนองต่อผู้เข้าใช้งานได้นั่นเอง แต่การที่ระบบจะสามารถ ทางานได้ก็จะต้องมีเว็บเซิร์ฟเวอร์ เป็นตัว Run Engine ของภาษานั้นๆ อีกทีหนึ่ง ดังนั้นถ้าต้องการให้ เครื่องของสามารถ Run PHP ได้นั้น ก็จะต้องจาลองเครื่องคอมพิวเตอร์ของให้เป็นเซิร์ฟเวอร์ โดยใช้ โปรแกรมเว็บเซิร์ฟเวอร์ ดังที่จะกล่าวถึงในลาดับถัดไป ตัวอย่างการร้องขอการใช้งานจากไคลเอ็นท์ โดย เครื่องให้บริการเป็น Web Server engine ของภาษา PHP ดังภาพที่ 2.3 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 28.
    บทที่ 2 หลักการทางานของPHP 13 ภาพที่ 2.3 การร้องขอการใช้งานจากไคลเอ็นท์ ไปยังเครื่องที่ให้บริการเป็น Web Server engine ของ PHP AppServ คืออะไร กาเนิดโปรแกรม AppServ สาหรับโปรแกรม AppServ นี้ไม่ได้เกิดจากการสนับสนุนของหน่วยงานรัฐบาล หรือหน่วยงาน เอกชน หรือองค์กรอิสระใดๆ เลยทั้งสิ้น แต่โปรแกรม AppServ ได้กาเนิดจากแรงบันดาลใจจากเพื่อนของ ผู้พัฒนาคนหนึ่งที่ได้เริ่มศึกษาภาษา PHP และฐานข้อมูล MySQL และมีปัญหาทุกครั้งในการติดตั้ง กว่า จะติดตั้งได้จะใช้เวลาไม่น้อยกว่า 3 ชั่วโมง บางทีทาได้บ้างไม่ได้บ้าง และทุกครั้ งที่ติดตั้งไม่ได้ก็จะมาขอ ความช่วยเหลือจากผู้พัฒนาเป็นประจาทุกครั้ง ทาให้ผู้พัฒนาได้ พัฒนาโปรแกรมที่สะดวกในการติดตั้ง เพื่ อให้ เพื่ อนสามารถนาไปใช้ง านได้ทั น ที ในช่ ว งแรกที่แ จกจ่ ายนั้ น ผู้พัฒนาได้แจกจ่ายในเว็บไซต์ที่เป็นภาษาอังกฤษ ผู้ใช้งานต่างประเทศ ให้ ค วามสนใจและมี ก ารใช้ ง านเป็ น จ านวนมาก และในปั จ จุ บั น ได้ เพิ่มเติมในส่วนของเว็บไซต์ภาษาไทย ประวัตินักพัฒนาโปรแกรม AppServ ภาพที่ 2.4 ภาณุพงศ์ ปัญญาดี ผู้พัฒนา AppServ ที่มา: http://www.sutenm.com/wp-content/uploads/2009/03/apples4.jpg ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 29.
    14 บทที่ 2หลักการทางานของ PHP สาหรับผู้พัฒนานั้นได้อาศัยอยู่ในประเทศไทย ชื่อ ภาณุพงศ์ ปัญญาดี ชื่อเล่น apples เกิดวันที่ 14 สิงหาคม 2523 สาเร็จการศึกษาระดับปริญญาตรีจาก สถาบันราชภัฏเชียงใหม่ คณะวิทยาศาสตร์และ เทคโนโลยี สาขาวิทยาการคอมพิวเตอร์ มีประสบการณ์และความเชียวชาญพิเศษในเรื่ องของ Linux Security, Linux Network, Network Security, Network Admin, PHP Programming, MySQL Database, Linux/Unix Hacking System, Web Design, ฯลฯ ความหมายของโปรแกรม AppServ AppServ คือ โปรแกรมที่รวบรวมเอา Open Source Software หลายๆ อย่างมารวมกัน โดยมี Package หลักดังนี้ 1) Apache 2) PHP 3) MySQL และ 4) phpMyAdmin โปรแกรมต่างๆ ที่นามารวบรวมไว้ทั้งหมดนี้ ได้ทาการดาวน์โหลดจาก Official Release ทั้งสิ้น โดยตัว AppServ จึงให้ความสาคัญว่าทุกสิ่งทุกอย่างจะต้องให้เหมือนกับต้นฉบับ จึงไม่ได้ตัดทอนหรือ เพิ่ มเติ มอะไรที่แปลกไปกว่ า Official Release แต่อย่า งได้ เพียงแต่มีบางส่ ว นเท่านั้นที่ ได้เพิ่ ม ประสิทธิภาพการติดตั้งให้สอดคล้องกับการทางานแต่ละคน โดยที่การเพิ่มประสิทธิภาพนี้ไม่ได้ไปยุ่ง ใน ส่วนของ Original Package เลยแม้แต่น้อยเพียงแต่เป็นการกาหนดค่า Config เท่านั้น เช่น Apache ก็จะ เป็นในส่วนของ httpd.conf, PHP ก็จะเป็นในส่วนของ php.ini, MySQL ก็จะเป็นในส่วนของ my.ini ดังนั้นจึงรับประกันได้ว่าโปรแกรม AppServ สามารถทางานและความเสถียรของระบบ ได้เหมือนกับ Official Release ทั้งหมด จุดประสงค์หลักของการรวมรวบ Open Source Software เหล่านี้เพื่อทาให้การติดตั้งโปรแกรม ต่างๆ ที่ได้กล่าวมาให้ง่ายขึ้น เพื่อลดขั้นตอนการติดตั้งที่แสนจะยุ่งยากและใช้เวลานาน โดยผู้ใช้งานเพียง ดับเบิ้ลคลิก setup ภายในเวลา 1 นาที ทุกอย่างก็ติดตั้งเสร็จสมบูรณ์ระบบต่างๆ ก็พร้อมที่จะทางานได้ ทันทีทั้ง เว็บเซิร์ฟเวอร์, Database Server เหตุผลนี้จึงเป็นเหตุผลหลักที่หลายๆ คนทั่วโลก ได้เลือกใช้ โปรแกรม AppServ แทนการที่จะต้องมาติดตั้งโปรแกรมต่างๆ ที่ละส่วน ไม่ว่าจะเป็นผู้ที่ความชานาญในการติดตั้ง Apache, PHP, MySQL ก็ไม่ได้เป็นเรื่องง่ายเสมอไป เนื่ องจากการติ ดตั้ งโปรแกรมที่ แยกส่ ว นเหล่ า นี้ ให้ มารวมเป็น ชิ้ นอั นเดี ยวกั น ก็ ใช้ เวลาค่ อ นข้ า งมาก พอสมควร แม้แต่ตัวผู้พัฒนา AppServ เอง ก่อนที่จะ Release แต่ละเวอร์ชันให้ดาวน์โหลด ต้องใช้ ระยะเวลาในการติดตั้งไม่น้อยกว่า 2 ชั่วโมง เพื่อทดสอบความถูกต้องของระบบ ดังนั้นจึงจะเห็นว่าเองนั้น เป็นมือใหม่หรือมือเก่า ย่อมไม่ใช่เรื่องง่ายเลยที่จะติดตั้ง Apache, PHP, MySQL ในพริบตาเดียว มีบางคาถามที่พบบ่อยว่า AppServ สามารถนาไปเป็นเว็บเซิร์ฟเวอร์ หรือ Database Server ได้ ทั น ที ห รื อ ไม่ ข้ อ นี้ ต้ อ งตอบว่ า ได้ แ น่ น อน 100% แต่ ท างผู้ พั ฒ นาเองขอแนะน าว่ า ระบบจั ด การ หน่วยความจา และหน่วยประมวลผล บน Windows ที่ทางานเกี่ยวกับเว็บเซิร์ฟเวอร์ หรือ Database Server ไม่เหมาะกับการใช้งานหนักๆ เป็นอย่างยิ่ง เพราะ Windows นั้นจะกลืนกินทรัพยากรอันมหาศาล และหากเทียบอัตรารองรับระบบงานกับระบบปฏิบัติการตัวอื่นเช่น Linux/Unix จะยิ่งเห็นได้ชัดว่า ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 30.
    บทที่ 2 หลักการทางานของPHP 15 ระบบปฏิ บั ติ ก ารที่ เ ป็ น Windows ที่ มี ข นาดหน่ ว ยความจ าและหน่ ว ยประมวลผลที่ เ ท่ า ๆ กั น ระบบปฏิบัติการที่เป็น Linux/Unix นั้น จะรองรับงานได้น้อยกว่ ามากพอสมควร เช่น Windows รับได้ 1,000 คนพร้อมๆ กัน แต่ Linux/Unix อาจรับได้ถึง 5,000 พร้อมๆ กัน หากท่านต้องทางานหนักๆ ทาง ผู้พัฒนาแนะนาให้เลือกใช้ระบบปฏิบัติการ Linux/Unix จึงจะเหมาะสมกว่า ข้อแตกต่างของ AppServ ในแต่ละเวอร์ชัน AppServ ได้แบ่งเวอร์ชันออกเป็น 2 ส่วนด้วยกัน คือ 2.5.x คือ เวอร์ชันที่นา Package ใหม่ๆ นามาใช้งานโดยเฉพาะ เหมาะสาหรับนักพัฒนาที่ต้องการ ระบบใหม่ๆ หรือต้องการทดสอบ ทดลองใช้งานฟังก์ชันใหม่ ซึ่งอาจจะไม่ได้ความเสถียรของระบบได้ 100% เนื่องจากว่า Package จากนักพัฒนานั้นยังอยู่ในช่วงของขั้นทดสอบ ทดลองเพื่อหาข้อผิดพลาดอยู่ 2.4.x คือ เวอร์ชันที่นา Package ที่มีความเสถียรเป็นหลัก เหมาะสาหรับผู้ที่ต้องการความมั่นคง ของระบบ โดยไม่ได้มุ่งเน้นที่จะใช้ฟังก์ชันใหม่ คาแนะนาในการเลือกใช้งาน AppServ AppServ ไม่จาเป็นต้องใช้ เวอร์ชันใหม่เสมอไป แต่ถึงอย่างไรก็ดี ทางผู้พัฒนาเองอยากจะให้ ผู้ใช้งานได้ทดสอบ ทดลองเวอร์ ชัน ใหม่ทุกครั้งที่มีการแจกจ่าย เพื่อช่ว ยในการตรวจสอบปัญหาหรือ ข้อผิดพลาด ซึ่งจะเป็นประโยชน์ต่อตัวผู้พัฒนาเอง และผู้ใช้คนอื่นๆ ที่จะได้ใช้งานระบบมี ข้อผิดพลาดที่ น้อยที่สุด สาหรับผู้ที่ใช้งานระบบที่ไม่มีอะไรเปลี่ยนแปลงมาก หรือไม่ได้ต้องการสิ่งใหม่ๆ แต่ต้องการความ เสถียรเป็นหลัก ในการเลือกใช้ AppServ ให้ท่านเลือกใช้เวอร์ชันที่เหมาะสมกับระบบงานของท่าน เช่น หากท่านใช้ เวอร์ชัน 1.8.0 ได้อย่างไม่มีปัญหา ท่านก็ไม่จาเป็นต้องอัพเกรดเวอร์ชัน ให้ใหม่อยู่เสมอ เพื่อที่จะให้การทางานของระบบท่าน เป็นไปได้อย่างราบรื่น วิธีการติดตั้งโปรแกรม AppServ เตรียมโปรแกรมเพื่อติดตั้ง ดาวน์โหลดโปรแกรม AppServ จากเว็บไซต์ http://www.appservnetwork.com โดยเลือก เวอร์ชันที่ต้องการติดตั้ง ขั้นตอนการติดตั้ง AppServ 1. ดับเบิ้ลคลิกไฟล์ appserv-win32-x.x.x.exe เพื่อทาการติดตั้ง จะปรากฏหน้าจอตามภาพที่ 2.5 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 31.
    16 บทที่ 2หลักการทางานของ PHP ภาพที่ 2.5 ขั้นตอนการติดตั้งโปรแกรม AppServ 2. เข้าสู่ขั้นตอนเงื่อนไขการใช้งานโปรแกรม โดยโปรแกรม AppServ ได้แจกจ่ายในรูปแบบ GNU License หากผู้ติดตั้งอ่านเงื่อนไขต่างๆ เสร็จสิ้นแล้ว หากยอมรับเงื่อนไขให้กด Next เพื่อเข้าสู่การติดตั้ง ในขั้นต่อไป แต่หากว่าไม่ยอมรับเงื่อนไข ให้กด Cancel เพื่อออกจากการติดตั้งโปรแกรม AppServ ดัง ภาพที่ 2.6 ภาพที่ 2.6 แสดงรายละเอียดเงื่อนไขการ GNU License 3. เข้า สู่ ขั้น ตอนการเลื อ กปลายทางที่ ต้องการติด ตั้ง โดยค่าเริ่มต้ นปลายทางที่ ติดตั้ งจะเป็ น C:AppServ หากต้องการเปลี่ยนปลายทางที่ติดตั้ง ให้กด Browse แล้วเลือกปลายทางที่ต้องการ ตามภาพ ที่ 2.7 เมื่อเลือกปลายทางเสร็จสิ้นให้กดปุ่ม Next เพื่อเข้าสู่ขั้นตอนการติดตั้งขั้นต่อไป ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 32.
    บทที่ 2 หลักการทางานของPHP 17 ภาพที่ 2.7 เลือกปลายทางการติดตั้งโปรแกรม AppServ 4. เลือก Package Components ที่ต้องการติดตั้ง โดยค่าเริ่มต้นนั้นจะให้เลือกลงทุก Package แต่หากว่าผู้ใช้งานต้องการเลื อกลงเฉพาะบาง Package ก็ส ามารถเลื อกตามข้อที่ต้องการออก โดย รายละเอียดแต่ละ Package มีดังนี้  Apache HTTP Server คือ โปรแกรมที่ทาหน้าเป็น เว็บเซิร์ฟเวอร์  MySQL Database คือ โปรแกรมที่ทาหน้าเป็น Database Server  PHP Hypertext Preprocessor คือ โปรแกรมที่ทาหน้าประมวลผลการทางานของภาษา PHP  phpMyAdmin คือ โปรแกรมที่ใช้ในการบริหารจัดการฐานข้อมูล MySQL ผ่านเว็บไซต์ เมื่อทาการเลือก Package ตามภาพที่ 2.8 เรียบร้อยแล้ว ให้กด Next เพื่อเข้าสู่ขั้นตอนการ ติดตั้งต่อไป ภาพที่ 2.8 เลือก Package Components ที่ต้องการติดตั้ง 5. กาหนดค่าคอนฟิกของ Apache เว็บเซิร์ฟเวอร์ มีอยู่ด้วยกันทั้งหมด 3 ส่วน ตามภาพที่ 2.9 คือ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 33.
    18 บทที่ 2หลักการทางานของ PHP  Server Name คือ ช่อ งส าหรั บป้ อนข้อ มู ล ชื่ อ เว็ บ เซิ ร์ฟ เวอร์ ของท่า นเช่ น www.freebsd.sru.ac.th  Admin Email คือ ช่องสาหรับป้อนข้อมูล อีเมล์ผู้ดูแลระบบ เช่น root@hotmail.com  HTTP Port คือ ช่องสาหรับระบุ Port ที่จะเรียกใช้งาน Apache เว็บเซิร์ฟเวอร์ โดยทั่วไป แล้ว Protocol หมายเหตุ  HTTP นั้นจะมีค่าหลัก คือ 80 หากว่าท่านต้องการหลีกเลี่ยงการใช้ Port 80 ก็สามารถ แก้ไขได้  หากมีการเปลี่ยนแปลง Port การเข้าใช้งาน เว็บเซิร์ฟเวอร์ แล้ว ทุกครั้งที่เรียกใช้งาน เว็บไซต์  จาเป็นที่ต้องระบุหมายเลข Port ด้วย เช่น หากเลือกใช้ Port 99 ในการเข้าเว็บไซต์ทุก ครั้งต้องใช้ เช่น http://localhost:99 จึงจะสามารถเข้าใช้งานได้ เป็นต้น ภาพที่ 2.9 แสดงการกาหนดค่าคอนฟิกค่า Apache เว็บเซิร์ฟเวอร์ 6. กาหนดค่าคอนฟิกของ MySQL Database มีอยู่ด้วยกันทั้งหมด 3 ส่วน ตามภาพที่ 2.10 คือ  Root Password คือ ช่องสาหรับป้อน รหัสผ่านการเข้าใช้งานฐานข้อมูลของ Root หรือผู้ดูแล ระบบ ทุกครั้งที่เข้าใช้งานฐานข้อมูลในลักษณะที่เป็นผู้ดูแลระบบ ให้ระบุ user คือ root  Character Sets ใช้ในการกาหนดค่าระบบภาษาที่ใช้ในการจัดเก็บฐานข้อมูล , เรียงลาดับ ฐานข้อมูล, Import ฐานข้อมูล, Export ฐานข้อมูล, ติดต่อฐานข้อมูล  Old Password หากท่านมีปัญหาเกี่ยวกับการใช้งาน PHP กับ MySQL API เวอร์ชันเก่า เช่น โดยจะพบ Error ไคลเอ็นท์ does not support authentication protocol ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 34.
    บทที่ 2 หลักการทางานของPHP 19 requested by server; consider upgrading MySQL Client ให้เลือกในส่วนของ Old Password เพื่อหลีกเลี่ยงปัญหานี้  Enable InnoDB หากท่านต้องการใช้งานฐานข้อมูลในรูปแบบ InnoDB ให้เลือกในส่วนนี้ด้วย ภาพที่ 2.10 แสดงการกาหนดค่าคอนฟิกของ MySQL Database 7. หลังกาหนดค่าสาหรับ MySQL Server แล้ว ตัวติดตั้งจะดาเนินการติดตั้งองค์ประกอบต่างๆ ลงในระบบ ภาพที่ 2.11 แสดงการดาเนินการติดตั้งโปรแกรม AppServ 8. สิ้นสุดขั้นตอนการติดตั้งโปรแกรม AppServ สาหรับขั้นตอนสุดท้ายนี้จะมีให้เลือกว่าต้องการ สั่งให้มีการรัน Apache และ MySQL ทันทีหรือไม่ จากนั้นกดปุ่ม Finish เพื่อเสร็จสิ้นการติดตั้งโปรแกรม AppServ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 35.
    20 บทที่ 2หลักการทางานของ PHP ภาพที่ 2.12 แสดงหน้าจอขั้นตอนสิ้นสุดการติดตั้งโปรแกรม AppServ 9. ระบบจะทาการสตาร์ท (Start) โปรแกรม Apache และ MySQL ภาพที่ 2.13 แสดงการสตาร์ทโปรแกรม Apache และ MySQL 10.เมื่อสตาร์ท Apache Http Server เสร็จ ให้ทาการเปิดโปรแกรมเว็บบราวเซอร์ และพิมพ์คา ว่า http://localhost หรือ http://127.0.0.1 ลงไปในช่องรับยูอาร์แอล (Address Bar) หากโปรแกรม Apache ทางานได้เป็นปกติจะปรากฏข้อความ ดังภาพที่ 2.14 ภาพที่ 2.14 แสดงผลการทางานของ AppServ บนหน้าเว็บบราวเซอร์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 36.
    บทที่ 2 หลักการทางานของPHP 21 11.สาหรับองค์ประกอบต่างๆ ของ AppServ จะถูกติดตั้งไว้ที่โฟลเดอร์ C:AppServ ภาพที่ 2.15 แสดงโฟลเดอร์องค์ประกอบต่างๆ ที่สาคัญของ AppServ XAMPP คืออะไร นั ก พั ฒ นาเว็ บ ไซต์ ห ลายคน อาจจะเคยเจอประสบการณ์ ที่ ย ากล าบากในการจ าลองเครื่ อ ง คอมพิวเตอร์ตัวเอง ให้กลายเป็น เว็บเซิร์ฟเวอร์ เพื่อจะสามารถทดสอบการเขียนโปรแกรมบนเว็บไซต์ได้ XAMPP จัดเป็นโปรแกรมจาลองเซิร์ฟเวอร์ชนิดหนึ่ง ประกอบด้วย Apache ทาหน้าที่หลักเป็นเว็บ เซิร์ฟเวอร์ ที่มาพร้อม MySQL, PHP และ Perl ดังนั้นจึงถือได้ว่า XAMPP มีความง่ายต่อการติดตั้ง และ ใช้ ง าน แค่ ด าวน์ โ หลด กระจายไฟล์ อ อก แล้ ว ก็ ติ ด ตั้ ง ใช้ ง านได้ เ ลย (สามารถดาวน์ โ หลดได้ ที่ http://xampp.en.softonic.com/download) กาเนิดโปรแกรม XAMPP พัฒนาโดย kai 'oswald' seidler (ที่มา: http://oswaldism.de/) โปรแกรมเมอร์ ชาวเยอรมันในกรุงเบอร์ลิน และทางานร่วมกับลินุกซ์ ใน ปี ค.ศ. 1996 kai จบการศึกษาจากสถาบันเบอร์ลินเทคโนโลยี ในระดับปริญญาตรี และประกาศนียบัตรในด้าน เทคโนโลยีสารสนเทศ (เทียบเท่าปริญญาโทในสาขาวิทยาศาสตร์คอมพิวเตอร์) ในปี ค.ศ.1990 เขาได้สร้าง และบริหารระบบเซิร์ฟเวอร์ ircnet ซึ่งเป็นระบบเซิร์ฟเวอร์ที่ใหญ่ที่สุดของเยอรมนี คือ irc.fu-berlin.de และร่วมเป็นส่วนหนึ่งในการจัดการเซิร์ฟเวอร์ ที่ใหญ่ที่สุดของโลก คือ ftp.cs.tu-berlin.de เขาได้แสดง ความเป็นมืออาชีพโดยติดตั้งระบบเซิร์ฟเวอร์สาธารณะครั้งแรกของเขาในปี ค.ศ.1993 หลังจากนั้น ปี ค.ศ. 1993 จนถึง ค.ศ.1998 เขาได้เป็นสมาชิกของ projektgruppe kulturraum ซึ่งเป็นอินเทอร์เน็ต สาหรับโครงการวิจัยเกี่ยวกับเครือข่ายวัฒนธรรมและองค์กร (net culture and network organization) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 37.
    22 บทที่ 2หลักการทางานของ PHP ภาพที่ 2.16 kai 'oswald' seidler ผู้พัฒนา XAMPP ที่มา: http://oswaldatwork.thetaoofamp.com/category/apache/ ประมาณปี ค.ศ.2002 เขาร่วมกับ apache friends และสร้างแบบมัลติแพลตฟอร์ม Apache เว็บเซิร์ฟเวอร์รวบรวมโปรแกรมที่เกี่ยวข้องและทางานร่วมกันอย่างสมบูรณ์ กลายเป็น XAMPP หลังจาก นั้นประมาณ ปี ค.ศ.2005 XAMPP จัดเป็นโปรแกรมที่ได้รับความนิยมมากที่สุดทั่วโลก และปัจจุบันเขา ทางานเกี่ยวกับ technology evangelist ให้กับบริษัท Sun Microsystems วิธีการติดตั้ง XAMPP บนระบบปฏิบัติ Windows เตรียมโปรแกรมเพื่อติดตั้ง ดาวน์โหลด XAMPP จากเว็บไซต์ http://xampp.en.softonic.com/download ขั้นตอนการติดตั้ง XAMPP 1. ดับเบิ้ลคลิกไฟล์ xampp-win32-1.x.x.exe เพื่อทาการติดตั้ง จะปรากฏหน้าจอตามภาพที่ 2.17 ภาพที่ 2.17 ขั้นตอนการติดตั้ง XAMPP 2. จากภาพที่ 2.17 เข้าสู่ขั้นตอนการติดตั้ง XAMPP และเลือกตาแหน่งปลายทางที่จะติดตั้ง โปรแกรม หากต้องการเปลี่ ย นตาแหน่ งปลายทางคลิ กปุ่ม Browse เพื่อเปลี่ ยนตาแหน่งใหม่ เมื่ อ ปรับเปลี่ยนตาแหน่งปลายทางเรียบร้อยแล้วคลิกปุ่ม Install เพื่อเริ่มติดตั้งโปรแกรมและเข้าสู่การติดตั้งใน ลาดับขั้นตอนต่อไป แต่หากไม่ต้องการติดตั้งตั้ง ให้คลิกปุ่ม Cancel เพื่อออกจากการติดตั้งโปรแกรม ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 38.
    บทที่ 2 หลักการทางานของPHP 23 ภาพที่ 2.18 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการสร้าง Shortcuts ใน Start menu และ Desktop 3. จากภาพที่ 2.18 ต้องการสร้าง shortcuts ใน Start Menu และ Desktop หรือไม่ ในลักษณะของคาถาม yes หรือ no ถ้าต้องการให้พิมพ์ y หากไม่ต้องการให้พิมพ์ n เมื่อใส่คาตอบแล้ว ก็กดปุ่ม Enter เพื่อเข้าสู่การติดตั้งในลาดับขั้นตอนต่อไป ภาพที่ 2.19 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการทวนถามความถูกต้องของตาแหน่งติดตั้ง 4. จากภาพที่ 2.19 เป็นส่วนของการทวนถามความถูกต้องของตาแหน่งปลายทางที่จะใช้ในการ ติดตั้ง XAMPP เป็นผลมาจากภาพที่ 2.17 หรือไม่ ในลักษณะของคาถาม yes หรือ exit ถ้าถูกต้องให้ พิมพ์ y หากต้องการออกจากการติดตั้งให้พิมพ์ x เมื่อใส่คาตอบแล้วก็กดปุ่ม Enter ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 39.
    24 บทที่ 2หลักการทางานของ PHP ภาพที่ 2.20 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการติดตั้ง portable แบบ without drive letters 5. จากภาพที่ 2.20 ถามว่าจะสร้างที่อยู่สาหรับ XAMPP แบบพกพาโดยไม่ต้องสร้างไดรว์หรือไม่ สาหรับขั้นตอนนี้ขอแนะนาให้กด y แล้วกด Enter เผื่อวันข้างหน้าจะได้ไม่ยุ่งยากเวลาย้ายไฟล์ไปเครื่องอื่น ด้วยการคัดลอกใส่ USB drive หรืออุปกรณ์เก็บข้อมูลอื่นๆ ภาพที่ 2.21 ขั้นตอนการติดตั้ง XAMPP แสดงผลการดาเนินการติดตั้ง XAMPP แบบพกพา 6. จากภาพที่ 2.21 แสดงผลการดาเนินการติดตั้ง XAMPP แบบพกพา และแจ้งให้ทราบว่า XAMPP พร้อมใช้งานแล้ว ให้กดปุ่ม Enter เพื่อเข้าสู่ขั้นตอนลาดับถัดไป ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 40.
    บทที่ 2 หลักการทางานของPHP 25 ภาพที่ 2.22 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับโซนเวลาในไฟล์ php.ini และ my.ini 7. จากภาพที่ 2.22 ระบบแจ้งรายละเอียดการปรับเปลี่ยนโซนเวลาในไฟล์ในไฟล์ php.ini และ my.ini ซึ่งสามารถปรับเปลี่ยนในภายหลังได้ ให้กดปุ่ม Enter เพื่อเข้าสู่ขั้นตอนลาดับถัดไป ภาพที่ 2.23 ขั้นตอนการติดตั้ง XAMPP ในส่วนของการปรับเปลี่ยนการใช้งานเพิ่มเติม 8. จากภาพที่ 2.23 ใช้สาหรับการปรับเปลี่ยนคุณลักษณะอื่นๆ เพิ่มเติม ขอแนะนาให้พิมพ์ x เพื่อ ออกจากการติดตั้งและเริ่มใช้งานในลาดับ ถัดไป หรือพิมพ์ 1 เพื่อเปิด XAMPP Control Panel เพื่อ ควบคุมการทางานของโปรแกรมต่างๆ ที่เกี่ยวข้อง แล้วกดปุ่ม Enter เพื่อเริ่มต้นใช้งาน XAMPP 9. เปิด XAMPP Control Panel แล้วตรวจสอบโปรแกรมหลักๆ ที่จะใช้งานว่า Started หรือไม่ หลักๆ แล้วให้ดูที่ Apache และ MySQL จะต้องมีสถานะเป็น Started ดังภาพที่ 2.25 ภาพที่ 2.24 แสดงขั้นตอนการเปิด XAMPP Control Panel ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 41.
    26 บทที่ 2หลักการทางานของ PHP ภาพที่ 2.25 แสดงหน้าจอ XAMPP Control Panel เพื่อควบคุมโปรแกรมต่างๆ ที่เกี่ยวข้อง 9. เปิดโปรแกรมเว็บบราวเซอร์ และพิมพ์คาว่า http://localhost หรือ http://127.0.0.1 ลงไปใน ช่องรับยูอาร์แอล (Address Bar) หากระบบสามารถทางานได้เป็นปกติจะปรากฏข้อความ ดังภาพที่ 2.26 ภาพที่ 2.26 แสดงผลการทางานของ XAMPP บนหน้าเว็บบราวเซอร์ 10. ที่เก็บเอกสารสาหรับเริ่มต้นพัฒนาเว็บไซต์ จะอยู่ในโฟลเดอร์ htdocs ในตาแหน่ง Path ที่ ได้ดาเนินการติดตั้ง XAMPP และควรสร้างโฟลเดอร์ใหม่ไม่ให้ปนกับเอกสารใดๆ เพื่อความสะดวกและ ป้องกันข้อผิดพลาดเนื่องจากตั้งชื่อซ้ากับเอกสารหลัก ตัวอย่างเช่น สร้างโฟลเดอร์ชื่อ project ไว้ใน c://xampp/htdocs ดังในภาพ 2.27 ภาพที่ 2.27 แสดงการสร้างโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 42.
    บทที่ 2 หลักการทางานของPHP 27 11. ทดลองเขียน script PHP ไปไว้ที่ myproject ตามที่ได้สร้างเอาไว้ โดยเขียน script ง่ายๆ ให้ แ สดง PHP information ออกมาที่ ห น้ า จอ (บั น ทึ ก ไฟล์ ใ นชื่ อ phpinfo.php ไว้ ใ น c://xampp/htdocs/myproject) ดังนี้ <?php echo phpinfo ( ); ?> ภาพที่ 2.28 แสดงการบันทึกไฟล์ลงในโฟลเดอร์เก็บเอกสารเว็บเพจของ XAMPP เพื่อทดสอบและใช้งาน 12. ท ด ส อ บ ก า ร เ รี ย ก ไ ฟ ล์ ใ ช้ ง า น ผ่ า น เ ว็ บ บ ร า ว เ ซ อ ร์ แ ล ะ พิ ม พ์ ที่ อ ยู่ http://localhost/myproject/phpinfo.php การเลือกใช้เครื่องมือสาหรับการเขียนโค้ด (Choosing a Code Editor) การเริ่มต้นพัฒนาเขียนโค้ดภาษา PHP มีเครื่องมือสาหรับการแก้ไขหลายตัว เช่น Notepad++, Editplus, vi, และ Adobe Dreamweaver CS3 เป็นต้น มีหลายเหตุผลในการเลือก เพื่อให้การพัฒนา เป็นไปอย่างราบรื่น แต่ละโปรแกรมจะมีจุดด้อยจุดเด่นแตกต่างกันไป มีทั้งแบบโอเพนซอร์ส และแบบเชิง พาณิ ช ย์ ส าหรั บ ประกอบการตั ดสิ น ใจเลื อกใช้ ลองมาท าความรู้ จักตั ว อย่ างเครื่อ งมือ ดังกล่ าวกัน มี รายละเอียด ดังต่อไปนี้ Notepad++ Notepad++ คือ โปรแกรม Text Editor มีความสามารถที่เทียบเท่า โปรแกรม Editplus ที่ทุกคนเคยใช้มาในอดีต ไม่ว่าจะเป็นการแก้ไข source code ซึ่งรองรับ syntax ในรูปแบบโปรแกรมได้หลากหลาย หรือแม้แต่กระทั่ง จะนามาใช้แทนโปรแกรม Notepad แบบธรรมดาในระบบปฏิบัติการ MSWindows ก็สามารถทาได้เลย ไม่ต้องวิ่งหา cd-key หรือโปรแกรมแคร๊กเพื่อทาให้โปรแกรม Text Editor สามารถใช้ได้และ หมดปัญหาเรื่องลิขสิทธิ์อีกต่อไป เพียงเปลี่ยนมาใช้ Notepad++ เนื่องจากเป็นโปรแกรมที่โหลดให้ใช้ฟรี ภายใต้สัญญา GPL สามารถดาวน์โหลดได้ที่ http://notepad-plus.sourceforge.net/ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 43.
    28 บทที่ 2หลักการทางานของ PHP คุณสมบัติหลัก 1. มี syntax highlight ซึ่งช่วยให้การเขียนโค๊ดโปรแกรมได้สะดวก รองรับภาษาคอมพิวเตอร์ได้ หลายภาษา เช่น C, C++, Java, C#, XML, HTML, PHP, CSS, makefile ASCII art (.nfo), doxygen, ini file, batch file, Javascript, ASP, VB/VBS, SQL, Objective-C, RC resource file, Pascal, Perl, Python, Lua, TeX, TCL, Assembler, Ruby เป็นต้น 2. มีระบบเขียนไป ดูไปด้วย WYSIWYG 3. สามารถกาหนดและปรับแต่ง syntax highlight ได้เองระบบเติมคาอัตโนมัติ 4. สามารถเปิดเอกสารได้หลายหลายชนิดในเวลาเดียวกัน 5. เปลี่ยนมุมมองในการใช้โปรแกรมได้หลายมุมมอง (Multi View) 6. ระบบกรองคา เพื่อการค้นหาและแทนที่คา 7. รองรับการใช้เมาส์ลากวาง 8. ขยายและย่อตัวอักษรได้ด้วยเมาส์ 9. รองรับได้หลายภาษา รวมทั้งภาษาไทยด้วย 10. ทา Bookmark ตาแหน่งบรรทัดที่แก้ไขบ่อยๆได้ 11. มีเส้นแสดงตาแหน่งของวงเล็บปีกกา ช่วยให้การไล่โค๊ดทาได้สะดวกขึ้น 12. บันทึกการทางานแบบมาโครได้ ช่วยให้การทางานที่ซ้าๆ เสร็จเร็วขึ้น 13. ประกอบด้วย Theme ที่หลากหลายให้เลือกใช้ตามความต้องการ EditPlus Editplus คือ โปรแกรม Text Editor ตัวหนึ่ง คล้ายกับโปรแกรม Notepad, Dreamweaver (ซึ่งมีคุณสมบัติเป็นทั้งโปรแกรมสาเร็จรูปในการสร้าง เว็บเพจด้วย)ที่ใช้ในการพัฒนาสคริปต์โปรแกรมต่างๆ ไม่ว่าจะเป็น เขียนและแก้ไข Source code ในการสร้างเว็บเพจ ด้วยภาษา HTML ,PHP ,Java เป็นต้น เป็น เครื่องมือที่ทางานบนระบบปฏิบัติ MS-Windows เท่านั้น ความสามารถของ Editplus 1. สามารถใช้กับภาษาไทยได้ 2. แยกคาสั่งต่างๆ ด้วยการแสดงสีที่ไม่เหมือนกัน ทาให้สามารถตรวจสอบได้ง่ายเมื่อพิมพ์คาสั่งผิด 3. สามารถทาตัวเองเป็นเว็บบราวเซอร์ได้ด้วย (IE 5.XX Compatible) 4. เมื่อเขียนเว็บเพจด้วยภาษา HTML เสร็จแล้ว สามารถดูการแสดงผลได้เลยทันที โดยใช้เมนู View > View in Browser หรือ Ctrl-B หรือ ใช้วิธีคลิกปุ่มไอคอน View in Browser 5. สามารถเปิดไฟล์ได้ทีละหลายๆ ไฟล์พร้อมกันได้ 6. สามารถค้นหาและแทนที่ (Find & Replace) ข้อความเดียวกันได้ทีละหลายๆ ไฟล์พร้อมกัน ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 44.
    บทที่ 2 หลักการทางานของPHP 29 7. สามารถค้นหาข้อความที่ต้องการ ว่าปรากฏอยู่ในไฟล์ไหนบ้าง (พร้อมแสดงหมายเลขบรรทัด ด้วย) ในไดเรกทอรี่เดียวกัน vi vi (visual editor) คือ Text Editor พื้นฐานในระบบปฏิบัติการ UNIX ซึ่งเป็นโปแกรม editor ใช้สาหรับ เพิ่ม ลบ แก้ไข ไฟล์ข้อมูลใดๆ โดยมีคาสั่ง พื้นฐานดังนี้ UNIX vi editor มี 2 โหมด: 1. Command mode เป็นคาสั่งสาหรับทาการใดๆกับไฟล์ 2. Insert mode ใช้สาหรับการใส่ข้อมูลลงไฟล์ กดปุ่ม <Esc> (Escape) สาหรับยกเลิกการใช้โหมด insert ทั้ง UNIX และ vi เป็น casesensitive. (ตัวเล็กตัวใหญ่ต่างกัน) เริ่มต้น ใช้ vi ตามด้วยชื่อไฟล์ ถ้าไฟล์มีอยู่แล้ว จะเป็นการเปิดไฟล์นั้นๆ ขึ้นมาเพื่อทาการแก้ไข ถ้าไฟล์ยังไม่มีจะเป็นการสร้างไฟล์ใหม่ขึ้นมา รูปแบบการใช้คาสั่ง vi filename edit filename starting at line 1 vi -r filename recover filename that was being edited when system crashed การออกจาก vi (Exit vi) หลังจากที่ทาการสร้าง หรือ แก้ไขไฟล์เรียบร้อยแล้ว เมื่อจะออกจาก vi สามารถที่จะออกโดย บันทึกหรือ ไม่บันทึกไฟล์ที่สร้างหรือแก้ไขก็ได้ เมื่อทาการกดปุ๋ม (:) cursor จะอยู่ที่ด้านล่างของหน้าจอ แล้วให้ทาการพิมพ์คาสั่งที่ต้องการแล้ว จบคาสั่งด้วยการกดปุ่ม <Return> (or <Enter>) <Return> quit vi, writing out modified file to file named in original invocation :wq<Return> quit vi, writing out modified file to file named in original invocation :q<Return> quit (or exit) vi :q!<Return> quit vi even though latest changes have not been saved for this vi call Adobe Dreamweaver CS3 ถื อ ได้ ว่ า เป็ น เครื่ อ งมื อ ส าหรั บ สร้ า งเว็ บ เพจ และดู แ ลเว็ บ ไซต์ ที่ มี ประสิทธิภาพสูง เป็นที่นิยมใช้ของ Web Master อย่างกว้างขวาง สามารถใช้ เขียนภาษาสาหรับการพัฒนาเว็บเพจหลายหลากหลาย เช่น HTML, PHP, ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 45.
    30 บทที่ 2หลักการทางานของ PHP ASP, JSP เป็นต้น สามารถสอดแทรก Java Script และลูกเล่นต่างๆ ได้มากมาย ช่วยประหยัดเวลา และ ทางานได้สะดวกยิ่งขึ้น ความสามารถของ Adobe Dreamweaver CS3 จะมีลักษณะคล้ายกับการพิมพ์งานในโปรแกรม Text Editor ทั่วไป แต่มีความสามารถ สรุปได้ ดังนี้ 1. สนับสนุนการทางานแบบ WYSIWYG (What You See Is What You Get) หมายความว่า เว็บที่เขียนในหน้าของ Dreamweaver เขียนไว้อย่างไร ก็จะแสดงแบบเดียวกับในเว็บเพจจริงๆ ในเว็บ บราวเซอร์ ช่วยให้เขียนเว็บเพจได้ง่าย โดยไม่ต้องเขียน Code HTML เองทั้งหมด 2. มีเครื่องมือในการช่วยสร้างเว็บเพจ ที่มีความยืดหยุ่นสูง 3. สนับสนุนภาษาสคริปต์ต่างๆ ทั้งฝั่ง ไคลเอ็นท์ และ Server เช่น Java, ASP, PHP, CGI, VBScript เป็นต้น 4. มีเครื่องมือในการ Upload หน้าเว็บเพจไปที่เครื่องเซิร์ฟเวอร์เพื่อทาการเผยแพร่งานที่สร้างใน อินเทอร์เน็ต โดยส่งผ่าน FTP หรือ โดยการใช้โปรแกรม FTP ภายนอกช่วย เช่น WS FTP, filezilla เป็นต้น 5. รองรับมัลติมีเดีย เช่น การแทรกไฟล์เสียง ไฟล์วิดีโอ แฟลช (Flash) เป็นต้น การใช้งานพื้นฐานที่ควรทราบ 1. ภาษา HTML เป็นภาษาที่ออกแบบสาหรับการแสดงผลเท่านั้น (Static Webpage) ไม่ สามารถประมวลผล หรือ ใช้เขียนเว็บแอพพลิเคชั่นได้ หากต้องการเขียนเว็บแอพพลิเคชั่น (Dynamic Webpage) ต้องศึกษาภาษา PHP, ASP, JSP เป็นต้น เพิ่มเติม 2. หากต้องการเพิ่มลูกเล่น หรือ เทคนิคพิเศษ เช่น Effect ต่างๆ ต้องนาภาษา JavaScript หรือ AJAX มาเสริมใน HTML 3. การจัดรูปแบบใน Code เช่น การขึ้นบรรทัดใหม่ การเว้นวรรค ไม่มีผลต่อการแสดงผลทาง เว็บบราวเซอร์ 4. การขึ้นบรรทัดใหม่ ต้องใน tag <BR> หรือ กดปุ่ม Shift+Enter 5. การขึ้นย่อหน้าใหม่ ต้องใช้ tag <P> หรือ กดปุ่ม Enter 6. การเว้นวรรค ต้องใช้ tag พิเศษ คือ &nbsp; หรือ กดปุ่ม Ctrl+Shift+Spacebar 7. หลักการอ่าน tag ของภาษา HTML จะอ่านค่าจาก tag ที่อยู่ด้านในก่อน 8. ไฟล์ HTML และ Script ต่างๆ สามารถเปิดแก้ไขในโปรแกรม Text Editor ทั่วๆ ไป ไม่ จาเป็นต้องแก้ไขใน Dreamweaver เพียงอย่างเดียว 9. การแทรกข้อความ และการปรับแต่งค่าต่างๆ ให้คลิกตาแหน่งที่ต้องการ แล้วพิมพ์ข้อความ ตามต้องการ หรือให้เลือกข้อความเมื่อต้องการกาหนดค่าต่างๆ เพิ่มเติม ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 46.
    บทที่ 3 PHP เบื้องต้น การแทรกคาสั่งภาษาPHP ในเอกสาร HTML สามารถแทรกคาสั่งภาษา PHP ได้โดยการใช้ PHP tags ซึ่งมีไว้เพื่อเป็นการบ่งบอกให้รู้ส่วนที่เป็น คาสั่งของภาษา PHP ที่อยู่ในเอกสาร HTML การใช้ PHP tags นั้นสามารถทาได้ 4 รูปแบบ ดังต่อไปนี้ XML Style หรือ Default Syntax รูปแบบ <?php คาสั่ง; ?> ตัวอย่างที่ 3.1 รูปแบบการใช้ PHP tag แบบ XML Style <?php echo “Hello World ! <br/>”; echo “I am PHP”; ?> SGML หรือ Short Tags รูปแบบ <? คาสั่ง; ?> ตัวอย่างที่ 3.2 รูปแบบการใช้ PHP tag แบบ SGML <? echo “Hello World ! <br/>”; echo “I am PHP”; ?> Script Style รูปแบบ <script language=`php’> คาสั่ง; </script> ตัวอย่างที่ 3.3 รูปแบบการใช้ PHP tag แบบ Script Style <script language=“php”> echo “Hello World”; </script>
  • 47.
    32 บทที่ 3PHP เบื้องต้น ASP Style รูปแบบ <% คาสั่ง; %> ตัวอย่างที่ 3.4 รูปแบบการใช้ PHP tag แบบ ASP Style <% echo “Hello World ! <br/>”; echo “I am PHP”; %> แบบที่แนะนาให้ใช้ คือ XML style หรือ Default Syntax เนื่องจากสามารถทางานได้กับทุก เซิร์ฟเวอร์ อีกทั้งสอดคล้องกับไวยากรณ์ของภาษา XML สามารถวางคาสั่งในภาษา PHP ไว้ภายในเอกสาร HTML ตามที่ต้องการได้ โดยที่ PHP tags อาจจะวางอยู่สลับกับ HTML tags ตัวอย่าง ดังนี้ ตัวอย่างที่ 3.5 การใช้ PHP tags ร่วมกับ HTML tags <html> <head> <title>My Homepage</title> </head> <body> <h1><?php echo "Hello World!"; ?></h1> </body> </html> องค์ประกอบพื้นฐานของการเขียน PHP PHP นั้นจะใช้โครงสร้างทางภาษาในรูปแบบเดียวกับภาษาซี ดังนั้ นแนวทางในการเขียนจึง คล้ายคลึงกัน ทั้งนี้มีองค์ประกอบพื้นฐานบางส่วนที่ควรรู้จัก เพื่อจะได้นาไปใช้ร่วมกับการเขียนโปรแกรม อื่นๆ ต่อไป ดังนี้ เครื่องหมายสิ้นสุดคาสั่ง ใน PHP จะใช้เครื่องหมาย ; (Semicolon) เป็นตัวแสดงจุดสิ้นสุดในแต่ละคาสั่ง เช่น $x = 10; $z = “abc”; หลังใส่เครื่องหมาย ; เพื่อสิ้นสุดคาสั่งแล้ว สามารถนาคาสั่งอื่นมาต่อท้ายได้เลย แต่การเขียนโค๊ด ลักษณะนี้จะอ่านโปรแกรมได้ยาก ดังนั้นไม่นิยมทากัน เช่น $x = 10; $y = x + 10 : $z = “abc”; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 48.
    บทที่ 3 PHPเบื้องต้น 33 คาอธิบาย (Comment) คาอธิบาย ใช้ในการอธิบ ายเกี่ยวกับโปรแกรมที่เขียน เพื่อช่ว ยให้พิจารณาโค้ดได้ง่ายขึ้น แต่ โปรแกรมจะไม่นาส่วนที่เป็นคาอธิบายไปประมวลผลได้ใน PHP สามารถเขียนคาอธิบายได้หลายแบบดังนี้  Single-Line C++ Syntax หรือ Shell Syntax เป็นการเขียนคาอธิบายบรรทัดเดียว โดยใช้เครื่องหมาย // หรือ # ซึ่งโปรแกรมจะถือว่า ตั้งแต่สัญลักษณ์เป็นต้นไปตลอดทั้งบรรทัดเป็นคาอธิบายทั้งหมด และจะไม่นาบรรทัดนั้นมาประมวลผล ดังนี้ ตัวอย่างที่ 3.6 แสดงการใช้เครื่องหมาย // หรือ # เพื่อเขียนคาอธิบายแบบบรรทัดเดียว //Author : Parinya Noidonprai #All Rights Reserved  Multiple-Line C Syntax เป็นการเขียนคาอธิบายแบบหลายๆ บรรทัด โดยใช้สัญลักษณ์ /* */ ซึ่งโปรแกรมจะถือ ว่าตั้งแต่สัญลักษณ์ /* เป็นต้นไปเป็นคาอธิบาย จนกว่าจะเจอสัญลักษณ์ */ จึงจะถือว่าสิ้นสุดคาอธิบาย ตัวอย่าง ดังนี้ ตัวอย่างที่ 3.7 แสดงการใช้เครื่องหมาย /* */ เพื่อเขียนคาอธิบายแบบหลายบรรทัด /* Author : Parinya Noidonprai All Rights Reserved */ การแสดงผลข้อมูลผ่านเว็บบราวเซอร์ (Outputting Data to the Browser) การแสดงผลคือ การที่ PHP ส่งผลลัพธ์ของที่เกิดจากการทางานของสคริปต์กลับไปที่บราวเซอร์ ซึ่งใน PHP มีหลายคาสั่งที่สามารถทาเช่นนี้ได้ โดยมีรายละเอียด ดังต่อไปนี้ คาสั่ง print ( ) คาสั่ง print ( ) สามารถใช้แสดงผลลัพธ์ของข้อมูลแล้วส่งผ่านไปแสดงผลยังเว็บบราวเซอร์ โดยมี รูปแบบ (คาสั่ง print ( ) ไม่ใช่ฟังก์ชันแต่เป็นคาสั่งโครงสร้างพื้นฐานของภาษา) ดังนี้ รูปแบบ int print (string $arg) เมื่อ $arg หมายถึง ตัวแปรข้อมูลนาเข้า (The input data) หากการทางานของคาสั่ง print ( ) ถูกต้อง จะมีการส่งค่ากลับเป็น "1" เสมอ หากการทางานไม่ ถูกต้องก็จะส่งค่ากลับเป็นค่าอื่นๆ ตัวอย่างที่ 3.8 การใช้งานคาสั่ง print ( ) <?php print ("<p>I love the summertime.</p>"); ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 49.
    34 บทที่ 3PHP เบื้องต้น ตัวอย่างที่ 3.9 การแสดงค่าของตัวแปรผ่านคาสั่ง print ( ) <?php $season = "summertime"; print "<p>I love the $season.</p>"; ?> ตัวอย่างที่ 3.10 การใช้ประโยคพารามิเตอร์อยู่คนละบรรทัดผ่านคาสั่ง print ( ) <?php print "<p>I love the summertime.</p>"; ?> จากตัวอย่างทั้งหมดที่ได้แสดงโค๊ดตัวอย่างคาสั่ง ผลลัพธ์ จะแสดง ดังนี้ I love the summertime. รูปแบบได้กาหนดให้ใส่พารามิเตอร์ในวงเล็บของประโยคคาสั่ง print ( ) ด้วยความที่ PHP ออกแบบมาให้ง่ายและยืดหยุ่น ซึ่งจะใส่วงเล็บก็ได้ไม่ใส่ก็ได้ ก็จะสามารถแสดงผลลัพธ์ได้เหมือนกัน คาสั่ง echo ( ) คาสั่ง echo ( ) สามารถใช้แสดงผลลัพธ์ของข้อมูลแล้วส่งผ่านไปแสดงผลยังเว็บบราวเซอร์ เหมือนกับคาสั่ง print ( ) ส่วนความแตกต่างนั้น คือ คาสั่ง print ( ) จะมีการตรวจสอบข้อผิดพลาดมากกว่า คาสั่ง echo ( ) แต่ไม่มีความสาคัญมากนักสามารถใช้งานเหมือนๆ กัน โดยรูปแบบของคาสั่ง echo ( ) (คาสั่ง echo ( ) ไม่ใช่ฟังก์ชันแต่เป็นคาสั่งโครงสร้างพื้นฐานของภาษาเช่นเดียวกับคาสั่ง print ( ) มีดังนี้ รูปแบบ void echo ( string $arg1 [, string $... ] ) เมื่อ $arg1 หมายถึง ตัวแปรข้อมูลนาเข้า (สามารถกาหนดได้หลายตัวแปร) ตัวอย่างที่ 3.11 การใช้คาสั่ง echo ( ) <?php $heavyweight = "Lennox Lewis"; $lightweight = "Floyd Mayweather"; echo $heavyweight, " and ", $lightweight, " are great fighters."; ?> ผลลัพธ์ Lennox Lewis and Floyd Mayweather are great fighters. ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 50.
    บทที่ 3 PHPเบื้องต้น 35 หากเจตนาต้องการแสดงผลลัพธ์ที่มีการผสมผสานระหว่างข้อความแบบคงที่และข้อมูลแบบได นามิกผ่านตัวแปร ขอให้พิจารณาใช้ printf ( ) แทนซึ่งมีการแนะนาต่อไป หากเป็นเพียงข้อความแบบคงที่ ธรรมดาทั่วๆ ไป ก็ขอแนะนาให้ใช้คาสั่ง echo ( ) หรือ print ( ) เพื่อการทางานก็เพียงพอแล้ว คาสั่ง printf ( ) คาสั่ง printf ( ) ใช้สาหรับแสดงในรูปแบบข้อความ (Formatted String) เหมาะสาหรับการ แสดงผลลัพธ์แบบผสมผสานระหว่างข้อความแบบคงที่และข้อมูลแบบไดนามิกที่เก็บไว้ในตัวแปรหรือ หลายๆ ตัวแปร และยังสามารถควบคุมการแสดงผลข้อมูลแบบไดนามิก เจาะจงการแสดงผลที่หน้าจอมี ความเที่ยงในการจัดตาแหน่งแต่และตาแหน่ง มีรูปแบบการใช้งาน ดังนี้ รูปแบบ int printf ( string $format [, mixed $args [, mixed $... ]] ) เมื่อ $format หมายถึง ตัวกาหนดชนิดการแสดงผล (Type Specifiers) $args หมายถึง ตัวแปรข้อมูลนาเข้า ตัวอย่างที่ 3.12 การใช้คาสั่ง printf ( ) สาหรับแสดงในรูปแบบข้อความ printf ("Bar inventory: %d bottles of tonic water.", 100); ผลลัพธ์ Bar inventory: 100 bottles of tonic water. ในตัวอย่างนี้ %d เป็น Format สาหรับตัวกาหนดชนิดการแสดงผล ในที่นี้ %d คือ การ กาหนดให้แสดงค่าของตัวเลขจานวนเต็ม นอกจากนั้นยังหมายถึงการระบุตาแหน่งที่จะให้แสดงผลลัพธ์ จากตัวอย่าง เมื่อใช้คาสั่ง printf () มีค่าพารามิเตอร์ ที่ส่งเข้ามา คือ 100 ค่า 100 จะถูกแทนที่ใน %d ระหว่างข้อความ สาหรับกรณีที่ ตัวเลขที่ส่งเข้ามาเป็นค่าทศนิยม ค่าดังกล่าวก็จะถูกปัดเศษให้เป็นจานวน เต็มที่ใกล้ เ คีย งที่สุ ด เช่น ถ้าส่ งค่าเป็ น 100.2 ผลลั พธ์จะแสดงเป็น 100 ส าหรับตัว กาหนดชนิดการ แสดงผล มีรายละเอียด ดังตารางที่ 3.1 ดังนี้ ตารางที่ 3.1 แสดงตัวกาหนดชนิดการแสดงผลที่ใช้ร่วมกับคาสั่ง printf ( ) ตัวกาหนดชนิด ความหมาย %b เป็นชนิดตัวเลข แสดงผลเป็นเลขไบนารี (a binary number) %c เป็นชนิดตัวเลข แสดงผลเป็นตัวอักขระ ASCII %d เป็นชนิดตัวเลขจานวนเต็มบวกและลบ แสดงผลเป็นตัวเลขฐานสิบ %f เป็นชนิดตัวเลขจานวนจริง แสดงผลเป็นตัวเลขฐานสิบและทศนิยม %o เป็นชนิดตัวเลขจานวนเต็ม แสดงผลเป็นตัวเลขฐานแปด %s เป็นชนิดข้อความ แสดงผลเป็นข้อความ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 51.
    36 บทที่ 3PHP เบื้องต้น ตารางที่ 3.1 (ต่อ) ตัวกาหนดชนิด %u %x %X ความหมาย เป็นชนิดตัวเลขจานวนเต็มบวก แสดงผลเป็นตัวเลขฐานสิบ เป็นชนิดตัวเลข แสดงผลเป็นเลขฐานสิบหก (อักษรพิมพ์เล็ก) เป็นชนิดตัวเลข แสดงผลเป็นเลขฐานสิบหก (อักษรพิมพ์ใหญ่) ดังนั้นหากต้องการที่จะส่งผ่านข้อมูล 2 ค่า สามารถทาได้โดยระบุตัวกาหนดชนิด 2 ตัวเช่นกัน ดัง ตัวอย่าง ดังนี้ ตัวอย่างที่ 3.14 การใช้คาสั่ง printf ( ) โดยระบุตัวกาหนดชนิดมากกว่า 1 ชนิด printf ("%d bottles of tonic water cost $%f", 100, 43.20); ผลลัพธ์ 100 bottles of tonic water cost $43.20 หากต้องการกาหนดจ านวนของการแสดงผลจานวนเลขทศนิยม สามารถกาหนดได้โ ดยระบุ ตัวเลขไว้ก่อนหน้า ตัวกาหนดชนิด ดังนี้ ตัวอย่างที่ 3.15 การใช้คาสั่ง printf ( ) เพื่อการแสดงผลจานวนเลขทศนิยม printf ("$%.2f", 43.2); // ผลลัพธ์ คือ $43.20 คาสั่ง sprintf ( ) คาสั่ง sprintf ( ) เป็นฟังก์ชันที่ทาหน้าที่เหมือนคาสั่ง printf ( ) แตกต่างก็ตรงที่ฟังก์ชัน sprintf ( ) ใช้ ส าหรั บ ส่ ง ค่ า กลั บ เป็ น ข้ อความหรื อ สตริ ง หรื อ เป็น การน าสตริ ง มาต่ อ ให้ เ ป็น ประโยคเดี ย วกัน แล้ ว กาหนดค่าให้กับตัวแปร เพื่อประโยชน์การทางานตามเหมาะสม ไม่มีการแสดงผลออกไปยังเว็บบราวเซอร์ ลักษะการใช้งานเหมือน printf ( ) ดังนั้นจะใช้ ตัวกาหนดชนิด เหมือนกัน ตามตารางที่ 3.1 การใช้งานมี รูปแบบ ดังนี้ รูปแบบ string sprintf ( string $format [, mixed $args [, mixed $... ]] ) ตัวอย่างที่ 3.16 การใช้คาสั่ง sprintf ( ) สาหรับส่งค่ากลับเป็นข้อความให้เป็นประโยคเดียวกัน $cost = sprintf ("$%.2f", 43.2); // ผลลัพธ์ คือ กาหนดให้ $cost = $43.20 ชนิดข้อมูลที่รองรับใน PHP (PHP’s Supported Datatypes) ใน PHP มีข้อมูล อยู่ หลายชนิด ไม่ว่าจะเป็นข้อมูลชนิดบูลีน (Boolean) ตัวเลขจานวนเต็ม (Integer) ตัวเลขจานวนจริง (Float) ข้อความหรือสตริง (String) และอาร์เรย์ (Array) เพื่อทาความเข้าใจ และสามารถนาไปใช้ร่วมกับการกาหนดตัวแปรในหัวข้อต่อๆ ไป ดังรายละเอียดต่อไปนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 52.
    บทที่ 3 PHPเบื้องต้น 37 ชนิดข้อมูลพื้นฐาน (Scalar Datatypes) ชนิดข้อมูลพื้นฐาน เป็นชนิดข้อมูลที่กาหนดให้ตัวแปรหนึ่งๆ เก็บข้อมูลได้เพียงค่าเดียว ชนิดของ ข้อมูลที่จัดอยู่ในกลุ่มนี้ประกอบด้ วย บูลีน ตัวเลขจานวนเต็ม ตัวเลขจานวนจริง และข้อความหรือสตริง มีรายละเอียด ดังนี้ 1) ข้อมูลชนิดบูลีน ข้อมูลชนิดบูลีนเป็นชื่อหลังของ George Boole (1815-1864) นักคณิตศาสตร์ที่ได้รับการ ยกย่องให้เป็นหนึ่งในผู้ก่อตั้งทฤษฎีข้อมูลตัวแปรบูลีน เป็นตัวแทนของความจริงที่สนับสนุนเพียงสองค่า เท่านั้น คือ TRUE (จริง) และ FALSE (เท็จ) หรือสามารถใช้เลขศูนย์แทน FALSE และค่าใดๆ ที่ไม่ใช่ศูนย์ แทนค่าของ TRUE ดังตัวอย่างต่อไปนี้ ตัวอย่างที่ 3.17 การกาหนดข้อมูลตัวแปรชนิดบูลีน $alive = false; // $alive is false. $alive = 1; // $alive is true. $alive = -1; // $alive is true. $alive = 5; // $alive is true. $alive = 0; // $alive is false. นอกจากการกาหนดเป็นชนิดบูลีนแล้วยังได้มาจากการเปรียบเทียบทางตรรกะ เพื่อตัดสินใจ ดาเนินการขั้นต่อไป เช่น หากผลลัพธ์ออกมาเป็น TRUE ก็จะทางานต่อ แต่ถ้าออกมาเป็น FALSE ก็จะ หยุดทางาน เป็นต้น 2) ข้อมูลชนิดเลขจานวนเต็ม ข้อมูล ชนิ ดเลขจ านวนเต็มเป็นตัว แทนของจ านวนเต็มใดๆ ที่ไม่ประกอบด้ว ยส่ ว นที่เป็ น เศษส่วน PHP สนับสนุนค่าจานวนเต็มแสดงในเลขฐาน 10 (Decimal) เลขฐาน 8 (Octal) และเลขฐาน 16 (Hexadecimal) ตัวอย่าง ดังนี้ ตัวอย่างที่ 3.18 ตัวอย่างข้อมูลชนิดเลขจานวนเต็ม 42 // เลขฐาน 10 0755 // เลขฐาน 8 0xC4E // เลขฐาน 16 ขนาดสู ง สุ ด ของข้ อ มู ล ชนิ ด เลขจ านวนเต็ ม สู ง สุ ด ที่ ร องรั บ ขึ้ น อยู่ กั บ แพลตฟอร์ ม ที่ ใ ช้ (ระบบปฏิบัติการที่ใช้) สาหรับ PHP 5 และเวอร์ชันก่อนหน้านี้ จะเป็น 32 bit จะมีขนาดสูงสุดของเลขเต็ม บวกและเต็มลบเท่ากับ 231 สาหรับ PHP 6 จะสนับสนุนค่าสูงสุดของเลขเต็มบวกและเต็มลบเท่ากับ 263 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 53.
    38 บทที่ 3PHP เบื้องต้น 3) ข้อมูลชนิดเลขจานวนจริง ข้ อ มู ล ชนิ ด เลขจ านวนจริ ง หรื อ เรี ย กว่ า ตั ว เลขทศนิ ย ม ช่ ว ยให้ ส ามารถระบุ ตั ว เลขที่ มี รายละเอียดที่แท้จริงของเลข เช่น ใช้แทนค่าทางการเงิน น้าหนัก ระยะทางและพื้นที่ทั้งหมด เป็นต้น ซึ่ง ข้อมูลชนิดจานวนเต็มไม่สามารถระบุได้ มีตัวอย่าง ดังนี้ ตัวอย่างที่ 3.19 แสดงตัวอย่างข้อมูลชนิดเลขจานวนจริง 4.5678 4.0 8.7e4 1.23E+11 4) ข้อมูลชนิดข้อความหรือสตริง ข้อมูลชนิดข้อความหรือสตริง คือ ข้อมูลที่เป็นอักขระ อาจจะเป็นภาษาอังกฤษ ไทย อื่นๆ ก็ ได้ แต่เนื่องจากสตริงมีความยาวเท่าไหร่ก็ได้ และไม่จาเป็นต้องเขียนอักขระทุกตัวติดกันไปจนจบสตริง เหมือนกับการเขียนตัวเลข จึงทาให้โปรแกรมไม่สามารถตัดสินใจได้ว่า สตริงนั้นเริ่มต้ นและสิ้นสุดที่ใด ดังนั้ น การกาหนดข้ อมูล ที่ เป็ น สตริ ง ต้ องกาหนดจุ ดเริ่มต้ นและสิ้ นสุ ด ของมั นเสมอ ด้ว ยเครื่อ งหมาย Double Quotes (“…”) หรือไม่ก็ใช้ Single Quotes(‘…’) เช่น “Hello, world” หรือ ‘Welcome to Thailand’ เป็นต้น แต่อย่างไรก็ตาม การใช้เครื่องหมาย Quotes ทั้งสองแบบจะมีข้อแตกต่างกันในบาง กรณี ซึ่งจะได้กล่าวถึงในลาดับต่อไป ตัวอย่างที่ 3.20 แสดงตัวอย่างข้อมูลชนิดข้อความหรือสตริง "PHP is a great language" "whoop-de-do" '*9subwayn' "123$%^789" นอกจากนี้ยังสามารถเลือกอักขระบางตัวจากข้อความทั้งหมดได้ โดยใช้อาร์เรย์ ดังนี้ ตัวอย่างที่ 3.21 แสดงตัวอย่างการเลือกอักขระบางตัวจากข้อความทั้งหมด $color = "maroon"; $parser = $color[2]; // กาหนดให้ตัวแปร $parser มีค่าเท่ากับ 'r' วิธีการนับลาดับเริ่มจาก 0 ชนิดข้อมูลแบบชุด (Compound Datatypes) ชนิดข้อมูลแบบชุด เป็นการรวมชุดของรายการที่คล้ายกันไว้ด้วยกัน อาจเป็นตัวแปรชื่อเดียวกัน เป็นข้อมูลชนิดเดียวกันเพื่อใช้ในการอ้างอิงถึงกลุ่มข้อมูลชนิดเดียวกัน ในที่นี้ หมายถึง อาร์เรย์ (Array) มี รายละเอียด ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 54.
    บทที่ 3 PHPเบื้องต้น 39 1) อาร์เรย์ (Array) อาร์เรย์จะมีประโยชน์ในการรวมชุดของรายการที่คล้ายกันรวมกันไว้ด้วยกัน เพื่อใช้สาหรับการ อ้างอิงถึงข้อมูลอะไรบางอย่างเฉพาะเจาะจง โครงสร้างข้อมูลที่เรียกว่าอาร์เรย์ ที่ถูกกาหนดอย่างมีรูปแบบ เป็นกลุ่มเดียวกัน มีดัชนีเพื่อใช้เข้าถึงหรืออ้างถึงสมาชิกข้อมูลในลาดับต่ างๆ การอ้างถึงสมาชิกหนึ่งๆ ใน อาร์เรย์จะต้องใช้ดัชนีอาร์เรย์ในการชี้ตาแหน่ง (คีย์) อ้างอิงค่าที่สอดคล้องกัน และแต่ละข้อมูลในสมาชิก สามารถที่จะอ้างอิงด้วยตัวเลขที่เรียบง่ายไปยังตาแหน่งของค่าในชุดหรืออาจมีบางส่วนสัมพันธ์โดยตรงกับค่า ตัวอย่างที่ 3.22 แสดงตัวอย่างการกาหนดค่าสมาชิกให้กับตัวแปรชนิดอาร์เรย์โดยใช้ดัชนีอาร์เรย์ $province [0] = "Thailand"; $province [1] = "Myanmar"; ... $province [50] = "Cambodia"; นอกจากนี้ยังสามารถสร้างดัชนีความสัมพันธ์เพื่อเชื่อมโยงข้อมูล เช่น สร้างความสัมพันธ์ของ อาร์เรย์ไปยังเมืองหลวงของประเทศต่างๆ แทนที่จะใช้ดัชนีที่เป็นตัวเลข โดยใช้ชื่อของประเทศแทนดัชนี ความเชื่อมโยงแทน ดังนี้ ตัวอย่างที่ 3.23 แสดงตัวอย่างการกาหนดค่าสมาชิกให้กับตัวแปรชนิดอาร์เรย์โดยใช้ชื่อแทนดัชนี $state ["Thailand"] = "Bangkok"; $state ["Myanmar"] = "Naypyidaw"; ... $state ["Cambodia"] = "Phnom Penh"; 2) วัตถุ (Object) ชนิดข้อมูลวัตถุ ที่สนับสนุนใน PHP มีแนวคิดมาจากกระบวนทัศน์ ในการเขียนโปรแกรมเชิง วัตถุ ซึ่งแตกต่างจากชนิดข้อมูลอื่นๆ ในภาษา PHP วัตถุจะต้องประกาศอย่างชัดเจน การประกาศลักษณะ ของวัตถุ และลักษณะการทางานนี้จะเกิดขึ้นภายในสิ่งที่เรียกว่า "คลาส" มีตัวอย่าง ดังนี้ ตัวอย่างที่ 3.24 แสดงตัวอย่างการเขียนโปรแกรมเชิงวัตถุด้วยภาษา PHP class Appliance { private $_power; function setPower ($status) { $this->_power = $status; // การเรียกใช้เมธอดภายในคลาสเดียวกัน } } $blender = new Appliance; // การกาหนดให้ $blender ให้สามารถ // เรียกใช้เมธอดของคลาส Appliance ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 55.
    40 บทที่ 3PHP เบื้องต้น การแปลงชนิดข้อมูลโดยใช้ตัวแปร การแปลงค่าของชนิดข้อมูลหนึ่งไปเป็นชนิดข้อมูลอื่นๆ ได้นั้น จาเป็นต้องรู้ถึงชนิดของข้อมูลที่จะ แปลงไป การแปลงค่าของชนิดข้อมูลสามารถทาได้โดยการวางชนิดที่ต้องการแปลงไว้ในด้านหน้าของตัวแปร ที่จะทาการแปลง สาหรับรายละเอียดของชนิดของตัวแปลง แสดงในตารางที่ 3.2 มีรายละเอียด ดังต่อไปนี้ ตารางที่ 3.2 ตัวดาเนินการแปลงชนิดของข้อมูล (Type Casting Operators) Cast Operators (array) (bool) or (boolean) (int) or (integer) (int64) 64-bit (object) (real) or (double) or (float) (string) Conversion Array Boolean Integer integer (introduced in PHP 6) Object Float String ตัวอย่างที่ 3.25 ตัวอย่างการแปลงตัวเลขจานวนเต็มเป็นเลขจานวนจริง $score = (double) 13; // ผลลัพธ์ทได้คือ $score = 13.0 ี่ ตัวอย่างการแปลงค่าข้อมูลชนิดตัวเลขจานวนจริง (double) เป็นเลขจานวนเต็มจะเห็นได้ว่าเลข ทศนิยมด้านหลังจะถูกปัดทิ้ง ดังนี้ ตัวอย่างที่ 3.26 การแปลงค่าข้อมูลชนิดตัวเลขจานวนจริงเป็นเลขจานวนเต็ม $score = (int) 14.8; // ผลลัพธ์ คือ $score = 14 ตัวอย่างที่ 3.27 การแปลงค่าข้อมูลชนิดข้อความหรือสตริงไปเป็นชนิดตัวเลขจานวนเต็ม $sentence = "This is a sentence"; echo (int) $sentence; // ผลลัพธ์ คือ returns 0 ตัวอย่างที่ 3.28 การแปลงค่าข้อมูลปกติเป็นข้อมูลชนิดอาร์เรย์ $score = 1114; $scoreboard = (array) $score; echo $scoreboard [0]; // ผลลัพธ์ที่แสดงออกมา คือ 1114 ตัวอย่างที่ 3.29 การแปลงค่าข้อมูลปกติเป็นข้อมูลชนิดวัตถุ $model = "Toyota"; $obj = (object) $model; //ค่าของข้อมูลสามารถอ้างอิงได้ ดังนี้ print $obj -> scalar; // ผลลัพธ์ คือ returns "Toyota" ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 56.
    บทที่ 3 PHPเบื้องต้น 41 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ (Adapting Datatypes with Type Juggling) PHP ถูกออกแบบมาให้มีความยืดหยุ่นสูง สามารถปรับเปลี่ยนค่าตัวแปรได้หลากหลายและ ทันท่วงที แบบอัตโนมัติหรือสามารถปรับเปลี่ยนชนิดของตัวแปรแบบอัตโนมัติ โดยจะระบบจะทาการ พิจารณาความเหมาะสมกับสถานการณ์ที่มีการอ้างอิงตัวแปร ตัวอย่างต่อไปนี้ ตัวอย่างที่ 3.30 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ แบบที่ 1 <?php $total = 5; // เป็นชนิดตัวเลข integer $count = "15"; // เป็นชนิด string $total += $count; // ผลลัพธ์ของการคานวณ คือ $total = 20 (เป็นชนิด integer) ?> ตัวอย่างที่ 3.31 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ แบบที่ 2 <?php $total = "45 fire engines"; $incoming = 10; $total = $incoming + $total; // ผลลัพธ์ คือ $total = 55 ?> ตัวอย่างที่ 3.32 การปรับเปลี่ยนชนิดข้อมูลแบบอัตโนมัติ แบบที่ 3 <?php $val1 = "1.2e3"; // 1,200 $val2 = 2; echo $val1 * $val2; // ผลลัพธ์ที่แสดงออกมา คือ 2400 ?> ฟังก์ชันที่เกี่ยวข้องกับชนิดข้อมูล (Type-Related Functions) ฟังก์ชันที่เกี่ยวข้องกับชนิดข้อมูล เช่น การตรวจสอบ และการแปลงชนิดข้อมูล มีรายละเอียด ดังนี้ ฟังก์ชันเรียกดูชนิดของข้อมูล (Retrieving Types) ฟังก์ชัน gettype ( ) เป็นฟังก์ชันที่ใช้สาหรับเรียกดูชนิดของข้อมูล โดยการส่งกลับเป็นชนิดของ ข้อมูลในตัวแปร โดยค่าที่ส่งกลับมีทั้งหมด 9 ค่า ประกอบด้วย boolean, integer, double หรือ float, string, array, object, resource, NULL และ unknown type รูปแบบการใช้งาน ดังนี้ รูปแบบ string gettype ( mixed $var ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 57.
    42 บทที่ 3PHP เบื้องต้น เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบชนิด ตัวอย่างที่ 3.33 ตัวอย่างการใช้ฟังก์ชัน gettype ( ) เรียกดูชนิดของข้อมูล <?php $data = "Mr.Parinya"; echo gettype ($data); // ผลลัพธ์ คือ string ?> ฟังก์ชันแปลงชนิดข้อมูล (Converting Types) ฟังก์ชัน settype ( ) เป็นฟังก์ชันสาหรับแปลงตัวแปรตามที่ระบุ ให้เป็นชนิดอื่นๆ ตามต้องการ ชนิดของข้อมูลที่สามารถแปลงได้นั้น มี 7 ชนิด ประกอบด้วย array, boolean, float, integer, null, object และ string นอกจากนี้ถ้าหากการแปลงชนิดข้อมูลประสบความสาเร็จ ฟังก์ชัน settype ( ) จะมี การส่งค่ากลับผลลัพธ์จะมีค่าเป็น TRUE หากไม่สาเร็จจะส่งค่ากลับเป็น FALSE รูปแบบการใช้งาน ดังนี้ รูปแบบ bool settype ( mixed &$var , string $type ) เมื่อ $var หมายถึง ตัวแปรที่ต้องการแปลงชนิด $type หมายถึง ชนิดที่ต้องการแปลง มีรายละเอียดดังนี้ "boolean" คือ บูลีน "integer" คือ เลขจานวนเต็ม "float" คือ เลขจานวนจริง "string" คือ ข้อความ "array" คือ อาร์เรย์ "object" คือ ออบเจ็กต์ "null" คือ ค่าว่างหรือไม่กาหนดชนิดใดๆ ตัวอย่างที่ 3.34 ตัวอย่างการใช้ฟังก์ชัน settype ( ) เพื่อแปลงหรือกาหนดชนิดข้อมูล <?php $foo = "5bar"; // เป็นชนิด string $bar = true; // เป็นชนิด boolean settype ($foo, "integer"); // ผลลัพธ์ $foo จะมีค่าเท่ากับ 5 และเป็นชนิด integer settype ($bar, "string"); // ผลลัพธ์ $bar จะมีค่าเท่ากับ "1" และเป็นชนิด string ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 58.
    บทที่ 3 PHPเบื้องต้น 43 ฟังก์ชันตรวจสอบชนิดของข้อมูล (Type Identifier Functions) ฟังก์ชันที่ใช้สาหรับตรวจสอบชนิดของข้อมูล ประกอบด้วย is_array ( ), is_bool ( ), is_float ( ) หรือ is_real ( ), is_integer ( ) หรือ is_int ( ), is_null ( ), is_numeric ( ), is_object ( ), is_resource ( ), is_scalar ( ) และ is_string ( ) ทุกฟังก์ชันจะมีรูปแบบการใช้งานเหมือนกัน ประกอบด้วย ชื่อฟังก์ชันตรวจสอบ และในพารามิเตอร์ให้ใส่ตัวแปรที่ต้องการตรวจสอบ หลังจากที่ฟังก์ชัน ทาการตรวจสอบแล้วและมีการส่งค่ากลับเป็น TRUE หากค่าของตัวแปรตรงกับชนิดข้อมูลที่ตรวจสอบ หากไม่ตรงกับชนิดข้อมูลที่ตรวจสอบจะส่งค่ากลับเป็น FALSE มีรูปแบบ ดังนี้ รูปแบบ boolean is_name (mixed var) // เมื่อกาหนดให้ is_name แทนชื่อฟังก์ชันตรวจสอบ เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบชนิด ตัวอย่างที่ 3.35 ตัวอย่างการใช้ฟังก์ชัน is_name ( ) เพื่อตรวจสอบชนิดของข้อมูล <?php if (is_int (23)) { echo "is integer <br/>"; } else { echo "is not an integer <br/>"; } var_dump (is_int (23)); var_dump (is_int ("23")); var_dump (is_int (23.5)); ?> ผลลัพธ์ is integer bool (true) bool (false) bool (false) คาสงวนของ PHP (Reserved Words) คาสงวน หมายถึง คาที่จะใช้เป็นคาสั่งเฉพาะของ PHP ดังนั้นต้องไม่นาคาเหล่านี้ไปตั้งเป็นชื่อ ตัวแปร หรือฟังก์ชัน มิฉะนั้นจะทาให้เกิดข้อผิดพลาดขึ้นได้ โดยคาเหล่านี้คือ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 59.
    44 บทที่ 3PHP เบื้องต้น ตารางที่ 3.3 คาสงวนของ PHP and or _LINE_ array ( ) class const die ( ) do empty ( ) enddeclare endswitch endwhile for foreach include ( ) include_once ( ) print ( ) require ( ) switch unset ( ) _FUNCTION_ _CLASS_ interface (5) implements (5) protected (5) abstract (5) throw (5) cfunction (4 only) xor as continue echo ( ) endfor eval ( ) function isset ( ) require_once ( ) use _METHOD_ extends clone (5) old_function (4 only) _FILE_ exception (5) break case declare default else elseif endforeach endif exit ( ) extends global if list ( ) new return ( ) static var while nal ( ) php_user_lter (5) public (5) private (5) try (5) catch (5) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 60.
    บทที่ 4 ตัวแปร ตัวดำเนินกำรและนิพจน์(Variables, Operators and Expressions) ในการศึกษาการเขียนโปรแกรมทุกภาษา สิ่งที่ควรเรียนรู้เป็นลาดับแรกๆ คือ การกาหนดตัวแปร สาหรับเก็บข้อมูลบางอย่างเอาไว้ก่อนจะนาไปใช้งานอื่นๆ ต่อไป และขั้นตอนถัดไปก็คือ รู้จักการใช้ ตัว ดาเนินการแบบต่างๆ สาหรับใช้ในการประมวลผลข้อมูลเพื่อให้ได้ผลลัพธ์ที่ต้องการ ตัวแปร (Variable) ตัวแปร ใช้ในการเก็บพักข้อมูลบางอย่างก่อนที่จะนาข้อมูลนั้นไปใช้งานอื่นๆ ต่อไป ที่น่าสนใจ สาหรับตัวแปรใน PHP ไม่จาเป็นต้องได้รับการประกาศอย่างชัดเจนเหมือนภาษาอื่นๆ แต่ก็ไม่เป็นสิ่งที่ดี นักหากขาดทักษะการเขียนโปรแกรมที่ดี ก็อาจจะทาให้เกิดความสับสนในการใช้งานได้ รายละเอียดที่ น่าสนใจเกี่ยวกับตัวแปรมีดังนี้ ข้อกำหนดของตัวแปรใน PHP วิธีการกาหนดตัวแปรใน PHP จะมีข้อกาหนดที่สาคัญดังนี้คือ  ตัวแปรใน PHP ไม่จาเป็นต้องระบุชนิดของข้อมูล เนื่องจากตัวแปรแต่ละตัวสามารถเก็บข้อมูล ชนิดใดก็ได้  ตัวแปรใน PHP จะต้องขึ้นด้วยสัญลักษณ์เครื่องหมาย $ (Dollar Sign) แล้วตามด้วยชื่อของ ตัวแปรที่ต้องการใช้งาน เช่น $name, $value, $a, $x เป็นต้น  ตามข้อกาหนดดั้งเดิมนั้น ตัวแปรต้อง ขึ้นต้น ด้วยอักษร a-z หรือ A-Z หรือเครื่องหมาย _ เท่านั้น ห้ามขึ้นต้นด้วยตัวเลข 0-9 หรืออักขระอื่นๆ นอกเหนือจากนี้ ตัวอย่างการกาหนดตัวแปรที่ถูกต้อง เช่น $name, $_price, $value1, $num2string  การเขียนตัวแปรด้วยลักษณะ ตัวพิมพ์ที่แตกต่างกัน ถือว่าเป็นตัวแปรคนละตัว เช่น $abc, $ABC จะถือว่าไม่ใช่ตัวแปรเดียวกัน  ในปั จ จุ บั น สามารถน าอักขระภาษาอื่น ๆ มาตั้งเป็นชื่อตัว แปรได้ ซึ่งจากการทดสอบของ ผู้เขียนพบว่า สามารถตั้งชื่อเป็นภาษาไทยก็ได้ เช่น $ชื่อ, $จานวน1, $ผลลัพธ์ เป็นต้น แต่โดยทั่วไปแล้ว นิยมตั้งชื่อตัวแปรเป็นภาษาอังกฤษมากกว่า เมื่อได้ประกาศตัวแปรก็สามารถเริ่มต้นใช้งานได้ทันที แต่ก่อนที่จะนาตัวแปรไปใช้งานได้นั้น ตัว แปรจะต้องเก็บข้อมูลบางอย่างเอาไว้ หรือเรียกว่าการกาหนดค่าตัวแปร การกาหนดค่าตัวแปรแบบง่ายๆ คื อ การคั ด ลอกค่ า หรื อ โอนถ่ า ยค่ า ของนิ พ จน์ ห รื อ สมการต่ า งๆ โดยมี สั ญ ลั ก ษณ์ ที่ ใ ช้ ก าหนดค่ า คื อ
  • 61.
    46 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) เครื่องหมาย = (เท่ากับ) การกาหนดค่าตัวแปรนั้น หลักๆ จะมีอยู่ด้วยกัน 2 วิธี คือ 1) กาหนดค่าตัวแปร ปกติ (by value) และ 2) กาหนดตัวแปรโดยการอ้างอิง (by reference) ดังนี้ กำรกำหนดค่ำตัวแปรปกติ (Value Assignment) การกาหนดค่าตัวแปรรูปแบบนี้ เป็นการกาหนดค่าตัวแปรแบบง่ายที่สุดและนิยมใช้งานโดยทั่วไป สามารถกาหนดได้หลายลักษณะขึ้นอยู่กับชนิดข้อมูล ดังนี้ สาหรับข้อมูลชนิดตัวเลข ก็เขียนเป็นตัวเลขลงๆ ไปโดยตรงได้เลย ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.1 การกาหนดค่าตัวแปรปกติ $x = 123; // กาหนดให้ตัวแปร $x มีค่าเท่ากับ 123 $y = 4.56; // กาหนดให้ตัวแปร $y มีค่าเท่ากับ 4.56 $z = -789; // กาหนดให้ตัวแปร $z มีค่าเท่ากับ -789 ส าหรั บ ข้ อ มู ล ชนิ ด ข้ อ ความก็ ก าหนดตามรู ป แบบการเขี ย นข้ อ ความ นั่ ง คื อ ต้ อ งเขี ย นไว้ ใ น เครื่องหมาย “ ” หรือไม่ก็ ‘’ เท่านั้น ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.2 การกาหนดค่าตัวแปรชนิดข้อความหรือสตริง $name = “ปริญญา”; // กาหนดให้ตัวแปร $name มีค่าเท่ากับข้อความ ปริญญา $country = ‘Thailand’; // กาหนดให้ตัวแปร $country มีค่าเท่ากับข้อความ Thailand $phone = ‘0123456789’; // กาหนดให้ตัวแปร $phone มีค่าเท่ากับข้อความ 0123456789 ตัวเลขที่เขียนในแบบข้อความ เช่น “123” จะถือว่าเป็น “ชนิดข้อความ” แต่สามารถนาไปใช้ คานวณได้ตามปกติ ทั้งนี้การกาหนดข้อความด้วยเครื่องหมาย “…” และ ‘…’ จะมีข้อแตกต่างกันบางกรณี ซึ่งจะอธิบายเพิ่มเติมในหัวข้อต่อๆ ไป ส่วนกรณีที่ตัวแปรเป็นชนิดบูลีนก็กาหนดค่าเป็น true หรือ false อย่างใดอย่างหนึ่ง ดังนี้ ตัวอย่ำงที่ 4.3 การกาหนดค่าตัวแปรชนิดบูลีน $first_time = true ; $is_valid = false ; การใช้งานตัวแปรใน PHP มีความยืดหยุ่น ไม่จากัดชนิดของตัวแปรเป็นชนิดใดชนิดหนึ่ง และยัง สามารถสลับปรับเปลี่ยนได้ในทันที มีตัวอย่าง ดังนี้ ตัวอย่ำงที่ 4.4 การกาหนดค่าตัวแปรแบบไม่จากัดชนิดของตัวแปร $color = "red"; $number = 12; $age = 12; $sum = 12 + "15"; // ผลลัพธ์ ตัวแปร $sum = 27 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 62.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 47 กำรกำหนดค่ำตัวแปรโดยกำรอ้ำงอิง (Reference Assignment) PHP ตั้งแต่เวอร์ชัน 4 ได้นาความสามารถในการกาหนดค่าตัวแปรโดยการอ้างอิง ซึ่งจะช่วยให้ สามารถสร้างตัวแปรใหม่ให้มีค่าเช่นเดียวกันกับตัวแปรใดๆ ก็ได้ และมีการสร้างความสัมพันธ์ระหว่างตัว แปรหลักและตัวแปรอ้างอิง เมื่อมีการเปลี่ยนแปลงค่าในตัวแปรใดๆ ค่าของตัวแปรทั้งหมดที่มีการอ้างอิง กันจะมีค่าหรือข้อมูลเดียวกัน การกาหนดตัวแปรโดยอ้างอิงสามารถทาได้โดยการเพิ่มเครื่องหมายแอนด์ (&) ด้านขวาของเครื่องหมายเท่ากับหรือด้านหน้าของตัวแปรก็ได้ ดังนี้ ตัวอย่ำงที่ 4.5 การกาหนดค่าตัวแปรโดยการอ้างอิง <?php $value1 = "Hello"; $value2 =& $value1; // $value1 และ $value2 มีค่าเท่ากับ "Hello" $value2 = "Goodbye"; // $value1 และ $value2 มีค่าเท่ากับ "Goodbye" ?> ขอบเขตของตัวแปร (Variable Scope) การประกาศและกาหนดค่าตัว แปรทั้งวิธีกาหนดค่าปกติห รือกาหนดค่า แบบอ้างอิง ใน PHP สามารถประกาศได้ทุกที่ในสคริปต์ของ PHP ซึ่งตาแหน่งของการประกาศตัวแปรมีผลต่อการใช้งานหรือ เรียกว่าขอบเขตของตัวแปร จะมีผลต่อการเข้าถึงและใช้งาน ขอบเขตของตัวแปรมี 4 ชนิด คือ ตัวแปร ท้องถิ่น (Local variables), ตัวแปรฟังก์ชันพารามิเตอร์ (Function parameters), ตัวแปรสาธารณะ (Global variables) และตัวแปรคงที่ (Static variables) มีรายละเอียด ดังนี้ ตัวแปรท้องถิ่น (Local Variables) ตัวแปรท้องถิ่น คือ ตัวแปรที่ถูกประกาศไว้ภายในฟังก์ชันนั้น จะมีขอบเขตเฉพาะภายในฟังก์ชัน นั้นๆ เท่านั้น หรือถ้าจะพูดให้ง่ายก็คือจะสามารถใช้งานตัวแปรนั้นๆ ได้ภายในฟังก์ชันนั้น ในทางกลับกัน ถ้าประกาศตัวแปรภายนอกฟังก์ชัน (เป็นขอบเขตตัวแปรสาธารณะ: Global Variables) ก็จะไม่สามารถ ใช้งานตัวแปรนั้นๆ ภายในฟังก์ชันได้ ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.6 ตัวแปรที่ถูกประกาศไว้ภายในฟังก์ชันหรือเรียกกว่าตัวแปรท้องถิ่น <?php function update_counter ( ) $counter++; } $counter = 10; update_counter ( ); echo $counter; // ผลลัพธ์ คือ 10 เท่าเดิมก่อนเรียกใช้ฟังก์ชัน ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 63.
    48 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) ตัวแปรฟังก์ชันพำรำมิเตอร์ (Function Parameters) ตั ว แปรฟั ง ก์ ชั น พารามิ เ ตอร์ คื อ ตั ว แปรต่ า งๆ ที่ ถู ก ส่ ง ผ่ า นไปยั ง ฟั ง ก์ ชั น หนึ่ ง ๆ ซึ่ ง การส่ ง ค่าพารามิเตอร์นั้นสามารถส่งได้ครั้งละหลายๆ ตัวแปร โดยทาการคั่นแต่ละพารามิเตอร์ด้วยเครื่องหมาย comma (,) สาหรับรูปแบบการส่ง ค่าจะกล่าวถึงในบทถัดไป ตัวอย่างการการส่งค่าตัวแปรฟังก์ชัน พารามิเตอร์ ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.7 การใช้งานตัวแปรฟังก์ชันพารามิเตอร์ <?php function x10 ($value) { // ตัวอย่าง ตัวแปรฟังก์ชันพารามิเตอร์ $value $value = $value * 10; return $value; // มีการส่งค่ากลับตัวแปรฟังก์ชันพารามิเตอร์ } ตัวแปรสำธำรณะ (Global Variables) ตัวแปร ที่ประกาศไว้ภายนอกฟังก์ชัน คือ ตัวแปรสาธารณะ ซึ่งหมายความว่า สามารถเข้าถึงจาก ส่วนใดๆ ของโปรแกรมได้ แต่อย่างไรก็ตามมันจะไม่สามารถใช้งานได้ภายในฟังก์ชัน แต่ถ้าต้องการเรี ยกใช้ งานตัวแปรสาธารณะภายในฟังก์ชันนั้นจริงๆ สามารถใช้คาสั่ง GLOBAL ในการอ้างอิงได้ ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.8 การใช้งานตัวแปรสาธารณะ <?php $somevar = 15; function addit ( ) { GLOBAL $somevar; $somevar++; } addit ( ); echo "Somevar is $somevar"; // ผลลัพธ์ คือ Somevar is 16 ?> ยังมีอีกวิธีห นึ่ งในการอ้างอิงตัว แปรสาธารณะได้ นั่นก็คือการใช้อาร์เรย์ของ PHP $GLOBALS แทนได้ ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.9 การอ้างอิงตัวแปรสาธารณะ <?php $somevar = 15; function addit ( ) { $GLOBALS ["somevar"]++; } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL ที่ชื่อว่า
  • 64.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 49 addit ( ); echo "Somevar is ".$GLOBALS ["somevar"]; // ผลลัพธ์ คือ Somevar is 16 ?> ตัวแปรคงที่ (Static Variables) ตัวแปรคงที่นั้นจะทาการเก็บค่าของตัวแปรนั้นๆ ไว้ทุกครั้งที่เรียกใช้ ฟังก์ชัน เมื่อเรียกใช้ฟังก์ชันกี่ ครั้งค่าของตัวแปรที่ถูกประกาศเป็นแบบคงที่จะถูกปรับปรุงค่าไว้เสมอ สามารถใช้ได้กับตัวแปรท้องถิ่น เท่านั้น มีตัวอย่าง ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.10 การใช้งานตัวแปรคงที่ <?php function show_number ( ) { STATIC $count = 0; $count=$count+10; echo $count; echo "<br />"; } show_number ( ); show_number ( ); show_number ( ); ?> ผลลัพธ์ของการทางานถ้าหากไม่มีการกาหนด STATIC ไว้ด้านหน้าของตัวแปร $count ดังนี้ 10 10 10 แต่ผลลัพธ์ของการทางานเมื่อมีการกาหนด STATIC ไว้ด้านหน้าตัวแปร $count จะได้ผลลัพธ์ ดังนี้ 10 20 30 ตัวแปรพิเศษ (Super global Variables) ตัวแปรพิเศษของ PHP คือ ตัวแปรที่กาหนดไว้ล่วงหน้าภายในระบบของ PHP สามารถเข้าถึงได้ จากทุกที่ภายในสคริปต์ที่ทางานอยู่ สามารถเรียกใช้ตัวแปรเหล่านี้ เพื่อดึงรายละเอียดเกี่ยวกับการใช้งาน ผู้ใช้ในปัจจุบัน รวมทั้งรายละเอียดของเครื่องคอมพิวเตอร์ ระบบปฏิบัติการและเว็บเซิร์ฟเวอร์ และอื่นๆ อีกมากมาย หากต้องการเรียกดูตัวแปรพิเศษทั้งหมดของ PHP สามารถใช้คาสั่ง ตัวอย่างดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 65.
    50 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) ตัวอย่ำงที่ 4.11 การใช้งานตัวแปรพิเศษ <?php foreach ($_SERVER as $var => $value) echo "$var => $value <br />"; ?> หลังจากเรียกใช้คาสั่ง ระบบจะส่งกลับเป็นรายการของตัวแปรพิเศษ ซึ่งอาจใช้เวลาสักครู่เพื่ออ่าน รายชื่อตัวแปรพิเศษและรายละเอียดต่างๆ ของระบบปฏิบัติการและเว็บเซิร์ฟเวอร์ รวมถึงสภาพแวดล้อม ต่างๆ ที่เกี่ยวข้อง ตัวอย่างตัวแปรพิเศษ มีตัวอย่างดังนี้ ตัวอย่ำงที่ 4.12 การใช้งานตัวแปรพิเศษร่วมกับ HTML tags HTTP_HOST => localhost:81 HTTP_USER_AGENT => Mozilla/5.0 (Windows; U; Windows NT 6.0; enUS;rv:1.8.0.10) Gecko/20070216 Firefox/1.5.0.10 HTTP_ACCEPT => text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 HTTP_ACCEPT_LANGUAGE => en-us,en;q=0.5 HTTP_ACCEPT_ENCODING => gzip,deflate HTTP_ACCEPT_CHARSET => ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_KEEP_ALIVE => 300 HTTP_CONNECTION => keep-alive PATH =>C:oraclexeapporacleproduct10.2.0serverbin; c:rubybin; C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:ProgramFilesQuickTi meQTSystem; c:php52; c:Python24 SystemRoot => C:Windows COMSPEC => C:Windowssystem32cmd.exe PATHEXT => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.RB;.RBW WINDIR => C:Windows SERVER_SIGNATURE => Apache/2.0.59 (Win32) PHP/6.0.0-dev Server at localhost Port 81 SERVER_SOFTWARE => Apache/2.0.59 (Win32) PHP/6.0.0-dev SERVER_NAME => localhost SERVER_ADDR => 127.0.0.1 SERVER_PORT => 81 REMOTE_ADDR => 127.0.0.1 DOCUMENT_ROOT => C:/apache2/htdocs ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 66.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 51 SERVER_ADMIN => parinya@freebsd.sru.ac.th SCRIPT_FILENAME => C:/apache2/htdocs/books/php-MySQL/5/server.php REMOTE_PORT => 49638 GATEWAY_INTERFACE => CGI/1.1 SERVER_PROTOCOL => HTTP/1.1 REQUEST_METHOD => GET QUERY_STRING => REQUEST_URI => /books/php-MySQL/5/server.php SCRIPT_NAME => /books/php-MySQL/5/server.php PHP_SELF => /books/php-MySQL/5/server.php REQUEST_TIME => 1174440456 ตัวแปรพิเศษที่เห็นเหล่านี้ คือ ตัวแปรพิเศษทั้งหมดของสคริปต์ที่ทางานอยู่ และสามารถใช้ได้ตว ั แปรพิเศษเหล่านี้ได้ ซึ่งบางตัวแปรอาจจะไม่มีประโยชน์เป็นเพียงข้อมูลสารสนเทศของระบบเท่านั้น ดังนั้น ต้องพิจารณาใช้หรือประยุกต์ใช้ตามความเหมาะสม ต่อไปจะยกตัวอย่างการเรียกใช้ตัวแปรพิเศษเพื่อแสดง แสดง IP ที่กาลังใช้งานอยู่ ลักษณะการใช้งานจะเหมือนกับการใช้งานอาร์เรย์ ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.13 การใช้งานตัวแปรพิเศษในลักษณะการใช้งานจะเหมือนกับการใช้งานอาร์เรย์ <?php printf ("Your IP address is: %s", $_SERVER['REMOTE_ADDR']); ?> ผลลัพธ์ Your IP address is: 127.0.0.1 หากต้องการเรียกดูเว็บบราวเซอร์และระบบปฏิบัติที่ใช้งานอยู่ สามารถใช้ตัวแปรพิเศษ ดังนี้ ตัวอย่ำงที่ 4.14 การแสดงผลตัวแปรพิเศษผ่านเว็บบราวเซอร์ <?php printf ("Your browser is: %s", $_SERVER['HTTP_USER_AGENT']); ?> ผลลัพธ์ Your browser is: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.0.10)Gecko/20070216 Firefox/1.5.0.10 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 67.
    52 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) ตัวแปรที่เรียกใช้ผ่ำน $_GET (Retrieving Variables Passed Using $_GET) ตัวแปร $_GET เป็นตัวแปรพิเศษที่เรียกว่า Super global predefined variable เป็นตัวแปร ระบบของ PHP ที่ประกาศเป็น global โดยอัตโนมัติ จึงสามารถถูกใช้งานได้ในฟังก์ชันต่างๆ โดยไม่ต้อง ประกาศ global เช่น http://www.example.com/index.html?cat=apache&id=157 ได้ผลดังนี้ ตัวอย่ำงที่ 4.15 ตัวแปรที่เรียกใช้งาน $_GET $_GET ['cat'] = "apache" $_GET ['id'] = "157" การจะใช้งานตัวแปรพิเศษนี้ได้นั้น ในหน้าฟอร์ม (Form) ส่งค่า จะต้องมีการกาหนด method ในการส่งค่าเป็นแบบ GET ด้วยจึงจะสามารถใช้ตัวแปรพิเศษเหล่านี้ได้ ตัวแปรที่เรียกใช้ผ่ำน $_POST (Retrieving Variables Passed Using $_POST) ตัวแปร $_POST เป็นตัวแปรพิเศษที่เรียกว่า Super global predefined variable เช่นเดียวกับ $_GET แต่ไม่แสดงผลตัวแปรและค่าตัวแปรบน URL มีตัวอย่างดังนี้ ตัวอย่ำงที่ 4.16 ตัวแปรที่เรียกใช้ผ่าน $_POST <form action="subscribe.php" method="post"> <p> Email address: <br /> <input type="text" name="email" size="20" maxlength="50" value="" /> </p> <p> Password:<br /> <input type="password" name="pswd" size="20" maxlength="15" value="" /> </p> <p> <input type="submit" name="subscribe" value="subscribe!" /> </p> </form> จากตัวอย่างตัวแปร $_POST จะส่งค่าผ่านไปยังไฟล์ subscribe.php พร้อมตัวแปรและค่า ดังนี้ ตัวอย่ำงที่ 4.17 การกาหนดค่าให้กับตัวแปร $_POST ก่อนส่งค่าไปทางานต่อในไฟล์อื่นๆ $_POST['email'] = "jason@example.com"; $_POST['pswd'] = "rainyday"; $_POST['subscribe'] = "subscribe!"; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 68.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 53 ผลจากการส่งค่าผ่านไปยังไฟล์ subscribe.php จะไม่สามารถใช้ตัวแปร $email, $pswd และ $subscribe โดยตรงได้ ต้องใช้ผ่านตัวแปร $_POST เท่านั้น การกาหนด method โดยส่วนใหญ่จะกาหนดเป็น POST เพื่อให้ส่งข้อมูลจาก field ต่างๆ ไป ใน ส่วนหัวของโปรโตคอล HTTP request ซึ่งสามารถส่งข้อมูลจานวนมากได้ส่วนการส่งด้วย method GET จะใช้ในกรณีที่มี field และความยาวข้อมูลน้อยและไม่เป็นความลับ เนื่องจากการส่งแบบ GET เป็นการ สร้าง query string จาก field ต่างๆ ต่อท้ายชื่อ URL โดยอัตโนมัติและการส่งแบบ GET ยังไม่สามารถ ใช้ได้กับฟอร์มที่มีการส่งไฟล์ด้วย กำรเรียกใช้ข้อมูลที่เก็บไว้ในคุกกี้ (Retrieving Information Stored Within Cookies) $_COOKIE เป็นตัวแปรพิเศษที่เรียกว่า Super global ข้อมูลที่เก็บไว้ในคุกกี้จะถูกเก็บไว้ ระยะเวลาหนึ่งเพื่อใช้งานในเอกสารต่างๆ ทั้งเว็บไซต์ (การเก็บข้อมูลไว้ในคุกกี้นั้น ระบบจะทาการสร้าง ไฟล์ เก็ บ คุก กี้ ไว้ ที่ เครื่ องไคลเอ็น ต์ ) ซึ่ งการจะใช้ คุ ก กี้ไ ด้ นั้น จะต้ องมี การสร้ า งคุ ก กี้ก่ อ น โดยใช้ค าสั่ ง setcookie ( ) รายละเอียดการใช้งาน จะกล่าวถึงในบทต่อไป กำรเรียกใช้ข้อมูลที่เก็บไว้ในเซสชัน (Retrieving Information Stored in Sessions) $_SESSION เป็นตัวแปรพิเศษที่เรียกว่า Super global ข้อมูลที่เก็บไว้ในเซสชันจะถูกเก็บไว้ ระยะเวลาหนึ่งเพื่อใช้งานในเอกสารต่างๆ ทั้งเว็บไซต์เหมือนกับคุกกี้ (การเก็บข้อมูลไว้ในเซสชันนั้น ระบบ จะทาการสร้างไฟล์เก็บเซสชันไว้ที่เครื่องเซิร์ฟเวอร์) ซึ่งการจะใช้เซสชันได้นั้น จะต้องมีการสั่งเริ่มใช้เซสชัน โดยใช้คาสั่ง session_start () รายละเอียดการใช้งาน จะกล่าวถึงในบทต่อไป เซสชันและคุกกี้ เหมือนกัน คือ ใช้สาหรับเก็บค่าตัวแปรไว้เพื่อเรียกใช้ในหน้าเว็บเพจต่างๆ ใน เว็ บ ไซต์ แ ละทั้ ง คู่ มี ค วามแตกต่ า งกั น คื อ อายุ ข องตั ว แปร อายุ ข องคุ ก กี้ ถู ก ก าหนดด้ ว ยเวลา ส่ ว นอายุ ของเซสชัน ถูกกาหนดด้ว ยการทางานของบราวเซอร์ เมื่อไคลเอนต์ทาการปิดโปรแกรมเว็ บ บราวเซอร์ เซสชันก็จะถูกทาลายด้วย ตัวแปรค่ำคงที่ (Constants) ในภาษา PHP นั้นได้กาหนดวิธีการประกาศตัวแปรค่าคงที่ โดยผ่านฟังก์ชัน define ( ) หรือใช้คีย์ เวิร์ด const (ใช้ได้ตั้งแต่ PHP 5.3.0) เมื่อตัวแปรค่าคงที่ถูกกาหนดแล้ว มันจะไม่สามารถเปลี่ยนหรือคืนค่า ได้อีกต่อไป สามารถรับค่าของค่าคงที่ได้โดยระบุชื่อตัวแปรของค่าคงที่ ซึ่งจะแตกต่างจากการรับค่าตัวแปร ทั่วไป นั่นก็คือตัวแปรค่าคงที่ไม่ต้องใช้เครื่องหมาย $ นาหน้าตัวแปรค่าคงที่ หรือว่าจะรับค่าของค่าคงที่ผ่าน ฟังก์ชัน constant ( ) แต่ถ้ามีชื่อตัวแปรค่าคงที่ที่เปลี่ยนแปลงตลอด นั้นจะไม่รู้ว่ามีชื่อตัวแปรค่าคงที่ใดบ้าง สามารถใช้ฟังก์ชัน get_defined_constants ( ) เพื่อรับค่ารายการการประกาศค่าคงที่ทั้งหมด รูปแบบ boolean define ( string $name , mixed $value ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 69.
    54 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) เมื่อ $name หมายถึง ชื่อของตัวแปรที่ต้องการกาหนดให้เป็นตัวแปรค่าคงที่ $value หมายถึง ค่าที่ต้องการกาหนด ตัวอย่ำงที่ 4.18 การกาหนดตัวแปรค่าคงที่ <?php define ("PI", 3.141592); printf ("The value of pi is %f", PI); // The value of pi is 3.141592 $pi2 = 2 * PI; printf ("Pi doubled equals %f", $pi2); // Pi doubled equals 6.283184 ?> มีห ลายจุ ดที่จ ะต้อ งทราบเกี่ย วกับ การอ้างอิงและใช้งานตัว แปรค่ าคงที่ เช่น 1) ไม่ต้องใช้ เครื่องหมาย $ นาหน้าตัวแปร 2) จะไม่สามารถเปลี่ยนแปลงค่าตัวแปรนั้นได้อีก หากต้องการเปลี่ยนแปลง ค่าเพื่อการแสดงผลหรืออื่นๆ จะต้องถ่ายโอนค่าไปยังตัวแปรอื่นๆ ตัวแปรที่มีค่ำ Null ค่า Null หมายถึง ว่างเปล่าหรือไม่มีค่าใดๆ เลย ทั้งนี้หากสร้างตัวแปรขึ้นมาโดยที่ไม่กาหนดค่า ใดๆให้กับมัน จะทาให้ตัวแปรนั้นมีค่าเป็น Null หรืออาจเกิดจากการสร้างตัวแปรแล้วกาหนดค่า null ให้กับมันก็ได้ เช่น ในกรณีต่อไปนี้ ตัวแปร $a และ $b จะมีค่าเป็น Null ตัวอย่ำงที่ 4.19 ตัวแปรที่มีค่า Null $a; $b = null; สาหรับใน PHP ตัวแปรที่มีค่า Null นี้ เท่าที่ผู้เขียนตรวจผลจากการนาไปใช้งาน จะมีผลดังนี้  หากนาไปคานวณจะมีค่า เทียบเท่ากับ 0  หากนาไปใช้ในแบบข้อความ จะมีค่า เทียบเท่ากับ “” หรือข้อความว่างนั่นเอง  หากนาไปเปรียบเทียบทางตรรกะ จะเทียบเท่า กับค่า false ลองพิจารณาผลจากการใช้ตัวแปรที่มีค่า Null ดังต่อไปนี้ ตัวอย่ำงที่ 4.20 แสดงตัวอย่างการประยุกต์ใช้ตัวแปรที่มีค่า Null $a; $b = null ; echo $a + $b // 0 echo 10/$a; // Error: Division by zero (ข้อผิดพลาดจากการหารด้วย 0) $c = (1 = = 1) && $a; //$c = true && false => false; echo “A, $b, C, D”; //A, ,C,D ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 70.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 55 กำรตรวจสอบและยกเลิกตัวแปร การเขียนโปรแกรมในระดับสูงขึ้นไปจะเป็นการทางานแบบไดนามิก ซึ่งในบางกรณีไม่อาจทราบ ล่วงหน้าได้ว่า ข้อมูล (ตัวแปร) ที่ต้องการใช้งานนั้นมีอยู่จริง หรือเก็บค่าใดๆเอาไว้หรือไม่ จึงต้องมีคาสั่งใน การตรวจสอบข้อมูลเหล่านี้ก่อนนามาใช้เพื่อป้องกันข้อผิดพลาด นอกจากนี้ตัวแปรที่สร้างขึ้นอาจจะเพื่อใช้ งานเพียงชั่วระยะเวลาหนึ่ง และหลังจากนั้นหากมีตัวแปรนี้อยู่ต่อไปอาจจะส่งต่อการทางานของระบบ ดังนั้นจึงต้องมีคาสั่งในการยกเลิกตัวแปรอีกออย่างหนึ่งด้วย ซึ่งคาสั่ง (ฟังก์ชัน) ที่เกี่ยวกับการตรวจสอบ และยกเลิกตัวแปรมีดังนี้ ฟังก์ชัน isset ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่ามีตัวแปรตามที่ระบุอยู่จริงหรือไม่ หรือได้สร้างตัวแปรตามที่ ระบุแล้วหรือยังนั่นเอง ซึ่งหากไม่มีตัวแปรนั้น หรือตัวแปรมีค่าเป็น null จะคืนค่ากลับมาเป็น false แต่ หากมีอยู่จริง และไม่เป็น null จะได้เป็นค่า true มีรูปแบบดังนี้ bool isset ( mixed $var [, mixed $... ] ) เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบ ตัวอย่ำงที่ 4.21 การใช้ฟังก์ชัน isset ( ) สาหรับตรวจสอบว่ามีตัวแปรตามที่ระบุอยู่จริงหรือไม่ <?php $x = 123; $a = isset ($x); // $a = true $y = null; $b = isset ($y); // $b = false $c = isset ($z) ; //$c = false เพราะ $z มีค่าเป็น null ?> ฟังก์ชัน empty ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่าตัวแปรว่าเป็นตัวแปรที่ว่างเปล่าหรือไม่ ซึ่ง PHP จะถือว่าเป็น ตัวแปรมีค่าในลักษณะต่อไปนี้  มีค่าเป็น null  มีค่าเป็นข้อความว่าง หรือ “” (ไม่ใช่ช่องว่าง)  มีค่า 0 หรือ “0” ถ้าตัวแปรมีค่าว่างจะได้ผลลัพธ์เป็น true มิฉะนั้นจะเป็น false มีรูปแบบดังนี้ รูปแบบ bool empty ( mixed $var ) เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 71.
    56 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) ตัวอย่ำงที่ 4.22 การใช้ฟังก์ชัน empty ( ) สาหรับตรวจสอบว่าตัวแปรว่าเป็นตัวแปรที่ว่างเปล่าหรือไม่ <?php $x = “”; $a = empty ($x); // $a = true $y = 0; $b = empty ($y); // $b = true $c = empty ($z) ; //$c = true เพราะ $z มีค่าเป็น null ?> ฟังก์ชัน unset ( ) เป็นฟังก์ชันที่ใช้สาหรับ ยกเลิกการใช้ตัวแปรที่ระบุเมื่อไม่ต้องใช้ตัวแปรตัวนั้นอีกต่อไปเพื่อคืน ทรัพยากรให้แก่ระบบ มีรูปแบบดังนี้ void unset ( mixed $var [, mixed $... ] ) เมื่อ $var หมายถึง ตัวแปรที่ต้องการตรวจสอบ ตัวอย่ำงที่ 4.23 การใช้ฟังก์ชัน unset ( ) สาหรับยกเลิกการใช้ตัวแปร <?php $a = 123; unset ($a); echo $a; //มีค่า Null เพราะตัวแปร $a ถูกยกเลิกแล้ว ?> ตัวดำเนินกำร (Operators) และนิพจน์ (Expressions) ตัวดาเนินการ เป็นสัญลักษณ์ที่ใช้กาหนดรูปแบบการประมวลผลข้อมูล ซึ่งแบ่งได้หลายประเภท เช่น ตัวดาเนินการเกี่ยวกับการคานวณทางคณิตศาสตร์ การเปรียบเทียบ และการประมวลผลทางด้าน ตรรกะ (Logic) เป็นต้น นิพจน์ คือ การกระทาเพื่อให้ได้ผลลัพธ์ค่าหนึ่งค่า ประกอบไปด้วยตัวถูกกระทา (Operands) และตัวดาเนินการ (Operators) เขียนเรียงกันไป เช่น 3 * 2 - 1 + 7 หรือ a * 5 เป็นต้น ลำดับควำมสำคัญของตัวดำเนินกำร ลาดับความสาคัญของตัวดาเนินการนั้น มีความสาคัญมากในการเขียนโปรแกรม ซึ่งถ้าจัดลาดับ ผิด ก็อาจจะทาให้โปรแกรมของเกิด ข้อผิดพลาด (bug) ได้ และบางทีจะทาให้หาจุด ผิดพลาดนั้นๆ ยาก ด้วย ลาดับความสาคัญของตัวดาเนินการแต่ละตัวจะมีความสาคัญแตกต่างกัน เป็นที่แน่นอนอยู่แล้วว่า ลาดับความสาคัญสูงก็จะถูกทาก่อนลาดับความสาคัญต่า ตัวอย่าง ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 72.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 57 ตัวอย่ำงที่ 4.24 แสดงนิพจน์และตัวดาเนินการ 2+4*3 จากตัวอย่างด้านบน ถ้าลองมาคานวณกันเองแล้ว ก็คงจะได้หลายๆ ค่าแตกต่างกันไปเนื่องจากว่า ไม่รู้ว่าจะนาตัวไหนมาคานวณกันก่อนดีใช่ไหม จากตัวอย่างเครื่องหมายที่มีความสาคัญสูงคือเครื่องหมาย Multiply (*) หรือคูณนั่นเอง รองลงมา คือ Addition (+) หรือบวก ซึ่งหมายความว่ามันจะทาการคานวณ 4 * 3 ก่อน แล้วค่อยนาผลลัพธ์นี้ไปบวกกับ 2 ผลลัพธ์จึงมีค่าเท่ากับ 14 แต่ถ้าไม่อยากปวดหัวกับการกาหนดนิพจน์แบบนี้ ซึ่งจะทาให้ยุ่งยากในการจัดลาดับความสาคัญ ให้มันแล้วละก็ ขอแนะนาให้ใช้วงเล็บ ( ) ในการแบ่งการคานวณออกจากกัน ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.25 แสดงนิพจน์และดาลับความสาคัญของตัวดาเนินการ (2 + 4) * 3 หรือ ขึ้นอยู่กับว่าจะให้นิพจน์ใดคานวณก่อน-หลัง การคานวณจะเกิดขึ้นในวงเล็บก่อนเสมอ 2 + (4 * 3) มาลองกันอีกครั้ง 1/3*3 จากตั ว อย่ า งด้ า นบน ถ้ า ลองมาค านวณกั น เองอี ก ครั้ ง ก็ ค งจะได้ ห ลายๆ ค่ า แตกต่ า งกั น ไป เนื่องจากว่าไม่รู้ว่าจะนาตัวไหนมาคานวณกันก่อนเช่นเดิม จากตัวอย่างเครื่องหมายคูณและหารจะมีลาดับ ความสาคัญเท่ากัน ในกรณีนี้ การคานวณจะเกิดขึ้นจากซ้ายไปขวาเสมอ คือ 1 / 3 ก่อน แล้วจึงนาผลลัพธ์ ไปคูณกับ 3 คาตอบ คือ 1 ตัวดำเนินกำรสำหรับกำรคำนวณ ตัวดาเนินการที่ใช้ในการคานวณทางคณิตศาสตร์ ซึ่งประกอบด้วยตัวดาเนินการดังต่อไปนี้ ตำรำงที่ 4.1 ตัวดาเนินการพื้นฐานสาหรับการคานวณ + บวก / หาร - ลบ % เรียกว่า Modulus เป็นการหารแบบเอาเฉพาะเศษ เช่น 13%5 = 3 //เพราะค่าใกล้เคียง 13 คือ 5*2 = 10 => 13-10 = 3 * คูณ 13%3 = 1 // เพราะค่าใกล้เคียง 13 คือ 3*4 = 12 => 13-12 = 1 7 + 5 ค่าคงที่ ตัวดาเนินการ ค่าคงที่ a + b ตัวแปร ตัวดาเนินการ ตัวแปร ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 73.
    58 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) (a * 3) + 5 2.0 * (int) (2.12) ตัวแปร ตัวดาเนินการ ค่าคงที่ นิพจน์ ค่าคงที่ ตัวดาเนินการ ฟังก์ชัน ตัวดาเนินการ ค่าคงที่ ภำพที่ 4.1 แสดงตัวอย่างตัวดาเนินการและนิพจน์ ตัวดำเนินกำรสำหรับเชื่อมต่อข้อควำม (String Concatenation) สาหรับใน PHP จะใช้เครื่องหมายจุด (.) ในการเชื่อมต่อข้อความ ตัวอย่างตัวดาเนินการสาหรับ เชื่อมต่อข้อความ ตัวอย่ำงที่ 4.26 การใช้เครื่องหมายจุด (.) ในการเชื่อมต่อข้อความ <?php $str = “My” . “SQL”; // $str = “MySQL” echo “สมชาย” . “ ” . “พายเรือ”; // สมชาย พายเรือ $fname = “Parinya”; $lname = “Mai”; echo “My name is” . $fname . “ ” . $lname ; //My name is Parinya Mai echo 1 . 2 . 3 ; //123 ?> ตัวดำเนินกำรสำหรับกำรกำหนดค่ำ (Assignment) เป็นตัวดาเนินการในการกาหนดค่าให้กับตัวแปรที่อยู่ทางด้านซ้ายของตัวดาเนินการ ด้วยค่าที่อยู่ ทางขวาโดยประกอบด้วยตัวดาเนินการดังต่อไปนี้ ตำรำงที่ 4.2 ตัวดาเนินการสาหรับการกาหนดค่า = กาหนดค่า เช่น $x = 10; += นาค่าที่กาหนดไปบวกเพิ่มจากค่าเดิมตัวแปร แล้วผลลัพธ์ที่ได้เก็บไว้ในตัวแปรเดิม เช่น $x = 10; $x += 8; // $x = 18 -= ลดค่าตัวแปรลงเท่ากับค่าที่ระบุ เช่น $x = 10; $x -= 8; // $x = 2 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 74.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 59 ตำรำงที่ 4.2 (ต่อ) *= คูณค่าเดิมของตัวแปรด้วยค่าที่ระบุ เช่น $x = 10; $x *= 8; // $x = 80 /= หารค่าเดิมของตัวแปรด้วยค่าที่ระบุ เช่น $x = 16; $x /= 8; // $x = 2 %= นาค่าที่ระบุไปหารค่าเดิมของตัวแปร แต่จะเอาเฉพาะเศษจากการหารเท่านั้น หรือเรียกว่าการ หารแบบ Modulus เช่น $x = 10; $x %= 3; // $x = 1 .= ใช้ในการเชื่อมต่อข้อความโดยนาข้อความด้านขวามือไปต่อท้ายข้อความด้านซ้ายมือ $x = “PHP”; $x .= “/MySQL”; // $x = “PHP/MySQL” ตัวดำเนินกำรสำหรับเพิ่ม และลดค่ำ (Increment & Decrement) ประกอบด้วยตัวดาเนินการดังต่อไปนี้ ตำรำงที่ 4.3 ตัวดาเนินการสาหรับเพิ่ม และลดค่า ++ เป็นการเพิ่มตัวแปรขึ้นไปอีก 1 เช่น -- เป็นการลดค่าตัวแปรลงอีก 1 เช่น $x = 10; $x = 10; $x++; //$x = 11 $x--; //$x = 9 ข้อควรระวังเกี่ยวกับกำรใช้ตัวดำเนินกำร ++ และ -การวางตัวดาเนินการ ++ หรือ -- ไว้ด้านหน้า หรือหลังตัวแปร หากตัวแปรนั้นอยู่เดี่ยวๆ ค่าที่ได้ จะไม่ต่างกัน เช่น กรณีตัวอย่างต่อไปนี้ ตัวอย่ำงที่ 4.27 ข้อควรระวังการวางตัวดาเนินการ ++ หรือ -- ไว้ด้านหน้า หรือหลังตัวแปร $x = 10; $y = 10; $x++; // $x = 11 ++$y; // $y = 11 แต่หากนาไปใช้ในรูปแบบของนิพจน์ (Expression) หรือกระทากับค่าอื่นๆ ด้วย ค่าที่ได้อาจ แตกต่างกันไป เช่น สองกรณีต่อไปนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 75.
    60 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) ตัวอย่ำงที่ 4.28 การเปรียบเทียบรูปแบบของการใช้นิพจน์สองกรณี $x = 10; $x = 10; $y = 20; $y = 20; $y += ++$x; // $x = 11, $y = 31 $y += $x++; // $x = 11, $y = 30 หากก าหนดแบบนี้ y จะมี ค่ า เท่ า กั บ หากกาหนดแบบนี้ y จะมีค่าเท่ากับ 20+10=30 (20+1)+10=31 นั่นคือ จะเพิ่มค่า x ขึ้นไปอีก 1 นั่นคือ จะนาค่า x เดิมไปบวกกับ y ก่อน แล้วค่อย ก่อนแล้วค่อยนาไปบวกกับ y เพิ่มค่า x ขึนไปอีก 1 ้ ความจริ ง หลั กการที่ กล่ าวมานี้ พิ จารณาจากล าดั บความส าคัญ ของตั ว ด าเนินการ ตามที่จ ะ กล่าวถึงในลาดับต่อไป ตัวดำเนินกำรสำหรับกำรเปรียบเทียบ (Comparison) ใช้ในการเปรียบเทียบหาค่าความจริงระหว่าง 2 นิพจน์ โดยผลลัพธ์ที่ได้จะเป็นได้เพียง true หรือ false อย่างใดอย่างหนึ่งเท่านั้น โดยตัวดาเนินการในกลุ่มนี้ มีดังนี้ ตำรำงที่ 4.4 ตัวดาเนินการสาหรับการเปรียบเทียบ < น้อยกว่า == เท่ากัน <= น้อยกว่า หรือเท่ากับ === เท่ากันทั้งหมดทั้งค่า และชนิดข้อมูล > มากกว่า != ไม่เท่ากัน => มากกว่า หรือเท่ากับ ตัวอย่ำงที่ 4.29 ตัวอย่างผลลักษณะการเปรียบเทียบ กรณีศึกษาแบบที่ 1 $a = (10 <= 9); // $a = false เพราะ 10 > 9 $b = (10 == 10); // $b = true $c = (10 == “10”); // $c = true $d = (10 === “10”); // $d = false เพราะ 10 เป็นตัวเลข ขณะที่ “10” ถือว่าเป็นข้อความ $e = (“php” == “PHP”); // $e = false เพราะลักษณะตัวพิมพ์ต่างกัน ตัวดำเนินกำรสำหรับกำรเปรียบเทียบทำงตรรกะ (Bitwise Operators) การเปรียบเทียบทางตรรกะ (Logical) เป็นการเปรียบเพื่อหาค่าความจริงระหว่าง 2 นิพจน์ เช่น หากพิสูจน์พจน์แรกเป็นจริง และนิพจน์ที่สองเป็นเท็จ แล้วผลลัพธ์จะออกมาเป็นอย่างไร เป็นต้น ซึ่ง ตัว ดาเนินการในการเปรียบเทียบทางตรรกะมีดังต่อไปนี้ ตำรำงที่ 4.5 ตัวดาเนินการสาหรับการเปรียบเทียบทางตรรกะ ตัวดำเนินกำร กำรเปรียบเทียบ ผลลัพธ์ ! หรือ not !(true) true !(false) false ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 76.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 61 ตำรำงที่ 4.5 (ต่อ) ตัวดำเนินกำร && หรือ and || หรือ or ^ หรือ xor กำรเปรียบเทียบ true && true true && false false && false true || true true || false false || false true ^ true true ^ false false ^ false ผลลัพธ์ true false false true true false false true false ตัวอย่ำงที่ 4.29 ตัวอย่างผลลักษณะการเปรียบเทียบ กรณีศึกษาแบบที่ 2 $a = ! (1 = = 2); //$a = ! (false) => $a = true; $b = (1 != 2) && (1>0); // $b = (true) && (true) => $b = true; $c = (1 = = 2) && (1>0); // $c = (false) && (true) => $c = false; $d = (1 = = 2) || (1>0); // $c = (false) || (true) => $d = true; ตัวดำเนินกำรแบบ Ternary เป็น ตัว ดาเนิ นการในการเปรีย บเทียบในอีกลั กษณะหนึ่งคือ ถ้าตรงกับเงื่อนไขผลลั พธ์จะเป็น อย่างไร และกรณีที่ไม่ตรงตามเงื่อนไขผลลัพธ์จะเป็นอย่างไร รูปแบบการใช้งานคือ ตัวอย่ำงที่ 4.30 การใช้ตัวดาเนินการแบบ Ternary สาหรับ Expression? x : y หมายความว่า หาก Expression มีค่าเป็นจริงผลลัพธ์จะเป็น x แต่หากเป็นเท็จผลลัพธ์จะเป็น y เช่น $a = (1 > 0) ? true : false; // $a จะมีค่าเป็น true เนื่องจาก 1 > 0 นั้นเป็นจริง $b = ($x % 2 == 0) ? “เลขคู่” : “เลขคี”; ่ //หาก $x หารด้วย 2 ลงตัว (เศษเป็น0) ตัวแปร $b จะเท่ากับ “เลขคู” แต่หากหารไม่ลงตัว $b ่ จะเท่ากับ “เลขคี” ่ ลำดับควำมสำคัญของตัวดำเนินกำร ลาดับความสาคัญของตัวดาเนินการก็คือ ลาดับในการประมวลผลก่อนหลัง ซึ่งเป็นสิ่งที่สาคัญมาก หากวางตาแหน่ง หรือจัดกลุ่มไม่ถูกต้อง ผลลัพธ์ที่ได้อาจไม่ตรงตามที่ต้องการก็ได้ โดยลาดับความสาคัญ ของตัวดาเนินการมีดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 77.
    62 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) ตำรำงที่ 4.6 ลาดับความสาคัญของตัวดาเนินการ 1 () 2 ++, -- (วางไว้หน้าตัวแปร) 3 *, /, % 4 +, 5 ==, != 6 7 8 9 && || =, +=, -=, /=, %= ++, -- (วางไว้หลังตัวแปร) ตัวอย่ำงที่ 4.31 ตัวดาเนินการที่มีลาดับความสาคัญเท่ากัน ตัวที่มาก่อนจะถูกประมวลผลก่อน $a = 2*100/10; //$a = 20 เพราะ 100/10 = 10 => 2*10 = 20 หรือเท่ากับ 2*(100/10) $b = 100/10%2; //$b = 0 เพราะ 100/10 = 10 => 10%2 เหลือเศษ 0 หรือเท่ากับ (100/10)%2 $c = 100%80*2; //$c = 40 เพราะ 100%80 เหลือเศษ20 => 20*2 = 40 $d = 100/10+30; //$d = 40 ซึ่งเท่ากับ (100/10)+30 $e = 2*100/10+30; //$e = 50 ซึ่งเท่ากับ (2*(100/10))+30 ในทางปฏิบัติเพื่อหลีกเลี่ยงข้อผิดพลาดจากลาดับความสาคัญของเครื่องหมาย ควรใช้วงเล็บใน การจัดแบ่งกลุ่มให้ชัดเจน ตัวดำเนินกำรในกำรเชื่อมข้อควำม (String) บางครั้งข้อความที่จะพามากาหนดค่าให้กับตัวแปรนั้นมีความยาวมากเกินกว่าที่จะเขียนให้หมด ภายในบรรทัดเดียว อาจใช้หลายวิธีแก้ปัญหานี้ โดยวิธีที่ใช้กันเป็นส่วนใหญ่มีดังนี้ วิธีที่ 1 แบ่งออกเป็นข้อความย่อยๆ โดยจุดที่ต้องการขึ้นบรรทัดใหม่ ให้แทรกแท็ก <br/> หรือ <p/> เข้าไป จากนั้นนาข้อความย่อยๆ มาเชื่อมต่อเข้ากันด้วยตัวดาเนินการ .= ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.32 ตัวดาเนินการในการเชื่อมข้อความ วิธีที่ 1 <?php $str = “นาย สมชาย พายเรือ <br />” ; $str .= “123/456 ถ.พระราม รอบเมือง <br />” ; $str .= “ปทุมวัน กรุงเทพ 10330 <br />” ; echo $str; ?> วิธีที่ 2 ข้อความที่เขียนในเครื่องหมาย “…” เดียวกัน สามารถเขียนแยกไว้คนละบรรทัดได้เลย โดยไม่ต้องใช้การเชื่อมต่อ ข้อความ โดยวางเครื่องหมาย “ และ ” แค่ที่จุดเริ่มต้น และสิ้นสุดข้อความ ตามลาดับ เช่น ตัวอย่ำงที่ 4.33 ตัวดาเนินการในการเชื่อมข้อความ วิธีที่ 2 <?php ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 78.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 63 echo “นาย สมชาย พายเรือ <br /> 123/456 ถ.พระราม รอบเมือง <br /> ปทุมวัน กรุงเทพ 10330 <br />” ; ?> กำรแทรกค่ำของตัวแปรลงในข้อควำม (String Interpolation) จากการที่ PHP นั้นใช้สัญลักษณ์ $ ในการบ่งชี้ตัวแปร ทาให้การนาค่าของตัวแปรมาแทรกลงใน ข้อความสามารถทาได้ง่ายดาย โดยการนาตัวแปรไปวาง ณ จุดที่ต้องการแทรกค่าลงไป แต่หลังชื่อตัวแปร จะต้องมีช่องว่างอย่างน้อย 1 ช่อง หรือเครื่องหมายใดๆ ที่ไม่สามารถนามาใช้เป็นตัวแปรได้ เช่น ตัวอย่าง การแทรกค่าจากตัวแปรลงในข้อความ ดังนี้ ตัวอย่ำงที่ 4.34 การแทรกค่าของตัวแปรลงในข้อความ <?php $name = “สมชาย”; $age = 30; $country = “ไทยแลนด์”; echo “My name is $name, $age years old from $country”; ?> Escape Sequence Escape Sequence คือ สัญลักษณ์ที่ใช้สาหรับการกาหนดการแสดงผลของข้อความ ภายใน Double Quotes สาหรับสัญลักษณ์ของ Escape Sequence ที่ควรรู้จักมีตัวอย่าง ดังนี้ ตำรำงที่ 4.7 Escape Sequence สัญลักษณ์ ควำมหมำย " Double quotes n" Newline (ขึ้นบรรทัดใหม่) r Carriage return t Tab Backslash $ Dollar sign { Left brace } Right brace [ Left bracket ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 79.
    64 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) ตำรำงที่ 4.7 (ต่อ) สัญลักษณ์ ] 0 จนถึง 777 x0 จนถึง xFF ควำมหมำย Right bracket ASCII character ในเลขฐานแปด ASCII character ในเลขฐานสิบหก เครื่องหมำย Single Quotes และ Double Quotes ใน PHP ทั้งเครื่องหมาย Single Quotes (‘’) และ Double Quotes (“ ”) ต่างก็สามารถใช้ใน การกาหนดข้อมูลที่เป็น ข้อความได้เหมือนกัน แต่อย่างไรก็ตามทั้ง Single Quotes และ Double Quotes ก็มีข้อแตกต่างกันในบางเรื่อง กล่าวคือเครื่องหมาย Single Quotes นั้น ไม่สามารถนาค่าของตัว แปรมาแทรกลงไปได้ เพราะสิ่งที่เขียนเอาไว้ใน Single Quotes เขียนอย่างไรผลลัพธ์ก็จะออกมาตามนั้น แต่ขณะที่เครื่องหมาย Double Quotes นั้น สามารถแทรกค่าของตัวแปรลงไปได้ ดังตัวอย่างที่แล้ว ให้ดู เปรียบเทียบจากตัวอย่างต่อไปนี้ โดยนาตัวอย่างที่แล้วมาแก้ไขดังนี้ ตัวอย่ำงที่ 4.35 ตัวอย่างการแทรกค่าตัวแปรลงในข้อความที่กาหนดด้วย Single Quotes และ Double Quotes <?php $name = “สมศรี”; $age = 30; $country = “ไทยแลนด์”; echo ‘<b> Single Quotes :</b>My name is $name, $age years old from $country’; echo “<p />”; echo “<b> Double Quotes:</b>My name is $name, $age years old from $country”; ?> จากผลลัพธ์ที่ได้แสดงว่าการใช้เครื่องหมาย Single Quotes นั้นไม่สามารถแทรกค่าตัวแปรลงไป ได้เหมือน Double Quotes กำรใช้งำน Heredoc Heredoc ใช้สาหรับการแสดงกลุ่มของข้อความจานวนมาก ซึ่งเป็นข้อจากัดของการแสดงผลด้วย Double Quoted สามารถแสดงผลค่าตัวแปรใน Double Quote ได้ และไม่ต้องพิมพ์เครื่อง Double Quoted อีกทั้งยังสามารถใช้ Escape Sequences การใช้งาน Heredoc จะใช้รูปแบบขึ้นต้นด้วย <<< "nameOfHeredoc" แล้วปิดท้ายด้วย nameOfHeredoc (ชื่อของตัวเปิดและตัวปิดต้องเหมือนกัน ) และ เซมิโคลอน (;) ตัวอย่างดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 80.
    บทที่ 4 ตัวแปรตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) 65 ตัวอย่ำงที่ 4.36 การใช้งาน Heredoc สาหรับการแสดงกลุ่มของข้อความจานวนมาก <?php print <<< "END" First line....................................................................................n Second line..............................................................................n Third line...................................................................................n END; ?> จากตัวอย่าง จะเห็นว่า มีการใช้ <<< นาหน้าก่อน แล้วเว้นวรรค ตามด้วยคีย์เวิร์ดอะไรก็ได้ (สามารถเปลี่ยนคาว่า END เป็นคาอื่นๆ ได้) แล้วกดขึ้นบรรทัดใหม่ จากนั้นจึงเป็นข้อความที่ต้องการจะ ยาวขนาดไหนก็ได้ หรือใช้ตัวแปรข้างในก็ได้ และปิดท้ายด้วยคีย์เวิร์ดตัวเดิม (ย้าว่าตัวเดิม) และปิดท้าย ด้วยเซมิโคลอน (;) เป็นอันจบการใช้ข้อความแบบ heredoc กำรใช้งำน Nowdoc Nowdoc ใช้สาหรับการแสดงกลุ่มของข้อความจานวนมาก ซึ่งเป็นข้อจากัดของการแสดงผลด้วย Single Quoted สามารถแสดงผลค่าตัวแปรเหมือนใน Single Quote ได้ คล้ายกับ Heredoc แต่ไม่ สามารถใช้ Escape Sequences เพื่อจัดรูปแบบการแสดงผลข้อความ รูปแบบขึ้นต้นด้วย <<< 'nameOfNowdoc' แล้วปิดท้ายด้วย nameOfNowdoc และเซมิโคลอน (;) ตัวอย่างดังนี้ ตัวอย่ำงที่ 4.37 การใช้งาน Nowdoc สาหรับการแสดงกลุ่มของข้อความจานวนมาก <?php $str = <<<'EOD' Example of string spanning multiple lines using nowdoc syntax. EOD; class foo { public $foo; public $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 81.
    66 บทที่ 4ตัวแปร ตัวดาเนินการและนิพจน์ (Variables, Operators and Expressions) } $foo = new foo ( ); $name = 'MyName'; echo <<<'EOT' My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should not print a capital 'A': x41 EOT; ?> ตัวดำเนินกำรอื่น ๆ PHP ยังมีตัวดาเนินการอื่นๆ ที่ไม่ถูกจัดให้อยู่ในประเภทใดเลย นั่นก็คือ ตัวดาเนินการ error suppression (ใช้ในการระงับการเกิด error) ตัวดาเนินการในการ execute คาสั่งของ OS และตัว ดาเนินการในการเลือกค่า มีรายละเอียด ดังนี้ Error suppression (@) ตัวดาเนินการ หรือ ฟังก์ชัน บางตัวนั้นสามารถทาการ generate ข้อความ error ออกมาได้ ซึ่ง ถ้าใช้ตัวดาเนินการนี้มันจะช่วยในการไม่สนใจ error ที่เกิดขึ้น เช่น ตัวอย่ำงที่ 4.38 การใช้งาน Error suppression (@) ไม่สนใจ error ที่เกิดขึ้น <?PHP @include ("file.php"); // ในกรณีที่ไม่มีไฟล์ file.php ให้นาเข้าระบบก็ยังคง // สามารถทางานได้ปกติไม่แจ้งข้อผิดพลาดบนหน้าจอ ?> Execution ('...') ตัวดาเนินการ backtick (') ใช้ในการสั่งให้ execute คาสั่งภายนอก (ซึ่งก็หมายความว่าคาสั่งที่ ไม่ใช่ของ PHP นั่นเอง เช่น คาสั่งของระบบปฏิบัติการ เป็นต้น) เช่น ตัวอย่ำงที่ 4.39 ตัวดาเนินการ backtick (') ใช้ในการสั่งให้ execute คาสั่งภายนอก <?php $listing = 'ls -ls /tmp'; echo $listing; ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 82.
    บทที่ 5 โครงสร้างควบคุม (ControlStructures) ในบทนี้จะกล่าวถึงโครงสร้างควบคุมการไหลของโค้ดภายในโปรแกรม การกาหนดทางเลือกให้ กระทาหรือไม่กระทา การทาคาสั่งซ้าๆ ตามเงื่อนไขที่กาหนด เป็นต้น ซึ่งลักษณะการทางานดังกล่าวนี้ถือ เป็นพื้นฐานที่สาคัญที่ผู้เขียนโปรแกรมจาเป็นต้องเรียนรู้ ดังนั้นเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับทุก โครงสร้างการควบคุมดังกล่าวทีสามารถใช้ได้กับภาษา PHP ่ โครงสร้างควบคุม สามารถแบ่งออกเป็น 3 กลุ่ม คือ 1) คาสั่งเงื่อนไข 2) คาสั่งทาซ้า และ 3) คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซ้า มีรายละเอียด ดังนี้ หมายเหตุ รูปแบบประโยคคาสั่งโครงสร้างควบคุมของ if, while, for, foreach และ switch สามารถ เปลี่ยนจากเครื่องหมายปีกกาเปิด (bracket) แทนด้วยเครื่องหมาย colon (:) และแทนปีกกา ปิดด้วย endif;, endwhile;, endfor;, endforeach; และ endswitch; ตามคาสั่งโครงสร้าง ควบคุมที่ใช้งาน เช่น if ($test=1) : printf ("test"); endif; เป็นต้น คาสั่งเงื่อนไข (Conditional Statements) คาสั่งเงื่อนไขเป็นหนึ่งในโครงสร้างควบคุมขั้นพื้นฐาน เพื่อกาหนดทางเลือกต่างๆ เพื่อให้โปรแกรม คอมพิวเตอร์ของสามารถตอบสนองตามความหลากหลายของสิ่งที่รับเข้ามาหรือเงื่อนไขต่างๆ โดยใช้ รูปแบบการเปรียบเทียบทางตรรกะในการแยกแยะระหว่างเงื่อนไขต่างๆ ขึ้นอยู่กับค่าที่ป้อนเข้า ฟังก์ชัน พื้นฐานของกลุ่มนี้ คือ 1) if 2) if...else 3) if ... elseif และ 4) switch มีรายละเอียด ดังนี้ คาสั่ง if (The if Statement) คาสั่ง if ใช้ในการเปรียบเทียบเงื่อนไขว่าตรงตามที่ต้องการหรือไม่ หากตรงกับเงื่อนไขที่กาหนดก็จะ ทาตามคาสั่งอะไรบ้าง ถ้าเป็นเท็จก็จะทาคาสั่งอื่นๆ หลังจากประโยคปิดของคาสั่ง if คาสั่ง if มีรูปแบบ ดังนี้ if (เงื่อนไข) { คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง }
  • 83.
    68 บทที่ 5โครงสร้างควบคุม (Control Structures) เท็จ เงื่อนไข จริง คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง ภาพที่ 5.1 แสดงแผนภาพการไหล (Flow Chart) ของคาสั่ง if ตัวอย่างเช่น สมมติว่าต้องการแสดงข้อความยินดี เมื่อผู้ใช้สามารถเดาเลขรหัสลับที่กาหนดไว้ ล่วงหน้า ดังนี้ ตัวอย่างที่ 5.1 การใช้คาสั่ง if ในการเปรียบเทียบเงื่อนไขว่าตรงตามที่ต้องการหรือไม่ <?php $secretNumber = 453; if ($_POST['guess'] == $secretNumber) { // เมื่อ $_POST['guess'] คือ echo "<p>Congratulations!</p>"; // ค่าที่รับมาจาก Input Form } ?> คาสั่ง if ... else (The if ... else Statement) คาสั่ง if...else เป็นคาสั่งที่ใช้เปรียบเทียบเงื่อนไขการกระทาเช่นเดียวกับ คาสั่ง if แต่มากกว่า ตรงที่ คาสั่ง if .. else ถ้าเปรียบเทียบแล้วเป็นจริงก็จะให้ทาตามเงื่อนไขภายใน if ถ้าเป็นเท็จก็จะทาคาสั่ง ภายในเงื่อนไข else มีรูปแบบ ดังนี้ if (เงื่อนไข) { คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง } else { คาสั่งต่างๆ เมื่อเงื่อนไขเป็นเท็จ } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 84.
    บทที่ 5 โครงสร้างควบคุม(Control Structures) 69 เท็จ คาสั่งต่างๆ เมื่อเงื่อนไขเป็นเท็จ เงื่อนไข จริง คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง ภาพที่ 5.2 แสดงแผนภาพการไหลของคาสั่ง if ... else จากคาสั่ง if ก่อนหน้านี้จะเห็นว่า เลขรหัสลับที่รับเข้ามาจากผู้ใช้ต้องตรงกับเลขรหัสลับที่ระบุไว้ เท่านั้น จึงจะแสดงข้อความยินดี แต่หากเลขที่รับเข้ามาไม่ตรงกับเลขรหัสลับที่ระบุไว้ โปรแกรมก็จะไม่ แสดงอะไรกลับไปยังผู้ใช้ หากประยุกต์ใช้คาสั่ง if ... else เพื่อแสดงข้อความเพิ่มเติม เช่น กรณีที่เป็นเท็จ จากเงื่อนไข ในคาสั่ง if ให้แสดงข้อความแสดงความเสียใจรหัสผ่านไม่ถูกต้อง ตัวอย่างดังนี้ ตัวอย่างที่ 5.2 การใช้คาสั่ง if...else ในการเปรียบเทียบเงื่อนไข 2 กรณีที่เป็นจริงและเท็จ <?php $secretNumber = 453; if ($_POST['guess'] == $secretNumber) { echo "<p>Congratulations!!</p>"; } else { echo "<p>Sorry!</p>"; } ?> คาสั่ง if ... elseif (The if ... elseif Statement) คาสั่ง if ... elseif หรือ if ... else if เป็นคาสั่งที่ใช้เปรียบเทียบเงื่อนไขมากกว่า 1 เงื่อนไข เป็น การรวมกันของคาสั่ง if และ else ซึ่งคาสั่งเหล่านี้จะเรียงลาดับกันตามลาดับ มีรูปแบบ ดังนี้ if (เงื่อนไขที่ 1) { คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง } elseif (เงื่อนไขที่ 2) { // หรือเว้นวรรคเป็น else if (เงื่อนไขที่ 2) คาสั่งต่างๆ เมื่อเงื่อนไขที่ 2 เป็นจริง } else { คาสั่งต่างๆ เมื่อเงื่อนไขเป็นเท็จ } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 85.
    70 บทที่ 5โครงสร้างควบคุม (Control Structures) เท็จ จริง เงื่อนไขที่ 2 เงื่อนไขที่ 1 คาสั่งต่างๆ เมื่อเงื่อนไขที่ 2 เป็นจริง จริง คาสั่งต่างๆ เมื่อเงื่อนไขที่ 1 เป็นจริง เท็จ คาสั่งต่างๆ เมื่อเงื่อนไขทั้งหมดเป็นเท็จ ภาพที่ 5.3 แสดงแผนภาพการไหลของคาสั่ง if ... elseif จากคาสั่ง if ... else ก่อนหน้านี้ มีการแสดงข้อความเพิ่มเติม กรณีที่เป็นเท็จจากเงื่อนไข ในคาสั่ง if ให้แสดงข้อความแสดงความเสียใจรหัสผ่านไม่ถูกต้อง หากต้องการประยุกต์ใช้เพิ่มเติมเพื่อแจ้งให้ผู้ใช้ ทราบถึงเลขที่รับเข้ามายังไม่ตรงกับเลขรหัสลับที่กาหนดไว้ แต่ใกล้เคียง มีค่าไม่เกิน 10 เลข สามารถ ประยุกต์ใช้ ตัวอย่างดังนี้ ตัวอย่างที่ 5.3 การใช้คาสั่ง if...elseif ในการเปรียบเทียบเงื่อนไขหลายๆ เงื่อนไข <?php ?> $secretNumber = 453; if ($_POST['guess'] == $secretNumber) { // เมื่อ $_POST['guess'] คือ echo "<p>Congratulations!</p>"; // ค่าที่รับมาจาก Input Form } elseif (abs ($_POST['guess'] - $secretNumber) < 10) { // ฟังก์ชัน abs ( ) echo "<p>You're getting close!</p>"; // เป็นฟังก์ชันสาหรับแปลง } else { // ค่าค่าสัมบูรณ์ของตัวเลข echo "<p>Sorry!</p>"; // (เลขบวก) เช่น } // echo abs(-9.99) // แสดงผล 9.99 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 86.
    บทที่ 5 โครงสร้างควบคุม(Control Structures) 71 คาสั่ง switch (The switch Statement) คาสั่ง switch เป็นคาสั่งเงื่อนไขหนึ่งในโครงสร้างควบคุมขั้นพื้นฐาน เป็นการผสมผสานของ if ... else ซึ่งคาสั่ง switch นิยมใช้สาหรับการเปรียบเทียบค่าตัวแปรจานวนมาก เพื่อกาหนดทางเลือกต่างๆ ตามค่าของตัวแปร อาจจะถูกกาหนดเป็นค่าใดค่าหนึ่งจากตัวเลือกที่กาหนด คาสั่ง switch เป็นคาสั่งในการเปรียบเทียบค่าของตัวแปรในกรณีต่างๆ ภายใน switch ถ้าตัวแปร นั้นๆ ตรงกับ case ไหนก็จะทางานภายในบล็อกคาสั่งนั้นๆ และจะหยุดการทางานคาสั่งในบล็อกนั้นๆ ด้วยคาสั่ง break แต่ถ้าค่าตัวแปรไม่ตรงกับ case ไหนเลย มันก็จะมาทางานในส่วนของ case "default" (ในตัวอย่างนี้จะแสดงการตรวจสอบเงื่อนไขโดยใช้คาสั่ง if และคาสั่ง switch ให้พิจารณาเลือกใช้ ตาม ความถนัด) มีรายละเอียด ดังนี้ รูปแบบ switch (ตัวแปร) { case ค่าที่ 1 : ประโยคคาสั่งที่ 1; break; case ค่าที่ 2 : ประโยคคาสั่งที่ 2; break; ... case ค่าที่ N : ประโยคคาสั่งที่ N; break; default: ประโยคคาสั่ง //ในกรณีที่ไม่ตรงกับเงื่อนไขใดๆ ก่อนหน้า } ตัวอย่างที่ 5.4 การใช้คาสั่ง switch สาหรับการเปรียบเทียบค่าตัวแปรจานวนมาก <?php switch ($category) { case "news": echo "What's happening around the world<br />"; break; case "weather": echo "Your weekly forecast <br />"; break; case "sports": echo "Latest sports highlights <br />"; break; default: echo "Welcome to my Web site <br />"; } ?> ตัวอย่างที่ 5.5 การใช้คาสั่ง if พิจารณาเปรียบเทียบจากตัวอย่างการใช้คาสั่ง switch <?php if ($category=="news") echo "What's happening around the world<br />"; else if ($category=="weather") echo "Your weekly forecast<br />"; else if ($category=="sports") echo "Latest sports<br />"; else echo "Welcome to my Web site<br />"; ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 87.
    72 บทที่ 5โครงสร้างควบคุม (Control Structures) หมายเหตุ จากตัวอย่างการใช้คาสั่ง switch หากไม่ระบุการจบของแต่ละ case ด้วยฟังก์ชัน break; ผลที่จะ เกิดขึ้น คือ การทางานจะกระทาตั้งแต่ case ที่ตรวจสอบแล้วเป็นจริงกระทั้งถึง case สุดท้าย หรือจนกว่าจะพบฟังก์ชัน break; ใน case ใดๆ ตัวอย่างผลที่จะเกิดขึ้นหากไม่ระบุฟังก์ชัน break; ตัวอย่างเช่น สมมติให้ ตรวจพบ case ของ $category มีค่าเท่ากับ "weather" ผลที่ เกิดขึ้นหากไม่ระบุฟังก์ชัน break; จะได้ผลลัพธ์ ดังนี้ Your weekly forecast Latest sports Web site คาสั่งทาซา (Looping Statements) คาสั่งทาซ้า เป็ นหนึ่งในโครงสร้างควบคุม เพื่อควบคุมคาสั่งส่ วนใดส่วนหนึ่งให้ทางานซ้าตาม เงื่อนไขที่กาหนด คาสั่งทาซ้าที่นิยมใช้ใน PHP คือ 1) while 2) do … while 3) for และ 4) foreach คาสั่ง while คาสั่ง while จัดเป็นคาสั่งที่ใช้ในการควบคุมการทางานของโปรแกรมประเภทคาสั่งทาซ้า โดยที่ หลักการทางาน คือ จะทาการตรวจสอบเงื่อนไขใน while (condition) ก่อนกระทา ถ้าเงื่อนไขเป็นจริง โปรแกรมจะเริ่มทาในบล็อกคาสั่ง while แล้วกลับมาตรวจสอบเงื่อนไขใหม่อีกครั้ง หากเป็นจริงก็จาทาซ้า เช่นนี้ไปเรื่อยๆ จนกระทั้งเงื่อนไขเป็นเท็จจึงจะออกจากคาสั่งทาซ้า คาสั่ง while มีรูปแบบ ดังนี้ รูปแบบ while (เงื่อนไข) { ประโยคคาสั่ง } เท็จ เงื่อนไข จริง ประโยคคาสั่ง ภาพที่ 5.4 แสดงแผนภาพการไหลของคาสั่ง while ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 88.
    บทที่ 5 โครงสร้างควบคุม(Control Structures) 73 ตัวอย่างที่ 5.6 ตัวอย่างการหาค่าเลขยกกาลังสองของเลข 1 ถึง 5 <?php $count = 1; while ($count < 5) { printf ("%d ยกกาลังสองเท่ากับ %d <br />", $count, pow ($count, 2)); $count++; } ?> ผลลัพธ์ คือ 1 ยกกาลังสองเท่ากับ 1 2 ยกกาลังสองเท่ากับ 4 3 ยกกาลังสองเท่ากับ 9 4 ยกกาลังสองเท่ากับ 16 คาสั่ง do ... while คาสั่ง do ... while จัดเป็นคาสั่งที่ใช้ในการควบคุมการทางานของโปรแกรมประเภทคาสั่งทาซ้า โดยที่หลักการทางาน คือ จะเริ่มกระทาในบล็อกของ do ... while ก่อน 1 ครั้ง แล้วจึงค่อยตรวจสอบ เงื่อนไขใน while (condition) ถ้าเงื่อนไขเป็นจริง โปรแกรมจะกลับมาทาซ้าเช่นนี้ไปเรื่อยๆ จนกระทั้ง เงื่อนไขเป็นเท็จจึงจะออกจากคาสั่งทาซ้า คาสั่ง do ... while มีรูปแบบ ดังนี้ รูปแบบ do{ ประโยคคาสั่ง } while (เงื่อนไข); ประโยคคาสั่ง เงื่อนไข จริง เท็จ ภาพที่ 5.5 แสดงแผนภาพการไหลของคาสั่ง do ... while ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 89.
    74 บทที่ 5โครงสร้างควบคุม (Control Structures) ตัวอย่างที่ 5.7 ตัวอย่างการใช้งาน do ... while <?php $count = 11; do { printf ("%d ยกกาลังสองเท่ากับ %d <br />", $count, pow ($count, 2)); } while ($count < 10); ?> ผลลัพธ์ คือ 11 ยกกาลังสองเท่ากับ 121 คาสั่ง for คาสั่ง for จัดเป็นคาสั่งที่ใช้ในการควบคุมการทางานของโปรแกรมประเภทคาสั่งทาซ้า มีลักษณะ คล้ายๆ กับคาสั่ง while เพียงแต่ว่าสามารถกาหนดค่าเริ่มต้น ตัวแปรตรวจสอบ กาหนดเงื่อนไข และ ปรับเปลี่ยนค่าตัวแปรตรวจสอบของคาสั่งทาซ้าได้ ภายในบรรทัดเดียวเท่านั้น มีรูปแบบดังนี้ รูปแบบที่ 1 for (ค่าเริ่มต้นตัวแปรตรวจสอบ; เงื่อนไข; ปรับเปลี่ยนค่าตัวแปรตรวจสอบ) { ประโยคคาสั่ง; } กาหนดค่าเริ่มต้น ตัวแปรตรวจสอบ เท็จ เงื่อนไข จริง ประโยคคาสั่ง ปรับเปลี่ยนค่า ตัวแปรตรวจสอบ ภาพที่ 5.6 แสดงแผนภาพการไหลของคาสั่ง for ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 90.
    บทที่ 5 โครงสร้างควบคุม(Control Structures) 75 หมายเหตุ จากรูปแบบ for (ค่าเริ่มต้น; เงื่อนไข; ปรับเปลี่ยนค่าตัวแปร) ค่าในแต่ละตาแหน่งสามารถเว้นเป็น ค่าว่างได้ และใช้ตรรกศาสตร์อื่นๆ ในบล็อกเพื่อควบคุมการทางานของคาสั่ง for ตัวอย่างที่ 5.8 ตัวอย่างการใช้งาน for กรณีศึกษาแบบที่ 1 for ($kilometers = 1; $kilometers <= 5; $kilometers++) { printf ("%d kilometers = %f miles <br />", $kilometers, $kilometers*0.62140); } ตัวอย่างที่ 5.9 ตัวอย่างการใช้งาน for กรณีศึกษาแบบที่ 2 for ($kilometers = 1; ; $kilometers++) { if ($kilometers > 5) break; printf ("%d kilometers = %f miles <br />", $kilometers, $kilometers*0.62140); } ตัวอย่างที่ 5.10 ตัวอย่างการใช้งาน for กรณีศึกษาแบบที่ 3 $kilometers = 1; for (;;) { if ($kilometers > 5) break; printf ("%d kilometers = %f miles <br />", $kilometers, $kilometers*0.62140); $kilometers++; } ผลลัพธ์ทั้ง 3 ตัวอย่าง คือ 1 kilometers = 0.6214 miles 2 kilometers = 1.2428 miles 3 kilometers = 1.8642 miles 4 kilometers = 2.4856 miles 5 kilometers = 3.107 miles คาสั่ง foreach คาสั่ง foreach เป็นคาสั่งที่มโครงสร้างเหมือนในภาษา Perl และภาษาอื่นๆ บางภาษาโครงสร้าง ี foreach จะใช้ในการทางานกับอาร์เรย์ ช่วยในการทาซ้าหรือวนลูปดึงค่าอาร์เรย์ออกมาตามลาดับ และจะ เกิด error ถ้าใช้มันกับตัวแปรชนิดอื่นๆ ที่ไม่ใช่อาร์เรย์ รูปแบบของคาสั่ง foreach มีรูปแบบการใช้งาน 2 รูปแบบ ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 91.
    76 บทที่ 5โครงสร้างควบคุม (Control Structures) รูปแบบที่ 1 foreach (array_expression as $value) { ประโยคคาสั่ง } รูปแบบที่ 2 foreach (array_expression as $key => $value) ประโยคคาสั่ง ?> โครงสร้างของ foreach รูปแบบที่ 1 นั้น จะทาการวนลูปอาร์เรย์โดยใช้ตัวแปรอาร์เรย์ในส่วนของ array_expression ซึงแต่ละลูปนัน ค่าของสมาชิกปัจจุบันจะถูกกาหนดไปยัง $value และ pointer ของ ่ ้ อาร์เรย์ก็จะเลื่อนไปที่สมาชิกตัวต่อไปเพื่อรอการวนลูปรอบใหม่ (ดังจะเห็นได้จาก เมื่อเริ่มลูปใหม่ ค่าของ สมาชิกตัวต่อไปจะถูกกาหนดไปยัง $value แทน) โดยจะทาการวนลูปไปเรื่อยๆ จนกระทั่งครบจานวน สมาชิกในอาร์เรย์ โครงสร้างของ foreach รูปแบบที่ 2 นั้น จะทางานคล้ายกับรูปแบบที่ 1 เพียงแต่มันจะส่งค่า keys (หรือ index) ของสมาชิก ในแต่ละรอบให้กับ $key ด้วย ซึ่งต่างกันตรงที่รูปแบบที่ 1 นั้นจะทาการ ส่ง value (ค่าของสมาชิก) เพียงอย่างเดียว เมื่อเริ่มลูปแรกของ foreach นั้น pointer ของอาร์เรย์จะถูก reset ให้เริ่มต้นที่สมาชิกตัวแรก โดยอัตโนมัติ ซึ่งหมายความว่าไม่จาเป็นต้องใช้ฟังก์ชัน reset ( ) ก่อนเข้าลูป foreach และยังสามารถ เปลี่ยนแปลงค่าสมาชิกในอาร์เรย์ได้อย่างง่ายๆ โดยใช้การเปลี่ยนค่าแบบอ้างอิง (reference) ตัวอย่างที่ 5.11 ตัวอย่างการใช้งาน foreach กรณีศึกษาแบบที่ 1 <?php $arr = array (1, 2, 3, 4); foreach ($arr as $value) { printf ("%d ", $value); // ผลลัพธ์ คือ 1 2 3 4 } ?> จากตัวอย่างไม่สามารถเปลี่ยนแปลงค่าอาร์เรย์ได้ เนื่องจากไม่สามารถรู้ว่า keys ของค่าตัวแปร นั้นๆ คืออะไร ตัวอย่างที่ 5.12 ตัวอย่างการใช้งาน foreach กรณีศึกษาแบบที่ 2 <?php $arr2 = array(1, 2, 3, 4) foreach ($arr2 as $key => $value) { ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 92.
    บทที่ 5 โครงสร้างควบคุม(Control Structures) 77 $arr2 [$key] = $value * 2; // ผลที่ได้คือ: $arr2 = array (2, 4, 6, 8) } ?> จากตัวอย่างสามารถเปลี่ยนค่าให้กับสมาชิกอาร์เรย์ได้ เนื่องจากมี keys ของสมาชิกแต่ละตัว (ใน แต่ละรอบ) เพื่อใช้ในการอ้างอิง keys ที่ต้องการเปลี่ยนค่า ตัวอย่างที่ 3 ตัวอย่างนี้ไม่จาเป็นต้องใช้ keys ก็ได้ แต่ก็สามารถเปลี่ยนแปลงค่าของสมาชิก อาร์เรย์ได้ โดยการใช้แบบอ้างอิงแทน ตัวอย่างที่ 5.13 ตัวอย่างการใช้งาน foreach กรณีศึกษาแบบไม่ใช้ keys ในการอ้างอิงค่า <?php $arr3 = array (1, 2, 3, 4); foreach ($arr3 as &$value) $value = $value * 2; // ผลที่ได้ คือ arr3 = array (2, 4, 6, 8) unset ($value); ?> จากตัวอย่างค่าที่ได้ คือ arr3 = array(2, 4, 6, 8) สิ่งที่ต้องทาในการ foreach แบบอ้างอิงจะต้อง ทาการ unset ( ) ค่าที่ทาการอ้างอิงมาด้วย เนื่องจากมันยังคงจาค่าสุดท้ายของสมาชิกตัวสุดท้ายอยู่ เมื่อนาไปใช้งานอื่นๆ มันก็ยังคงถือว่าเป็นการตัวแปรที่มีการอ้างอิงสมาชิกตัวสุดท้ายอยู่ ตัวอย่างที่ 5.14 เปรียบเทียบระหว่างคาสั่ง foreach และคาสั่ง while กรณีศึกษาแบบที่ 1 <?php <?php $arr = array("one", "two", "three"); $arr = array ("one", "two", "three"); foreach ($arr as $value) { reset ($arr); //ตาแหน่งแรกของอาร์เรย์ echo "Value: $value<br />"; while (list (, $value) = each ($arr)) { } echo "Value: $value<br />"; ?> } ?> จากตัวอย่างได้ผลลัพธ์เหมือนกัน ดังนี้ Value: one Value: two Value: three ตัวอย่างที่ 5.15 เปรียบเทียบระหว่างคาสั่ง foreach และคาสั่ง while กรณีศึกษาแบบที่ 2 <?php <?php foreach ($arr as $key => $value) { $arr = array ("one", "two", "three"); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 93.
    78 บทที่ 5โครงสร้างควบคุม (Control Structures) echo "Key: $key; Value: $value<br />"; reset ($arr); while (list ($keys, $value) = each ($arr)) echo "Key: $key; Value: $value<br />"; } ?> ?> จากตัวอย่างได้ผลลัพธ์เหมือนกัน ดังนี้ Key: 0 Value: one Key: 1 Value: two Key: 2 Value: three คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซา (The Other Controls of Looping Statements) คาสั่งควบคุมอื่นๆ ที่เกี่ยวข้องกับคาสั่งทาซ้า คือ คาสั่งควบคุมอื่นๆ ที่ส่งผลต่อการทางานของ คาสั่งทาซ้า เช่น ในบางครั้งของการเขียนโปรแกรมอาจจาเป็นต้องหยุดการทางานของคาสั่งทาซ้านั้นๆ อัน เนื่องมาจากค่าตัวแปรบางอย่างอาจก่อให้เกิดข้อผิดพลาดจาเป็นต้องหยุดการทางานก่อนปัญหาดังกล่าว จะเกิดขึ้น เป็นต้น คาสั่งควบคุมอื่นๆ คือ 1) คาสั่ง break 2) คาสั่ง goto และ 3) คาสั่ง continue มี รายละเอียด ดังนี้ คาสั่ง break (The break Statements) คาสั่ง break เป็นคาสั่งที่สั่งให้หยุดการทางานของบล็อกคาสั่ง ทาซ้า ไม่ว่าจะเป็น for, foreach, while, do ... while หรือ switch ก็ตาม ซึ่งเมื่อโปรแกรมมาพบคาสั่ง break โปรแกรมจะหยุด ประมวลผลคาสั่งอื่นๆ ในบล็อกของคาสั่งทาซ้านั้นๆ แล้วจะกระโดดออกจากบล็อกคาสั่งดังกล่าวทันที คาสั่ง break ก็ยังสามารถกาหนดค่า optional โดยการใส่หมายเลขต่อท้ายคาสั่ง ค่าของ option ประกอบด้วย 1 คือ การสั่งให้ออกจากลูปที่อยู่ในปัจจุบัน และ 2 คือ การสั่งให้ออกจากบล็อกคาสั่งที่ ครอบบล็อกคาสั่งปัจจุบันอยู่ ตัวอย่างดังนี้ ตัวอย่างที่ 5.16 การใช้คาสั่ง break สาหรับหยุดการทางานของบล็อกคาสั่งทาซ้า <?php $arr = array ('one', 'two', 'three', 'four', 'stop', 'five'); while (list (,$val) = each ($arr)) { if ($val == 'stop') { break; /* เมื่อค่าของอาร์เรย์มีค่าเป็น 'stop' มันจะทาการ break ลูป while ทันที ซึ่งสามารถใช้ break 1; แทนได้ */ } echo "$val <br />"; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 94.
    บทที่ 5 โครงสร้างควบคุม(Control Structures) 79 } $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5 <br />"; break 1; // ออกจากบล็อกคาสั่ง switch case 10: echo "At 10; quitting <br />"; break 2; // ออกจากบล็อกคาสั่ง while default: break; } } ?> คาสั่ง goto (The goto Statements) คาสั่ง goto เป็นคาสั่งที่สั่งให้โปรแกรมไปทางานตามจุดที่กาหนดไว้ ส่วนมากไม่นิยมใช้กันเพราะ ทาให้การตรวจสอบการทางานของโปรแกรมทาได้ยากขึ้น เนื่องจากการใช้คาสั่ง goto และ label ทาให้ การทางานของโปรแกรมมีลักษณะกระโดดไปทางานตามจุดที่กาหนดไว้ ทาให้การทางานของโปรแกรม ไม่ได้ทางานจากด้านบนลงมาด้านล่างอาจเกิดความสับสนในการทางานของโปรแกรมได้ แต่อย่างไรก็ตาม ขึ้นอยู่กับการประยุกต์ใช้งานอย่างเหมาะสม มีตัวอย่างการใช้งาน ดังนี้ ตัวอย่างที่ 5.17 การใช้คาสั่ง goto สั่งให้โปรแกรมไปทางานตาม label ที่กาหนดไว้ <?php for ($count = 0; $count < 10; $count++){ $randomNumber = rand(1,50); if ($randomNumber < 10) goto less; else echo "Number greater than 10: $randomNumber <br />"; } less: echo "Number less than 10: $randomNumber <br />"; ?> จากตัวอย่าง มีการกาหนดไว้ว่าหากเลขที่สุ่มมีค่าน้อยกว่า 10 ให้กระโดดมายัง label ที่ชื่อว่า less: ตัวอย่างผลลัพธ์ (ผลลัพธ์อาจแตกต่างเนื่องจากการสุ่มตัวเลขขึ้นมากแสดงผล) ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 95.
    80 บทที่ 5โครงสร้างควบคุม (Control Structures) Number greater than 10: 22 Number greater than 10: 21 Number greater than 10: 35 Number less than 10: 8 คาสั่ง continue (The continue Statement) คาสั่ง continue ถูกใช้ภายในโครงสร้างควบคุมของคาสั่งทาซ้า เพื่อให้ข้ามการทางานลูปหรือ รอบการทางานของคาสั่งทาซ้าปัจจุบัน ไปทางานในลูปถัดไป และคาสั่ง continue ยังสามารถกาหนด optional เพื่อระบุตัวเลขสาหรับข้ามการทางานในลูประดับ (level) ชั้นใด ตัวอย่างดังนี้ ตัวอย่างที่ 5.18 การใช้คาสั่ง continue ข้ามการทางานลูปของคาสั่งทาซ้าปัจจุบัน ไปทางานในลูปถัดไป <?php while (list ($key, $value) = each ($arr)) { if (!($key % 2)) { continue; // ข้ามไปทางานรอบต่อไปเลยถ้าเป็นเลขคี่ } do_something_odd ($value); } $i = 0; while ($i++ < 5) { echo "Outer<br />"; while (1) { echo " Middle<br />"; while (1) { echo " Inner<br />"; continue 3; // ทาการข้ามไปทางานรอบต่อไปของลูป while($i++ < 5) // เนื่องจากในลูป while($i++ < 5) นี้เป็นระดับ (level) ที่ 3 } echo "This never gets output.<br />"; } echo "Neither does this.<br />"; } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 96.
    บทที่ 6 ฟังก์ชัน (Functions) ในบทนี้จะกล่าวถึงPHP ฟังก์ชัน รวมถึงวิธีการสร้าง ข้อกาหนด คุณสมบัติต่างๆ และการเรียกใช้ งานฟังก์ชัน การส่งค่าตัวแปรเพื่อประมวลผลในฟังก์ชัน การส่งค่ากลับเมื่อฟังก์ชันทางานเสร็จ เป็นต้น ซึงหน้าที่หลักๆ ของฟังก์ชันนั้นจะช่วยลดขั้นตอนการเขียนโปรแกรมที่ต้องทาซ้าๆ หรือใช้งานบ่อยครั้ง ทา ่ ให้การเขียนโปรแกรมทาได้ง่ายและรวดเร็ว สามารถสร้างเป็น ไลบรารีฟังก์ชัน สาหรับการใช้งานในครั้ง ต่อๆ ไป ฟังก์ชัน ฟังก์ชัน คือ กลุ่มหรือชุดของคาสั่งที่สร้างขึ้นเพื่อทาหน้าที่หนึ่งๆ เมื่อต้องการใช้งานก็เพียงเรียกชื่อ ฟังก์ชันนั้นก็สามารถใช้งานได้ทันที ฟังก์ชันใน PHP สามารถแบ่งได้เป็น 2 ชนิด คือ 1) ฟังก์ชันมาตรฐาน (Built-in Functions) และ 2) ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง (User Defined Functions) มี รายละเอียด ดังนี้ ฟังก์ชันมาตรฐาน (Built-in Functions) ฟังก์ชันมาตรฐาน คือ ฟังก์ชันที่มาพร้อมกับ PHP สามารถเรียกใช้งานได้ทันที ฟังก์ชันมาตรฐานมี หลายกลุ่มการทางาน สามารถจาแนกตามหน้าที่ ดังนี้  ฟังก์ชันที่เกี่ยวกับวันที่และเวลา  ฟังก์ชันที่เกี่ยวกับการคานวณทางคณิตศาสตร์  ฟังก์ชันที่เกี่ยวกับการติดต่อกับฐานข้อมูล  ฟังก์ชันที่เกี่ยวกับการจัดการกับกับสตริงหรือข้อความ ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง (User Defined Functions) ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง คือ กลุ่มของคาสั่งที่ผู้ใช้เป็นผู้เขียนหรือพัฒนาขึ้นมาเอง เพื่อ ทางานหรือทาหน้าที่อย่างใดอย่างหนึ่งตามต้องการ จากที่ได้กล่าวถึงในข้างต้น สรุปได้ว่า หลักๆ แล้วฟังก์ชันมีอยู่ด้วยกัน 2 ประเภท ทั้ง 2 ประเภท ก็จะมีฟังก์ชันที่ประกอบไปด้วย ฟังก์ชันที่ไม่มีการส่งค่าระหว่างฟังก์ชัน และฟังก์ชันที่มีการส่งค่าระหว่าง ฟังก์ชัน ค่าที่ใช้รับส่งระหว่างฟังก์ชัน จะเรียกว่า พารามิเตอร์ (parameter) หรือบ้างก็เรียกว่า อากิวเมนต์ (argument) ในหนังสือเล่มนี้ ผู้แต่งขอใช้คาว่า พารามิเตอร์ เพียงอย่างเดียวเมื่อกล่าวถึงค่าตัวแปรที่ใช้ สาหรับการรับส่งค่าระหว่างฟังก์ชัน
  • 97.
    82 บทที่ 6ฟังก์ชัน (Functions) การเรียกใช้งานฟังก์ชันมาตรฐานของ PHP ในการเรียกใช้งานฟังก์ชันจะต้องตรวจสอบก่อนว่าฟังก์ชันนั้นๆ เป็นฟังก์ชันเพื่อทาหน้าที่อะไร มี การรับส่งค่าตัวแปรระหว่างฟังก์ชันหรือไม่ ถ้าไม่มีการรับส่งค่าระหว่างฟังก์ชัน ก็สามารถเรียกใช้งานได้ เลย แต่ถ้ามีการรับส่งค่าระหว่างฟังก์ชัน ก็จะต้องมีการระบุค่าพารามิเตอร์ ให้ถูกต้องตามรูปแบบที่ฟังก์ชัน กาหนด ตัวอย่างที่ 6.1 รูปแบบฟังก์ชันที่ไม่มีการรับส่งค่าระหว่างฟังก์ชัน function_name ( ); ตัวอย่างที่ 6.2 รูปแบบฟังก์ชันที่มีการรับส่งค่าระหว่างฟังก์ชัน function_name ($value1, $value2); ตัวอย่างที่ 6.3 การเรียกใช้งานฟังก์ชันมาตรฐาน <?php $today = date("d/m/Y"); echo $today; // เรียกใช้งานฟังก์ชัน date(); พร้อมระบุค่าอากิวเมนต์ // แสดงผลลัพธ์ เป็นวันที่ปัจจุบัน เช่น 6/7/2012 เป็นต้น ?> การสร้างฟังก์ชัน (Creating a Function) ลักษณะของงานที่จะนามาสร้างเป็นฟังก์ชันนั้น ควรเป็นงานหรือการกระทาอย่างใดอย่างหนึ่ง ที่ มักจะต้องทาซ้าๆ และบ่ อยครั้ ง เพื่อให้ไม่ต้องเขียนคาสั่ งหรือชุดคาสั่ งนั้นๆ ทุกครั้งที่ต้องการทางาน แบบเดิม ซึ่งสามารถแยกคาสั่งบางส่วนออกมาสร้างเป็นฟังก์ชันไว้ต่างหากและนามาทาเป็นฟังก์ชัน และ เรียกใช้ตามลักษณะงานที่ต้องการ จะช่วยให้โค้ดคาสั่งของมีขนาดเล็กลง ช่วยลดการใช้ทรัพยากร และง่าย ในการปรับปรุงแก้ไขในอนาคต เพราะสามารถแก้ไขเพียงครั้งเดียวก็จะมีผลทุกจุดที่เรียกใช้ฟังก์ชัน รูปแบบ <?php function ชื่อฟังก์ชัน (พารามิเตอร์) { คาสั่ง; } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 98.
    บทที่ 6 ฟังก์ชัน(Functions) 83 หมายเหตุ การตั้งชื่อฟังก์ชัน มีหลักเกณฑ์คล้ายกับการตั้งชื่อตัวแปร ดังนี้ - ต้องขึ้นต้นชื่อด้วย a-z หรือ _ เท่านั้น - ต้องประกอบด้วย a-z, 0-9 หรือ _ เท่านั้น - ต้องไม่ซ้ากับชื่อฟังก์ชันที่มีอยู่แล้วหรือฟังก์ชันมาตรฐานของ PHP พารามิเตอร์ คือ ตัวแปรหรือข้อมูลที่ต้องการรับจากภายนอกฟังก์ชันเข้ามาประมวลผลภายใน ฟังก์ชัน จะมีหรือไม่ก็ได้ ขึ้นอยู่กับว่าจาเป็นต้องใช้หรือไม่ การเรียกใช้ฟังก์ชันที่สร้างเอง การเรียกใช้ฟังก์ชันที่สร้างเองสามารถทาได้เช่นเดียวกับการใช้ฟังก์ชันมาตรฐานของ PHP คือ ต้องระบุชื่อฟังก์ชันที่ต้องการใช้งานโดยระบุข้อมูลที่จะส่งให้กับฟังก์ชัน (ถ้ามี) ดังตัวอย่าง ตัวอย่างที่ 6.4 การสร้างฟังก์ชัน <?php function generateFooter ($msg) { printf ("<p><font color=red> %s <font></p>",$msg); } ?> ตัวอย่างที่ 6.5 การเรียกใช้ฟังก์ชันที่สร้างเอง <?php generateFooter ("Copyright 2012 Mr.Parinya Noidonprai"); ?> ฟังก์ชันแบบมีการส่งค่าพารามิเตอร์ พารามิเตอร์ คือ ข้อกาหนดในการรับข้อมูลของฟังก์ชัน โดยข้อมูลนั้นจะถูกนาไปใช้ประมวลผล ภายในฟังก์ชัน พารามิเตอร์จะทาให้ฟังก์ชันมีความยืดหยุ่นต่อการใช้งาน เพราะผลลัพธ์จะแปรเปลี่ยนไป ตามค่าพารามิเตอร์นั้น วิธีการกาหนดค่าพารามิเตอร์ มีดังนี้ พารามิเตอร์แบบกาหนดค่าเริ่มต้น (Default Parameter) ในบางฟังก์ชันอาจใช้ค่าพารามิเตอร์ค่าใดค่าหนึ่งเป็นส่วนใหญ่ โดยอาจมีการเปลี่ยนไปใช้ค่าอื่น บ้างในบางครั้ง ดังนั้นเพื่อความสะดวกจึงมีการกาหนดค่าพารามิเตอร์แบบกาหนดค่าเริ่มต้นขึ้น โดยจะ กาหนดค่าพารามิเตอร์ที่ต้องใช้บ่อยๆ ไว้ล่วงหน้า หรือป้องกันปัญหาในกรณีที่ไม่ได้กาหนดค่าพารามิเตอร์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 99.
    84 บทที่ 6ฟังก์ชัน (Functions) ให้กับฟังก์ชัน เมื่อมีการเรียกใช้ฟังก์ ชันหากไม่มีการส่งค่าพารามิเตอร์มาให้ฟังก์ชัน ฟังก์ชันจะเรียกใช้ค่า เริ่มต้นที่กาหนดไว้ให้แทน รูปแบบการกาหนดพารามิเตอร์แบบกาหนดค่าเริ่มต้น มีรายละเอียด ดังนี้ รูปแบบ <?php function ชื่อฟังก์ชัน (ชื่อพารามิเตอร์ = ค่าเริ่มต้น) { คาสั่ง; } ?> ตัวอย่างที่ 6.6 ฟังก์ชันปิรามิดตัวเลข <?php function pyramidNumber ($number=7) { for ($loop1=$number; $loop1>=1; $loop1--) { for($loop2=1; $loop2<=$loop1; $loop2++) { printf (" %d ",$loop2); } echo "</ br>"; } } ?> ตัวอย่างที่ 6.7 การเรียกใช้ฟังก์ชันปิรามิดตัวเลข <?php <?php pyramidNumber ( ); // ไม่ส่งพารามิเตอร์ pyramidNumber (4); // ส่งพารามิเตอร์ ?> ?> ผลลัพธ์ 1234567 1234 123456 123 12345 12 1234 1 123 12 1 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 100.
    บทที่ 6 ฟังก์ชัน(Functions) 85 พารามิเตอร์แบบส่งค่าและอ้างอิง (Passing Parameter by Value and Reference) ปกติแล้วค่าที่ถูกส่งไปยังฟังก์ชันจะเป็นแบบส่งค่า (by Value) คือ เมื่อมีการเปลี่ยนแปลงค่าของ ตัวแปรภายในฟังก์ชัน จะไม่ส่งต่อค่าตัว แปรตัวเดียวกันที่อยู่นอกฟังก์ชัน ทุกตัว อย่างก่อนหน้าในเรื่อง ฟังก์ชันนี้ใช้วิธีการผ่านค่าพารามิเตอร์แบบส่งค่าทั้งหมด การส่งผ่านค่าแบบอ้างอิง (by Reference) นั้น หากในฟังก์ชันมีการเปลี่ยนแปลงค่าของตัวแปร ภายในฟังก์ชันจะส่งผลให้ค่าของตัวแปรที่อ้างอิงกันนอกฟังก์ชัน ทาให้มีค่าเปลี่ยนตามไปด้วย การส่งผ่าน ค่าแบบอ้างอิงสามารถทาได้โดยการใส่เครื่องหมาย & ไว้หน้าพารามิเตอร์ตัวที่ต้องการอ้างอิง ตัวอย่างที่ 6.8 การเปรียบเทียบการส่งค่าพารามิเตอร์แบบปกติและแบบอ้างอิง <?php // การส่งค่าพารามิเตอร์ปกติ <?php // การส่งค่าพารามิเตอร์แบบอ้างอิง function foo ($var) { function foo (&$var) { $var++; $var++; } } $a=5; $a=5; foo ($a); foo ($a); echo $a; // ผลลัพธ์ $a = 5 echo $a; // ผลลัพธ์ $a = 6 ?> ?> ตัวอย่างที่ 6.9 การประยุกต์ใช้งานการส่งค่าพารามิเตอร์แบบอ้างอิง <?php $cost = 20.99; $tax = 0.0575; function calculateCost (&$cost, $tax) { // ปรับเปลี่ยนค่าตัวแปร $cost $cost = $cost + ($cost * $tax); // ปรับเปลี่ยนค่าตัวแปร $tax $tax += 4; } calculateCost ($cost, $tax); printf ("Tax is: %01.2f%% <br />", $tax*100); printf ("Cost is: $%01.2f", $cost); ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 101.
    86 บทที่ 6ฟังก์ชัน (Functions) ผลลัพธ์ Tax is: 5.75% Cost is: $22.20 จากตัว อย่างจะเห็ นได้ว่าตัวแปร $cost ที่อยู่ในฟังก์ชันและนอกฟังก์ชันถือว่าเป็นตัวเดียวกัน ดังนั้นเมื่อมีการปรับเปลี่ยนค่าตัวแปรในฟังก์ชันจะยังผลให้ค่าเปลี่ยนตามทั้งหมดเหมือนกับการใช้งานตัว แปรแบบสาธารณะ (Global Variable) แต่ในสาหรับตัวแปร $tax ในและนอกฟังก์ชันถือว่าเป็นคนละตัว แปร ดังนั้นเมื่อภายในฟังก์ชันมีการเปลี่ยนแปลงจะไม่ทาให้ค่าของตัวแปรเปลี่ยนไป การส่งค่ากลับจากฟังก์ชันด้วยคาสั่ง return (Returning Values from a Function) เนื่องจากฟังก์ชันจะใช้ในการประมวลผลอย่างใดอย่างหนึ่ง โดยฟังก์ชันมักจะถูกเรียกใช้โดยส่วน ต่างๆ ของโปรแกรม เพื่อประมวลผลตามหน้าที่ต่างๆ ของฟังก์ชัน ในบางครั้งฟังก์ชัน อาจจาเป็นต้องส่งค่า ผลลัพธ์ของการทางานกลับไปยังส่วนที่เรียกใช้ฟังก์ชันนั้นๆ หรือสามารถประยุกต์ใช้สาหรับการตรวจสอบ การทางานของฟังก์ชัน เช่น ทางานปกติอาจส่งค่ากลับเป็นเลข 1 ทางานไม่ถูกต้องส่งค่ากลับเป็นเลข 2 หรืออื่นๆ ตามต้องการ เป็นต้น สาหรับ วิธีการส่งค่ากลับออกไปจะใช้คาสั่ง return แล้วตามด้วยค่าที่ ต้องการส่งออกไป มีรูปแบบ ดังนี้ return ค่าที่จะส่งกลับ; ตัวอย่างที่ 6.10 ฟังก์ชัน calcSalesTax ( ) มีการส่งค่ากลับเป็นค่าของตัวแปร $total <?php function calcSalesTax ($price, $tax=.0675) { $total = $price + ($price * $tax); return $total; } ?> ตัวอย่างที่ 6.11 ฟังก์ชัน calcSalesTax ( ) มีการส่งค่ากลับเป็นผลลัพธ์ของการคานวณ <?php function calcSalesTax ($price, $tax=.0675) { return $price + ($price * $tax); } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 102.
    บทที่ 6 ฟังก์ชัน(Functions) 87 เทคนิคการส่งค่ากลับแบบหลายค่า (Returning Multiple Values) ในบางครั้งของการเรียกใช้ฟังก์ชัน อาจจาเป็นต้องต้องส่งค่ากลับมากกว่า 1 ค่า เช่น เขียนฟังก์ชัน เพื่อติดต่อกับฐานข้อมูล แล้วต้องการส่งค่ากลับประกอบด้วย ชื่อ -สกุล อีเมล์ ที่อยู่ เบอร์โทรศัพท์ เป็นต้น ซึ่งในตัวอย่างก่อนหน้านี้จะกล่าวถึงเฉพาะส่งค่ากลับเพียง 1 ค่าเท่านั้น ในกรณีนี้มีฟังก์ชันมาตรฐานของ PHP ที่สามารถช่วยได้ คือ ฟังก์ชัน list ( ) สามารถใช้สาหรับส่งค่ากลับมากกว่า 1 ค่าในรูปแบบของ อาร์เรย์ ตัวอย่างดังนี้ ตัวอย่างที่ 6.12 เทคนิคการส่งค่ากลับแบบหลายค่า กรณีศึกษาแบบที่ 1 <?php $colors = array ("red","blue","green"); list ($red, $blue, $green) = $colors; ?> จากตัวอย่าง เมื่อเรียกใช้ฟังก์ชัน list ( ) จะได้ตัวแปรประกอบด้วย $red, $blue และ $green มีค่าเป็น red, blue และ green ตามลาดับ จากตัวอย่างเป็นแนวคิดเริ่มต้นสาหรับตัวอย่างถัดไป เพื่อให้ เห็นกระบวนการสาหรับประยุกต์ใช้ฟังก์ชัน list ( ) ดังนี้ ตัวอย่างที่ 6.13 เทคนิคการส่งค่ากลับแบบหลายค่า กรณีศึกษาแบบที่ 2 <?php function retrieveUserProfile ( ) { $user [ ] = "Parinya"; $user [ ] = "parinya@example.com"; $user [ ] = "Thai"; return $user; } list ($name, $email, $language) = retrieveUserProfile ( ); echo "Name: $name, email: $email, language: $language"; ?> ผลลัพธ์ของแนวคิดและประยุกต์ใช้ฟังก์ชัน list ( ) Name: Parinya, email: parinya@example.com, language: Thai ฟังก์ชันแบบเรียกตัวเอง (Recursive Functions) ฟังก์ชันแบบเรียกตัวเอง คือ การเขียนฟังก์ชันโดยใช้เทคนิคการแก้ปัญหาใหญ่ให้เป็นปัญหาย่อยที่ มีรูปแบบเดียวกันกับปัญหาใหญ่ การเขียนฟังก์ชั นแบบเรียกตัวเองช่วยในการแก้ปัญหาที่ซับซ้อนได้โดย การเขียนฟังก์ชันในรูปแบบที่ง่ายและสั้น ตัวอย่างดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 103.
    88 บทที่ 6ฟังก์ชัน (Functions) ตัวอย่างที่ 6.14 การสร้างฟังก์ชันสาหรับหาค่าแฟลทอเรียล n! <?php function factorial ($n) { if ($n < 1) return 1; else return $n*factorial($n-1); } echo factorial(4); ?> ฟังก์ชัน factorial ( ) จากตัวอย่างข้างบน จะเห็นได้ว่าตัวแปร $n จะต้องเป็นตัวแปรที่เก็บค่าที่ เป็นเลขจานวนเต็ม และไม่เป็นลบ ถ้าต้องการจะเขียนฟังก์ชันให้มีความปลอดภัยในการใช้งาน ก็อาจจะ เพิ่มเงื่อนไข เพื่อตรวจสอบก่อนว่า ผู้ใช้ส่งค่าของตัวแปรตรงตามต้องการหรือไม่ เช่น ไม่ ส่งค่าที่เป็นสตริง หรือเป็นเลขทศนิยม หรือค่าที่เป็นลบ เป็นต้น จากตัวอย่างจะเป็นการทางานซ้าโดยใช้รูปแบบฟังก์ชัน เรียกใช้ตัวเอง จะหยุดก็ต่อเมื่อตัวแปร $n มีค่าน้อยกว่าหรือเท่ากับ 1 เมื่อเป็นจริงตามเงื่อนไขฟังก์ชันจะ หยุดทางานโดยใช้ฟังก์ชัน return 1 ฟังก์ชันไลบรารี (Function Libraries) วิธีที่จะช่วยลดการเขียนคาสั่งหรือฟังก์ชันซ้าซ้อน คือ การเขียนคาสั่งการทางานแยกเก็บไว้อีกไฟล์ หนึ่ง ซึ่งอาจเป็นชุดคาสั่ง ฟังก์ชัน คลาส หรือไฟล์อื่นๆ ที่เกี่ยวข้องในลักษณะของฟังก์ชันไลบรารีหรือคลัง ฟังก์ชัน และเมื่อต้องการนาไฟล์ดังกล่าวมาใช้งานที่เว็บเพจใดก็เพี ยงเรียกไฟล์ที่เก็บฟังก์ชันนั้นๆ ไว้ ก็ สามารถใช้งานได้ทันทีเสมือนว่าฟังก์ชันที่จะเรียกอยู่ในเว็บเพจที่กาลังพัฒนา ฟังก์ชันสาหรับการเรียกใช้ ไฟล์ภายนอก ได้แก่ 1) include ( ) 2) include_once ( ) 3) require ( ) และ 4) require_once ( ) มี รายละเอียดการใช้งานในแต่ละฟังก์ชัน ดังนี้ ฟังก์ชัน include ( ) เป็นฟังก์ชันสาหรับโหลดไฟล์เพื่อนามาใช้งานร่วมกับคาสั่งอื่นๆ ของเว็บเพจ และยังคงทางานอยู่ ภายในโปรแกรมจนกว่าจะสิ้นสุดการทางาน ถ้าฟังก์ชัน include ( ) เรียกหาไฟล์ที่ระบุไม่พบ ระบบ จะแจ้งเตือน (Warning) ข้อผิดพลาดแล้วข้ามไปทาส่วนอื่นๆ ของคาสั่งในลาดับถัดไป ฟังก์ชัน include_once ( ) เป็นฟังก์ชันสาหรับเรีย กโหลดไฟล์เหมือนกับฟังก์ชัน include ( ) แต่ต่างกันที่ฟังก์ชัน include_once ( ) จะเรียกโหลดไฟล์นั้นได้เพียงครั้งเดียวเท่านั้น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 104.
    บทที่ 6 ฟังก์ชัน(Functions) 89 ตัวอย่างที่ 6.15 ตัวอย่างไฟล์ที่เก็บชุดคาสั่งกาหนดชื่อเป็น lib.php <?php echo "parinya<br />"; ?> ตัวอย่างที่ 6.16 การเปรียบเทียบความแตกต่างระหว่างฟังก์ชัน include ( ) และ include_once ( ) <?php <?php include ("lib.php"); include_once ("lib.php"); include ("lib.php"); include_once ("lib.php"); include ("lib.php"); include_once ("lib.php"); ?> ?> ผลลัพธ์ // ผลลัพธ์ของการใช้ฟังก์ชัน include ( ); // ผลลัพธ์ของการใช้ฟังก์ชัน include_once ( ); parinya parinya parinya parinya ในกรณีที่เรียกใช้ฟังก์ชัน include ( ) หรือ include_once ( ) แล้วไม่พบไฟล์ที่จานาเข้ามา จะปรากฏข้อความตามตัวอย่าง แต่ยังสามารถทางานต่อในลาดับถัดไปได้ ตัวอย่างดังต่อไปนี้ ตัวอย่างที่ 6.17 แสดงตัวอย่างข้อผิดพลาดเมื่อไม่พบไฟล์ที่จะนาเข้า <?php include ("file.php"); echo "ยังสามารถแสดงผลบรรทัดนี้ได้<br/>"; ?> ผลลัพธ์ Warning: include(file.php) [function.include]: failed to open stream: No such file or directory in C:AppServwww test.php on line 2 Warning: include() [function.include]: Failed opening 'file.php' for inclusion (include_path='.;C:php5pear') in C:AppServwww test.php on line 2 ยังสามารถแสดงผลบรรทัดนี้ได้ ฟังก์ชัน require ( ) เป็นฟังก์ชันสาหรับเรียกโหลดไฟล์เหมือนกับฟังก์ชัน include ( ) แต่ต่างกันที่เมื่อฟังก์ชัน require ( ) หาไฟล์ที่ต้องการโหลดไม่พบจะแจ้งเตือน และแสดงข้อผิดพลาด (Fatal) จากนั้นจะหยุดการ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 105.
    90 บทที่ 6ฟังก์ชัน (Functions) ทางานไม่ทาคาสั่งในลาดับ ถัดไป นิยมใช้โหลดไฟล์ที่จัดเก็บฟังก์ชัน หรือคลาสที่มีความจาเป็นต่อการ ทางานของโปรแกรม ฟังก์ชัน require_once ( ) เป็นฟังก์ชันที่มีการทางานเหมือนกับฟังก์ชัน require ( ) แต่ต่างกันที่ฟังก์ชัน require_once ( ) จะโหลดไฟล์นั้นได้เพียงครั้งเดียวเท่านั้น ในกรณีที่เรียกใช้ฟังก์ชัน require ( ) หรือ require_once ( ) แล้วไม่พบไฟล์ที่จานาเข้ามา จะปรากฏข้อความตามตัวอย่าง และจะไม่ทางานในลาดับบรรทัดต่อไป ตัวอย่างที่ 6.18 การใช้ฟังก์ชัน require_once ( ) <?php require ("file.php"); echo "ยังสามารถแสดงผลบรรทัดนี้ได้<br/>"; ?> ผลลัพธ์ Warning: require(file.php) [function.require]: failed to open stream: No such file or directory in C:AppServwww test.php on line 2 Fatal error: require() [function.require]: Failed opening required 'file.php' (include_path='.;C:php5pear') in C:AppServwwwtest.php on line 2 จากตัวอย่างดังกล่าว จะเห็นได้ว่าไม่ปรากฏคาว่า "ยังสามารถแสดงผลบรรทัดนี้ได้ " เรียกลักษณะ ดังกล่าวว่า Fatal Error นิยมใช้โหลดไฟล์ที่จัดเก็บฟังก์ชันหลัก หรือคลาสที่มีความจาเป็นต่อการทางาน ของโปรแกรม (หยุดทางานซะ ดีกว่าทางานต่อไปเรื่อยๆ แบบผิดๆ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 106.
    บทที่ 7 อาร์เรย์ (Arrays) อาร์เรย์(Array) คือ ชุดของข้อมูล (Data Sets) หรือชุดของตัวแปร ใช้สาหรับเก็บค่าของข้อมูลที่อยู่ใน กลุ่มเดียวกัน ซึ่งมีการเรียงลาดับที่แน่นอน โดยล าดับของอาร์เรย์โดยปกติจะเริ่มจากศูนย์ และเป็นล าดับ ต่อเนื่องไปจนถึงตัวสุดท้าย อาร์เรย์แตกต่างจากตัวแปรทั่วไป คือ ตัวแปรโดยทั่วไปจะถูกจัดเก็บในหน่วยความจา แบบไม่ต่อเนื่องกัน แต่ตัวแปรประเภทอาร์เรย์จะถูกเก็บในหน่วยความจาในตาแหน่งที่ต่อเนื่องกัน ข้อมูลแต่ละตัวในอาร์เรย์เรียกว่า "สมาชิก (Member) หรืออิลิเมนต์ (Element)" โดยสมาชิก เหล่านี้มักจะมีความสัมพันธ์กันในลักษณะใดลักษณะหนึ่ง สาหรับใน PHP ข้อมูลที่เก็บในอาร์เรย์ไม่ จ าเป็ น ต้องเป็ น ข้อมูล ชนิ ดเดีย วกัน สมาชิกแต่ล ะตัว จะประกอบด้ว ยค่าข้อมูล (Value) และอินเด็ก ซ์ (Index) เปรียบเสมือนเป็นคีย์ (Key) ของอาร์เรย์ที่ใช้อ้างอิงถึงตาแหน่งของสมาชิกแต่ละตัวในอาร์เรย์ ตารางที่ 7.1 แสดงตัวอย่างข้อมูลแบบอาร์เรย์ และแสดงตาแหน่งของอินเด็กซ์ หมายเลขอินเด็กซ์ ค่าของข้อมูลหรือสมาชิก ลาดับที่ของสมาชิก 0 สุราษฎร์ธานี 1 1 กระบี่ 2 2 ชุมพร 3 3 นครศรีธรรมราช 4 การสร้างอาร์เรย์ (Create arrays) การสร้างอาร์เรย์มีหลักๆ 4 วิธี คือ 1) การใช้ฟังก์ชัน array ( ) 2) การใช้ฟังก์ชัน range ( ) 3) การสร้างโดยใช้เครื่องหมายวงเล็บก้ามปู [ ] และ 4) การสร้างโดยนาค่ามาจากเท็กซ์ไฟล์ มีตัวอย่าง ดังนี้ การใช้ฟังก์ชัน array ( ) รูปแบบที่ 1 กรณีไม่กาหนดอินเด็กซ์ให้กับสมาชิก $ชื่ออาร์เรย์ = array (สมาชิกลาดับที่ 1, สมาชิกลาดับที่ 2, ... , สมาชิกลาดับที่ N); ตัวอย่างที่ 7.1 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีไม่กาหนดอินเด็กซ์ให้กับสมาชิก <?php $province = array ("สุราษฎร์ธานี", "กระบี่", "ชุมพร", "นครศรีธรรมราช", "พังงา", "ภูเก็ต", "ระนอง"); print_r ($province); // ใช้แสดงข้อมูลในอาร์เรย์ ?>
  • 107.
    92 บทที่ 7อาร์เรย์ (Arrays) ตัวอย่างที่ 7.2 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีไม่กาหนดอินเด็กซ์ให้กับสมาชิก <?php $province[ ] = "สุราษฎร์ธานี"; $province[ ] = "กระบี่"; $province[ ] = "ชุมพร"; $province[ ] = "นครศรีธรรมราช"; print_r ($province); ?> การอ้างถึงสมาชิกแต่ละตัวต้องใช้หมายเลขอินเด็กซ์ เริ่มต้นจากเลข 0 และ 1, 2, 3 ตามลาดับ ซึ่ง การระบุเลขอินเด็กซ์จะต้องใส่ภายในเครื่องหมายวงเล็บก้ามปู ([ ]) หมายเหตุ ฟังก์ชันที่ใช้แสดงอาร์เรย์ออกทางหน้าจอ มีให้เลือกใช้ดังนี้ 1) ฟังก์ชัน print_r ( ) ใช้แสดงข้อมูลจากตัวแปรทุกชนิด ไม่ว่าจะเป็น string, integer, array, object มีรูปแบบคาสั่ง ดังนี้ mixed print_r ( mixed $expression [, bool $return = false ] ) เมื่อ $expression หมายถึง ชื่อตัวแปรที่ต้องการนาข้อมูลมาแสดง $return หมายถึง กาหนดให้มีการส่งค่าคืนหรือไม่ โดยปกติจะเป็น false คือ ไม่มีการส่ งค่าคืน และแสดงข้อมูล ออกทางหน้าจอ หาก กาหนดเป็น true จะส่งคืนค่าและต้องกาหนดตัวแปรมา รับค่า และไม่แสดงข้อมูลออกทางหน้าจอ 2) ฟังก์ชัน var_dump ( ) ใช้แสดงข้อมูลเช่นเดียวกับ print_r ( ) แต่สามารถใช้กับอาร์เรย์ หลายมิติได้ และไม่มีการส่งคืนค่า รูปแบบดังนี้ void var_dump ( mixed $expression [, mixed $... ] ) รูปแบบที่ 2 กรณีกาหนดอินเด็กซ์ให้กับสมาชิก $ชื่ออาร์เรย์ = array (Key1=>สมาชิกลาดับที่ 1, Key2=>สมาชิกลาดับที่ 2, ... ); ตัวอย่างที่ 7.3 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีกาหนดอินเด็กซ์ให้กับสมาชิก <?php $province = array ("Surat" => "สุราษฎร์ธานี", "Krabi" => "กระบี่", "Chumphon" => "ชุมพร", "Nakhon" => "นครศรีธรรมราช"); echo $province["Surat"]; // ผลลัพธ์ คือ สุราษฎร์ธานี ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 108.
    บทที่ 7 อาร์เรย์(Arrays) 93 ตัวอย่างที่ 2 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีกาหนดอินเด็กซ์ให้กับสมาชิก สาหรับ ตัวอย่างที่ 2 นี้จะใช้ในกรณีที่อาจไม่ทราบสมาชิกที่แน่นอน ดังนั้นอาจยังไม่ระบุสมาชิกลงไป หรือระบุ เพียงบางตัวแล้วมาปรับปรุงเพิ่มเติมในภายหลัง ดังนี้ ตัวอย่างที่ 7.4 การสร้างอาร์เรย์โดยใช้ฟังก์ชัน array ( ) กรณีกาหนดอินเด็กซ์ให้กับสมาชิก <?php $province = array ( ); // สร้างอาร์เรย์ว่าง $province [0] = "สุราษฎร์ธานี"; // กาหนดสมาชิก ... $province [0] = "ยะลา"; // แก้ไขปรับปรุงค่าข้อมูลสมาชิกเดิม $province [7] = "เชียงใหม่"; // เพิ่มข้อมูลสมาชิกใหม่ print_r ($province); ?> การใช้ฟังก์ชัน range ( ) ฟังก์ชัน range ( ) เป็นฟังก์ชันที่ใช้สาหรับสร้างอาร์เรย์ โดยกาหนดค่าข้อมูลเป็นช่วงของตัวเลขหรือ ตัวอักษร เรียงลาดับจากน้อยไปหามากหรือมากไปหาน้อย (เป็นลักษณะข้อมูลที่เกี่ยวเนื่องกันเป็นชุด) มีรูปแบบ ดังนี้ รูปแบบ array range (mixed $start, mixed $limit [, number $step = 1]) เมื่อ $start หมายถึง ค่าเริ่มต้นของลาดับ $limit หมายถึง ค่าสุดท้ายของลาดับ $step หมายถึง ค่าความต่างของข้อมูล จะกาหนดหรือไม่ก็ได้ ถ้าไม่กาหนดค่าจะเพิ่ม ครั้งละ 1 ค่า ตัวอย่างที่ 7.5 การใช้ฟังก์ชัน range ( ) <?php foreach (range (0, 12) as $number) echo $number . " "; // ผลลัพธ์ คือ 0 1 2 3 4 5 6 7 8 9 10 11 12 foreach (range (0, 100, 10) as $number) echo $number . " "; // ผลลัพธ์ คือ 0 10 20 30 40 50 60 70 80 90 100 foreach (range ('a', 'i') as $number) echo $number . " "; // ผลลัพธ์ คือ a b c d e f g h i foreach (range ('i', 'a') as $number) echo $number . " "; // ผลลัพธ์ คือ i h g f e d c b a ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 109.
    94 บทที่ 7อาร์เรย์ (Arrays) การสร้างโดยใช้เครื่องหมายวงเล็บก้ามปู [ ] การสร้างอาร์เรย์ด้วยวิธีนี้ เป็นการกาหนดค่าให้กับอาร์เรย์โดยตรง โดยสร้างครั้งละ 1 สมาชิก นอกจากนี้ยังสามารถนาไปใช้ในการเพิ่มสมาชิกให้กับอาร์เรย์ที่มีอยู่แล้วก็ได้ รูปแบบ array array_name [Key] = value; เมื่อ array_name หมายถึง ชื่อตัวแปรอาร์เรย์ Key หมายถึง อินเด็กซ์ของตัวแปรอาร์เรย์ (จะกาหนดหรือไม่ก็ได้) value หมายถึง ค่าของข้อมูลที่จะกาหนดให้ตัวแปรอาร์เรย์ ตัวอย่างที่ 7.6 การสร้างโดยใช้เครื่องหมายวงเล็บก้ามปู [ ] <?php $country [1] = "Thailand"; $country [A] = "Japan"; print_r ($country); // ผลลัพธ์ คือ Array ( [1] => Thailand [A] => Japan ) ?> การสร้างอาร์เรย์โดยนาค่ามาจากเท็กซ์ไฟล์ การสร้ างอาร์ เรย์โดยน าค่ามาจากเท็กซ์ไฟล์เป็นวิธีการโหลดข้อมูล จากเท็กซ์ไฟล์มาเก็บไว้ใน อาร์เรย์ ซึ่งข้อมูลแต่ละบรรทัดในเท็กซ์ไฟล์ ก็คือ ค่าข้อมูลของสมาชิกแต่ละตัวในอาร์เรย์ ตัวอย่าง ข้อมูลในเท็กซ์ไฟล์ กาหนดชื่อ text.txt Suratthani Chumphon Ranong ตัวอย่างที่ 7.7 การนาค่ามาจากเท็กซ์ไฟล์ <?php $txt_file = file ("text.txt"); // ติดต่อกับเท็กซ์ไฟล์ $count_txt = count ($txt_file); // นับจานวนตัวอักษรเก็บในตัวแปร $count_txt if ($count_txt == 0) { // จานวนตัวอักษรเท่ากับ 0 แสดงว่าไม่มีข้อมูล echo "ไม่มีข้อมูลในไฟล์ <br />"; } else { // จานวนตัวอักษรมากกว่า 0 for ($loop = 0; $loop < $count_txt; $loop++) { // ลูปวนรอบเท่ากับจานวน echo $txt_file [$loop] . "<br />"; // ตัวอักษรในเท็กซ์ไฟล์ } } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 110.
    บทที่ 7 อาร์เรย์(Arrays) 95 ผลลัพธ์ Suratthani Chumphon Ranong การเข้าถึงข้อมูลภายในอาร์เรย์ การเข้าถึงข้อมูลภายในอาร์เรย์มี 4 วิธี คือ 1) การอ้างตาแหน่งของอินเด็กซ์ 2) การใช้คาสั่งทาซ้า 3) การใช้ฟังก์ชัน each ( ) และ 4) การใช้ฟังก์ชัน list ( ) มีรายละเอียด ดังนี้ การอ้างตาแหน่งของอินเด็กซ์ ตัวแปรทั่วไปจะใช้เฉพาะชื่อของตัวแปรเพื่ออ้างถึงค่าในตัวแปร แต่สาหรับอาร์เรย์จะใช้ชื่อของ อาร์เรย์และอินเด็กซ์ในการอ้างถึงค่าในอาร์เรย์ที่ต้องการนาไปประมวลผล ค่าของอินเด็กซ์ที่ต้องการอ้าง ถึงจะกาหนดในเครื่องหมายวงเล็บก้ามปู ซึ่งอยู่ หลังชื่อของอาร์เรย์ ตัวอย่างเช่น $province[0] เป็นการ อ้างถึงสมาชิกของอาร์เรย์อินเด็กซ์ลาดับที่ 0 เป็นต้น นอกจากนี้ค่าที่อยู่ในอาร์เรย์ยังสามารถเปลี่ยนแปลง ได้โดยใช้รูปแบบกาหนดค่า (เครื่องหมาย =) เหมือนการกาหนดค่าให้กับตัวแปรทั่วไป การใช้คาสั่งทาซา การเข้าถึงข้อมูลในอาร์เรย์ด้วยการใช้คาสั่งทาซ้า เช่น for, while และ foreach เป็นต้น จะใช้ได้ เฉพาะอาร์เรย์ที่มีอินเด็กซ์ที่เป็นตัวเลขที่มีการเรียงลาดับแล้ว ตัวอย่างการใช้งาน ดังนี้ ตัวอย่างที่ 7.8 การใช้คาสั่งทาซ้าเพื่อควบคุมการแสดงผลของอาร์เรย์ <?php $province = array ("สุราษฎร์ธานี", "กระบี่", "ชุมพร", "นครศรีธรรมราช"); $count_province = count ($province); for ($loop = 0; $loop < $count_province; $loop++) { printf ("ลาดับที่ %d คือ %s <br />", $loop+1, $province [$loop]); } ?> การใช้ฟังก์ชัน each ( ) ฟังก์ชัน each ( ) เป็นฟังก์ชันที่ใช้อ่านค่าอาร์เรย์ โดยจะส่งคืนค่าเป็น คีย์ (key) และค่าข้อมูล (value) หากอ่านค่าในอาร์เรย์จนหมดแล้ว จะส่งคืนค่าเป็น false รูปแบบ array each ( array &$array ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 111.
    96 บทที่ 7อาร์เรย์ (Arrays) ตัวอย่างที่ 7.9 การใช้ฟังก์ชัน each ( ) สาหรับอ่านค่าอาร์เรย์ <?php $province = array ("สุราษฎร์ธานี", "กระบี่", "ชุมพร", "นครศรีธรรมราช"); while ($element = each ($province)) printf ("คีย์ที่ %d มีค่า %s <br />",$element ["key"], $element ["value"]); ?> การใช้ฟังก์ชัน list ( ) ฟังก์ชัน list ( ) ทางานในลักษณะเดียวกับฟังก์ชัน each ( ) แตกต่างกันที่ฟังก์ชัน list ( ) ไม่มีการ ส่งคืนค่า และจะแยกอาร์เรย์ออกจากกัน แล้วเก็บค่าของสมาชิกแต่ละตัวไว้ในตัวแปรที่กาหนดไว้ รูปแบบ array array_values ( array $input ) เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า ตัวอย่างที่ 7.10 การใช้ฟังก์ชัน list ( ) สาหรับอ่านค่าอาร์เรย์ <?php $data_set = array ("A1001", "ปริญญา", "น้อยดอนไพร", "ผู้จัดการ", "25000"); list ($code, $name, $lastname, $occupation, $salary) = $data_set; echo "รหัสพนักงาน: $code "; echo "ชื่อ-สกุล: $name $lastname "; echo "อาชีพ: $occupation เงินเดือน: $salary"; ?> การใช้ฟังก์ชัน array_keys ( ) ฟังก์ชัน array_keys ( ) ใช้สาหรับอ่านค่าคีย์ทั้งหมดของตัวแปรอาร์เรย์ โดยผลลัพธ์จะเป็น อาร์เรย์ของคีย์ที่อานได้ทั้งหมด ่ รูปแบบ array array_keys ( array $input [, mixed $search_value = NULL [, bool $strict = false ]] ) เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่าคีย์ $search_value หมายถึง อ่านค่าคีย์เฉพาะค่าของอาร์เรย์ที่ตรงกับค่าที่กาหนด (จะ กาหนดหรือไม่ก็ได้) $strict หมายถึง ใ ช้ ส า ห รั บ ก า ร เ ป รี ย บ เ ที ย บ ( ===) ใ ช้ ร่ ว ม กั บ $search_value เพื่ อ เปรี ย บเที ย บค่ า ของอาร์ เ รย์ กั บ ค่ า ที่ เปรียบเทียบ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 112.
    บทที่ 7 อาร์เรย์(Arrays) 97 ตัวอย่างที่ 7.11 การใช้ฟังก์ชัน array_keys ( ) สาหรับอ่านค่าคีย์ทั้งหมดของตัวแปรอาร์เรย์ <?php $array = array (0 => 100, "color" => "red"); print_r (array_keys ($array)); // ผลลัพธ์ คือ Array ( [0] => 0 [1] => color ) $array = array ("blue", "red", "green", "blue", "blue"); print_r (array_keys ($array, "blue"));// ผลลัพธ์ คือ Array ( [0] => 0 [1] => 3 [2] => 4 ) $array = array ("color" => array ("blue", "red", "green"), "size" => array ("small", "medium", "large")); print_r (array_keys ($array)); // ผลลัพธ์ คือ Array ( [0] => color [1] => size ) ?> การใช้ฟังก์ชัน array_values ( ) ฟังก์ชัน array_values ( ) ใช้สาหรับอ่านค่าของสมาชิกในอาร์เรย์ โดยผลลัพธ์จะเป็นอาร์เรย์ของ ค่าที่อ่านได้ทั้งหมด รูปแบบ array array_values ( array $input ) เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า ตัวอย่างที่ 7.12 การใช้ฟังก์ชัน array_values ( ) สาหรับอ่านค่าของสมาชิกในอาร์เรย์ <?php $array = array ("size" => "XL", "color" => "gold"); print_r (array_values ($array)); // ผลลัพธ์ คือ Array ( [0] => XL [1] => gold ) ?> การใช้ฟังก์ชัน array_unique ( ) ฟังก์ชัน array_unique ( ) ใช้สาหรับอ่านค่าของสมาชิกในอาร์เรย์ โดยเลือกเฉพาะข้อมูลที่ไม่ซ้า กัน (ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สาหรับภาษาอังกฤษถือว่าไม่เหมือนกัน) รูปแบบ array array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการอ่านค่า $sort_flags หมายถึง พารามิเตอร์ที่ใช้ร่วมกับการจัดเรียงตามชนิด โดยจะต้อง กาหนดร่วมกับค่า SORT_STRING ของการจัดเรียง (จะ กาหนดหรือไม่ก็ได้) ดังนี้ SORT_REGULAR หมายถึง จัดเรียงโดยการเปรียบเทียบตามปกติ (ไม่มีการเปลี่ยนชนิด) SORT_NUMERIC หมายถึง จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่เป็นชนิดตัวเลข ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 113.
    98 บทที่ 7อาร์เรย์ (Arrays) SORT_STRING หมายถึง จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่เป็นชนิดตัวอักษร หรือข้อความ ตัวอย่างที่ 7.13 การใช้ฟังก์ชัน array_unique ( ) สาหรับอ่านค่าของสมาชิกในอาร์เรย์ที่ไม่ซ้ากัน <?php $input = array ("a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique ($input); print_r ($result); // ผลลัพธ์ คือ Array ( [a] => green [0] => red [1] => blue ) ?> ตัวอย่างที่ 7.14 การใช้ฟังก์ชัน array_unique ( ) กรณีศึกษาแบบที่ 2 <?php $input = array (4, "4", "3", 4, 3, "3"); $result = array_unique ($input); var_dump ($result); // ผลลัพธ์ คือ array(2) { [0]=> int(4) [2]=> string(1) "3" } ?> ฟังก์ชันอื่นๆ ที่เกี่ยวกับอาร์เรย์ สาหรับใน PHP จะมีฟังก์ชันที่เกี่ยวข้องกับอาร์เรย์อยู่มากมาย แต่บางฟังก์ชันก็อาจไม่ค่อยได้ใช้ งานบ่อยนัก หรืออาจใช้ฟังก์ชันอื่นทดแทนกันได้ ดังนั้นในส่วนนี้จะเน้นเฉพาะฟังก์ชันหลักๆ ที่สาคัญที่ มักจะใช้บ่อยครั้ง ทั้งนี้เพื่อความสะดวกต่อการทาความเข้าใจ จะแยกอธิบายตามความเกี่ยวข้องของ ฟังก์ชันต่างๆ ดังนี้ ฟังก์ชันในการเพิ่มสมาชิกในอาร์เรย์ ฟังก์ชัน array_push ( ) ใช้สาหรับเพิ่มสมาชิกลงในอาร์เรย์ โดยข้อมูลที่จะเพิ่มลงไปจะมีจานวนเท่าไหร่ก็ได้ หรือจะนามา จากอาร์เรย์อื่นก็ได้ รูปแบบ int array_push ( array &$array , mixed $var [, mixed $... ] ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่จะนาข้อมูลเพิ่ม $var หมายถึง ข้อมูลที่ต้องการเพิ่ม ตัวอย่างที่ 7.15 ฟังก์ชัน array_push ( ) สาหรับเพิ่มสมาชิกลงในอาร์เรย์ <?php $stack = array ("orange", "banana"); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 114.
    บทที่ 7 อาร์เรย์(Arrays) 99 array_push ($stack, "apple", "raspberry"); print_r ($stack); ?> ผลลัพธ์ Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry ) ฟังก์ชัน array_pad ( ) ใช้สาหรับขยายสมาชิกเพิ่มให้กับอาร์เรย์ รูปแบบ array array_pad ( array $input , int $pad_size , mixed $pad_value ) เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่จะขยายเพิ่มสมาชิก $pad_size หมายถึง ขนาดใหม่ของตัวแปรอาร์เรย์ $pad_value หมายถึง ข้อมูลที่จะเพิ่ม ตัวอย่างที่ 7.16 ฟังก์ชัน array_pad ( ) สาหรับขยายสมาชิกเพิ่มให้กับอาร์เรย์ <?php $input = array(12, 10, 9); $result = array_pad ($input, 5, 0); // ผลลัพธ์ คือ array(12, 10, 9, 0, 0) $result = array_pad ($input, -7, -1);// ผลลัพธ์ คือ array(-1, -1, -1, -1, 12, 10, 9) $result = array_pad ($input, 2, "noop"); ?> // ผลลัพธ์ คือ ไม่ขยาย (not padded) เนื่องจาก $pad_size มีขนาดน้อยกว่า $input ฟังก์ชัน array_unshift ( ) ใช้สาหรับเพิ่มสมาชิกตาแหน่งแรกของอาร์เรย์ รูปแบบ int array_unshift ( array &$array , mixed $var [, mixed $... ] ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่จะเพิ่มสมาชิก $var หมายถึง ข้อมูลหรือค่าที่จะเพิ่ม ตัวอย่างที่ 7.17 ฟังก์ชัน array_unshift ( ) สาหรับเพิ่มสมาชิกตาแหน่งแรกของอาร์เรย์ <?php $queue = array ("orange", "banana"); array_unshift ($queue, "apple", "raspberry"); print_r ($queue); ?> // ผลลัพธ์ คือ Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 115.
    100 บทที่ 7อาร์เรย์ (Arrays) ฟังก์ชัน array_slice ( ) ใช้สาหรับลบ แทนที่ และเพิ่ม สมาชิกในตาแหน่งใดๆ ของอาร์เรย์ รูปแบบ array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] ) เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่จะนาข้อมูลเพิ่ม $length หมายถึง จานวนสมาชิกที่จะลบ (จะกาหนดหรือไม่ก็ได้) แบ่งเป็น 3 กรณี คือ 1) หากกาหนด จะลบสมาชิกตามจานวนที่กาหนด โดยเริ่ม จากตาแหน่ง offset ที่ระบุ 2) หากไม่กาหนด จะลบสมาชิก ตั้งแต่ตาแหน่ง offset ที่ระบุจนถึงสมาชิกสุดท้ายของอาร์เรย์ 3) หากกาหนดเป็น 0 คือ ไม่ต้องการลบสมาชิกออก แต่ต้องการ เพิ่ มสมาชิ กลงในต าแหน่ ง offset ที่ ระบุ แต่ ต้ องก าหนด replacement ด้วย $replacement หมายถึง ข้อมูลที่จะเพิ่มลงไปยังตาแหน่ง offset ที่ระบุ (จะกาหนด หรือไม่ก็ได้) ตัวอย่างที่ 7.18 ฟังก์ชัน array_slice ( ) สาหรับลบ แทนที่ และเพิ่ม สมาชิกในตาแหน่งใดๆ ของอาร์เรย์ <?php $input = array ("red", "green", "blue", "yellow"); array_splice ($input, 2); print_r ($input); // ผลลัพธ์ คือ Array ( [0] => red [1] => green ) $input = array ("red", "green", "blue", "yellow"); array_splice ($input, 1, -1); print_r ($input); // ผลลัพธ์ คือ Array ( [0] => red [1] => yellow ) $input = array ("red", "green", "blue", "yellow"); array_splice ($input, 1, count($input), "orange"); // ผลลัพธ์ คือ Array ( [0] => red [1] => orange ) $input = array ("red", "green", "blue", "yellow"); array_splice ($input, -1, 1, array("black", "maroon")); // ผลลัพธ์ คือ Array ( [0] => red [1] => green [2] => blue [3] => black [4] => maroon ) $input = array ("red", "green", "blue", "yellow"); array_splice ($input, 3, 0, "purple"); // ผลลัพธ์ คือ Array ( [0] => red [1] => green [2] => blue [3] => purple [4] => yellow ) ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 116.
    บทที่ 7 อาร์เรย์(Arrays) 101 ฟังก์ชันในการลบสมาชิกในอาร์เรย์ ฟังก์ชัน unset ( ) ใช้สาหรับลบหรือยกเลิกตัวแปรทั่วไปหรือตัวแปรชนิดอาร์เรย์ รูปแบบ void unset ( mixed $var [, mixed $... ] ) เมื่อ $var หมายถึง ตัวแปรอาร์เรย์ที่ต้องการลบ ตัวอย่างที่ 7.19 ฟังก์ชัน unset ( ) สาหรับลบหรือยกเลิกตัวแปรทั่วไปหรือตัวแปรชนิดอาร์เรย์ <?php $stack = array ("orange", "banana"); unset ($stack[1]); print_r ($stack); ?> // ผลลัพธ์ Array ( [0] => orange ) ฟังก์ชัน array_pop ( ) ใช้สาหรับลบสมาชิกตาแหน่งสุดท้ายของตัวแปรชนิดอาร์เรย์ หากตัวแปรเป็นค่าว่างหรือตัวแปรที่ ส่งเข้าไปไม่ใช่ตัวแปรชนิดอาร์เรย์ ฟังก์ชันจะส่งค่ากลับเป็น Null หากสามารถลบได้จะส่งค่ากลับเป็นค่า ลาดับสุดท้ายของสมาชิกอาร์เรย์ รูปแบบ mixed array_pop ( array &$array ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการลบ ตัวอย่างที่ 7.20 ฟังก์ชัน array_pop ( ) สาหรับลบสมาชิกตาแหน่งสุดท้ายของตัวแปรอาร์เรย์ <?php $stack= array ("orange", "banana", "apple"); $fruit = array_pop ($stack); print_r ($stack); // ผลลัพธ์ Array ( [0] => orange [1] => banana ) ?> ฟังก์ชัน array_shift ( ) ใช้สาหรับลบสมาชิกตาแหน่งแรกของตัวแปรชนิดอาร์เรย์ และย้ายล าดับของสมาชิกใหม่โดย เริ่มต้นจาก 0 รูปแบบ mixed array_shift ( array &$array ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการลบ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 117.
    102 บทที่ 7อาร์เรย์ (Arrays) ตัวอย่างที่ 7.21 ฟังก์ชัน array_shift ( ) สาหรับลบสมาชิกตาแหน่งแรกของตัวแปรชนิดอาร์เรย์ <?php $stack = array ("orange", "banana", "apple"); $fruit = array_shift ($stack); print_r ($stack); ?> // ผลลัพธ์ Array ( [0] => banana [1] => apple ) ฟังก์ชันในการนับจานวนสมาชิกในอาร์เรย์ ฟังก์ชัน count ( ) ใช้สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ รูปแบบ int count ( mixed $var [, int $mode = COUNT_NORMAL ] ) เมื่อ $var หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนับจานวนสมาชิก $mode หมายถึง พารามิเตอร์เสริมสาหรับนับอาร์เรย์แบบ COUNT_RECURSIVE หมายเหตุ ฟังก์ชัน count ( ) จะมีการส่งค่ากลับเป็นเลขจานวนสมาชิกทั้งหมดในอาร์เรย์ ในกรณีที่ตัว แปรที่ส่งเข้ามาไม่ใช่ตัวแปรชนิดอาร์เรย์ฟังก์ชัน count ( ) จะส่งค่ากลับเป็น 1 และในกรณีที่ ตัวแปรอาร์เรย์เป็นค่าว่างจะส่งค่ากลับเป็น 0 ตัวอย่างที่ 7.22 การใช้ฟังก์ชัน count ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ <?php $a [0] = 1; $a [1] = 3; $a [2] = 5; $result = count($a); // ผลลัพธ์ คือ $result = 3 $b [0] = 7; $b [5] = 9; $b [10] = 11; $result = count($b); // ผลลัพธ์ คือ $result = 3 $result = count(null); // ผลลัพธ์ คือ $result = 0 $result = count(false); // ผลลัพธ์ คือ $result = 1 ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 118.
    บทที่ 7 อาร์เรย์(Arrays) 103 ตัวอย่างที่ 7.23 การใช้ฟังก์ชัน count ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ เพื่อนับ อาร์เรย์แบบ COUNT_RECURSIVE <?php $food = array ('fruits' => array ('orange', 'banana', 'apple'), 'veggie' => array ('carrot', 'collard', 'pea')); // แสดงตัวอย่างการนับสมาชิกของอาร์เรย์แบบ COUNT_RECURSIVE echo count($food, COUNT_RECURSIVE); // ผลลัพธ์ คือ 8 // แสดงตัวอย่างการนับสมาชิกของอาร์เรย์แบบปกติ echo count($food); // ผลลัพธ์ คือ 2 ?> ฟังก์ชัน sizeof ( ) ใช้สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ เช่นเดียวกับฟังก์ชัน count ( ) รูปแบบ int sizeof ( mixed $var ) เมื่อ $var หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนับจานวนสมาชิก ตัวอย่างที่ 7.24 การใช้ฟังก์ชัน sizeof ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ <?php $result [0] = 1; $result [1] = 3; $result [2] = 5; for ($a = 0, $b = sizeof ($result); $a < $b; $a++) printf ("%d ", $result [$a]); ?> // ผลลัพธ์ คือ 1 3 5 ฟังก์ชัน array_count_values ( ) ใช้สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ แต่ผลลัพธ์ที่ได้จะเป็นอาร์เรย์ที่แสดงว่า สมาชิกแต่ ละตัวมีอยู่จานวนเท่าไหร่ โดยค่าคีย์จะเป็นสมาชิกแต่ละตัว และค่าจะเป็นจานวนที่นับได้ รูปแบบ array array_count_values ( array $input ) เมื่อ $input หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนับ ตัวอย่างที่ 7.25 การใช้ฟังก์ชัน array_count_values ( ) สาหรับนับจานวนสมาชิกทั้งหมดในอาร์เรย์ <?php $array = array (1, "hello", 1, "world", "hello"); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 119.
    104 บทที่ 7อาร์เรย์ (Arrays) ?> print_r (array_count_values ($array)); // ผลลัพธ์ คือ Array ( [1] => 2 [hello] => 2 [world] => 1 ) ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มอินเด็กซ์เป็นตัวเลข ี ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวเลข จะมี 2 ฟังก์ชันให้เลือกใช้งาน คือ ฟังก์ชัน sort ( ) และ rsort ( ) มีรายละเอียด ดังนี้ ฟังก์ชัน sort ( ) ใช้สาหรับเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวเลข โดยเรียงลาดับข้อมูลจากน้อยไม่หา มาก มีรูปแบบ ดังนี้ รูปแบบ bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการจัดเรียงและมีอินเด็กซ์เป็นตัวเลข $sort_flags หมายถึง พารามิเตอร์เสริมสาหรับการจัดเรียงเพิ่มเติม โดยการระบุสตริง สาหรับการจัดเรียง มีรายละเอียด (จะกาหนดหรือไม่ก็ได้) ดังนี้  SORT_REGULAR จัดเรียงโดยการเปรียบเทียบระหว่างค่า ตามปกติ (ไม่ต้องเปลี่ยนค่าคีย์)  SORT_NUMERIC จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่ เป็นชนิดตัวเลข  SORT_STRING จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่เป็น ตัวอักษรหรือข้อความ  SORT_NATURAL จัดเรียงโดยการเปรียบเทียบระหว่างค่าที่ เป็นตัวอักษรหรือข้อความเหมือนกับฟังก์ชัน natsort ( ) ซึ่งใช้ สาหรับการจัดเรียงข้อมูล ในอาร์เรย์ที่มีค่าอินเด็กซ์เป็นชนิด ตัวอักษรหรือข้อความ  SORT_FLAG_CASE รูปแบบการจัดเรียงที่สามารถใช้ร่วมกับ การจัดเรียงแบบ SORT_STRING หรือ SORT_NATURAL โดยการเปรียบเทียบในลักษณะตัวอักษรพิมพ์เล็กพิมพ์ใหญ่ถือ ว่าเป็นตัวเดียวกัน (case-insensitively) ตัวอย่างที่ 7.26 การใช้ฟังก์ชัน sort ( ) <?php $fruits = array ("lemon", "banana", "apple"); sort ($fruits); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 120.
    บทที่ 7 อาร์เรย์(Arrays) 105 foreach ($fruits as $key => $val) echo "fruits[" . $key . "] = " . $val . "<br />"; ?> ผลลัพธ์ fruits [0] = apple fruits [1] = banana fruits [2] = lemon ตัวอย่างที่ 7.27 การใช้ฟังก์ชัน sort ( ) โดยกาหนดการจัดเรียงแบบ case-insensitive natural ordering <?php $fruits = array ( "Orange1", "orange2", "Orange3", "orange20" ); @sort($fruits, SORT_NATURAL | SORT_FLAG_CASE); foreach ($fruits as $key => $val) echo "fruits[" . $key . "] = " . $val . "<br />"; ?> ผลลัพธ์ fruits [0] = Orange1 fruits [1] = orange2 fruits [2] = Orange3 fruits [3] = orange20 ตัวอย่างที่ 7.28 การใช้ฟังก์ชัน rsort ( ) ซึ่งมีรูปแบบการใช้งานเช่นเดียวกับฟังก์ชัน sort ( ) <?php $fruits = array ("lemon", "orange", "banana", "apple"); rsort ($fruits); foreach ($fruits as $key => $val) { echo "$key = $valn"; } ?> ผลลัพธ์ 0 = orange 1 = lemon 2 = banana 3 = apple ฟังก์ชันที่ใช้ในการเรียงลาดับข้อมูลในอาร์เรย์ที่มอินเด็กซ์เป็นตัวอักษรหรือข้อความ ี ฟังก์ชันในการเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษรหรือข้อความ มี 4 ฟังก์ชันให้ เลือกใช้งาน ประกอบด้วย 1) asort ( ) 2) arsort ( ) 3) ksort ( ) และ 4) krsort ( ) มีรายละเอียด ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 121.
    106 บทที่ 7อาร์เรย์ (Arrays) ฟังก์ชัน asort ( ) ฟังก์ชัน asort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์ โดยพิจารณาจากค่าหรือ ข้อมูลในตัวแปรอาร์เรย์ จากน้อยไปหามาก มีรูปแบบการใช้งาน ดังนี้ รูปแบบ bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการจัดเรียง $sort_flags หมายถึง พารามิเตอร์เสริมส าหรับการจัดเรียงเพิ่มเติม โดยการระบุส ตริง สาหรับการจัดเรียง จะมีรูปแบบเหมือนฟังก์ชันจัดเรียงก่อนหน้า ตัวอย่างที่ 7.29 การใช้ฟังก์ชัน asort ( ) สาหรับจัดเรียงลาข้อมูลในอาร์เรย์ <?php $fruits = array("d" => "lemon", "b" => "banana", "c" => "apple"); asort ($fruits); foreach ($fruits as $key => $val) echo "$key = $val <br />"; ?> ผลลัพธ์ c = apple b = banana d = lemon ฟังก์ชัน arsort ( ) ฟังก์ชัน arsort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์โดยพิจารณาจากค่าหรือ ข้อมูลในตัวแปรอาร์เรย์ จากมากไปหาน้อย มีรูปแบบการใช้งานเหมือนกับฟังก์ชัน asort ( ) ตัวอย่างที่ 7.30 การใช้ฟังก์ชัน arsort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์ <?php $fruits = array("d" => "lemon", "b" => "banana", "c" => "apple"); arsort ($fruits); foreach ($fruits as $key => $val) echo "$key = $val <br />"; ?> ผลลัพธ์ d = lemon b = banana c = apple ฟังก์ชัน ksort ( ) ฟังก์ชัน ksort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์โดยพิจารณาจากอินเด็กซ์ หรือคีย์ของตัวแปรอาร์เรย์ จากน้อยไปหามาก มีรูปแบบการใช้งาน ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 122.
    บทที่ 7 อาร์เรย์(Arrays) 107 รูปแบบ bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) เมื่อ $array หมายถึง ตัวแปรอาร์เรย์ที่ต้องการจัดเรียง $sort_flags หมายถึง พารามิเตอร์เสริมสาหรับการจัดเรียงเพิ่มเติม โดยการระบุสตริง สาหรับการจัดเรียง จะมีรูปแบบเหมือนฟังก์ชันจัดเรียงก่อนหน้า ตัวอย่างที่ 7.31 การใช้ฟังก์ชัน ksort ( ) สาหรับจัดเรียงลาข้อมูลในอาร์เรย์ <?php $fruits = array ("d" => "lemon", "b" => "banana", "c" => "apple"); ksort ($fruits); foreach ($fruits as $key => $val) echo "$key = $val <br />"; ?> ผลลัพธ์ b = banana c = apple d = lemon ฟังก์ชัน krsort ( ) ฟังก์ชัน krsort ( ) เป็นฟังก์ชันที่ใช้สาหรับจัดเรียงลาข้อมูลในอาร์เรย์โดยพิจารณาจากอินเด็กซ์ หรือคีย์ของตัวแปรอาร์เรย์ จากมากไปหาน้อย มีรูปแบบเหมือนกับฟังก์ชัน ksort ( ) มีตัวอย่างดังนี้ ตัวอย่างที่ 7.32 การใช้ฟังก์ชัน krsort ( ) สาหรับจัดเรียงลาข้อมูลในอาร์เรย์ <?php $fruits = array ("d" => "lemon", "b" => "banana", "c" => "apple"); krsort ($fruits); foreach ($fruits as $key => $val) echo "$key = $val <br />"; ?> ผลลัพธ์ d = lemon c = apple b = banana โดยสรุป ทั้ง 4 ฟังก์ชัน เป็นฟังก์ชันที่ใช้สาหรับ เรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็น ตัวอักษรหรือข้อความ สามารถจาแนกได้เป็นกลุ่มใหญ่ ดังนี้ ตารางที่ 7.2 แสดงผลสรุปฟังก์ชันที่ใช้สาหรับเรียงลาดับข้อมูลในอาร์เรย์ที่มีอินเด็กซ์เป็นตัวอักษร เรียงจาก ฟังก์ชัน ลาดับการเรียง ข้อมูล (Value) asort ( ) น้อยไปหามาก ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 123.
    108 บทที่ 7อาร์เรย์ (Arrays) ตารางที่ 7.2 (ต่อ) เรียงจาก อินเด็กซ์หรือคีย์ (Index or Key) ฟังก์ชัน arsort ( ) ksort ( ) krsort ( ) ลาดับการเรียง มากไปหาน้อย น้อยไปหามาก มากไปหาน้อย ฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ (Pointer) ในอาร์เรย์ เมื่อใส่ข้อมูลในอาร์เรย์ ตาแหน่งของพอยเตอร์จะชี้อยู่ที่ตาแหน่งของสมาชิกปัจจุบัน หากต้องการ กาหนดให้พอยเตอร์ชี้ไปที่ตาแหน่งต่างๆ ของอาร์เรย์ สามารถทาได้โดยใช้ฟังก์ชันต่างๆ ดังตารางที่ 7.3 ตารางที่ 7.3 สรุปฟังก์ชันที่ใช้สาหรับการจัดการพอยเตอร์ในอาร์เรย์ ฟังก์ชัน การทางาน each ( ) ฟังก์ ชัน ส าหรั บ เลื่ อนพอยเตอร์ ไปข้า งหน้ าครั้ง ละ 1 ตาแหน่ ง หากเรียกใช้ ฟัง ก์ชั น each ( ) จะคืนค่าสมาชิกก่อนหน้าที่จะเลื่อนพอยเตอร์ current ( ) ฟังก์ชันที่ใช้สาหรับคืนค่าสมาชิกปัจจุบันที่พอยเตอร์กาลังชี้อยู่ หากก่อนหน้ายังไม่มีการ เรียกใช้ฟังก์ชันสาหรับการเลื่อนพอยเตอร์ หลั งจากอาร์เรย์ถูกสร้างตาแหน่งพอยเตอร์ ปัจจุบัน คือ ตาแหน่งแรกของสมาชิกอาร์เรย์ reset ( ) ฟังก์ชันที่ใช้สาหรับเลื่อนพอยเตอร์ไปยังสมาชิกตาแหน่งแรกของอาร์เรย์ end ( ) ฟังก์ชันที่ใช้สาหรับเลื่อนพอยเตอร์ไปยังสมาชิกตาแหน่งสุดท้ายของอาร์เรย์ next ( ) ฟังก์ ชัน ส าหรั บ เลื่ อนพอยเตอร์ ไปข้า งหน้ าครั้ง ละ 1 ตาแหน่ ง หากเรียกใช้ ฟัง ก์ชั น next ( ) จะเลื่อนพอยเตอร์ก่อนแล้วจึงคืนค่าสมาชิกก่อนหน้า prev ( ) ฟังก์ชันสาหรับเลื่อนพอยเตอร์ตรงข้ามกับฟังก์ชัน next ( ) คือ ถอยกลับครั้งละ 1 ตาแหน่ง หากเรียกใช้ฟังก์ชัน prev ( ) จะเลื่อนพอยเตอร์ก่อนแล้วจึงคืนค่าสมาชิกก่อนหน้า ฟังก์ชันสาหรับการรวมอาร์เรย์ ฟังก์ชันสาหรับการรวมอาร์เรย์ มีให้เลือกใช้งาน ดังนี้ ฟังก์ชัน array_merge ( ) และ array_merge_recursive ( ) ทั้ง 2 ฟังก์ชันนี้ใช้สาหรับรวมอาร์เรย์เหมือนกัน หลักการรวมอาร์เรย์ คือ จะนาค่าข้อมูลมาเก็บใน ลักษณะของสมาชิกต่อกันไปเรื่อยๆ ในรูปแบบของอาร์เรย์หลายมิติ แล้วสร้างอินเด็กซ์ชนิดตัวเลขให้ใหม่เรียง ตามลาดับ ข้อแตกต่างระหว่าง 2 ฟังก์ชันนี้ คือ ฟังก์ชัน array_merge ( ) หากอาร์เรย์ที่นามารวมมีอินเด็กซ์หรือคีย์ที่เป็นสตริง ซ้ากัน จะนาค่า ข้อมูลของอาร์เรย์ชุดหลังทับค่าข้อมูลของอาร์เรย์ชุดแรก ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 124.
    บทที่ 7 อาร์เรย์(Arrays) 109 ฟังก์ชัน array_merge_recursive ( ) จะนาข้อมูลของอาร์เรย์ชุดหลังมาต่อท้า ยกับค่าข้อมูลตัว แรก ไม่ว่าค่าข้อมูลหรืออินเด็กซ์หรือคีย์จะซ้ากันหรือไม่ รูปแบบ ฟังก์ชัน array_merge ( ) array array_merge ( array $array1 [, array $... ] ) รูปแบบ ฟังก์ชัน array_merge_recursive ( ) array array_merge_recursive ( array $array1 [, array $... ] ) เมื่อ $array1 หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนามารวมลาดับที่ 1 $... หมายถึง ตัวแปรอาร์เรย์ที่ต้องการนามารวมลาดับต่อๆ ไป ตัวอย่างที่ 7.33 การใช้ฟังก์ชัน array_merge ( ) สาหรับรวมอาร์เรย์ <?php $array1 = array ("color" => "red", 2, 4); $array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge ($array1, $array2); print_r ($result); ?> ผลลัพธ์ (หากค่าอินเด็กซ์หรือคีย์ซ้ากันข้อมูลของอาร์เรย์ตัวแรกจะถูกทับด้วยข้อมูลอาร์เรย์ตัวหลัง) Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 ) ตัวอย่างที่ 7.34 การใช้ฟังก์ชัน array_merge_recursive ( ) <?php $array1 = array ("color" => "red", 2, 4); $array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge_recursive ($array1, $array2); print_r ($result); ?> ผลลัพธ์ (หากอินเด็กซ์หรือคีย์ซ้ากันจะสร้างเป็นอาร์เรย์ซ้อนอาร์เรย์ หรือเรียกว่าอาร์เรย์หลายมิติ) Array ( [color] => Array ( [0] => red [1] => green ) [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 ) ฟังก์ชัน array_combine ( ) เป็นฟังก์ชันที่ใช้สาหรับรวมอาร์เรย์ 2 อาร์เรย์เข้าด้วยกัน โดยใช้ค่าข้อมูลของอาร์เรย์ตัวแรกเป็น อินเด็กซ์หรือคีย์ ส่วนค่าข้อมูลของอาร์เรย์ตัวที่สองเป็นค่าข้อมูลของอาร์เรย์ใหม่ที่เกิดจากการรวมกันของ อาร์เรย์ทั้งสอง ถ้าจานวนของสมาชิกของทั้งสองอาร์เรย์ไม่เท่ากัน หรืออาร์เรย์ตัวใดตัวหนึ่งเป็นค่าว่าง ฟังก์ชันจะส่งคืนค่าเป็นเท็จ (False) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 125.
    110 บทที่ 7อาร์เรย์ (Arrays) รูปแบบ array array_combine ( array $keys , array $values ) เมื่อ $key คือ ตัวแปรอาร์เรย์ที่ใช้สาหรับเป็นอินเด็กซ์หรือคีย์ $values คือ ตัวแปรอาร์เรย์ที่ใช้สาหรับกาหนดค่า ตัวอย่างที่ 7.35 การใช้ฟังก์ชัน array_combine ( ) สาหรับรวมอาร์เรย์ 2 อาร์เรย์เข้าด้วยกัน <?php ?> $a = array ('green', 'red', 'yellow'); $b = array ('avocado', 'apple', 'banana'); $c = array_combine ($a, $b); print_r ($c); // ผลลัพธ์ คือ Array ( [green] => avocado [red] => apple [yellow] => banana ) ฟังก์ชันสาหรับการสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูลในอาร์เรย์ ฟังก์ชัน array_flip ( ) เป็นฟังก์ชันที่ใช้สาหรับสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูล รูปแบบ array array_flip ( array $trans ) เมื่อ $trans หมายถึง ตัวแปรอาร์เรย์ที่ต้องการสลับค่า ตัวอย่างที่ 7.36 การใช้ฟังก์ชัน array_flip ( ) สาหรับสลับค่าระหว่างอินเด็กซ์หรือคีย์กับค่าข้อมูล <?php $trans = array ("a" => 1, "b" => 1, "c" => 2); $trans = array_flip ($trans); print_r ($trans); // ผลลัพธ์ Array ( [1] => b [2] => c ) ?> ฟังก์ชันสาหรับการค้นหาอินเด็กซ์หรือคีย์และค่าข้อมูลในอาร์เรย์ ฟังก์ชัน array_key_exists ( ) เป็นฟังก์ชันที่ใช้สาหรับหาอินเด็กซ์หรือคีย์ที่ระบุมีอยู่ในอาร์เรย์หรือไม่ หากพบอินเด็กซ์หรือคีย์ที่ ค้นหา ฟังก์ชันจะคืนค่าเป็นจริง (True) หากไม่พบจะคืนค่าเป็นเท็จ (False) รูปแบบ bool array_key_exists ( mixed $key , array $search ) เมื่อ $key หมายถึง อินเด็กซ์หรือคีย์ที่ค้นหา ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 126.
    บทที่ 7 อาร์เรย์(Arrays) 111 $search หมายถึง อาร์เรย์ที่นามาใช้ค้นหา ตัวอย่างที่ 7.37 การใช้ฟังก์ชัน array_key_exists ( ) สาหรับหาอินเด็กซ์หรือคีย์ที่ระบุมีอยู่ใน อาร์เรย์หรือไม่ <?php ?> $search_array = array ('first' => 1, 'second' => 4); if (array_key_exists ('first', $search_array)) echo "พบข้อมูลในอาร์เรย์"; else echo "ไม่พบข้อมูลในอาร์เรย์"; // ผลลัพธ์ คือ แสดงข้อมูล พบข้อมูลในอาร์เรย์ ฟังก์ชัน in_array ( ) และ array_search ( ) เป็นฟังก์ชันที่ใช้สาหรับหาค่าข้อมูลที่ระบุมีอยู่ในอาร์เรย์หรือไม่ หากฟังก์ชัน in_array ( ) และ array_search ( ) พบค่าข้อมูลที่ค้นหา ฟังก์ชันจะคืนค่าเป็นจริง (True) หากไม่พบจะคืนค่าเป็นเท็จ (False) ซึ่งทั้ง 2 ฟังก์ชันมีรูปแบบเหมือนกัน ดังนี้ รูปแบบ bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) เมื่อ $needle หมายถึง ค่าข้อมูลที่ต้องการค้นหา $haystack หมายถึง ตัวแปรอาร์เรย์ที่นามาใช้ในการค้นหา $strict หมายถึง ใช้ส าหรับ การเปรีย บเที ยบ (===) ใช้ ร่ว มกับ $needle เพื่ อ เปรียบเทียบค่าของอาร์เรย์กับค่าที่ค้นหา ตัวอย่างที่ 7.38 การใช้ฟังก์ชัน in_array ( ) และ array_search ( ) สาหรับหาค่าข้อมูลที่ระบุมี อยู่ในอาร์เรย์หรือไม่ <?php ?> $os = array ("Mac", "NT", "Irix", "Linux"); if (in_array ("Irix", $os)) echo "Got Irix"; if (in_array ("mac", $os)) echo "Got mac"; // ผลลัพธ์ คือ Got Irix จากตัวอย่างในเงื่อนไขที่ 2 จะพบว่าเงื่อนไขไม่ถูกต้องเพราะในฟังก์ชัน in_array ( ) จะมีการ ตรวจสอบอักษรพิมพ์เล็กและพิมพ์ใหญ่ (case-sensitive) ฟังก์ชันสาหรับการหาค่าข้อมูลสมาชิกที่เหมือนและแตกต่างกันในอาร์เรย์ ฟังก์ชัน array_intersect ( ) เป็นฟังก์ชันสาหรับหาค่าข้อมูลสมาชิกในอาร์เรย์ ตั้งแต่ 2 อาร์เรย์ขึ้นไป มาทาการ Intersection หาสมาชิกที่มีซ้ากัน เพื่อกาหนดค่าข้อมูลให้กับอาร์เรย์ใหม่ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 127.
    112 บทที่ 7อาร์เรย์ (Arrays) รูปแบบ array array_intersect ( array $array1 , array $array2 [, array $ ... ] ) เมื่อ $array1 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 1 $array2 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 2 $ ... หมายถึง ตัวแปรอาร์เรย์ลาดับต่อๆ ไป ตัวอย่างที่ 7.39 การใช้ฟังก์ชัน array_intersect ( ) <?php $array1 = array ("a" => "green", "red", "blue"); $array2 = array ("b" => "green", "yellow", "red"); $result = array_intersect ($array1, $array2); print_r ($result); ?> // ผลลัพธ์ คือ Array ( [a] => green [0] => red ) ฟังก์ชัน array_diff ( ) เป็นฟังก์ชันสาหรับหาค่าข้อมูลสมาชิกในอาร์เรย์ ตั้งแต่ 2 อาร์เรย์ขึ้นไป มาทาการ differential หาสมาชิกที่มีเฉพาะในอาร์เรย์ตวแรก แต่ไม่มีในอาร์เรย์อื่นๆ เพื่อกาหนดค่าข้อมูลให้กับอาร์เรย์ใหม่ ั รูปแบบ array array_diff ( array $array1 , array $array2 [, array $... ] ) เมื่อ $array1 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 1 $array2 หมายถึง ตัวแปรอาร์เรย์ตัวที่ 2 $ ... หมายถึง ตัวแปรอาร์เรย์ลาดับต่อๆ ไป ตัวอย่างที่ 7.40 การใช้ฟังก์ชัน array_diff ( ) <?php $array1 = array ("a" => "green", "red", "blue", "red"); $array2 = array ("b" => "green", "yellow", "red"); $result = array_diff ($array1, $array2); print_r ($result); ?> // ผลลัพธ์ คือ Array ( [1] => blue ) การใช้ข้อมูลจากอาร์เรย์ $_SERVER ตัวแปร $_SERVER เป็นตัวแปรแบบอาร์เรย์ที่ PHP สร้างไว้ล่วงหน้าเพื่อใช้อ้างถึงข้อมูลเกี่ยวกับการ เชื่ อมต่ อระหว่ า ง ไคลเอนต์ กั บ เว็ บ เซิ ร์ ฟเวอร์ เช่ น ชื่ อโฮสต์ พอร์ ต เมธอดในการส่ งข้ อมู ล เป็ นต้ น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 128.
    บทที่ 7 อาร์เรย์(Arrays) 113 ซึ่งตัวแปร $_SERVER นี้ในบทต่อๆ ไป จะได้นาๆ ใช้กันอยู่ตลอด การอ้างถึงค่าข้อมูลในตัวแปร $_SERVER จะ ใช้อินเด็กซ์หรือคียเหมือนกับอาร์เรย์อื่นๆ ก่อนหน้า อินเด็กซ์หรือคีย์ที่สาคัญ มีรายละเอียด ดังตารางที่ 7.4 ์ ตารางที่ 7.4 แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_SERVER ค่าอินเด็กซ์หรือคีย์ ค่าข้อมูลและความหมาย $_SERVER ['HTTP_USER_AGENT'] อ่านข้อมูลเกี่ยวกับ บราวเซอร์ ที่ผู้ใช้คนกาลังใช้งานอยู่ ตัวอย่าง ลักษณะของค่าที่อ่านได้ เช่น Mozilla/5.0 (Windows NT 5.1;th:1.9.1.3) Gecko/20090824 Firefox/3.5.3 $_SERVER ['HTTP_HOST'] ชื่อของโฮสต์ที่รันเว็บเซิร์ฟเวอร์อยู่ในขณะนั้น เช่น localhost $_SERVER ['SERVER_NAME'] ชื่อของเว็บเซิร์ฟเวอร์ เช่น localhost $_SERVER ['SERVER_ADDR'] หมายเลข IP Address ของเครื่องหมายเซิร์ฟเวอร์ หากรันบน เว็บเซิร์ฟเวอร์บนเครื่องที่กาลังใช้งานในขณะนั้นIP Addressจะ เป็น 127.0.01 $_SERVER ['REMOTE_ADDR'] หมายเลข IP Address ของเครื่องผู้ใช้ ซึ่งหากอยู่บนเครื่องเดียวกับ เว็บเซิร์ฟเวอร์ก็จะมี IP Address เป็นค่าเดียวกัน เช่น 127.0.0.1 $_SERVER ['SCRIPT_FILENAME'] ชื่อไฟล์สคริปต์ หรือเว็บเพจที่กาลังเปิดอยู่ในขณะนั้นเอง ซึ่งชื่อ นี้ ร ว ม ไ ป ถึ ง ไ ด เ ร็ ก ท อ รี ข อ ง ไ ฟ ล์ เ ช่ น C:/AppServ/www/parinya/test1.php $_SERVER ['REQUEST_METHOD'] เมธอดที่ใช้ในการส่งข้อมูลของฟอร์มจากผู้ใช้มายังเว็บเซิร์ฟเวอร์ เช่น GET, POST $_SERVER ['QUERY_STRING'] Query String ของข้อมูลที่ถูกส่งด้วยเมธอด GET จากฟอร์ม มายังเว็บเซิร์ฟเวอร์ โดยจะแนบมากับ URL เช่น num1=123&num2=456 $_SERVER ['REQUEST_URI'] ชื่อของเพจที่ request มายังเว็บเซิร์ฟเวอร์ โดยไม่รวมชื่อ ของ โฮสต์ เช่ น URI ของเพจที่ request เข้ า มาเป็ น http://localhost/parinya/test1.php ค่ า URI จะเป็ น parinya/test1.php $_SERVER ['PHP_SELF'] URI ของเว็ บ เพจ ที่ เ ปิ ด ใช้ ง านในขณะนั้ น เช่ น parinya/test1.php $_SERVER ['HTTP_REFERER'] เพจที่ Request เข้ามายังเพจปัจจุบัน เช่น คลิกลิงค์ที่เพจ page1.php เพื่อเปิดไปยัง page2.php ถ้าอ่านค่า $_SERVER ['HTTP_REFERER'] ที่เพจ page2.php จะได้เป็น page1.php ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 129.
    114 บทที่ 7อาร์เรย์ (Arrays) การใช้ข้อมูลจากอาร์เรย์ $_FILE ตัวแปร $_FILE เป็นตัวแปรชนิดอาร์เรย์แบบ Key/Value ที่ PHP สร้างไว้ล่วงหน้าเพื่อใช้อ้างถึงข้อมูล เกี่ยวกับการอัพโหลดไฟล์ (File Upload) ระหว่าง ไคลเอนต์กับเว็บเซิร์ฟเวอร์ มีรายละเอียด ดังตารางที่ 7.5 ตารางที่ 7.5 แสดงค่าอินเด็กซ์หรือคีย์ของอาร์เรย์ $_FILE ค่าอินเด็กซ์หรือคีย์ ค่าข้อมูลและความหมาย $_FILE ['file'] ['type'] ชนิดของไฟล์ที่อัพโหลด เช่น .JPG, .PNG, .doc เป็นต้น $_FILE ['file'] ['size'] ขนาดของไฟล์ $_FILE ['file'] ['tmp_name'] ตาแหน่งไดเรกทอรีที่เก็บไฟล์ไว้ชั่วคราว $_FILE ['file'] ['name'] ชื่อไฟล์ที่อัพโหลด $_FILE ['file'] ['error'] ข้อมูลที่ผิดพลาดจากการอัพโหลด โดยมีการคืนค่า ดังนี้ 0 คือ แสดงว่าไม่มีข้อผิดพลาด 1 คือ ไฟล์ที่อัพโหลดมีขนาดเกินกว่าค่าที่กาหนดใน php.ini (ปกติ 2 MB) 2 คือ ไฟล์มีขนาดเกินค่าที่กาหนดใน MAX_FILE_SIZE ของฟอร์ม 3 คือ ข้อผิดพลาดในการสื่อสารทาให้อัพโหลดไฟล์ไม่ได้ 4 คือ ไม่มีไฟล์ หลังจากนั้นจะใช้ฟังก์ชัน move_uploaded_file ( ) ใช้ในการเคลื่อนย้ายไฟล์จากไดเรกทอรี ชั่วคราวไปยังตาแหน่งใหม่ โดยจะใช้ $_FILE['file'] ['tmp_name'] ในการอ้างถึงไดเร็กทอรีชั่วคราว ส่วนตาแหน่งไดเร็กทอรี ปลายทาง ถ้าต้องการใช้ชื่อไฟล์เดิมจะใช้ $_FILE ['file'] ['name'] ถ้าต้องการย้ายไปไดเร็กทอรีอื่น ก็ สามารถระบุได้ ตัวอย่างที่นิยมใช้งานเพื่อไม่ให้เกิดปัญหาชื่อไฟล์ซ้ากัน คือ ใช้วันที่และเวลาสาหรับกาหนด ชื่อไฟล์ มีตัวอย่าง ดังนี้ ตัวอย่างที่ 7.41 การกาหนดชื่อไฟล์โดยใช้วันที่และเวลา $fileName = mktime (date('H'), date('i'), date('s'),date('m'), date('d'), date('Y')).'.jpg'; การกาหนดชื่อไฟล์นั้นใช้สาหรับจัดเก็บลงในฐานข้อมูล หรืออ้างอิงอื่นๆ และใช้ฟังก์ชัน move_uploaded_file ($_FILE ['file'] ['tmp_name'] , '../image/news/'.$fileName); หรือใช้ฟังก์ชัน copy ($_FILE ['file'] ['tmp_name'] , '../image/news/'.$fileName); เพื่อเริ่มต้นอัพโหลดไฟล์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 130.
    บทที่ 7 อาร์เรย์(Arrays) 115 ตัวอย่างที่ 7.42 การประยุกต์พัฒนาเว็บเพจสาหรับอัพโหลดไฟล์ <?php /* กาหนดชื่อไฟล์เป็น upload.php*/ ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Upload File by Mr.Parinya</title> </head> <body> <form name="form1" method="post" action="chk.php" enctype="multipart/form-data"> <input type="file" name="fileUpload"> <input name="btnSubmit" type="submit" value="Submit"> </form> </body> </html> ภาพที่ 7.1 แสดงหน้าเว็บเพจสาหรับเริ่มต้น Upload ไฟล์ <?php /*กาหนดชื่อไฟล์ chk.php สาหรับเริ่มต้น Upload ไฟล์ไปเก็บไว้ยังเซิร์ฟเวอร์*/ ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> Upload File by Mr.Parinya</title> </head> <body> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 131.
    116 บทที่ 7อาร์เรย์ (Arrays) <?php if(move_uploaded_file($_FILES["filUpload"]["tmp_name"],"pictures/".$_FILES["filUpl oad"]["name"])) // กาหนดให้ pictures/ คือ โฟลเดอร์ปลายทางสาหรับเก็บไฟล์ { echo "Upload ไฟล์เสร็จเรียบร้อยแล้วครับ"; } ?> </body> </html> หมายเหตุ ฟังก์ชันอัพโหลดไฟล์ move_uploaded_file ( ) และ copy ( ) มีรูปแบบการใช้งาน เหมือนกัน ดังนี้ ชื่อฟังก์ชัน (ตาแหน่งไฟล์ต้นทาง, ตาแหน่งไฟล์ปลายทาง) เมื่อ ตาแหน่งไฟล์ต้นทาง คือ $_FILE ['file'] ['tmp_name'] ตาแหน่งไฟล์ปลายทาง คือ ตาแหน่งใหม่ที่จะนาไฟล์ไปเก็บไว้ที่ใดของเครื่องเซิร์ฟเวอร์ ข้อระวังสาหรับการใช้งานทั้งตาแหน่งไฟล์ต้นทางและปลายทาง จาเป็นต้องมีที่ตั้งของ ไฟล์และชื่อไฟล์เสมอ สาหรับที่ตั้งของไฟล์จะเรียกว่า พาธไดเร็กทอรี (Path Directory) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 132.
    บทที่ 8 สตริง ตัวเลขและเวลา ในบทนี้จะกล่าวถึงการใช้ฟังก์ชันของ PHP เพื่อจัดการข้อมูลใน 3 รูปแบบคือ สตริง ตัวเลข และ วันเวลา แม้ว่าในบทที่ผ่านๆ มานั้น ได้ใช้งานข้อมูลแบบสตริง และตัวเลขกันมาบ้างแล้ว แต่ก็เป็นเพียงการ ใช้ใ นแบบพื้น ฐานทั่ว ไป ซึ่งข้ อมู ล ทั้ง สองอย่ างนี้ ยังมี รายละเอีย ดปลี กย่ อยที่ จาเป็นต้ องรู้อีก มากมาย ส่วนข้อมูลประเภทวันเวลานั้น ก็จัดว่าเป็นข้อมูลพิเศษอีกอย่างหนึ่ง ที่ไม่สามารถใช้โอเปอเรเตอร์ไหนไป จัดการโดยตรงได้ต้องอาศัยฟังก์ชันเฉพาะทางด้านนี้ของ PHP เท่านั้น ฟังก์ชันเกี่ยวกับสตริง สตริ ง (String) คื อ ชุ ดของตั ว อั กษร หรื อเป็ นการน าอั ก ษรแต่ ละตั ว มาวางเรียงต่ อกัน เพื่ อสื่ อ ความหมาย เช่นคาว่า “String” เกิดจากอักขระ S + t + r + i + n + g เป็นต้น ทั้งนี้อักขระที่วางเรียงต่อ กันเป็นสตริง ก็จะมีลาดับของมันเองเหมือนกันกับอาร์เรย์ของสตริงหรือคานั่นเอง ดังนั้นการอ้างถึงอักษร ย่อยๆ แต่ละตัวภายในสตริง จึงใช้เลขลาดับเป็นตัวกาหนดเหมือนกับการอ้างอิงสมาชิกของอาร์เรย์ เช่น ตัวอย่างที่ 8.1 แสดงตัวอย่างสตริงหรือชุดของตัวอักษร $str = “Thailand” ; echo $str[0] . $str[1] .$str[2] .$str[3] ; //Thai สาหรับฟังก์ชันที่เกี่ยวกับสตริงมีเป็นจานวนมาก แต่ที่จะใช้งานกันบ่อยๆ มีอยู่ไม่มากนัก ดังนั้นใน ที่นี้จะกล่าวถึงเฉพาะฟังก์ชันที่น่าสนใจ และเพื่อให้ศึกษาได้ง่ายขึ้น จะแบ่งออกเป็นกลุ่มหัวข้อดังต่อไปนี้ ฟังก์ชันเกี่ยวกับรหัสแอสกี (ASCII) ฟังก์ชันเกี่ยวกับรหัสแอสกี (ASCII) ที่น่าสนใจมีดังนี้ ตารางที่ 8.1 ฟังก์ชันเกี่ยวกับรหัสแอสกี ord (อักขระ) หาค่ารหัส ASCII ของอักขระที่ระบุ chr (ค่าแอสกี) แปลงจากค่ารหัสแอสกีที่ระบุไปเป็นอักขระที่มีค่าแอสกีตรงกัน ตัวอย่างที่ 8.2 การใช้ฟังก์ชัน ord ( ) และ chr ( ) <body> <table border = “1” width = “100%” cellspacing = “0”> <caption>ตารางค่า ASCII ของ A – Z</caption> <?php
  • 133.
    118 บทที่ 8สตริง ตัวเลข และเวลา $a = ord ('A') ; $z = ord ('Z') ; for ($i = $a; $i <= $z; $i += 5) { echo "<tr align = center>"; for ($j = $i ; $j < ($i+5) ; $j++) { $ch = chr ($j) ; echo "<td bgcolor = #ddd> $ch </td><td> $j </td>" ; } echo "</tr>" ; // ผลลัพธ์ ดังนี้ } ?> </table> </body> ฟังก์ชันเกี่ยวกับการหาขนาดของสตริง ฟังก์ชันเกี่ยวกับการหาขนาดสตริงที่น่าสนใจมีดังนี้ ฟังก์ชัน strlen ( ) เป็นฟังก์ชันที่ใช้สาหรับหาความยาวของสตริง หรือนับจานวนสตริง โดยที่ช่องว่าง 1 ช่อง ก็จะ นับเป็นอักขระ 1 ตัวด้วย และในกรณีภาษาไทยและวรรณยุกต์ต่างๆ ก็จะนับเป็นอักขระ 1 ตัวเช่นกัน รูปแบบ int strlen ( string $string ) เมื่อ $string หมายถึง ข้อความหรือสตริงที่ต้องการนับจานวน ตัวอย่างที่ 8.3 การใช้ฟังก์ชัน strlen ( ) สาหรับหาความยาวของสตริง <?php $str = 'abcdef'; echo strlen ($str); $str = ' ab cd '; echo strlen ($str); // ผลลัพธ์ คือ 6 // ผลลัพธ์ คือ 7 ?> ฟังก์ชัน str_word_count ( ) นับจานวนคา โดยใช้อักขระที่ไม่ใช่ตัวอักษร a-z เป็นตัวคัดแยก (รวมถึงตัวเลขด้วย) ยกเว้น เครื่องหมาย ' และ - ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 134.
    บทที่ 8 สตริงตัวเลข และเวลา 119 รูปแบบ mixed str_word_count ( string $string [, int $format = 0 [, string $charlist ]] ) เมื่อ $string หมายถึง ข้อความหรือสตริงที่ต้องการนับจานวน $format หมายถึง กาหนดรูปแบบการนับ มีรายละเอียดดังนี้ 0 คือ นับจานวนคา (โดยปริยายจะเป็น 0) 1 คือ ส่ ง ค่ า กลั บ เป็ น อาร์ เ รย์ ข องค า (ค่ า อิ น เด็ ก ซ์ ห รื อ คี ย์ เ รี ย ง ตามลาดับ) 2 คือ ส่งค่ากลับเป็นอาร์เรย์ของคา (ค่าอินเด็กซ์หรือคีย์มาจาก การนับจานวนตัวอักษรต่อกันไปเรื่อยๆ) $charlist หมายถึง กาหนดอักขระพิเศษอื่นๆ ที่ต้องการนับเป็นคา ตัวอย่างที่ 8.4 การใช้ฟังก์ชัน str_word_count ( ) สาหรับนับจานวนคา <?php $str = "Hello fri3nd, today! is good"; print_r (str_word_count ($str, 1)); // Array ( [0] => Hello [1] => fri [2] => nd [3] => today [4] => is [5] => good ) print_r (str_word_count ($str, 2)); // Array ( [0] => Hello [6] => fri [10] => nd [14] => today [21] => is [24] => good ) echo str_word_count ($str); // ผลลัพธ์ คือ 6 ?> ฟังก์ชันในการเปลี่ยนรูปแบบของตัวพิมพ์ ฟังก์ชันในการเปลี่ยนรูปแบบของตัวพิมพ์มีดังนี้ ฟังก์ชัน strtolower ( ) เป็นฟังก์ชันที่ใช้สาหรับเปลี่ยนข้อความหรือสตริงที่ระบุให้เป็นตัวพิมพ์เล็กทุกตัว รูปแบบ string strtolower ( string $str ) เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ ตัวอย่างที่ 8.5 ฟังก์ชัน strtolower ( ) สาหรับเปลี่ยนข้อความที่ระบุให้เป็นตัวพิมพ์เล็กทุกตัว <?php $str = "Mary Had A Little Lamb and She LOVED It So"; $str = strtolower($str); echo $str; // ผลลัพธ์ คือ mary had a little lamb and she loved it so ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 135.
    120 บทที่ 8สตริง ตัวเลข และเวลา ฟังก์ชัน strtoupper ( ) เป็นฟังก์ชันที่ใช้สาหรับเปลี่ยนข้อความหรือสตริงที่ระบุให้เป็นตัวพิมพ์ใหญ่ทุกตัว รูปแบบ string strtoupper ( string $str ) เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ ตัวอย่างที่ 8.6 ฟังก์ชัน strtoupper ( ) ใช้สาหรับเปลี่ยนข้อความที่ระบุให้เป็นตัวพิมพ์ใหญ่ทุกตัว <?php $str = "Mary Had A Little Lamb and She LOVED It So"; $str = strtoupper ($str); echo $str; // ผลลัพธ์ คือ MARY HAD A LITTLE LAMB AND SHE LOVED IT SO ?> ฟังก์ชัน ucfirst ( ) เป็นฟังก์ชันที่ใช้สาหรับเปลี่ยนข้อความหรือสตริงที่ระบุ เฉพาะตัวอักษรตัวแรกเท่านั้นเป็นตัวพิมพ์ ใหญ่ ส่วนข้อความหรือสตริงที่เหลือเหมือนเดิม รูปแบบ string ucfirst ( string $str ) เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ ตัวอย่างที่ 8.7 การใช้ฟังก์ชัน ucfirst ( ) <?php $foo = 'welcome to thailand'; echo ucfirst ($foo); // ผลลัพธ์ คือ Welcome to thailand $bar = 'WELCOME TO THAILAND'; echo ucfirst ($bar); // ผลลัพธ์ เหมือนเดิม คือ WELCOME TO THAILAND echo ucfirst (strtolower ($bar)); // ผลลัพธ์ คือ Welcome to thailand ?> ฟังก์ชัน ucwords ( ) เป็นฟังก์ชันที่ใช้สาหรับ เปลี่ยนข้อความหรือสตริงที่ระบุ เฉพาะตัวอักษรตัวแรกของทุกคาเป็น ตัวพิมพ์ใหญ่ ส่วนข้อความหรือสตริงที่เหลือเหมือนเดิม รูปแบบ string ucwords ( string $str ) เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการเปลี่ยนรูปแบบ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 136.
    บทที่ 8 สตริงตัวเลข และเวลา 121 ตัวอย่างที่ 8.8 การใช้ฟังก์ชัน ucwords ( ) <?php $foo = 'welcome to thailand'; echo ucwords ($foo); //ผลลัพธ์ คือ Welcome To Thailand $bar = 'WELCOME TO THAILAND'; echo ucwords ($bar); // ผลลัพธ์ เหมือนเดิม คือ WELCOME TO THAILAND echo ucwords (strtolower ($bar)); // ผลลัพธ์ คือ Welcome To Thailand ?> ฟังก์ชันเกี่ยวกับการแยก และรวมข้อความหรือสตริง ฟังก์ชันเกี่ยวกับการแยก และรวมข้อความหรือสตริงที่น่าสนใจมีดังนี้ ฟังก์ชัน explode ( ) คัดแยกข้อความหรือสตริงออกเป็นข้อความหรือสตริงย่อยๆ ด้วยสัญลักษณ์ที่กาหนดโดยเฉพาะ ผลลัพธ์ที่ได้จะอยู่ในรูปแบบของอาร์เรย์ของสตริงย่อยที่ถูกแยกออกมา รูปแบบ array explode ( string $delimiter , string $string ) เมื่อ $delimiter หมายถึง สัญลักษณ์ที่ใช้แยก $string หมายถึง ข้อความหรือสตริงที่ต้องการแยก ตัวอย่างที่ 8.9 การใช้ฟังก์ชัน explode ( ) คัดแยกข้อความออกเป็นข้อความย่อยๆ <?php // Example 1 $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode (" ", $pizza); echo $pieces [0]; // ผลลัพธ์ คือ piece1 echo $pieces [1]; // ผลลัพธ์ คือ piece2 // Example 2 $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list ($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode (":", $data); echo $user; // ผลลัพธ์ คือ foo echo $pass; // ผลลัพธ์ คือ * ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 137.
    122 บทที่ 8สตริง ตัวเลข และเวลา ฟังก์ชัน implode ( ) และ join ( ) ฟังก์ชัน implode ( ) และ join ( ) จะทางานตรงข้ามกับฟังก์ชัน explode ( ) คือ เป็นฟังก์ชัน รวมอาร์เรย์ มารวมเข้าด้วยกัน เป็นข้อความหรือสตริง โดยคั่นแต่ละข้อความหรือสตริงด้วยสัญลักษณ์ที่ ระบุ รูปแบบทั้ง 2 ฟังก์ชันเหมือนกัน ดังนั้นจะแนะนาเฉพาะฟังก์ชัน implode ( ) รูปแบบ string implode ( string $glue , array $pieces ) เมื่อ $glue หมายถึง สัญลักษณ์ระบุเพิ่มเข้าไประหว่างข้อความหรือสตริง (หากไม่ต้องการคั่น ด้วยสัญลักษณ์ก็สามารถระบุเป็นค่าว่างหรือเว้นวรรคได้ แต่หากจะแยก ใหม่ในภายหลังจะทาได้ยุ่งยากหากไม่มีสัญลักษณ์คั่นในแต่ละสตริง) $pieces หมายถึง อาร์เรย์ที่ต้องการนามารวมกันเป็นข้อความหรือสตริง ตัวอย่างที่ 8.10 การใช้ฟังก์ชัน implode ( ) และ join ( ) <?php $array = array ('lastname', 'email', 'phone'); $comma_separated = implode (", ", $array); echo $comma_separated; // ผลลัพธ์ คือ lastname, email, phone ?> ฟังก์ชันเกี่ยวกับข้อความหรือสตริงย่อย ฟังก์ชันเกี่ยวกับข้อความหรือสตริงย่อยที่น่าสนใจมีดังนี้ ฟังก์ชัน strstr ( ) เป็นฟังก์ชันที่ใช้สาหรับเลือกเอาเฉพาะข้อความหรือสตริงตั้งแต่ข้อความหรือสตริงที่พบเป็นต้นไป รูปแบบ string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] ) เมื่อ $haystack หมายถึง ข้อความหรือสตริงต้นฉบับ $needle หมายถึง ระบุข้อความหรือสตริงที่ต้องการ $before_needle หมายถึง โดยปริยายจะมีค่าเป็น false คือ เอาเฉพาะข้อความหรือ สตริงที่ระบุตั้งแต่คาที่พบ $needle เป็นต้นไป แต่ถ้าระบุ เป็น true จะเอาเฉพาะข้อความหรือสตริง ทั้งหมดใน ด้านซ้ายก่อนข้อความหรือสตริงที่ระบุ ตัวอย่างที่ 8.11 การใช้ฟังก์ชัน strstr ( ) <?php $email = 'name@example.com'; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 138.
    บทที่ 8 สตริงตัวเลข และเวลา 123 $domain = strstr ($email, '@'); echo $domain; // ผลลัพธ์ คือ @example.com $user = strstr ($email, '@', true); echo $user; // ผลลัพธ์ คือ name ?> ฟังก์ชัน substr ( ) เป็นฟังก์ชันที่ใช้สาหรับคัดเอาข้อความหรือสตริงย่อย โดยกาหนดเอาตาแหน่งเริ่มต้น และความ ยาวที่ต้องการ รูปแบบ string substr ( string $string , int $start [, int $length ] ) เมื่อ $string หมายถึง ข้อความหรือสตริงต้นฉบับ $start หมายถึง ตาแหน่งเริ่มต้น เช่น ข้อความหรือสตริง 'abcdef' ตาแหน่งของ ตัวอักษรจะเริ่มต้นที่ 0 คือ 'a' ตาแหน่งของตัวอักษรตาแหน่งที่ 2 คือ 'c' และตาแหน่งอื่นๆ ตามลาดับ $length หมายถึง ความยาว ตัวอย่างที่ 8.12 การใช้ฟังก์ชัน substr ( ) <?php $rest = substr ("abcdef", 0, -1); // ผลลัพธ์ คือ "abcde" $rest = substr ("abcdef", 2, -1); // ผลลัพธ์ คือ "cde" $rest = substr ("abcdef", 4, -4); // ผลลัพธ์ คือ false ไม่สามารถคัดเอาสตริงได้ $rest = substr ("abcdef", -3, -1); // ผลลัพธ์ คือ "de" ?> ฟังก์ชัน substr_count ( ) เป็นฟังก์ชันที่ใช้สาหรับ นับจานวนคาที่มีอยู่ในข้อความหรือสตริง โดยรูปแบบของการค้นหาคาที่ ตรงกัน (case-sensitive) รูปแบบ int substr_count (string $haystack , string $needle [, int $offset = 0 [, int $length ]]) เมื่อ $haystack หมายถึง ข้อความหรือสตริงที่ต้องการค้นหาเพื่อนับจานวน $needle หมายถึง คาที่ใช้สาหรับการค้นหา $offset หมายถึง ตาแหน่งของตัวอักษรที่จะเริ่มนับ $length หมายถึง ความยาว ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 139.
    124 บทที่ 8สตริง ตัวเลข และเวลา ตัวอย่างที่ 8.13 การใช้ฟังก์ชัน substr_count ( ) <?php $text = 'This is a test'; echo strlen ($text); // ผลลัพธ์ ของจานวนตัวอักษร คือ 14 echo substr_count ($text, 'is'); // ผลลัพธ์ ของ 'is' คือ 2 echo substr_count ($text, 'is', 3); // การนับจะเริ่มต้นที่ 'is a test' ผลลัพธ์ คือ 1 // ไม่พบคาที่ต้องการนับเพราะตาแหน่งนับ คือ 's i' ผลลัพธ์ คือ 0 echo substr_count ($text, 'is', 3, 3); // ไม่สามารถนับได้และแสดงข้อความเตือน เพราะ 5+10 > 14 (ยาวกว่าข้อความ) echo substr_count($text, 'is', 5, 10); ?> ฟังก์ชันในการค้นหาข้อความหรือสตริง ฟังก์ชันเกี่ยวกับการค้นหาข้อความหรือสตริงที่น่าสนใจมีดังนี้ ฟังก์ชัน strpos ( ) เป็ น ฟังก์ชัน ที่ใช้ส าหรับ ค้น หาตาแหน่งของข้อความหรือ สตริงย่อย ซึ่งค่าที่คืนกลั บมาจะเป็น ตาแหน่งที่มันค้นพบย่อยเป็นครั้งแรก แต่หากไม่พบจะคืนค่า null กลับมา (ตัวพิมพ์เล็กและพิมพ์ใหญ่ถือ ว่าเป็นคนละตัวกัน: case-sensitive) รูปแบบ int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) เมื่อ $haystack หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา $needle หมายถึง คาที่ใช้สาหรับการค้นหา $offset หมายถึง ตาแหน่งของตัวอักษรที่จะเริ่มค้นหา ตัวอย่างที่ 8.14 การใช้ฟังก์ชัน strpos ( ) <?php $mystring = 'abc'; $findme = 'a'; $pos = strpos ($mystring, $findme); // ตัวอย่างจะใช้เครื่องหมายเปรียบเทียบ === ไม่นิยมใช้เครื่องหมาย == // เพราะตาแหน่งของ 'a' เป็นตาแหน่งแรกของตัวอักษร if ($pos === false) { echo "ข้อความที่ค้นหา '$findme' ไม่พบในข้อความ '$mystring'"; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 140.
    บทที่ 8 สตริงตัวเลข และเวลา 125 } else { echo "ข้อความที่ค้นหา '$findme' ตรวจพบในข้อความ '$mystring'"; echo " และตรวจพบในตาแหน่ง $pos"; } ?> ฟังก์ชัน stripos ( ) เป็ น ฟั งก์ชั น ที่ใ ช้ส าหรั บ ค้น หาตาแหน่ งของสตริงย่ อย เหมื อนฟั งก์ชั น strpos ( ) ซึ่ งค่า ที่ คืนกลับมาจะเป็นตาแหน่งที่มันค้นพบย่อยเป็นครั้งแรก แต่หากไม่พบจะคืนค่า null กลับมา (ตัวพิมพ์เล็ก และพิมพ์ใหญ่ถือว่าเป็นตัวเดียวกัน : case-insensitive) รูปแบบ int stripos ( string $haystack , string $needle [, int $offset = 0 ] ) เมื่อ $haystack หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา $needle หมายถึง คาที่ใช้สาหรับการค้นหา $offset หมายถึง ตาแหน่งของตัวอักษรที่จะเริ่มค้นหา ตัวอย่างที่ 8.15 การใช้ฟังก์ชัน stripos ( ) <?php $findme = 'a'; $mystring1 = 'xyz'; $mystring2 = 'ABC'; $pos1 = stripos ($mystring1, $findme); $pos2 = stripos ($mystring2, $findme); if ($pos1 === false) { echo "ข้อความที่ค้นหา '$findme' ไม่พบในข้อความ '$mystring1'"; } if ($pos2 !== false) { echo "ข้อความที่ค้นหา '$findme' ตรวจพบในข้อความ '$mystring2' ที่ตาแหน่ง $pos2"; } ?> ฟังก์ชันในการแทนที่ข้อความหรือสตริง ฟังก์ชันในการแทนที่ข้อความหรือสตริงที่น่าสนใจมีดังนี้ ฟังก์ชัน str_replace ( ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 141.
    126 บทที่ 8สตริง ตัวเลข และเวลา เป็นฟังก์ชันที่ใช้สาหรับค้นหาและแทนที่ข้อความหรือสตริงย่อยเดิม ด้วยข้อความหรือสตริงย่อย ใหม่ ที่ต้ องการ หากข้อ ความหรื อ สตริ งย่ อยที่ต้ องการค้น หามีมากกว่า 1 ครั้ ง ก็จ ะถู กแทนที่ ทั้ง หมด (ตัวพิมพ์เล็กและพิมพ์ใหญ่ถือว่าเป็นตัวเดียวกัน : case-insensitive) รูปแบบ mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) เมื่อ $search หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา $replace หมายถึง ข้อความหรือสตริงที่ต้องการแทนที่ $subject หมายถึง ข้อความหรือสตริง หรืออาร์เรย์ ที่ใช้สาหรับการค้นหาและแทนที่ (ไม่ต้องระบุก็ได้) $count หมายถึง จานวนครั้งที่ต้องการให้แทนที่ ตัวอย่างที่ 8.16 การใช้ฟังก์ชัน str_replace ( ) <?php $vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U"); $onlyconsonants = str_replace ($vowels, "", "Hello World of PHP"); // ผลลัพธ์ คือ Hll Wrld f PHP $phrase = "You should eat fruits, vegetables, and fiber every day."; $healthy = array ("fruits", "vegetables", "fiber"); $yummy = array ("pizza", "beer", "ice cream"); $newphrase = str_replace ($healthy, $yummy, $phrase); //ผลลัพธ์ คือ $healthy You should eat pizza, beer, and ice cream every day ?> ฟังก์ชัน str_ireplace ( ) เป็นฟังก์ชันที่ใช้สาหรับค้นหาและแทนที่ข้อความหรือสตริงย่อยเดิม ด้วยข้อความหรือสตริงย่อย ใหม่ ที่ ต้ อ งการ หากข้ อ ความหรื อ สตริ ง ย่ อ ยที่ ต้ อ งการค้ น หามี ม ากกว่ า 1 ครั้ ง เหมื อ นกั บ ฟั ง ก์ ชั น str_replace ( ) เพียงแต่จะไม่สนใจความแตกต่างของตัวพิมพ์ (ignore case) รูปแบบ mixed str_ireplace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) เมื่อ $search หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา $replace หมายถึง ข้อความหรือสตริงที่ต้องการแทนที่ $subject หมายถึง ข้อความหรือสตริง หรืออาร์เรย์ ที่ใช้สาหรับการค้นหาและแทนที่ (ไม่ต้องระบุก็ได้) $count หมายถึง จานวนครั้งที่ต้องการให้แทนที่ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 142.
    บทที่ 8 สตริงตัวเลข และเวลา 127 ฟังก์ชัน strtr ( ) เป็นฟังก์ชันที่ใช้สาหรับ การแปลตัวอักษรหรือแทนที่ข้อความหรือสตริง และยังสามารถกาหนด substring ในการแทนที่ได้มากกว่า 1 คา โดยอาร์เรย์ของสตริงที่จะใช้แทนที่จะต้องกาหนดในรูปแบบของ Key/Value โดย Key คือ สิ่งที่ต้องการค้นหา และ Value คือสิ่งที่จะนาไปแทนที่ ซึ่งรูปแบบของตัวพิมพ์ จะต้องตรงกันจึงจะแทนที่กันได้ มี 2 รูปแบบ ดังนี้ รูปแบบที่ 1 string strtr ( string $str , string $from , string $to ) รูปแบบที่ 2 string strtr ( string $str , array $replace_pairs ) เมื่อ $str หมายถึง ข้อความหรือสตริงที่ต้องการแปล $from หมายถึง ข้อความหรือสตริงที่ต้องการค้นหา $to หมายถึง ข้อความหรือสตริงที่ต้องการแทนที่ $replace_pairs หมายถึง พารามิ เ ตอร์ ซึ่ งอาจใช้ ร ะบุ ข้ อความหรื อสตริ งที่ ต้ องการ ค้นหาและแทนที่ในกรณีของอาร์เรย์ array ('from' => 'to', ...) ในใน รูปแบบของ Key/Value ตัวอย่างที่ 8.17 การใช้งานฟังก์ชัน strtr ( ) กรณีศึกษาแบบที่ 1 <?php // ตัวอย่างนี้ ฟังก์ชัน strtr ( ) ไม่ได้แปลเป็นรายตัวอักษร // แต่ลักษณะการแปลจะใช้วิธีการแปลทั้งข้อความหรือสตริง $addr = strtr ($addr, "äåö", "aao"); ?> ตัวอย่างที่ 8.18 การใช้งานฟังก์ชัน strtr ( ) กรณีศึกษาแบบที่ 2 <?php $trans = array ("h" => "-", "hello" => "hi", "hi" => "hello"); echo strtr ("hi all, I said hello", $trans); // ผลลัพธ์ คือ hello all, I said hi ?> ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง มีดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 143.
    128 บทที่ 8สตริง ตัวเลข และเวลา ตารางที่ 8.2 ฟังก์ชันในการตัดช่องว่าง ltrim ( ) ตัดช่องว่างที่อยู่ด้านซ้ายของสตริงออกทั้งหมด rtrim ( ) ตัดช่องว่างที่อยู่ด้านขวาของสตริงออกทั้งหมด trim ( ) ตัดช่องว่างทั้งด้านซ้าย และด้านขวาของสตริงออกทั้งหมด รูปแบบ string ชื่อฟังก์ชันในตารางที่ 8.2 ( string $str ) เมื่อ $str หมายถึง ข้อความหรือสตริงนาเข้า ตัวอย่างที่ 8.19 การประยุกต์ใช้ฟังก์ชันในการตัดช่องว่างและเติมข้อความหรือสตริง <?php $str = " PHP "; echo strlen ($str)."<br />"; // ผลลัพธ์ของการนับ คือ 19 echo strlen (ltrim ($str))."<br />" ; // ผลลัพธ์ของการนับ คือ 11 echo strlen (rtrim ($str))."<br />" ; // ผลลัพธ์ของการนับ คือ 11 echo strlen (trim ($str)) ; // ผลลัพธ์ของการนับ คือ 3 ?> จากตัว อย่างจะใช้วิธีการทดสอบโดยการนับจานวนเนื่องจากช่องว่าง (whitespace) จะไม่ สามารถมองเห็นได้ แต่จะส่งผลเมื่อใช้สาหรับการค้นหาหรือเปรียบเทียบข้อความหรือสตริง เพราะช่องว่าง เทียบได้กับอักษร 1 ตัว ฟังก์ชัน str_pad ( ) เป็นฟังก์ชันที่ใช้สาหรับขยายความยาวของข้อความหรือสตริง หรือเติมอักษรหรือข้อความลงใน ข้อความหรือสตริงหลัก รูปแบบ string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] ) เมื่อ $input หมายถึง ข้อความหรือสตริงหลัก $pad_length หมายถึง ความยาวที่ ต้ อ งการขยายเพิ่ ม เติ ม (ถ้ า ค่ า ตั ว เลขน้ อ ยกว่ า หรื อ เท่ากับจานวนความกว้างของข้อความหรือสตริงใน $input จะไม่ มีการขยาย) $pad_string หมายถึง ตัวอักษรหรือข้อความอื่นๆ ที่จะเติมลงไป (ไม่ระบุก็ได้) $pad_type หมายถึง ด้ า นที่ ต้ อ งการขยายเพิ่ ม เติ ม โดยปริ ย ายจะเติ ม ด้ า นขวา มี รายละเอียด ดังนี้ STR_PAD_RIGHT (ขยายเพิ่มด้านขวา), ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 144.
    บทที่ 8 สตริงตัวเลข และเวลา 129 STR_PAD_LEFT (ขยายเพิ่มด้านซ้าย) หรือ STR_PAD_BOTH (ขยายทั้งซ้ายและขวาเท่าๆ กัน) ตัวอย่างที่ 8.20 การใช้ฟังก์ชัน str_pad ( ) <?php $input = "Alien"; echo str_pad ($input, 10); echo str_pad ($input, 10, "-=", STR_PAD_LEFT); echo str_pad ($input, 10, "_", STR_PAD_BOTH); echo str_pad ($input, 6 , "___"); // ผลลัพธ์ คือ "Alien " // ผลลัพธ์ คือ "-=-=-Alien" // ผลลัพธ์ คือ "__Alien___" // ผลลัพธ์ คือ "Alien_" ?> ฟังก์ชันเกี่ยวกับอักขระพิเศษของ HTML ฟังก์ชันเกี่ยวกับอักขระพิเศษของ HTML ที่น่าสนใจมีดังนี้ ฟังก์ชัน nl2br ( ) เป็นฟังก์ชันสาหรับเปลี่ยนอักขระพิเศษ เช่น rn, nr, n และ r ซึ่งเป็นคาสั่งที่ใช้สาหรับขึ้นบรรทัด ใหม่ ให้เปลี่ยนเป็นแท็ก <br> หรือ <br /> ของภาษา HTML ซึ่งมีความจาเป็นในกรณีที่ต้องการให้ผู้ใช้ป้อน ข้อมูลผ่านทางจอภาพ เช่น ป้อนข้อมูลผ่านกล่องข้อความ (Text Field หรือ Text Box) หลายๆ บรรทัด หรือ โดยปกติแล้วเมื่อกดปุ่ม Enter เพื่อขึ้นบรรทัดใหม่ ตาแหน่งที่กดปุ่ม Enter ก็จะถูกบันทึกด้วยสัญลักษณ์ n หรือ new line เพื่อเป็นสัญลักษณ์บ่งชี้ว่าเป็นตาแหน่งที่จะต้องขึ้นบรรทัดใหม่ แม้จะมองไม่เห็นสัญลักษณ์นี้ก็ ตาม แต่ในเอกสาร HTML สัญลักษณ์ n จะไม่ทาให้ขึ้นบรรทัดใหม่ เพราะในเอกสาร HTML จะขึ้นบรรทัดใหม่ ด้วยสัญลักษณ์ <br /> เท่านั้น ดังนั้นฟังก์ชัน nl2br ( ) จึงใช้ในการเปลี่ยนจากสัญลักษณ์ n ให้เป็น <br /> รูปแบบ string nl2br ( string $string [, bool $is_xhtml = true ] ) เมื่อ $string หมายถึง สตริงหรือข้อความ $is_xhtml หมายถึง จะใช้รูปแบบ xhtml หรือไม่ (ค่าโดยปริยายจะกาหนดเป็น true) ตัวอย่างที่ 8.21 การใช้ฟังก์ชัน nl2br ( ) <?php echo nl2br ("สวัสดีครับnwww.sru.ac.th"); ?> ผลลัพธ์ สวัสดีครับ www.sru.ac.th ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 145.
    130 บทที่ 8สตริง ตัวเลข และเวลา ฟังก์ชัน wordwrap ( ) เป็นฟังก์ชันสาหรับแบ่งสตริงตามจานวนตัวอักษรที่กาหนด โดยจะไม่ตัดคาหรือฉีกข้อความ ใช้ แยกคาจากการเว้นวรรค ซึ่งภายหลังจากการแบ่งสตริงแล้วจะดาเนินการอย่างไรก็แล้วแต่กาหนด รูปแบบ string wordwrap (string $str [, int $width = 75 [, string $break = "n" [, bool $cut = false ]]]) เมื่อ $str หมายถึง $width หมายถึง $break หมายถึง $cut หมายถึง ตัวแปรที่ใช้เก็บค่าข้อความหรือสตริง จานวนตัวอักษรที่ต้องการ (โดยปริยาย คือ 75) คาสั่งที่ต้องการให้ดาเนินการ (โดยปริยาย คือ n เพื่อขึ้นบรรทัดใหม่) ต้องการตัดคาหรือไม่ หากกาหนดเป็น true จะตัดคาที่มีความยาว เกินกว่าที่ $width กาหนด ตัวอย่างที่ 8.22 การใช้ฟังก์ชัน wordwrap ( ) <?php $text = "The quick brown fox jumped over the lazy dog."; $newtext = wordwrap ($text, 20, "<br />n"); echo $newtext; ?> ผลลัพธ์ The quick brown fox jumped over the lazy dog. ฟังก์ชันเกี่ยวกับจานวนและตัวเลข แม้ว่าใน PHP จะมีฟังก์ชันเกี่ยวกับจานวน และตัวเลขอยู่เป็นจานวนมาก แต่ก็มี ฟังก์ชันที่จะได้ นาไปใช้งานอยู่บ่อยๆ เพียงไม่กี่ฟังก์ชัน ดังนั้นในที่นี้จะกล่าวถึงเฉพาะฟังก์ชันที่น่าสนใจเท่านั้น ฟังก์ชันเกี่ยวกับการประมาณค่า ฟังก์ชันที่น่าสนใจเกี่ยวกับการประมาณค่ามีดังนี้ ตารางที่ 8.3 ฟังก์ชันเกี่ยวกับการประมาณค่า ceil (จานวน) ใช้ในการปัดเศษขึ้นไปเป็นเลขจานวนเต็มตัวถัดไปถ้าเศษมีค่ามากกว่า 0 เช่น echo ceil (10.01); //ผลลัพธ์ คือ 11 echo ceil (10.50); //ผลลัพธ์ คือ 11 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 146.
    บทที่ 8 สตริงตัวเลข และเวลา 131 ตารางที่ 8.3 (ต่อ) floor (จานวน) ใช้ในการตัดเศษทิ้ง ไม่ว่าเศษนั้นจะมีค่าเท่าใดก็ตาม เช่น echo floor (10.01); //ผลลัพธ์ คือ 10 echo floor (10.50); //ผลลัพธ์ คือ 10 round (จานวน, ใช้ในการประมาณค่าเป็นจานวนเต็มที่ใกล้เคียง หากเศษน้อยกว่า 0.5 จะตัด [, ทศนิยม]) เศษทิ้ง แต่หากเศษมีค่าตั้งแต่ 0.5 จะปัดขึ้นไปเป็นจานวนเต็มถัดไป เช่น echo round (10.49); //ผลลัพธ์ คือ 10 echo round (10.50); //ผลลัพธ์ คือ 11 ส่วนทศนิยมเป็นการกาหนดว่าจะให้มีทศนิยมกี่ตาแหน่ง intval (จานวน) เลือกเอาเฉพาะจานวนเต็มของจานวนที่ระบุ หากมีทศนิยมจะตัดทิ้งเช่น echo intval (10.01); //ผลลัพธ์ คือ 10 echo intval (10.99); //ผลลัพธ์ คือ 10 echo intval (-1.23); //ผลลัพธ์ คือ -1 floatval (จานวน) เลือกเอาจานวนที่ระบุในแบบ float ซึงฟังก์ชันนี้น่าจะมีประโยชน์ในกรณีที่ ่ จานวนนั้นวางอยู่ข้างหน้าสตริง เช่น echo floatval (“12.34 MB”); //ผลลัพธ์ คือ 12.34 ฟังก์ชันในการเปรียบเทียบจานวน ฟังก์ชันที่น่าสนใจเกี่ยวกับการเปรียบเทียบจานวนมีดังนี้ ตารางที่ 8.4 ฟังก์ชันในการเปรียบเทียบจานวน min (n1, n2, …n) หรือ หาค่าที่น้อยที่สุดของช่วงที่กาหนด min (อาร์เรย์) $m1 = min (6, 7, 3, 8, 9); $m2 = min (array (10, 10.5, 3.4, 5.2, 20 )); max (n1, n2, …n) หรือ หาค่าทีมากที่สุดของช่วงที่กาหนด ่ max (อาร์เรย์) $m1 = max (6, 7, 3, 8, 9); $m2 = max (array (10, 10.5, 3.4, 5.2, 20 )); //ผลลัพธ์ คือ $m1 = 3 //ผลลัพธ์ คือ $m2 = 3.4 //ผลลัพธ์ คือ $m1 = 9 //ผลลัพธ์ คือ $m2 = 20 ฟังก์ชันการตรวจสอบ และจัดรูปแบบตัวเลข ฟังก์ชันที่น่าสนใจเกี่ยวกับการตรวจสอบ และจัดรูปแบบตัวเลขมีดังนี้ ตารางที่ 8.5 ฟังก์ชันการตรวจสอบ และจัดรูปแบบตัวเลข number_format ใช้ในการจัดรูปแบบตัวเลข เช่น จาก 1234 เป็น 1,234 เป็นต้น เช่น (จานวน) echo number_format (1234567); // 1,234,567 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 147.
    132 บทที่ 8สตริง ตัวเลข และเวลา ตารางที่ 8.5 (ต่อ) is_numeric (ข้อมูล) ตรวจสอบว่าข้อมูลที่ระบุนั้นเป็นตัวเลขหรือไม่ โดยจะคืนค่า true ถ้าเป็นข้อมูล ตัวเลขที่ไม่มีอักขระอื่นๆปะปนอยู่ด้วย ทั้งนี้ตัวเลขที่เขียนในแบบสตริง เช่น “123” ก็ถือว่าเป็นตัวเลขด้วยเพราะสามารถนาไปใช้ คานวณได้ เช่น $a = is_numeric(123); //ผลลัพธ์ คือ $a = ture $b = is_numeric(“1.23”); //ผลลัพธ์ คือ $b = ture $c = is_numeric(“123abc”); //ผลลัพธ์ คือ $c = false is_int (ข้อมูล) ตรวจสอบว่าเป็นจานวนเต็มหรือไม่ หากใช่จะคืนค่า true is_float (ข้อมูล) ตรวจสอบว่าเป็นจานวนที่มีทศนิยมหรือไม่ หากใช่จะคืนค่า true ฟังก์ชันเพิ่มเติมอื่นๆ ฟังก์ชันที่น่าสนใจเพิ่มเติมอื่นๆ มีดังนี้ ตารางที่ 8.6 ฟังก์ชันเพิ่มเติมอื่นๆ abs (จานวน) ใช้สาหรับหาค่า absolute เช่น $x = abs(10); //ผลลัพธ์ คือ $x = 10 $y = abs (-10); //ผลลัพธ์ คือ $y = 10 rand ( ) หรือ ใช้ในการสร้างเลขสุ่ม โดยค่าที่ได้จะไม่แน่นอนในแต่ละครั้ง ซึ่งโดยปกติแล้ว rand (ค่าน้อยที่สุด, เลขสุ่มที่ได้จะเป็นเลขจานวนเต็มที่มีค่าระหว่าง 0-32,768 แต่อย่างไรก็ตาม ค่ามากที่สุด) PHP อนุญาตให้สามารถกาหนดช่วงตัวเลขผลลัพธ์ที่ต้องการได้ว่าให้อยู่ ระหว่างค่าใดถึงค่าใด เช่น $r1 = rand ( ); $r2 = rand (10, 20); //เลขสุ่มที่ได้จะมีค่าระหว่าง 10-20 pow (เลขฐาน, เลขชี้กาลัง) ใช้ในการค่าเลขยกกาลัง เช่น echo pow (10, 2); //100 sqrt (ตัวเลข) หาค่ารากที่สองของจานวนที่ระบุ แต่ต้องไม่ใช่จานวนที่ติดลบ เช่น $a = sqrt (100); //$a =10 ฟังก์ชันเกี่ยวกับวันเวลา (Date and Time) ข้อมูลเกี่ยวกับวันเวลา นับว่าเป็นข้อมูลที่สาคัญอีกอย่างหนึ่งของการเขียนโปรแกรมแบบสคริปต์ ซึ่งการใช้งานส่วนใหญ่จะทาผ่านฟังก์ชันต่างๆ ที่เกี่ยวข้อง โดยฟังก์ชันที่น่าสนใจเกี่ยวกับวันเวลามีดังนี้ การจัดการกับวันที่และเวลาแบบ Local Mean Time (LMT) รูปแบบของวันที่และเวลาแบ่งเป็น 2 ประเภท คือ 1. Local Mean Time (LMT) คือ เวลาเฉลี่ยของแต่ละท้องถิ่น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 148.
    บทที่ 8 สตริงตัวเลข และเวลา 133 2. Greenwich Mean Time (GMT) คือ เวลามาตรฐานสากล ซึ่งเป็นเวลาที่เทียบกับเมืองกรีนิช ประเทศอังกฤษ โดยหน่วยเวลาอย่างเป็นทางการ เรียกว่า UTC ก่อนที่จะใช้ฟังก์ชันใดเพื่อจัดการวันที่และเวลา ควรใช้ฟังก์ชัน date_default_timezone_set () เพื่อกาหนดรูปแบบ Timezone ที่ต้องการใช้งานก่อน ฟังก์ชันของ PHP จะแสดงวันเวลาตาม Timezone ที่กาหนด รูปแบบการใช้ฟังก์ชันมีดังนี้ รูปแบบ bool date_default_timezone_set ( string $timezone_identifier ) เมื่อ $timezone_identifier หมายถึง เขตเวลา (Timezone) ส าหรับเวลาในประเทศไทย ต้องระบุค่าเป็น "Asia/Bangkok" ซึ่งเป็นเวลา LMT สาหรับเวลา GMT สามารถระบุค่าเป็น GMT หรือ UTC ก็ได้ ฟังก์ชัน time ( ) เป็นฟังก์ชันที่ใช้แสดงวันที่และเวลาปัจจุบันในรูปแบบของ Unix Timestamp จะแสดงเวลาเป็น หน่วยวินาที โดยเริ่มนับค่าตั้งแต่วันที่ 1 มกราคม ค.ศ.1970 เวลา 00:00:00 น. ตามเวลา GMT จนถึง วัน ที่และเวลาปัจ จุ บัน ยกตัว อย่างเช่น วันที่ 26 พฤศจิกายน 2012 เวลา 13:47:00 มีค่า Unix Timestamp คือ "1353912424" รูปแบบ int time ( void ) ตัวอย่างที่ 8.23 การใช้ฟังก์ชัน time ( ) <?php $nextWeek = time ( ) + (7 * 24 * 60 * 60); // 7 days; 24 hours; 60 mins; 60secs echo 'Now: '. date ('Y-m-d') ."<br>"; echo 'Next Week: '. date ('Y-m-d', $nextWeek) ."<br>"; // or using strtotime(): echo 'Next Week: '. date ('Y-m-d', strtotime('+1 week')) ."<br>"; ?> ผลลัพธ์ Now: 2012-11-26 Next Week: 2012-12-03 Next Week: 2012-12-03 ฟังก์ชัน strtotime ( ) เป็นฟังก์ชันที่ใช้สาหรับแปลงสตริงให้เป็นข้อมูลวันเวลาในรูปแบบ timestamp แต่สตริงนั้นต้อง เขียนในรูปแบบที่สามารถแปลงได้ ถ้าแปลงไม่ได้จะคืนค่า false ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 149.
    134 บทที่ 8สตริง ตัวเลข และเวลา รูปแบบ int strtotime ( string $time [, int $now = time() ] ) เมื่อ $time หมายถึง วันเวลาในรูปแบบสตริง $now หมายถึง วันเวลาปัจจุบันที่เรียกใช้ฟังก์ชัน ตัวอย่างที่ 8.24 การใช้ฟังก์ชัน strtotime ( ) <?php echo strtotime ("now"), "<br>"; echo strtotime ("10 September 2012"), "<br>"; echo strtotime ("+1 day"), "<br>"; echo strtotime ("+1 week"), "<br>"; echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "<br>"; echo strtotime ("next Thursday"), "<br>"; echo strtotime ("last Monday"), "<br>"; ?> ฟังก์ชน date ( ) ั เป็นฟังก์ชันที่ใช้สาหรับแสดงวันที่และเวลา โดยสามารถกาหนดรูปแบบของผลลัพธ์ของฟังก์ชันได้ เช่น ต้องการเฉพาะวันที่ หรือต้องการเฉพาะเวลา รูปแบบคาสั่งมีดังนี้ รูปแบบ string date ( string $format [, int $timestamp = time() ] ) เมื่อ $format หมายถึง รูปแบบวันเวลา $timestamp หมายถึง พารามิเตอร์เสริม ชนิดตัวเลขจานวนเต็ม ของเวลาปัจจุบันบน ระบบ Unix ถ้าไม่มีการกาหนดค่าใดๆ ค่าโดยปริยาย คือ ค่าของ ฟังก์ชัน time ( ) หรือวันเวลาปัจจุบัน อักขระต่างๆ ที่ใช้กาหนดรูปแบบวันเวลาสาหรับฟังก์ชัน date ( ) ผ่านพารามิเตอร์ $format สามารถแยกออกเป็นกลุ่มได้ดังนี้  อักขระที่ใช้แทน “วัน” และ “สัปดาห์” d ใช้แทนวันที่ของเดือน โดยเป็นเลข 2 หลัก เช่น 01, 02, 31 j ใช้แทนวันที่ของเดือน แบบไม่มี 0 นาหน้าเลขหลักเดียว เช่น 1, 2, 30 D ใช้แทนวันในรอบสัปดาห์แบบย่อ เช่น Sun, Mon l ตัวแอลพิมพ์เล็กใช้แทนวันในรอบสัปดาห์แบบชื่อเต็ม เช่น Sunday, Monday S ตัวS(พิมพ์ใหญ่) เป็นตัวอักษรย่อที่ใช้บ่งบอกลาดับที่ของวันในรอบเดือน เช่น st, nd, rd, th ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 150.
    บทที่ 8 สตริงตัวเลข และเวลา 135 w z W F M M n t L Y y a A g G h H i s O r โดยปกติจะใช้ต่อท้ายตัว j หรือ d (ซึ่งใช้แทนวันที่) เช่น jS ลักษณะผลลัพธ์คือ 1st ใช้แทนลาดับของวันในรอบสัปดาห์จาก 0-6 แทนลาดับของวันในรอบปีจาก 0-365 ลาดับของสัปดาห์ในรอบปี  อักขระที่ใช้แทน “เดือน” ชื่อเดือนแบบเต็ม เช่น January, March ลาดับที่ของเดือนในรอบปีโดยมี 0 นาหน้าเลขหลักเดียว เช่น 01, 02, 12 ชื่อของเดือนแบบย่อ เฉพาะ 3 ตัวแรก เช่น Jan, Feb ลาดับที่ของเดือนแบบไม่มี 0 นาหน้าเลขหลักเดียว เช่น 1, 2, 12 จานวนวันของเดือนนั้นๆ โดยมีค่าระหว่าง 28- 31  อักขระที่ใช้แทน “ปี” ตรวจสอบว่าเป็นปี Leap Year หรือไม่(เดือนกุมภาพันธ์มี 29 วัน) ถ้าใช่จะคืนค่า 1 ถ้าไม่ใช่จะคืนค่า 0 ใช้แทนปี ค.ศ. แบบเลข 4 หลัก เช่น 1975 ใช้แทนปี ค.ศ. แบบเลข 2 หลัก เช่น 75  อักขระที่ใช้แทน “เวลา” ใช้แทนค่า Ante Meridiem และ Post Meridiem แบบพิมพ์เล็ก ได้แก่ am หรือ pm ใช้แทนค่า Ante Meridiem และ Post Meridiem แบบพิมพ์ใหญ่ ได้แก่ AM หรือ PM ใช้แทนค่าชั่วโมงของวันแบบ 12 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 0-12 ใช้แทนค่าชั่วโมงของวันแบบ 24 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 0-23 ใช้แทนค่าชั่วโมงของวันแบบ 12 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 01-12 ใช้แทนค่าชั่วโมงของวันแบบ 24 ชั่วโมง โดยไม่มี 0 นาหน้าเลขหลักเดียวระหว่าง 00-23 ค่านาทีแบบมี 0 นาหน้าเลขหลักเดียวจาก 00-59 ค่าวินาทีแบบมี 0 นาหน้าเลขหลักเดียวจาก 00-59 ค่าความแตกต่างเมื่อเทียบกับเวลา Greenwich(GMT) เช่น +0700 เวลาตามมาตรฐานของ RFC 2822 เช่น Sun, 1 Mar 2009 15:03:57 +0700 ตัวอย่างที่ 8.25 การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( ) แบบที่ 1 <?php date_default_timezone_set('Asia/Bangkok'); echo "การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( ) <br/>"; echo date ("r") . "<br/>"; echo date ('l jS of F Y h:i:s A') . "<br/>"; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 151.
    136 บทที่ 8สตริง ตัวเลข และเวลา echo "July 1, 2012 is on a " . date ("l", mktime(0, 0, 0, 7, 1, 2012)) . "<br/>"; ?> ผลลัพธ์แบบที่ 1 การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( ) Mon, 26 Nov 2012 16:36:34 +0700 Monday 26th of November 2012 04:36:34 PM July 1, 2012 is on a Sunday ตัวอย่างที่ 8.26 การแสดงวันที่และเวลาในรูปแบบต่างๆ ด้วยฟังก์ชัน date ( ) แบบที่ 2 <?php date_default_timezone_set('Asia/Bangkok'); $birth = strtotime ("12/10/1978"); echo date ("ข้าพเจ้าเกิดเมื่อ j-m-Y <br />", $birth); $day = array("อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์"); $month =array("มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม" , "กันยายน" , "ตุลาคม" , "พฤศจิกายน" , "ธันวาคม"); $d = date ("w"); $day = $day [$d]; $date = date ("j"); $m = date ("m")-1; // เพราะลาดับเดือนจะได้คา 1-12 ่ $month = $months [$m]; $year = date ('Y') + 543; echo "วันนีตรงกับวัน $day วันที่ $date เดือน $month ปี $year "; ้ echo date("ขณะนี้เวลา H:i:s"); ?> ผลลัพธ์แบบที่ 2 ข้าพเจ้าเกิดเมื่อ 10-12-1978 วันนี้ตรงกับวัน จันทร์ วันที่ 26 เดือน ปี 2555 ขณะนี้เวลา 16:43:48 ฟังก์ชัน getdate ( ) เป็นฟังก์ชันที่ใช้สาหรับแสดงวันที่และเวลาเช่นเดียวกับฟังก์ชัน date ( ) แต่ไม่สามารถกาหนด รูปแบบเองได้ และฟังก์ชันจะคืนค่าเป็นอาร์เรย์แบบ Key/Value รูปแบบคาสั่งมีดังนี้ รูปแบบ array getdate ([ int $timestamp = time() ] ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 152.
    บทที่ 8 สตริงตัวเลข และเวลา 137 เมื่อ $timestamp หมายถึง พารามิเตอร์ชนิดตัวเลขจานวนเต็ม ของเวลาปัจจุบันบนระบบ Unix ถ้าไม่มีการกาหนดค่าใดๆ ค่าโดยปริยาย คือ ค่าของ ฟังก์ชัน time ( ) หรือวันเวลาปัจจุบัน อาร์เรย์ที่ได้จากฟังก์ชัน getdate ( ) ส่งคืนค่า ประกอบด้วยอีลีเมนต์ที่เก็บข้อมูลดังต่อไปนี้ ตารางที่ 8.7 อาร์เรย์แบบ Key/Value ที่ได้จากการใช้ฟังก์ชัน getdate ( ) Key คาอธิบาย ลักษณะค่าที่ได้ seconds อ่านค่า “วินาที” 0-59 minutes อ่านค่า “นาที” 0 to 59 hours อ่านค่า “ชั่วโมง” 0 to 23 mday อ่านค่า “วันที่” 1 to 31 wday อ่านค่าลาดับของวันในรอบสัปดาห์ 0(อาทิตย์)-6(เสาร์) mon อ่านค่าลาดับของเดือนในรอบปี 1-12 year อ่านค่า “ปี”แบบเลข 4 หลัก เช่น 2010 yday อ่านค่าลาดับของวันในรอบปี 0-365 weekday อ่านค่า “ชื่อวัน” ของสัปดาห์ Sunday-Saturday month อ่านค่า “ชื่อเดือน” ของปี January-December ตัวอย่างที่ 8.27 การใช้ฟังก์ชัน getdate ( ) <?php $today = getdate ( ); print_r ($today); ?> ผลลัพธ์ Array ( [seconds] => 30 [minutes] => 55 [hours] => 16 [mday] => 26 [wday] => 1 [mon] => 11 [year] => 2012 [yday] => 330 [weekday] => Monday [month] => November [0] => 1353923730 ) ฟังก์ชัน mktime ( ) เป็นฟังก์ชันที่ใช้สาหรับหาค่า Unix Timestamp ของวันที่และเวลาเช่นเดียวกับฟังก์ชัน time ( ) แต่ฟังก์ชัน time ( ) หาค่า Unix Timestamp ของวันที่และเวลาปัจจุบันเท่านั้น ส่วนฟังก์ชัน mktime ( ) สามารถกาหนดวันและเวลาที่ต้องการหาค่า Unix Timestamp ได้ รูปแบบคาสั่งมีดังนี้ รูปแบบ int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] ) เมื่อ $hour หมายถึง ชั่วโมง $minute หมายถึง นาที ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 153.
    138 บทที่ 8สตริง ตัวเลข และเวลา $second $month $day $year $is_dst หมายถึง หมายถึง หมายถึง หมายถึง หมายถึง วินาที เดือน วัน ปี การกาหนดรูปแบบวันเวลาตามฤดูกาล (กาหนดพารามิเตอร์เป็น 1) ไม่กาหนดเวลา (กาหนดพารามิเตอร์เป็น 0) หรือหากไม่ทราบสามารถ กาหนดเป็น -1 หรือไม่กาหนดซึ่งจะใช้ค่าปริยายเป็น -1 อยู่แล้ว ตัวอย่างที่ 8.28 การใช้ฟังก์ชัน mktime ( ) <?php date_default_timezone_set ('Asia/Bangkok'); echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 2012)) . "<br/>"; echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 2012)). "<br/>"; echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 2013)). "<br/>"; echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 13)); ?> ผลลัพธ์ Jan-01-2013 Jan-01-2013 Jan-01-2013 Jan-01-2013 ฟังก์ชัน checkdate ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบความถูกต้องของวันที่ เช่น วันที่ที่ถูกต้องจะต้องไม่เกิน 31 วัน หรือเดือนจะต้องเป็นตัวเลขที่อยู่ระหว่าง 1 ถึง 12 หากฟังก์ชันตรวจสอบแล้วพบว่าวันที่ไม่ถูกต้อง จะคืน ค่าเป็นเท็จ (False) จากถูกต้องจะคืนค่าเป็นจริง (True) รูปแบบคาสั่งมีดังนี้ รูปแบบ bool checkdate ( int $month , int $day , int $year ) เมื่อ $month หมายถึง จานวนเดือนใน 1 ปี มีค่าอยู่ระหว่าง 1 - 12 เดือน $day หมายถึง จานวนวันของแต่ละเดือน $year หมายถึง ปี มีค่าอยู่ระหว่าง 1 - 32767 ตัวอย่างที่ 8.29 การใช้ฟังก์ชัน checkdate ( ) <?php var_dump (checkdate (12, 31, 2012)); // bool (true) เป็นจริงเพราะเดือนธันวาคมมี 31 วัน ในปี 2012 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 154.
    บทที่ 8 สตริงตัวเลข และเวลา 139 var_dump (checkdate (2, 29, 2013)); // bool (false) เป็นเท็จเพราะเดือนกุมภาพันธ์ในปี 2013 มี 28 วัน ?> การจัดการกับวันที่และเวลาแบบ Greenwich Mean Time (GMT) ฟังก์ชัน gmdate ( ) เป็นฟังก์ชันที่ใช้แสดงวันที่และเวลาเหมือนกับฟังก์ชัน date ( ) แต่จะคืนค่าเป็นเวลา GMT โดย สามารถกาหนดรูปแบบวันที่และเวลาได้เหมือนกับฟังก์ชัน date รูปแบบคาสั่งมีดังนี้ รูปแบบ string gmdate ( string $format [, int $timestamp = time() ] ) เมื่อ $format หมายถึง รูปแบบวันเวลา $timestamp หมายถึง พารามิเตอร์เสริมชนิดตัวเลขจานวนเต็ม ของเวลาปัจจุบันบนระบบ Unix ถ้าไม่มีการกาหนดค่าใดๆ ค่าโดยปริยาย คือ ค่าของฟังก์ชัน time ( ) หรือวันเวลาปัจจุบัน ตัวอย่างที่ 8.30 การใช้ฟังก์ชัน gmdate ( ) <?php echo date("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 2012)) . "<br/>"; echo gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 2012)); ?> ผลลัพธ์ Jan 01 2012 00:00:00 Dec 31 2011 17:00:00 ฟังก์ชัน gmmktime ( ) เป็นฟังก์ชันที่ใช้แสดงวันที่และเวลาเหมือนกับฟังก์ชัน mktime ( ) แต่จะคืนค่าเป็นเวลา GMT รูปแบบคาสั่งมีดังนี้ รูปแบบ int gmmktime ([ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second = gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year = gmdate("Y") [, int $is_dst = -1 ]]]]]]] ) ตัวอย่างที่ 8.31 การใช้งานฟังก์ชัน gmmktim ( ) <?php echo "July 1, 2012 is on a " . date ("l", gmmktime (0, 0, 0, 7, 1, 2012)); ?> // ผลลัพธ์ คือ July 1, 2012 is on a Sunday ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 155.
    140 บทที่ 8สตริง ตัวเลข และเวลา ตัวอย่างที่ 8.32 การประยุกต์เพื่อทาปฏิทินออนไลน์ด้วย PHP และ CSS โดยไม่ต้องใช้ตาราง CSS Code <style type="text/css"> div.holder{ position:relative; font-family:tahoma, "Microsoft Sans Serif", Vanessa; border:2px solid #999; float:left; font-size:12px; width:175px; padding:5px; } div.month { position:relative; display:block; height:18px; width:100%; float:left; left:0; top:0; background:#567; color:#fff; border-bottom:2px solid #89a; text-align:center; } div.wkday { position:relative; clear:both; float:left; height:18px; display:block; width:100%; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 156.
    บทที่ 8 สตริงตัวเลข และเวลา 141 background:#567; color:#fff; border-bottom:3px solid #234; } div.wkday span { display:block; float:left; width:25px; text-align:center; } div.box_day { position:relative; width:100%; clear:both; float:left; background:#EEEEEE; color:#000; word-spacing:8px; text-indent:3px; } </style> PHP Code <body> <?php $thai_month_arr=array ("0"=>"", "1"=>"มกราคม", "2"=>"กุมภาพันธ์", "3"=>"มีนาคม", "4"=>"เมษายน", "5"=>"พฤษภาคม", "6"=>"มิถุนายน", "7"=>"กรกฎาคม", "8"=>"สิงหาคม", "9"=>"กันยายน", "10"=>"ตุลาคม", "11"=>"พฤศจิกายน", "12"=>"ธันวาคม" ); $now_month = date ("Y-m-01"); $mk_time = strtotime ($now_month); $day_no = date ("t",$mk_time); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 157.
    142 บทที่ 8สตริง ตัวเลข และเวลา $wan_no = date ("w",$mk_time); $box_day = $day_no+$wan_no; $rows_week = ceil ($box_day/7); $total_box = $rows_week * 7; function get_day ($no_day,$wan_no,$day_no) { $wan_tee = $no_day-$wan_no; i f($wan_tee<=0) { $wan_tee="__"; return $wan_tee; } else { if ($wan_tee <= $day_no) { return str_pad ($wan_tee,2,"0",STR_PAD_LEFT); } else { return "__"; } } } ?> <div class="holder"> <div class="month"> <?=$thai_month_arr [intval (date ("m"))] ?> <?=date ("Y")+543 ?> </div> <div class="wkday"> <span>อา</span> <span>จ</span> <span>อ</span> <span>พ</span> <span>พฤ</span> <span>ศ</span> <span>ส</span> </div> <?php ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 158.
    บทที่ 8 สตริงตัวเลข และเวลา 143 for ($i = 1; $i <= $total_box; $i++) { ?> <?php if ($i%7 == 1) { echo "<div class='box_day'>"; } ?> <?=get_day ($i,$wan_no,$day_no) ?> <?php if ($i%7 == 0 || $i == $total_box ) { echo "</div>n"; } ?> <?php } ?> </div> <br style="clear:both;" /> </body> ภาพที่ 8.1 แสดงตัวอย่างผลลัพธ์การสร้างปฏิทินออนไลน์ ตัวอย่างที่ 8.33 การประยุกต์โปรแกรมคานวณอายุ กรณีศึกษาแบบที่ 1 <?php // กรณีวันเกิดที่เก็บสามารถแยกออกเป็นแต่ละส่วน เช่นปี ค.ศ. เดือน และ วัน // ตัวอย่าง ปีเกิด 1978 เดือนเกิด 1 (มกราคม) วันที่ 2 // ฟังก์ชันคานวณหาอายุใช้ดังนี้ function AgeCalculator ($year,$month,$day) { $birthday_convert = mktime (1,1,1,$month,$day,$year); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 159.
    144 บทที่ 8สตริง ตัวเลข และเวลา return (floor ((time ( ) - $birthday_convert) / 31556926)); // หมายเหตุ 1 ปี เท่ากับ 31556926 วินาที } echo AgeCalculator (1978,1,2); // ผลลัพธ์จะได้ 35 // การใช้งาน ?> ตัวอย่างที่ 8.34 การประยุกต์โปรแกรมคานวณอายุ กรณีศึกษาแบบที่ 2 <?php // กรณีวันเกิดที่เก็บอยู่ในรูปแบบของ date แบบมาตรฐาน คือ ปี ค.ศ.- เดือน - วันที่ // ตัวอย่าง 1978-01-02 // ฟังก์ชันคานวณหาอายุใช้ดังนี้ function AgeCalculator ($birthday) { $birthday_convert = strtotime ($birthday); return (floor ((time ( ) - $birthday_convert) / 31556926)); // หมายเหตุ 1 ปี เท่ากับ 31556926 วินาที } // การใช้งาน $date_input = "1978-01-02"; // ตัวแปรเก็บวันเกิด echo AgeCalculator ($date_input); // ผลลัพธ์จะได้ 35 ?> หมายเหตุ การเทีย บเวลาวิน าทีเพื่อความสะดวกในการพัฒ นาโปรแกรมที่เกี่ยวข้องกับเวลา ที่มา: วิกิพีเดีย สารานุกรมเสรี http://th.wikipedia.org/wiki/วินาที 1 มิลลิวินาที เท่ากับ 0.001 วินาที 1 วินาที เท่ากับ 1 วินาที 1 นาที เท่ากับ 60 วินาที 1 ชั่วโมง เท่ากับ 3600 วินาที 1 วัน เท่ากับ 86400 วินาที 1 สัปดาห์ เท่ากับ 604800 วินาที 1 เดือน เท่ากับ 2629743.83 วินาที 1 ปี เท่ากับ 31556926 วินาที 1 ปีปกติสุรทิน เท่ากับ 31536000 วินาที 1 ปีอธิกสุรทิน เท่ากับ 31622400 วินาที ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 160.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี การจัดเก็บ ข้อมูลของคอมพิว เตอร์จะทาในรูปแบบของไฟล์ ทั้งนี้ในกระบวนการสร้างเว็บใน บางครั้งมีความจาเป็นต้องใช้ความรู้เรื่องการกาจัดไฟล์ และไดเรกทอรีมาเกี่ยวข้องด้วย ดังนั้นในบทนี้จึง จะกล่าวถึงเรื่องราวพื้น ฐานที่จาเป็ นที่ควรรู้เกี่ยวกับไฟล์ เช่น การอ้างอิงตาแหน่งไฟล์ การแทรกไฟล์ รวมถึงฟังก์ชันต่างๆ ของ PHP ที่ใช้สาหรับจัดการไฟล์ และไดเรกทอรี เป็นต้น ในการสร้างเว็บเพจนั้น บางครั้งจาเป็นต้องนาข้อมูลจากไฟล์อื่นๆ เข้ามาใช้ร่วมด้วย เช่น รูปภาพ หรือการนาไฟล์เข้ามาแทรก ทั้งนี้ไฟล์แต่ละชนิด มักแยกเก็บให้เป็นสัดส่วนเฉพาะ เช่น ไฟล์ภาพ อาจเก็บ ไว้ในไดเรกทอรี images หรือ pictures หรือไฟล์สาหรับนาไปแทรกจะเก็บไว้ในไดเรกทอรี inc เป็นต้น ด้วยเหตุนี้จึงมักเกิดปัญหาในการอ้างอิง ตาแหน่งไฟล์ที่อยู่ต่างไดเรกทอรีกัน ดังนั้นก่อนที่จะศึกษาเรื่อง อื่นๆ เกี่ยวกับไฟล์ จะต้องทาความเข้าใจเกี่ยวกับการอ้างอิงตาแหน่งของไฟล์และไดเรกทอรีก่อน เพราะ เป็นสิ่งจาเป็นที่จะต้องใช้งานอยู่ตลอด การอ้างถึง Document Root Document Root คือ ไดเรกทอรีเริ่มต้นของการจัดเก็บข้อมูลของเว็บ ซึ่งตาแหน่งนี้ปกติแล้วก็ เกิดขึ้นกับการเซตค่าของผู้ดูแลระบบ ทั้งนี้หากเป็นผู้ติดตั้งระบบเองด้วย AppServ ตามค่าดีฟอลต์ที่ กาหนดไว้จะอยู่ที่ C:/AppServ/www สาหรับตาแหน่งนี้ถ้าเป็นรูปแบบ URL ก็จะเท่ากับ http://localhost หรือ http://127.0.0.1 นั้นเอง ตามรูปแบบของระบบเว็บจะแทนตาแหน่งนี้ด้วยเครื่องหมาย / แล้วก็จากอ้างอิงตาแหน่งไฟล์ และไดเรกทอรีโดยเริ่มจาก Document Root นี้เป็นต้นไป เช่น “/myphp/example/index.php” การอ้างอิงพาธแบบ Absolute พาธ คือ เส้นทางไปยังไฟล์ หรือไดเรกทอรี ซึ่งอ้างอิงแบบ Absolute นี้จะเป็นระบุตาแหน่งที่ แท้จริงของไฟล์ หรือไดเรกทอรี โดยเริ่มจาก Document Root เป็นต้นไป ตัวอย่างดังนี้ ลักษณะการอ้างอิงไฟล์ภาพต่างๆ จะเป็นดังนี้ <img src = “/myphp/img/logo.png” /> <a href = “/myphp/example/login.php “>เข้าสู้ระบบ < /a>
  • 161.
    146 บทที่ 9การจัดการไฟล์และไดเรกทอรี จะเห็นว่าการอ้างอิงพาธแบบ Absolute นี้ต้องไปเริ่มจาก Document Root เสมอ (เริ่มพาธ ด้วยเครื่องหมาย / ) แล้วไล่เข้าไปตามลาดับจนถึงไฟล์ที่ต้องการ ไม่ว่าจะนาไฟล์ไปใช้ที่เพจใดก็ตาม เพราะก็จะยืด Document Root เป็นหลักเสมอ อย่างไรก็ตามการระบุพาธแบบ Absolute ตามวิธี ดังกล่าวมานี้ จะใช้ได้ผลเฉพาะกับแท็ก HTML เท่านั้น แต่หากใช้ร่วมกับฟังก์ชันเกี่ยวกับระบบไฟล์ของ PHP จะเกิดปัญหา เว้นแต่จะระบุตาแหน่ง Document Root นาหน้าแบบ Full Path เช่น ตัวอย่างที่ 9.1 การระบุตาแหน่ง Document Root นาหน้าแบบ Full Path $root = $_SERVER ['DOCUMENT _ ROOT'] ; $path = "myphp/example/inc/header.inc.php"; include (“$root . $path” ) ; //ลักษณะผลลัพธ์ C:/AppServ/www/myphp/example/inc/header.inc.php การอ้างอิงพาธแบบ Relative การอ้างอิงแบบ Relative นี้จะเทียบกับตาแหน่งไฟล์ที่เป็นผู้เรียกไฟล์อื่นมาใช้เป็นหลัก โดยมี สัญลักษณ์การเปรียบเทียบตาแหน่งเพิ่มเติมเข้ามาอีก 2 แบบ คือ แบบที่ 1 . (จุดหนึ่งจุด) ใช้แทนไดเรกทอรีปัจจุบัน (ปกติไม่นิยมใช้สัญลักษณ์นี้กันมากนัก) แบบที่ 2 .. (จุ ดสองจุด ) ใช้แทนไดเรกทอรีก่อนหน้านี้อีก 1 ระดับ เช่น หากปัจจุบันอยู่ที่ ไดเรกทอรี /myphp/example ถ้าใช้ .. จะหมายถึง /myphp เป็นต้น ลักษณะแนวทางการอ้างอิงพาธ แบบ Relative มีดังนี้ คือ  สมมติต้องนาไฟล์รูปภาพ logo.png มาใช้เพจ test. Html แต่ทั้งสองไฟล์อยู่คนละระดับ จึงต้องออกไปข้างนอกอีก 1 ชั้นก่อน แล้วค่อยไปตามลาดับดังนี้ <img src = "../img/logo.png” />  ถ้าต้องการนาไฟล์รูปภาพ logo.png มาใช้ที่เพจ index.php แสดงว่าต้องออกไปข้างนอก อีก 2 ชั้นก่อน แล้วค่อยไล่เข้าไปตามลาดับดังนี้ <img src = "../../img/logo.png” />  ถ้าต้องการนาไฟล์ header.inc.php มาใช้เป็นเพจindex.php เนื่องจากไฟล์ header.inc นี้ อยู่ที่ไดเรกทอรีชั้นในถัดไปจากไฟล์ index.php ดังนั้นจึงกาหนดเป็น include ("inc/header.inc.php”) ;  ถ้าต้องการสร้างลิงก์จากเพจ index.php ไปยังเพจ login.php เนื่องจากทั้งสองไฟล์นี้อยู่ใน ระดับเดียวกัน ดังนั้นจึงกาหนดเป็น <a href = "login.php"> เข้าสู้ระบบ </a> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 162.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี147 จากการอ้างอิงพาธทั้งสองแบบนี้ ก็คงต้องขึ้นอยู่กับความถนัดของผู้ใช้เองว่าเลือกใช้แบบไหน สาหรับวิธีในหนังสือเล่มนี้จะใช้แบบ Relative Path ทั้งหมด การจัดการกับไฟล์ การจัดเก็บข้อมูลลงในไฟล์ทาได้ 2 วิธี คือ จัดเก็บในรูปของแฟลตไฟล์ (Flat File) หรือเท็กซ์ไฟล์ (Text File) และจัดเก็บในรูปของฐานข้อมูล (Database) แต่ไม่ว่าจะจัดเก็บใดก็ตาม จะมีการเขียนและ อ่านข้อมูลในไฟล์เสมอ ซึ่งมีขั้นตอนดังนี้ ตารางที่ 9.1 ขั้นตอนการเขียนและอ่านข้อมูลในไฟล์ การทางาน ขั้นตอน การทางาน ขั้นตอน การเขียน (Writing) 1. เปิ ด ไฟล์ ที่ ต้ อ งการ การอ่าน (Reading) 1. เปิดไฟล์ หรือสร้างไฟล์ใหม่ 2. อ่านข้อมูลจากไฟล์ 2. เขียนข้อมูลลงไฟล์ 3. ปิดไฟล์ 3. ปิดไฟล์ ในหัวข้อนี้จะกล่าวถึงการจัดการกับไฟล์ประเภทเท็กซ์ไฟล์ ซึ่งมีฟังก์ชันในการจัดการดังต่อไปนี้ การเปิดไฟล์ ในการอ่านข้อมูลจากไฟล์หรือบันทึกข้อมูลลงไฟล์ จะต้องเริ่มด้วยการเปิดไฟล์ขึ้นมาก่อนโดยใช้ ฟังก์ชัน fopen ( ) โดยการเปิดไฟล์เพื่องานงานใดๆ นั้น สามารถระบุได้ในส่วนของไฟล์โหมด หากเปิด ไฟล์ได้จะคืนค่าเป็นตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล (Resource) หากเปิดไม่ได้ หรือไม่พบไฟล์ที่ระบุ จะคืนค่าเป็นเท็จ (False) รูปแบบคาสั่งมีดังนี้ รูปแบบ resource fopen ( string $filename, string $mode [, bool $use_include_path = false] ) เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการเปิด $mode หมายถึง ไฟล์โหมด (File Mode) ใช้ระบุว่าเปิดไฟล์เพื่อวัตถุประสงค์ใด (ดูค่า ของไฟล์โหมดได้จากตารางที่ 9.2) $use_include_path หมายถึง หากกาหนดพารามิเตอร์เป็น 1 หรือ True ฟังก์ชันจะ ค้ น ห า ไ ฟ ล์ ต า ม ไ ด เ ร ก ท อ รี ที่ ก า ห น ด ใ น "include_path" (กาหนดค่าในไฟล์ php.ini) ตารางที่ 9.2 ไฟล์โหมด ไฟล์โหมด (File Mode) ความหมาย r โหมดอ่าน – เปิดไฟล์สาหรับการอ่าน เริ่มทางานจากตอนต้นไฟล์ r+ โหมดอ่าน – เปิดไฟล์สาหรับการอ่านและเขียน เริ่มทางานจากตอนต้นไฟล์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 163.
    148 บทที่ 9การจัดการไฟล์และไดเรกทอรี ตารางที่ 9.2 (ต่อ) w w+ a a+ b t โหมดเขียน – เปิดไฟล์สาหรับการเขียน เริ่มทางานจากตอนต้นไฟล์ ถ้าไฟล์ มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่ โหมดเขียน – เปิดไฟล์สาหรับการเขียนและอ่าน เริ่มทางานจากตอนต้นไฟล์ ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่ โหมดเพิ่ม – เปิดไฟล์สาหรับการเพิ่ม (เขียน) เริ่มทางานจากจุดสิ้นสุดของ ข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่ โหมดเพิ่ม – เปิดไฟล์สาหรับการเพิ่ม (เขียน) และอ่าน เริ่มทางานจาก จุดสิ้นสุดของข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะได้รับการสร้างขึ้นใหม่ โหมดไบนารี – ใช้ร่วมกับโหมดอื่น โดยอาจจะจาเป็น ถ้าระบบไฟล์แยก ระหว่างไฟล์ไบนารีและไฟล์ข้อความ ระบบ Windows มีการแยก แต่ระบบ Unix ไม่มีการแยก ใช้ร่วมกับโหมดอื่นๆ ที่กล่าวมาข้างต้น เพื่อเป็นการเปิดไฟล์ในโหมดเท็กซ์ ไฟล์ธรรมดา หมายเหตุ ตั ว ชี้ (Pointer) คื อ ตั ว แปรส าหรั บ ชี้ ข้ อ มู ล ในไฟล์ เมื่ อ เปิ ด ไฟล์ ตั ว ชี้ ข้ อ มู ล ในไฟล์ จ ะถู ก กาหนดให้ชี้ไปยังข้อมูลแรกในไฟล์ โดยทุกครั้งหลังจากการอ่านหรือเขียนข้อมูลในไฟล์ ตัวชี้จะ เลื่อนไปยังข้อมูลที่อยู่ตาแหน่งถัดไปโดยอัตโนมัติ ตัวอย่างที่ 9.2 การเปิดไฟล์เพื่อเขียน ถ้าไฟล์มีอยู่แล้วจะลบข้อมูลที่มีอยู่ ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่ <?php $fp = fopen ("test.txt", "w"); ?> ตามตัวอย่างมีการกาหนดโหมดเป็น “w” เป็นโหมดสาหรับเปิดไฟล์เพื่อเขียน ถ้าไฟล์มีอยู่แล้วจะ ลบข้อมูลทั้งหมด ถ้าไม่มีไฟล์จะสร้างขึ้นใหม่ แต่หากต้องการเพิ่มข้อมูลต่อท้ายเรื่อยๆ จะต้องเปลี่ยนโหมด ใหม่ตามตัวอย่างที่ 2 ตัวอย่างที่ 9.3 การเปิดไฟล์เพื่อเขียนต่อท้าย <?php $fp = fopen ("test.txt", "a"); ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 164.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี149 หมายเหตุ หากไฟล์ที่ต้องการเปิดกับไฟล์ PHP ที่รันโค้ดเก็บอยู่คนละไดเรกทอรี จะต้องระบุไดเรกทอรีของ ไฟล์ที่ต้องการเปิดด้วย เช่น "C:/AppServ/www/file/test.txt" โดย "test.txt" คือ ชื่อไฟล์ ส่วน "C:/AppServ/www/file/" คือ ไดเรกทอรีที่เก็บไฟล์ "test.txt" นอกจากนี้ยังอ้างถึ งไฟล์ใน Internet/Intranet ได้ โดยระบุเป็น URL เช่น "http://www.freebsd.sru.ac.th" หรือเรียกไฟล์ ผ่านโปรโตคอล FTP เช่น ftp://user:password@www.freebsd.sru.ac.th/file/test.txt ปัญหาที่อาจจะเกิดขึ้นจากการเปิดไฟล์หรือเขียนไฟล์ด้วย fopen ( ) คือ ผู้ใช้อาจไม่มีสิทธิ์ในการ อ่านหรือเขียนข้อมูลลงบนไฟล์ที่เซิร์ฟเวอร์ ซึ่งส่วนใหญ่จะพบในระบบปฏิบัติการ Unix หรือ Linux เนื่องจากมีการกาหนดสิทธิการใช้งานของไฟล์แต่ละไฟล์ไว้ ดังนั้นถ้าผู้อ่านใช้ฟังก์ชัน fopen ( ) แล้วเกิด error ในลักษณะของ “Permission denied” ก็ให้ลองย้อนกลับไปตรวจสอบ สิทธิ์ ในการใช้งานไฟล์อีก ครั้งว่าสามารถใช้งานได้หรือไม่ ในกรณีที่ไม่สามารถใช้ฟังก์ชัน fopen ( ) เปิดไฟล์ได้ก็จะมี error เกิดขึ้น สามารถใช้คาสั่ง if ใน การตรวจสอบ error ที่อาจเกิดขึ้นได้ดังนี้ ตัวอย่างที่ 9.4 การใช้ฟังก์ชัน fopen ( ) <?php $fp = @open (“/usr/local/apache/data/doc/customer.txt”. “w”) If (!$fp) { echo “ ไม่สามารถเปิดไฟล์ได้”; exit; } ?> ตัวอย่างข้างต้นจะเห็นว่าได้เติมสัญลักษณ์ @ ไว้หน้าฟังก์ชัน fopen ( ) เพื่อไม่ให้ต้องการให้ ฟังก์ชันแสดง error ขึ้นมาในกรณีที่ไม่สามารถเปิดไฟล์ได้ แต่จะใช้คาสั่ง if ในการตรวจสอบผลลัพธ์ที่ได้ จากการเปิดไฟล์เอง และแสดงข้อความแจ้งเตือนโดยสามารถนาเทคนิคการใช้สัญลักษณ์ @ ไปประยุกต์ ใช้งานได้กับทุกฟังก์ชัน การปิดไฟล์ ทุกครั้งที่มีการเปิดไฟล์ เมื่อใช้งานเสร็จแล้วจะต้องปิ ดไฟล์ด้วย โดยใช้ฟังก์ชัน fclose ( ) เพื่อ ทาลาย Resource ของฟังก์ชัน fopen ( ) หากปิดไฟล์เรียบร้อย ฟังก์ชันจะคืนค่าเป็นจริง (True) แต่หาก ปิดไฟล์ไม่สาเร็จ จะคืนค่าเป็นเท็จ (False) รูปแบบคาสั่งมีดังนี้ รูปแบบ bool fclose ( resource $handle ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 165.
    150 บทที่ 9การจัดการไฟล์และไดเรกทอรี เมื่อ $handle หมายถึง Resource หรือตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล ซึ่งเป็นค่าที่ ส่งคืนมาจากฟังก์ชัน fopen ( ) ตัวอย่างที่ 9.5 การใช้ฟังก์ชัน fclose ( ) <?php $handle = fopen ("somefile.txt", "r"); fclose ($handle); ?> การเขียนไฟล์ การเขียนข้อมูลลงในไฟล์ สามารถทาได้โดยใช้ฟังก์ชัน fwrite ( ) หรือ fputs ( ) หรือ file_put_content ( ) โดยก่อนจะเขียนไฟล์จะต้องเปิดไฟล์ด้วยฟังก์ชัน fopen ( ) ก่อนเสมอ  ฟังก์ชัน fwrite ( ) เป็นฟังก์ชันสาหรับเขียนข้อมูลลงไฟล์ มีรูปแบบคาสั่งดังนี้ รูปแบบ int fwrite ( resource $handle , string $string [, int $length ] ) เมื่อ $handle หมายถึง Resource หรือตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล $string หมายถึง ข้อมูลหรือข้อความที่ต้องการจัดเก็บลงไฟล์ $length หมายถึง จานวนตัวอักษรที่ต้องการบันทึกลงไฟล์ (มีหน่วยเป็นไบต์) หากไม่ กาหนดจะบันทึกกลุ่มตัวอักษรทั้งหมดจากตัวแปร $string ลงในไฟล์ ตัวอย่างที่ 9.6 การใช้ฟังก์ชัน fwrite ( ) <?php $path = "C:/AppServ/www/file"; $filename = "testfwrite.txt"; $file = fopen ( $path . "/" . $filename, "w"); $data = "ทดสอบการเขียนข้อมูลลงไฟล์ด้วยฟังก์ชัน fwrite()"; if (fwrite ($file, $data)==True) echo "เขียนข้อมูลลงไฟล์เรียบร้อยแล้ว"; fclose ($file); ?>  ฟังก์ชัน fputs ( ) เป็นฟังก์ชันสาหรับเขียนข้อมูลลงไฟล์ โดยการเรียกใช้และการทางานจะเหมือนกับฟังก์ชัน fwrite ( ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 166.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี151 รูปแบบ int fputs ( resource $handle , string $string [, int $length ] ) เมื่อ $handle หมายถึง Resource หรือตาแหน่งของตัวชี้ที่อยู่ในไฟล์ข้อมูล $string หมายถึง ข้อมูลหรือข้อความที่ต้องการจัดเก็บลงไฟล์ $length หมายถึง จานวนตัวอักษรที่ต้องการบันทึกลงไฟล์ (มีหน่วยเป็นไบต์) หากไม่ กาหนดจะบันทึกกลุ่มตัวอักษรทั้งหมดจากตัวแปร $string ลงในไฟล์ ตัวอย่างที่ 9.7 การใช้ฟังก์ชัน fputs ( ) <?php $filename = 'sitevisitors.txt'; if (file_exists ($filename)) { $count = file('sitevisitors.txt'); $count [0] ++; $fp = fopen ("sitevisitors.txt", "w"); fputs ($fp, "$count[0]"); fclose ($fp); echo $count[0]; } else { $fh = fopen ("sitevisitors.txt", "w"); if ($fh==false) die ("unable to create file"); fputs ($fh, 1); fclose ($fh); $count = file ('sitevisitors.txt'); echo $count[0]; } ?>  ฟังก์ชัน file_put_content ( ) เป็นฟังก์ชันสาหรับเขียนข้อมูลลงไฟล์ เช่นเดียวกับฟังก์ชัน fwrite ( ) และ fputs ( ) แต่ ฟังก์ชันนี้จาดาเนินการเองตั้งแต่เปิดไฟล์ เขียนข้อมูลลงไฟล์ และปิดไฟล์ ซึ่งต่างจากวิธีเดิมที่ต้องใช้ฟังก์ชัน fopen ( ) เปิดไฟล์ก่อน แล้วจึงใช้ฟังก์ชัน fwrite ( ) หรือฟังก์ชัน fputs ( ) เขียนข้อมูลลงไฟล์ เมื่อการ ทางานเสร็จสิ้นจึงใช้ฟังก์ชัน fclose ( ) ปิดไฟล์ รูปแบบคาสั่งของฟังก์ชัน file_put_content ( ) มีดังนี้ รูปแบบ int file_put_contents ( string $filename , mixed $data ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 167.
    152 บทที่ 9การจัดการไฟล์และไดเรกทอรี เมื่อ $filename หมายถึง ชื่อไฟล์ที่จะเขียนข้อมูล $data หมายถึง ข้อมูลที่ต้องการบันทึกลงไฟล์ ตัวอย่างที่ 9.8 การใช้ฟังก์ชัน file_put_content ( ) <?php $file = 'people.txt'; $current = file_get_contents ($file); $current .= "John Smith n"; file_put_contents ($file, $current); // เปิดไฟล์รับข้อมูลเดิม // เพิ่มข้อมูลบุคลากร // เขียนข้อมูลลงไฟล์ ?> การอ่านข้อมูลจากไฟล์ การอ่านข้อมูลจากไฟล์ มีขั้นตอนการทางานเหมือนกับการเขียนไฟล์ คือ เปิดไฟล์ด้วยฟังก์ชัน fopen ( ) ก่อนจึงจะสามารถอ่านไฟล์ได้ เมื่อเลิกใช้ไฟล์แล้วจะต้องปิดไฟล์ด้วยฟังก์ชัน fclose ( ) สาหรับ ฟังก์ชันที่ใช้อ่านไฟล์มีดังนี้  ฟังก์ชัน feof ( ) เป็นฟังก์ชันที่ใช้ตรวจสอบว่า อ่านข้อมูลในไฟล์หมดแล้วหรือไม่ ถ้าอ่านครบหมดแล้ว จะส่งคืน ค่าเป็นจริง (True) แต่ถ้ายังอ่านไม่หมด จะส่งคืนค่าเป็นเท็จ (False) มีรูปแบบคาสั่งดังนี้ รูปแบบ bool feof ( resource $handle ) เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์ ตัวอย่างที่ 9.9 การใช้ฟังก์ชัน feof ( ) <?php $file = fopen ("data.txt", "r"); while (!feof ($file)) { $char = fgetc ($file); echo $char . "<br/>"; } fclose($file); ?>  การอ่านอักขระจากไฟล์  ฟังก์ชัน fgetc ( ) ใช้อ่านข้อมูลจากไฟล์ครั้งละ 1 อักขระ รูปแบบคาสั่งมีดังนี้ รูปแบบ string fgetc ( resource $handle ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 168.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี153 เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์ ตัวอย่างที่ 9.10 การใช้ฟังก์ชัน fgetc ( ) <?php $fp = fopen ('somefile.txt', 'r'); if (!$fp) { echo 'ไม่สามารถเปิดไฟล์ somefile.txt ได้'; } else { while (false !== ($char = fgetc ($fp))) { echo "$char<br/>"; } } ?>  ฟังก์ชัน fread ( ) ใช้อ่านข้อมูลจากไฟล์ตามความยาวของอักขระที่ระบุ รูปแบบ คาสั่งมีดังนี้ รูปแบบ string fread ( resource $handle , int $length ) เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์ $length หมายถึง ความยาวของอักขระที่ต้องการอ่าน ตัวอย่างที่ 9.11 การใช้ฟังก์ชัน fread ( ) <?php $filename = "/usr/local/something.txt"; $handle = fopen ($filename, "r"); $contents = fread ($handle, filesize ($filename)); fclose ($handle); ?>  การอ่านข้อมูลจากไฟล์ครั้งละ 1 บรรทัด  ฟังก์ชัน fgets ( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลจากไฟล์ครั้งละ 1 บรรทัด และจะอ่าน ข้อมูลจนกระทั่งพบอักขระสาหรับขึ้นบรรทัดใหม่ (n) หรือสิ้นสุดไฟล์ จึงหยุดอ่าน มี รูปแบบคาสั่งมีดังนี้ รูปแบบ string fgets ( resource $handle [, int $length ] ) เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 169.
    154 บทที่ 9การจัดการไฟล์และไดเรกทอรี $length หมายถึง ความยาวของอักขระที่ต้องการอ่าน ตัวอย่างที่ 9.12 การใช้ฟังก์ชัน fgets ( ) <?php $handle = @fopen ("/tmp/inputfile.txt", "r"); if ($handle) { while (($buffer = fgets ($handle, 4096)) !== false) echo $buffer; if (!feof ($handle)) { echo "Error: unexpected fgets ( ) failn"; } fclose ($handle); } ?>  ฟังก์ชัน fgetss ( ) เป็นฟังก์ชันที่ให้ผลลัพธ์เหมือนกับฟังก์ชัน fgets ( ) แต่ต่างกันที่ ฟังก์ชัน fgetss ( ) สามารถกาหนดให้แสดงหรือไม่แสดงแท็ก HTML หรือ PHP ได้ โดยฟังก์ชัน fgets ( ) จะ ข้ามแท็กของ HTML หรือ PHP ไป แต่จะสนใจเฉพาะสตริงตัวอื่น ฟังก์ชัน fgetss ( ) มีรูปแบบคาสั่งดังนี้ รูปแบบ string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] ) เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์ $length หมายถึง ความยาวของอักขระที่ต้องการอ่าน $allowable_tags หมายถึง อนุญาตให้แท็กทางานหรือไม่ทางาน ตัวอย่างที่ 9.13 การใช้ฟังก์ชัน fgetss ( ) <?php $str = <<<EOD <html><body> <p>Welcome! Today is the <?php echo (date ('jS')); ?> of <?= date ('F'); ?>.</p> </body></html> Text outside of the HTML block. EOD; file_put_contents ('sample.php', $str); $handle = @fopen ("sample.php", "r"); if ($handle) { while (!feof ($handle)) { ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 170.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี155 $buffer = fgetss ($handle, 4096); echo $buffer; } fclose ($handle); } ?>  การอ่านข้อมูลในไฟล์ทั้งหมด  ฟังก์ชัน readfile ( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลในไฟล์ทั้งหมด ซึ่งสามารถเปิดไฟล์ ได้เอง โดยไม่ต้องใช้ฟังก์ชัน fopen ( ) ฟังก์ชันจะแสดงข้อมูลที่อ่านได้ทางหน้าจอ พร้อมคืนค่าเป็นขนาด ของข้อมูล (หน่วยเป็นไบต์) หากเกิดข้อผิดพลาด จะคืนค่าเป็นเท็จ (False) รูปแบบคาสั่งมีดังนี้ รูปแบบ int readfile ( string $filename [, bool $use_include_path = false] ) เมื่อ $filename หมายถึง ชื่อไฟล์ที่จะอ่านข้อมูล $use_include_path หมายถึง กาหนดเป็น True หากต้องการให้ค้นหาไฟล์ ใน include_path ตัวอย่างที่ 9.14 การใช้ฟังก์ชัน readfile ( ) <?php $file = 'monkey.gif'; if (file_exists ($file)) { header ('Content-Description: File Transfer'); header ('Content-Type: application/octet-stream'); header ('Content-Disposition: attachment; filename='.basename ($file)); header ('Content-Transfer-Encoding: binary'); header ('Expires: 0'); header ('Cache-Control: must-revalidate'); header ('Pragma: public'); header ('Content-Length: ' . filesize ($file)); ob_clean ( ); flush ( ); readfile ($file); exit; } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 171.
    156 บทที่ 9การจัดการไฟล์และไดเรกทอรี ภาพที่ 9.1 แสดงการเปิดไฟล์รูปภาพ  ฟังก์ชัน fpassthru ( ) เป็นฟังก์ชันที่ใช้อ่านข้อมูลในไฟล์เหมือนกับฟังก์ชัน readfile ( ) แต่จะต้องเปิดไฟล์ด้วยฟังก์ชัน fopen ( ) ก่อน จึงจะใช้ฟังก์ชัน fpassthru ( ) อ่านข้อมูลได้ มีรูปแบบคาสั่งดังนี้ รูปแบบ int fpassthru ( resource $handle ) เมื่อ $handle หมายถึง ตัวแปรสาหรับชี้ข้อมูลในไฟล์ ตัวอย่างที่ 9.15 การใช้ฟังก์ชัน fpassthru() สาหรับไฟล์ชนิดไบนารี <?php $name = './img/ok.png'; $fp = fopen ($name, 'rb'); // เปิดไฟล์ด้วยโหมดไบนารี header ("Content-Type: image/png"); header ("Content-Length: " . filesize ($name)); fpassthru ($fp); exit; ?>  ฟังก์ชัน file ( ) เป็นฟังก์ชันสาหรับอ่านข้อมูลในไฟล์ทั้งหมดเหมือนกับฟังก์ชัน readfile ( ) แต่ต่างกันที่ฟังก์ชัน file ( ) จะนาข้อมูลเก็บลงอาร์เรย์ มีรูปแบบคาสั่งดังนี้ รูปแบบ array file ( string $filename ) เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการอ่านข้อมูล ตัวอย่างที่ 9.16 การใช้ฟังก์ชัน file ( ) <?php // Get a file into an array. In this example we'll go through HTTP to get // the HTML source of a URL. ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 172.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี157 $lines = file ('http://www.example.com/'); // Loop through our array, show HTML source as HTML source; and line numbers too. foreach ($lines as $line_num => $line) { echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />n"; } $html = implode ('', file ('http://www.example.com/')); // Using the optional flags parameter since PHP 5 $trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); ?>  ฟังก์ชัน file_get_content ( ) เป็นฟังก์ชันสาหรับอ่ านข้อมูลในไฟล์ทั้งหมด เหมือนกับฟังก์ชัน file ( ) แต่ต่างกันที่ฟังก์ชัน file_get_content ( ) จะคืนค่าเป็นสตริง มีรูปแบบคาสั่งดังนี้ รูปแบบ string file_get_contents ( string $filename ) เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการอ่านข้อมูล ตัวอย่างที่ 9.17 การใช้ฟังก์ชัน file_get_content ( ) หน้าโฮมเพจของเว็บไซต์ <?php $homepage = file_get_contents ('http://www.example.com/'); echo $homepage; ?> ตัวอย่างที่ 9.18 การใช้ฟังก์ชัน file_get_content ( ) ค้นหาในตาแหน่ง include_path <?php $file = file_get_contents ('./people.txt', FILE_USE_INCLUDE_PATH); ?> การลบไฟล์ สามารถใช้ฟังก์ชัน unlink ( ) ได้ ซึ่งมีรูปแบบคาสั่งดังนี้ รูปแบบ bool unlink ( string $filename ) เมื่อ $filename หมายถึง ชื่อไฟล์ที่จะลบ ตัวอย่างที่ 9.19 การใช้ฟังก์ชัน unlink ( ) <?php $fh = fopen ('test.html', 'a'); fwrite ($fh, '<h1>Hello world!</h1>'); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 173.
    158 บทที่ 9การจัดการไฟล์และไดเรกทอรี fclose ($fh); unlink ('test.html'); ?> ฟังก์ชันอื่นๆ ที่ใช้จัดการกับไฟล์  การตรวจสอบเกี่ยวกับไฟล์ จากตัวอย่างก่อนหน้านี้ หากไฟล์ที่ต้องการเปิดไม่มีอยู่จริง หรือไฟล์นั้นไม่อนุญาตให้มีการเขียน/ อ่านไฟล์ จะทาให้ฟังก์ชันคืนค่าเป็นความผิดพลาด ซึ่งหากไม่ดักจับหรือตรวจสอบความผิดพลาดเหล่านั้น อาจทาให้มีผลกระทบต่อการทางานของส่วนอื่นๆ สาหรับฟังก์ชันที่ใช้ตรวจสอบเกี่ยวกับไฟล์ มีดังต่อไปนี้ ตารางที่ 9.3 ฟังก์ชันที่ใช้ตรวจสอบเกี่ยวกับไฟล์ ฟังก์ชัน การทางาน รูปแบบ is_file ( ) ตรวจสอบว่าเป็นไฟล์ทั่วไปหรือไม่ หากใช่ bool is_file ( string $filename ) จะคืนค่าเป็น True หากไม่ใช่ จะคืนค่า เป็น False is_writable ( ) ตรวจสอบว่าสามารถเขียนข้อมูลลงในไฟล์ bool is_writable ( string $filename ) ได้หรือไม่ หากได้จะคืนค่าเป็น True หาก ไม่ได้ จะคืนค่าเป็น False is_readable ( ) ตรวจสอบว่าสามารถอ่านข้อมูล จากไฟล์ bool is_readable ( string $filename ) นั้ น ได้ ห รื อ ไม่ การคื น ค่ า จะเหมื อ นกั บ ฟังก์ชัน is_writable ( )  การตรวจสอบเวลาที่เกี่ยวข้องกับไฟล์ ตารางที่ 9.4 ฟังก์ชันที่ใช้ตรวจสอบเวลาที่เกี่ยวข้องกับไฟล์ ฟังก์ชัน การทางาน รูปแบบ fileatime ( ) ใช้หาเวลา (ค่า Unix Timestamp) ที่มีการ int fileatime ( string $filename ) เข้าถึงไฟล์ครั้งล่าสุด filectime ( ) ใช้หาเวลา (ค่า Unix Timestamp) ที่มีการ int filectime ( string $filename ) เปลี่ ย นแปลงข้ อมู ล ของไฟล์ ครั้ งล่ าสุ ด ซึ่ ง ข้อมูลของไฟล์ ที่จะบันทึกได้แก่ การกาหนด กลุ่มผู้ใช้งาน ซึ่งมี 3 กลุ่ม ได้แก่ user, group และ ownership การกาหนดสิทธิ์การเข้าถึง ไฟล์ ซึ่งเวลานี้จะถูกบันทึกตอนสร้างไฟล์ และ ทุกครั้งที่มีการเปลี่ยนแปลงข้อมูล ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 174.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี159 ตารางที่ 9.4 (ต่อ) ฟังก์ชัน การทางาน รูปแบบ filemtime ( ) ใช้หาเวลา (ค่า Unix Timestamp) ที่มีการ int filemtime ( string $filename ) แก้ไขข้อมูลในไฟล์ครั้งล่าสุด ซึ่งเวลานี้จะถูก บั น ทึ ก ตอนสร้ า งไฟล์ และทุ ก ครั้ ง ที่ มี ก าร แก้ไขข้อมูล การจัดการกับไดเรกทอรี ภาษา PHP มีฟังก์ชันที่ใช้จัดการเกี่ยวกับไดเรกทอรี ดังนี้ การอ่านไดเรกทอรี  ฟังก์ชัน opendir ( ) เป็ น ฟั งก์ ชั น ส าหรั บ เปิ ดไดเรกทอรี เ พื่ อ อ่ า นรายชื่ อไฟล์ ภ ายใน โดยจะส่ งคื นค่ าเป็ น Directory Hander (ตัวชี้ที่ใช้ชี้ไดเรกทอรี) หากเปิดไดเรกทอรีไม่ได้ จะคืนค่าเป็น False มีรูปแบบคาสั่งดังนี้ รูปแบบ resource opendir ( string $path ) เมื่อ $path หมายถึง ไดเรกทอรีที่ต้องการเปิด  ฟังก์ชัน closedir ( ) เป็นฟังก์ชันสาหรับปิดไดเรกทอรี มีรูปแบบคาสั่งดังนี้ รูปแบบ void closedir ([ resource $dir_handle ] ) เมื่อ $dir_handle หมายถึง ตัวแปรที่ใช้เก็บค่าของตัวชี้ที่ใช้ชี้ไดเรกทอรี  ฟังก์ชัน readdir ( ) เป็นฟังก์ชันสาหรับอ่านไดเรกทอรี มีรูปแบบคาสั่งดังนี้ รูปแบบ string readdir ([ resource $dir_handle ] ) เมื่อ $dir_handle หมายถึง ตัวแปรที่ใช้เก็บค่าของตัวชี้ที่ใช้ชี้ไดเรกทอรี ตัวอย่างที่ 9.20 การใช้ฟังก์ชัน opendir ( ), closedir ( ) และ readdir ( ) <?php $dir = "/etc/php5/"; if (is_dir ($dir)) { if ($dh = opendir ($dir)) { ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 175.
    160 บทที่ 9การจัดการไฟล์และไดเรกทอรี while (($file = readdir ($dh)) !== false) { echo "filename: $file : filetype: " . filetype ($dir . $file) . "<br/>"; } closedir ($dh); } } ?>  ฟังก์ชัน rewinddir ( ) เป็นฟังก์ชันสาหรับกลับไปที่ส่วนต้นของไดเรกทอรี มีรูปแบบคาสั่งดังนี้ รูปแบบ void rewinddir ([ resource $dir_handle ] ) เมื่อ $dir_handle หมายถึง ตัวแปรที่ใช้เก็บค่าของตัวชี้ที่ใช้ชี้ไดเรกทอรี การดูรายละเอียดของไดเรกทอรี  ฟังก์ชัน dirname ( ) เป็นฟังก์ชันที่ใช้สาหรับแสดงพาธของไดเรกทอรี มีรูปแบบคาสั่งดังนี้ รูปแบบ string dirname ( string $path ) เมื่อ $path หมายถึง พาธของไดเรกทอรี  ฟังก์ชัน basename ( ) เป็นฟังก์ชันที่ใช้สาหรับแสดงชื่อของไฟล์ มีรูปแบบคาสั่งดังนี้ รูปแบบ string basename ( string $path [, string $suffix ] ) เมื่อ $path หมายถึง พาธของไดเรกทอรี $suffix หมายถึง ส่วนขยายไฟล์นั้น เช่น .php, .html, .txt หากไม่กาหนดค่าที่ได้จะ มีทั้งชื่อไฟล์ และส่วนขยาย ตัวอย่างที่ 9.21 การใช้ฟังก์ชัน basename ( ) <?php $p = “c:/windows/php.ini” ; $basel1 = basename ($p); $basel2 = basename ($p, “ .ini”); // ผลลัพธ์ คือ $base1 =” php.ini” // ผลลัพธ์ คือ $base2 = “php” ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 176.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี161  ฟังก์ชัน realpath ( ) เป็นฟังก์ชันที่ใช้สาหรับแสดงพาธจริงทั้งหมด มีรูปแบบคาสั่งดังนี้ รูปแบบ string realpath ( string $path ) เมื่อ $path หมายถึง พาธของไดเรกทอรี ตัวอย่างที่ 9.22 การใช้ฟังก์ชัน realpath ( ) <?php echo realpath('/windows/system32'); // ผลลัพธ์ คือ C:WINDOWSSystem32 ?>  ฟังก์ชัน pathinfo ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบพาธโดยการส่งคืนค่ากลับมาเป็นอาร์เรย์ที่สมาชิกแต่ละ ตัวประกอบไปด้วย ชื่อไดเรกทอรี , basenameและส่วนขยายของไฟล์ อาร์เรย์ผลลัพธ์ที่จะได้อยู่ใน รูปแบบ Key/Value โดยค่า Key จะประกอบไปด้วย dirname , basename และ extension มีรูปแบบ คาสั่งดังนี้ รูปแบบ mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] ) เมื่อ $path หมายถึง พาธของไดเรกทอรี $options หมายถึง กาหนดเพื่อดึงเฉพาะข้อมูลที่ต้องการ มี 4 ค่า ได้แก่ PATHINFO_DIRNAME เฉพาะข้อมูลไดเรกทอรี PATHINFO_BASENAME เฉพาะข้อมูลชื่อไฟล์และนามสกุลไฟล์ PATHINFO_EXTENSION เฉพาะข้อมูลนามสกุลของไฟล์ PATHINFO_FILENAME เฉพาะข้อมูลชื่อไฟล์ หมายเหตุ หากไม่ ระบุ option ฟังก์ชัน pathinfo ( ) จะคืน ค่า เป็ นอาร์เ รย์ ประกอบด้ว ยอิ นเด็ก ซ์ dirname, basename, extention, และ filename ซึ่งเก็บค่าไดเรกทอรี ชื่อไฟล์ (รวม นามสกุลไฟล์) และชื่อไฟล์ ตามลาดับ ตัวอย่างที่ 9.23 การใช้ฟังก์ชัน pathinfo ( ) <?php $path_parts = pathinfo ('/www/htdocs/inc/lib.inc.php'); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 177.
    162 บทที่ 9การจัดการไฟล์และไดเรกทอรี echo $path_parts ['dirname']. "<br/>"; echo $path_parts ['basename'] . "<br/>"; echo $path_parts ['extension'] . "<br/>""; echo $path_parts ['filename'] . "<br/>"; ?> ผลลัพธ์ /www/htdocs/inc lib.inc.php php lib.inc การสร้างและลบไดเรกทอรี  ฟังก์ชัน mkdir ( ) เป็นฟังก์ชันที่ใช้สาหรับสร้างไดเรกทอรี หากสร้างได้ ฟังก์ชันจะส่งคืนค่าเป็นจริง (True) หากสร้างไม่ได้ เพราะมีไดเรกทอรีนั้นอยู่แล้ว หรือไม่ได้รับสิทธิ์ให้สร้างไดเรกทอรี (ขึ้นอยู่กับระบบความ ปลอดภัยของแต่ละเครื่อง และการกาหนดค่า mode) ฟังก์ชันจะส่งคืนค่าเป็นเท็จ (False) มีรูปแบบ คาสั่งดังนี้ รูปแบบ bool mkdir ( string $pathname [, int $mode = 0777 ] ) เมื่อ $pathname คือ พาธของไดเรกทอรี $mode คือ โหมดของไดเรกทอรีที่ใช้ใน Unix เท่านั้น ในระบบปฏิบัติการ MS-Windows พารามิเตอร์ตัวนี้จะไม่ถูกนามาใช้ โดยปริยาย กาหนดให้ มีค่าโหมดเป็น 0777 สามารถศึกษารายละเอียด เพิ่มเติมโหมดในฟังก์ชัน chmod ( ) ตัวอย่างที่ 9.24 การใช้ฟังก์ชัน mkdir ( ) <?php mkdir ("/path/to/my/dir", 0700); // สร้างไดเรกทอรีพร้อมกาหนดโหมดเป็น 0700 ?>  ฟังก์ชัน rmdir ( ) เป็นฟังก์ชันที่ใช้สาหรับลบไดเรกทอรี มีรูปแบบคาสั่งดังนี้ รูปแบบ bool rmdir ( string $dirname ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 178.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี163 เมื่อ $dirname หมายถึง พาธของไดเรกทอรีที่ต้องการลบ ตัวอย่างที่ 9.25 การใช้ฟังก์ชัน rmkdir ( ) <?php if (!is_dir ('examples')) { mkdir ('examples'); } rmdir ('examples'); ?> การตรวจสอบการมีอยู่ของไฟล์และไดเรกทอรี  ฟังก์ชัน file_exists ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่ามีไฟล์ หรือไดเรกทอรีตามที่ระบุอยู่หรือไม่ หากมีจะ คืนค่ากลับมาเป็นค่า true รูปแบบ bool file_exists ( string $filename ) เมื่อ $filename หมายถึง ชื่อของไฟล์หรือไดเรกทอรีที่ต้องการตรวจสอบ ตัวอย่างที่ 9.26 การใช้ฟังก์ชัน file_exists ( ) <?php $filename = '/path/to/foo.txt'; if (file_exists ($filename)) { echo "ตรวจพบไฟล์เอกสาร $filename"; } else { echo "ไม่พบไฟล์เอกสาร $filename"; } ?> การคัดลอกไฟล์และการเปลี่ยนแปลงชื่อไฟล์ พร้อมกับการย้ายไดเรกทอรี  ฟังก์ชัน copy ( ) เป็นฟังก์ชันที่ใช้สาหรับ คัดลอกไฟล์ โดยกาหนดชื่อไฟล์ต้นฉบับ และชื่อไฟล์ปลายทางที่ น าไฟล์ คั ด ลอกไปไว้ หากก าหนดไดเรกทอรี ร วมกั บ ชื่ อ ไฟล์ จะหมายความว่ า ให้ คั ด ลอกไฟล์ ไ ปยั ง ไดเรกทอรีที่ระบุ หากไดเรกทอรีของปลายทางมีชื่อไฟล์ซ้ากัน ฟังก์ชันจะนาไฟล์ที่คัดลอกทับไฟล์เดิมที่มี อยู่ มีรูปแบบคาสั่งดังนี้ รูปแบบ bool copy ( string $source , string $dest ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 179.
    164 บทที่ 9การจัดการไฟล์และไดเรกทอรี เมื่อ $source หมายถึง ชื่อไฟล์ต้นฉบับ $dest หมายถึง ชื่อไฟล์หรือตาแหน่งปลายทางที่จะคัดลอกไฟล์ ตัวอย่างที่ 9.27 การใช้ฟังก์ชัน copy ( ) <?php $file = 'example.txt'; $newfile = 'example.txt.bak'; if (!copy ($file, $newfile)) { echo "ไม่สามารถคัดลอกไฟล์ $file... ได้ <br/>"; } ?> การเปลี่ยนชื่อไฟล์และย้ายไดเรกทอรี  ฟังก์ชัน rename ( ) เป็นฟังก์ชันที่ใช้สาหรับ เปลี่ยนชื่อไฟล์ หากมีการกาหนดไดเรกทอรีร่วมกับชื่อไฟล์ใหม่ จะหมายถึงให้ย้ายไฟล์ไปยังไดเรกทอรีที่กาหนดด้วย และหากไดเรกทอรีนั้นมีชื่อไฟล์ซ้ากัน ฟังก์ชันจะ เขียนไฟล์ใหม่ทับไฟล์เดิมที่มีอยู่ มีรูปแบบคาสั่งดังนี้ รูปแบบ bool rename ( string $oldname , string $newname ) เมื่อ $oldname หมายถึง ชื่อไฟล์เดิม $newname หมายถึง ชื่อไฟล์ใหม่ ตัวอย่างที่ 9.28 การใช้ฟังก์ชัน rename ( ) <?php rename ("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt"); ?> การอัพโหลดไฟล์ ตัวแปร $_FILES ตัวแปร $_FILES เป็นตัวแปรประเภท Superglobal ซึ่งเป็นตัวแปรพิเศษที่โปรแกรมสร้างขึ้นเพื่อ เข้าถึงการทางานได้ทุกส่วนของสคริปต์ โดยตัวแปร $_FILES จะเก็บข้อมูลที่เกี่ยวกับไฟล์อัพโหลด (จะต้อง ใช้รูปแบบการส่งฟอร์มแบบ HTTP POST method เท่านั้น) มีรูปแบบคาสั่งดังนี้ รูปแบบ $_FILES [userfile] [key] ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 180.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี165 เมื่อ userfile หมายถึง ชื่อที่กาหนดในแอทริบิวต์ name ที่ใช้รับชื่อไฟล์ที่ต้องการอัพ โหลดจากเว็บฟอร์ม key หมายถึง คีย์ในตัวแปร $_FILES ที่ใช้เก็บค่าต่างๆ ของไฟล์ โดยที่ค่าคีย์ ของตัวแปร $_FILES มีดังนี้ ตารางที่ 9.5 ค่าคีย์ของตัวแปร $_FILES คีย์ คาอธิบาย name ชื่อของไฟล์อัพโหลด type ชนิดของไฟล์อัพโหลด tmp_name ไดเรกทอรี ฝั่ ง เซิ ร์ ฟ เวอร์ ส าหรั บ เก็ บ ไฟล์ อั พ โหลดชั่ ว คราว ซึ่ ง พาธก็ คื อ ค่ า ของ "upload_tmp_dir" ส่วนชื่อไฟล์ PHP จะสร้างให้โดยอัตโนมัติ error ข้อผิดพลาดที่เกิดจากการอัพโหลด ซึ่งจะส่งคืนค่าแสดงเป็นตัวเลข มี 4 ค่า ได้แก่  0 หมายถึง การอัพโหลดสมบูรณ์  1 หมายถึง ขนาดไฟล์ใหญ่กว่าที่กาหนดใน upload_max_filesize (กาหนดใน php.ini)  2 หมายถึง ขนาดไฟล์ใหญ่กว่าที่กาหนดใน MAX_FILE_SIZE ซึ่งกาหนดในฟอร์ม  3 หมายถึง มีเพียงเฉพาะบางส่วนของไฟล์เท่านั้นที่ถูกอัพโหลด  4 หมายถึง ไม่มีไฟล์ที่อัพโหลด size ขนาดของไฟล์อัพโหลด (หน่วยเป็นไบต์) ฟังก์ชันเกี่ยวกับการอัพโหลด  ฟังก์ชัน is_upload_file ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่ามีการส่งไฟล์ที่ต้องการอัพโหลดหรือไม่ และไฟล์ที่ส่ง มาเป็นแบบ POST หรือไม่ ซึ่งการอัพโหลดไฟล์จากเว็บฟอร์มจะต้องส่งแบบ POST เท่านั้น เพราะ สามารถส่งข้อมูลที่มีความยาวไม่จากัด (การส่งแบบ GET จะจากัดความยาวในการส่งได้ไม่เกิน 255 ตัวอักษร) มีรูปแบบคาสั่งดังนี้ รูปแบบ bool is_uploaded_file ( string $filename ) เมื่อ $filename หมายถึง ชื่อไฟล์ทต้องการตรวจสอบ ี่ ตัวอย่างที่ 9.29 การใช้ฟังก์ชัน is_upload_file ( ) <?php if (is_uploaded_file ($_FILES ['userfile'] ['tmp_name'])) { echo "ไฟล์ ". $_FILES ['userfile'] ['name'] ." อัพโหลดสาเร็จแล้ว<br/>"; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 181.
    166 บทที่ 9การจัดการไฟล์และไดเรกทอรี echo "มีรายละเอียด ดังต่อไปนี้ <br/>"; readfile ($_FILES ['userfile'] ['tmp_name']); } else { echo "การอัพโหลดไม่สาเร็จ กรุณาตรวจสอบไฟล์ใหม่ ::"; echo "ชื่อไฟล์ คือ '". $_FILES ['userfile'] ['tmp_name'] . "'."; } ?>  ฟังก์ชัน move_upload_file ( ) เนื่องจากการอัพโหลดไฟล์ของ PHP จะเก็บในไดเรกทอรีชั่วคราวก่อน แล้วจึงใช้ฟังก์ชัน move_upload_file ( ) ย้ายไฟล์ที่ได้ไปเก็บในไดเรกทอรีปลายทางที่กาหนด หากย้ายไฟล์ได้สาเร็จ จะ คืนค่าเป็นจริง (True) หากไม่สาเร็จ จะคืนค่าเป็นเท็จ (False) มีรูปแบบคาสั่งดังนี้ รูปแบบ bool move_uploaded_file ( string $filename , string $destination ) เมื่อ $filename หมายถึง ชื่อไฟล์ที่ต้องการอัพโหลด $destination หมายถึง ตาแหน่งไดเรกทอรีปลายทางที่จะเก็บไฟล์อัพโหลด ตัวอย่างที่ 9.30 ฟอร์มอัพโหลดไฟล์ (แบบครั้งละ 1 ไฟล์) //ก่ อ นอื่ น จะส่ ง ไฟล์ เ ข้ า เครื่ อ งเซิ ร์ ฟ เวอร์ ต้ อ งแก้ ฟ อร์ ม โดยเพิ่ ม enctype="multipart/form-data" //และส่งไฟล์โดยใช้อินพุทชนิดไฟล์ <form action="uploading.php" method="post" enctype="multipart/form-data"> <br /><input type="file" name="picture" /> </form> <?php // การใช้ฟังก์ชัน move_upload_file ( ) เพื่ออัพโหลดไฟล์ if (isset ($_FILES ['picture'])) { // ตรวจดูก่อนว่าอัพโหลดไฟล์เข้ามาจริงๆ move_uploaded_file ($_FILES ['picture'] ['name'] ,'uploads/' . $_FILES ['picture'] ['tmp_name']); } ?> ตัวอย่างที่ 9.31 ฟอร์มอัพโหลดไฟล์ (แบบหลายไฟล์) //ก่ อ นอื่ น จะส่ ง ไฟล์ เ ข้ า เครื่ อ งเซิ ร์ ฟ เวอร์ ต้ อ งแก้ ฟ อร์ ม โดยเพิ่ ม enctype="multipart/form-data" //และส่งไฟล์โดยใช้อินพุทชนิดไฟล์ <form action="uploading.php" method="post" enctype="multipart/form-data"> <br /><input type="file" name="pictures [ ]" /> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 182.
    บทที่ 9 การจัดการไฟล์และไดเรกทอรี167 <br /><input type="file" name="pictures [ ]" /> <br /><input type="file" name="pictures [ ]" /> <br /><input type="file" name="pictures [ ]" /> <br /><input type="file" name="pictures [ ]" /> <input type="submit" /> </form> <?php // move_upload_file ( ) เพื่ออัพโหลดไฟล์ if ( isset($_FILES ['pictures'])) { foreach ($_FILES ['pictures'] ['error'] as $index => $value) { if ($value == UPLOAD_ERR_OK) { move_uploaded_file($_FILES['pictures']['tmp_name'][$index] ,'uploads/'.$_FILES['pictures']['name'][$index]); } } } ?> ฟังก์ชนการหาขนาด และชนิดของไฟล์ ั ฟังก์ชันการหาขนาด และชนิดของไฟล์ มีดังนี้ ฟังก์ชัน filesize ( ) เป็นฟังก์ชันที่ใช้สาหรับหาขนาดของไฟล์ ซึ่งค่าที่ได้จะมีหน่วยเป็น byte หากต้องการเปลี่ยน หน่วยเป็น KB ต้องหารด้วย 1,024 หากต้องการเปลี่ยนเป็น MB ต้องหารด้วย 1,048,576 รูปแบบ int filesize ( string $filename ) เมื่อ $filename หมายถึง ชื่อของไฟล์ที่ต้องการหาขนาดของไฟล์ ตัวอย่างที่ 9.32 การใช้ฟังก์ชัน filesize ( ) <?php $filename = 'somefile.txt'; echo $filename . ': ' . filesize($filename) . ' bytes'; ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 183.
    168 บทที่ 9การจัดการไฟล์และไดเรกทอรี ฟังก์ชัน filetype ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบว่าไฟล์หรือไดเร็กทอรีที่ระบุ • หากเป็นไฟล์ (File) จะคืนค่ากลับมาเป็นคาว่า file • หากเป็นไดเร็กทอรี (Directory) จะคืนค่าเป็นคาว่า dir นอกจากนี้แล้วอาจเป็นไปได้อื่นๆ เช่น char, block, link, unknown รูปแบบ string filetype ( string $filename ) เมื่อ $filename หมายถึง ชื่อของไฟล์ที่ต้องการหาขนาดของไฟล์ ตัวอย่างที่ 9.33 การใช้ฟังก์ชัน filetype ( ) <?php echo filetype ('/etc/passwd'); echo filetype ('/etc/'); // file // dir ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 184.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม กระบวนการที่สาคัญของการสร้างเว็บแอปพลิเคชัน (WebApplication) ก็คือ การนาข้อมูลที่ถูก ส่งจากทางด้านบราวเซอร์ไปประมวลผลในฝั่งของเซิร์ฟเวอร์ จึงทาให้ต้องมีส่วนในการกาหนดข้อมูลที่จะ ส่งไปประมวลผล ดังนั้ นในบทนี้จ ะศึกษาเกี่ยวกับการสร้างส่ วนสาหรับรับข้อมูล จากผู้ ใช้งาน เรียกว่า "ฟอร์ม (Form)" โดยภายในฟอร์มนี้จะประกอบด้วยการรับข้อมูลได้หลายชนิด การรับข้อมูลในรูปแบบที่ แตกต่างกัน และขั้นตอนทางด้านเซิร์ฟเวอร์ก็จะเป็นวิธีการรับข้อมูลจากฟอร์มซึ่งจะแตกต่างตามชนิดของ ข้อมูลที่รับเข้าไปประมวลผล ลักษณะของฟอร์ม ฟอร์มใช้การกาหนดองค์ประกอบต่างๆ ที่จะใช้ในการรับข้อมูลจากผู้ใช้ เพื่อจะส่งไปประมวลผล ด้วย PHP ที่เซิร์ฟเวอร์ โดยภายในฟอร์มจะประกอบด้วยการรับข้อมูลในรูปแบบที่ต่างกัน เช่น Text Field ใช้สาหรับรับข้อมูลชนิดสตริงหรือข้อความ หรือ Checkbox สาหรับแสดงข้อมูลแบบตัวเลือก เป็นต้น ตัวอย่างลักษณะของตัวรับข้อมูล (HTML <input> Tag) ที่สาคัญของฟอร์ม มีรายละเอียดโดยสังเขปของ ตัวรับข้อมูลแต่ละชนิด มีดังต่อไปนี้ ตารางที่ 10.1 ตัวรับข้อมูลที่สาคัญของฟอร์ม แท็ก คาอธิบาย <form> กาหนดฟอร์มเพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ <input /> กาหนดการป้อนข้อมูล <textarea> กาหนดการป้อนข้อความแบบหลายบรรทัด <label> กาหนดป้ายชื่อตัวรับข้อมูล <fieldset> กาหนดขอบเขตของการป้อนข้อมูล <legend> กาหนดป้ายชื่อสาหรับขอบเขตของการป้อนข้อมูล (fieldset) <select> กาหนดรายการที่ให้เลือก (แบบ Drop-down) <optgroup> กาหนดกลุ่มของตัวเลือก (options) ที่เกี่ยวข้องในรายการที่ให้เลือก <option> กาหนดตัวเลือกสาหรับรายการที่ให้เลือก
  • 185.
    170 บทที่ 10การจัดการข้อมูลจากฟอร์ม Select Text Textarea Radio Checkbox Button ภาพที่ 10.1 แสดงตัวอย่างตัวรับข้อมูลของฟอร์ม คานิยามและการใช้งานแท็ก form แท็ก form ใช้ในการสร้างแบบฟอร์มสาหรับให้ผู้ใช้งานป้อนข้อมูล แบบฟอร์มสามารถบรรจุแท็ก รับข้อมูล เช่น กล่องรับข้อความ (text fields) ช่องทาเครื่องหมาย (checkboxes) ปุ่มแบบเลือกตัวเดียว (radio button) ปุ่มยืนยัน (submit buttons) และ อื่น ๆ แบบฟอร์มใช้ในการส่งข้อมูลไปยังเซิฟเวอร์ รูปแบบพื้นฐานของฟอร์ม มีรูปแบบดังต่อไปนี้ <form แอตทริบิวต์> . ตัวรับข้อมูลแบบต่าง ๆ . </form> ตัวอย่างที่ 10.1 การสร้างแบบฟอร์มสาหรับให้ผู้ใช้งานป้อนข้อมูล <form action="form_action.php" method="get"> ชื่อ: <input type="text" name="fname" /> นามสกุล: <input type="text" name="lname" /> <input type="submit" value="Submit" /> </form> ตารางที่ 10.2 แสดงแอตทริบิวต์เฉพาะแท็ก form แอตทริบิวต์ (Attribute) ค่า accept MIME_type คาอธิบาย กาหนดชนิดของไฟล์ที่สามารถยืนยัน เพื่อส่งผ่านการอัพโหลดไฟล์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 186.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม171 ตารางที่ 10.2 (ต่อ) แอตทริบิวต์ (Attribute) ค่า accept-charset ชื่อชุดตัวอักษร enctype method name target application/x-www-formurlencoded multipart/form-data text/plain Get post ชื่อฟอร์ม _blank _parent _self _top ชื่อเฟรมเซท คาอธิบาย กาหนดชุดตัวอักษรที่เซิฟเวอร์สามารถ จัดการข้อมูลได้ เช่น utf-8 กาหนดวิธีในการเข้ารหัส ก่อนที่จะส่ ง ข้อมูลให้เซิฟเวอร์ กาหนดวิธีในการส่งข้อมูล กาหนดชื่อให้แบบฟอร์ม ระบุที่ที่จะให้ลิงค์เปิด _blank = เปิดวินโดว์ใหม่ _parent = เปิดในเอกสารหน้าที่เรียก เอกสารนี้มา _self = เปิดเอกสารหน้าเดิม _top = เปิดเอกสารด้านบน ชื่ อ เฟรมที่ ก าหนด (กรณี มี ก ารใช้ Frameset) ตัวรับข้อมูล ที่สาคัญของฟอร์ม คือ ตัวรับข้อมูล ที่ใช้สาหรับรับ ข้อมูลจากผู้ใช้งาน ตัวรับข้อมูล สามารถสร้างได้หลายแบบ ขึ้นอยู่กับแอตทริบิวต์ (Attribute) และชนิด (Type) เช่น ตัวรับข้อมูล เป็น กรอบข้อความ กล่องตัวเลือก กล่องรหัสผ่าน ปุ่มส่งข้อมูล และอื่นๆ มีรายละเอียดดังต่อไปนี้ แท็ก input แท็ก input ใช้ในการป้อนข้อมูลและส่งไปยังเซิ ร์ฟเวอร์ สามารถกาหนดได้หลายแบบ ขึ้นอยู่กับ แอตทริบิวต์ type โดยสามารถกาหนดให้เป็นข้อมูลแบบข้อความ ช่องทาเครื่องหมาย (checkbox) ข้อมูล แบบรหัสผ่าน และอื่นๆ ตัวอย่างที่ 10.2 แท็ก input ใช้ในการป้อนข้อมูลและส่งไปยังเซิร์ฟเวอร์ <form action="input_action.php" method="post"> ชื่อ: <input type="text" name="fname" value="FirstName" /> นามสกุล: <input type="text" name="lname" value="LastName" /> <input type="submit" value="ยืนยัน" /> </form> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 187.
    172 บทที่ 10การจัดการข้อมูลจากฟอร์ม ภาพที่ 10.2 แสดงตัวอย่างผลลัพธ์ของฟอร์มโดยใช้แท็ก input ชนิด "Text" ตารางที่ 10.3 แสดงแอตทริบิวต์เฉพาะแท็ก input แอตทริบิวต์ (Attribute) ค่า accept MIME_type align left right top middle bottom alt ข้อความ checked checked disabled disabled maxlength ตัวเลข name readonly ชื่อ readonly คาอธิบาย ก า ห น ด ช นิ ด ข อ ง ไ ฟ ล์ ที่ ส า ม า ร ถ อัพโหลดได้ (เฉพาะ type="file") กาหนดการวางแนวของการป้อนข้อมูล แบบรูปภาพ (เฉพาะ type="image") left=ชิดซ้าย right=ชิดขวา top=ชิดด้านบน middle=กึ่งกลาง bottom=ชิดด้านล่าง กาหนดข้อความสารองให้กับการป้อน ข้ อ มู ล แ บ บ รู ป ภ า พ ( เ ฉ พ า ะ type="image") ก าหนดให้ เ ลื อ กข้ อ มู ล นั้ น ในตอน เริ่ ม ต้ น (ส าหรั บ type="checkbox" หรือ type="radio") กาหนดให้แท็ก input นั้นๆ ปิดการใช้ งาน (ไม่ ส ามารถใช้ง านได้ ) เมื่ อหน้ า เพจโหลด ก าหนดความยาวสู ง สุ ด (ตั ว อั ก ษร) สาหรับการป้อนแบบข้อความ (สาหรับ type="text" หรือ type="password") กาหนดชื่อใหักับแท็ก input กาหนดให้แท็ก input นั้น สามารถอ่าน ได้ อ ย่ า งเดี ย ว (ส าหรั บ type="text" หรือ type="password") ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 188.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม173 ตารางที่ 10.3 (ต่อ) แอตทริบิวต์ (Attribute) size ตัวเลข src URL type button checkbox file hidden image password radio reset submit text value ค่าเริ่มต้น ค่า คาอธิบาย กาหนดความกว้างของการป้อนข้อมูล แบบข้อความ กาหนดที่ อยู่ (URL) ของรู ปภาพที่จ ะ แ ส ด ง เ ป็ น ปุ่ ม ยื น ยั น ( ส า ห รั บ type="image") กาหนดชนิดของการป้อนข้อมูล button=ปุ่ม checkbox=ช่องทาเครื่องหมาย file=ไฟล์ hidden=ซ่อนไว้ image=รูปภาพ password=รหัสผ่าน radio=ช่องแบบเลือกอย่างเดียว reset=ปุ่มเคลียร์ข้อมูล submit=ปุ่มยืนยันข้อมูล text=ข้อความ กาหนดค่าให้กับแท็ก input แท็ก textarea แท็ก textarea ใช้ในการป้อนข้อมูลแบบหลายบรรทัด สามารถรับข้อความได้ไม่จากั ด และ ข้อความจะแสดงผลในฟอนต์มาตรฐาน (ปรกติ คือ Courier) ขนาดของ textarea จะกาหนดได้โดย แอตทริบิวต์ cols และ rows และจะดีกว่าถ้ากาหนดผ่านทาง css ทางคุณสมบัติ height และ width ตัวอย่างที่ 10.3 แท็ก textarea ใช้ในการป้อนข้อมูลแบบหลายบรรทัด <textarea rows="2" cols="20"> textarea แสดงผล 2 บรรทัด และยาว 20 ตัวอักษร </textarea> ภาพที่ 10.3 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก textarea ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 189.
    174 บทที่ 10การจัดการข้อมูลจากฟอร์ม ตารางที่ 10.4 แสดงแอตทริบิวต์เฉพาะแท็ก textarea แอตทริบิวต์ (Attribute) ค่า cols ตัวเลข rows ตัวเลข disabled disabled name readonly ชื่อ readonly คาอธิบาย กาหนดความกว้างของ textarea กาหนดจานวนแถวของ textarea กาหนดให้ textarea ปิดการใช้งาน (ไม่ ส ามารถใช้ ง านได้ ) เมื่ อ หน้ า เพจ โหลด กาหนดชื่อใหักับ textarea กาหนดให้ textarea สามารถอ่านได้ อย่างเดียว แท็ก label แท็ก label ใช้ในการกาหนดป้ายหรือข้อความให้กับ แท็ก input โดยที่แท็ก label ไม่ได้แสดง อะไรเป็นพิเศษสาหรับผู้ใช้ อย่างไรก็ตาม แท็ก label ได้พัฒนาการใช้งานของเมาส์ เพราะถ้าผู้ใช้คลิ กบน ข้อความของแท็ก label มันจะสลับการควบคุมที่ผู กติดอยู่ ดังตัวอย่าง ถ้าคลิ กที่ "ผู้ชาย" ก็จะเป็นการ เลือกตัวเลือกของแท็ก input ที่เป็นผู้ชาย (male) แอตทริบิวต์ for ของแท็ก label ควรมีค่าเท่ากับแอตทริบิวต์ id ของแท็กที่เกี่ยวข้อง เพื่อจะผูก 2 แท็กเข้าด้วยกัน ดังตัวอย่าง แอตทริบิวต์ for ="male" ของแท็ก label มีค่าเท่ากับ แอตทริบิวต์ id = "male" ของแท็ก input ตัวอย่างที่ 10.4 แท็ก label ใช้ในการกาหนดป้ายหรือข้อความให้กับแท็ก input <form> <label for="male">ผู้ชาย</label> <input type="radio" name="sex" id="male" /> <br /> <label for="female">ผู้หญิง</label> <input type="radio" name="sex" id="female" /> </form> ภาพที่ 10.4 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก label ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 190.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม175 ตารางที่ 10.5 แสดงแอตทริบิวต์เฉพาะแท็ก label แอตทริบิวต์ (Attribute) ค่า for ไอดีของแท็กอื่นๆ คาอธิบาย กาหนดแท็ก label ไปผู กติดกับตัว ควบคุมของแท็กนั้นๆ แท็ก fieldset แท็ก fieldset ใช้ในการจัดกลุ่มในทางลอจิกในแบบฟอร์ม โดยใช้แท็ก fieldset วาดกรอบ ล้อมรอบแบบฟอร์ม และใช้แท็ก legend ในการระบุชื่อของแต่ละแท็ก fieldset ตัวอย่างที่ 10.5 แท็ก fieldset ใช้ในการจัดกลุ่มในทางลอจิกในแบบฟอร์ม <form> <fieldset> <legend>ข้อมูลส่วนบุคคล:</legend> ชื่อ: <input type="text" size="30" /><br /> e-mail: <input type="text" size="30" /><br /> วันเดือนปีเกิด: <input type="text" size="10" /> </fieldset> </form> ภาพที่ 10.5 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก fieldset ในการจัดกลุ่มของแท็ก input แท็ก legend แท็ก legend ใช้ในการกาหนดหัวข้อให้กับแท็ก fieldset ตารางที่ 10.6 แสดงแอตทริบิวต์เฉพาะแท็ก legend แอตทริบิวต์ (Attribute) ค่า align top bottom left right คาอธิบาย กาหนดการวางแนวสาหรับหัวข้อของ แท็ก fieldset ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 191.
    176 บทที่ 10การจัดการข้อมูลจากฟอร์ม แท็ก select แท็ก select ใช้ในการสร้างรายการแบบเลือก (drop-down list) โดยใช้แท็ก option ภายใน แท็ก select เป็นการสร้างรายการตัวเลือกให้กับรายการแบบเลือก ตัวอย่างที่ 10.6 แท็ก OPTION ภายในแท็ก select <select> <option value="Bangkok">กรุงเทพฯ</option> <option value="Nonthaburi">นนทบุรี</option> <option value="Nakhonratchasima">นครราชสีมา</option> <option value="Srisaket">ศรีสะเกษ</option> </select> ภาพที่ 10.6 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select ตารางที่ 10.7 แสดงแอตทริบิวต์เฉพาะแท็ก select แอตทริบิวต์ (Attribute) ค่า disabled disabled multiple multiple name size ชื่อ ตัวเลข คาอธิบาย กาหนดให้ไม่สามารถใช้งานตัวเลือกได้ ก าหนดให้ ส ามารถเลื อ กได้ ห ลายๆ ตัวเลือก กาหนดชื่อให้กับรายการตัวเลือก กาหนดตัวเลขของตัว เลือกที่จะแสดง ในรายการตั ว เลื อ ก (ถ้ า ตั ว เลื อ ก มากกว่าเลขจานวนนี้ จะขึ้นแถบเลื่อน) แท็ก optgroup แท็ก optgroup ใช้ในการจัดกลุ่มตัวเลือกที่เกี่ยวข้องกันในรายการการเลือก (select list) จะใช้ ในกรณีทมีรายการมากๆ เป็นลักษณะของกลุ่มตัวเลือก ซึงจะทาให้จัดการได้ง่ายกว่าสาหรับผู้ใช้งาน ี่ ่ ตัวอย่างที่ 10.7 แท็ก optgroup ใช้ในการจัดกลุ่มตัวเลือกที่เกี่ยวข้องกันในรายการการเลือก <select> <optgroup label="ภาคกลาง"> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 192.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม177 <option value="Bangkok">กรุงเทพฯ</option> <option value="Nonthaburi">นนทบุรี</option> </optgroup> <optgroup label="ภาคตะวันออกเฉียงเหนือ"> <option value="Nakhonratchasima">นครราชสีมา</option> <option value="Srisaket">ศรีสะเกษ</option> </optgroup> </select> ภาพที่ 10.7 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTGROUP ตารางที่ 10.8 แสดงแอตทริบิวต์เฉพาะแท็ก OPTGROUP แอตทริบิวต์ (Attribute) ค่า label ข้อความ disabled disabled คาอธิบาย กาหนดคาอธิบายสาหรับกลุ่มตัวเลือก ก าหนดให้ ไ ม่ ส ามารถใช้ ง านกลุ่ ม ตัวเลือกได้ แท็ก option แท็ก option กาหนดตัวเลือกสาหรับรายการเลือก โดยแท็ก option จะอยู่ภายในแท็ก select ตัวอย่างที่ 10.8 แท็ก option กาหนดตัวเลือกสาหรับรายการเลือก <select> <option value="Bangkok">กรุงเทพฯ</option> <option value="Nonthaburi">นนทบุรี</option> <option value="Nakhonratchasima">นครราชสีมา</option> <option value="Srisaket">ศรีสะเกษ</option> </select> ภาพที่ 10.8 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก OPTION ภายในแท็ก select ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 193.
    178 บทที่ 10การจัดการข้อมูลจากฟอร์ม ตารางที่ 10.9 แสดงแอตทริบิวต์เฉพาะแท็ก OPTION แอตทริบิวต์ (Attribute) ค่า disabled disabled label ข้อความ selected selected value ข้อความ คาอธิบาย กาหนดให้ไม่สามารถใช้งานตัวเลือกได้ กาหนดป้ายชื่อแบบสั้นให้กับตัวเลือก ก าหนดให้ ตั ว เลื อ กถู ก เลื อ กเป็ น ค่ า เริ่มต้น ก าหนดค่ า ที่ จ ะส่ ง ให้ เ ซิ ฟ เวอร์ เ มื่ อ แบบฟอร์มได้รับการยืนยัน แท็ก button แท็ก button จะกาหนดปุ่มขึ้นมา ภายในแท็ก button สามารถใส่เนื้อหา เช่น ข้อความหรือ รูปภาพได้ และมีความแตกต่างจากปุ่มที่ถูกสร้างโดยแท็ก input โดยจะต้องกาหนดแอตทริบิวต์ type สาหรับปุ่มเสมอ แอตทริบิวต์ type เริ่มต้นสาหรับ Internet Explorer คือ "button" ในขณะที่ เบราว์เซอร์อนๆ (และในข้อกาหนดของ W3C) จะกาหนดเป็น "submit" ื่ ตัวอย่างที่ 10.9 แท็ก button <button type="button">บันทึก</button> ภาพที่ 10.9 แสดงตัวอย่างผลลัพธ์ของการใช้แท็ก button ตารางที่ 10.10 แสดงแอตทริบิวต์เฉพาะแท็ก button แอตทริบิวต์ (Attribute) ค่า disabled disabled name ชื่อ type button reset submit value ข้อความ คาอธิบาย กาหนดให้ปุ่มไม่สามารถใช้งานได้ กาหนดชื่อให้กับปุ่ม กาหนดชนิดของปุ่ม button=ปุ่ม reset=ปุ่มลบข้อความในแบบฟอร์ม submit=ปุ่ ม กดยื น ยั น ส่ ง ข้ อ ความใน แบบฟอร์ม กาหนดค่าเริ่มต้นของปุ่ม ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 194.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม179 การจัดการข้อมูลจากฟอร์มในฝั่งเซิร์ฟเวอร์ โดยปกติแล้วข้อมูลที่รับผ่านฟอร์มต้องถูกส่งไปประมวลผลด้วย PHP ที่เซิร์ฟเวอร์ ดังนั้นต้องสร้าง ส่วนสาหรับรับข้อมูลจากฟอร์มนี้ไปประมวลผล ในลักษณะดังนี้ ฟอร์มผ่านบราวเซอร์ฝั่งไคลเอนต์ การทางานของ PHP ในฝั่งเซิร์ฟเวอร์ <?php รับข้อมูล ประมวลผล แสดงผล ?> ภาพที่ 10.10 แสดงการจัดการข้อมูลจากฟอร์มทางด้านเซิร์ฟเวอร์ ในการรับข้อมูลในฝั่งเซิร์ฟเวอร์นั้น ก่อนอื่นต้องทราบก่อนว่าข้อมูลนั้นถูกส่งมาด้วยเมธอดใด ซึ่งดู ได้จากแท็ก form แอตทริบิวต์ method ของฟอร์มตามที่ได้กล่าวมาแล้วข้างต้น ทั้งนี้เพราะวิธีการอ่าน ข้อมูลที่ส่งด้วยเมธอด GET และ POST จะแตกต่างกัน มีรายละเอียดดังต่อไปนี้ การอ่านข้อมูลที่ส่งด้วยเมธอด GET หากข้อมูลถูกส่งมาด้วยเมธอด GET การอ่านข้อมูลในฝั่งเซิร์ฟเวอร์จะใช้ตัวแปร $_GET ใน รูปแบบดังนี้ $_GET ['ชื่อ input']; เมื่อ ชื่อ input คือ แอตทริบิวต์ "name" ของ input ที่ต้องการอ่านข้อมูลนั่งเอง เช่น หากที่ ฟอร์มกาหนดชื่อ input เป็น "keyword" จะอ่านข้อมูลที่เซิร์ฟเวอร์ดังนี้ $test = $_GET ['keyword']; หมายเหตุ ในกรณีที่ฟอร์มไม่ได้ระบุเมธอดเอาไว้ บราวเซอร์จะเลือกใช้เมธอด GET เป็นค่าปริยายในการส่ง ข้อมูล ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 195.
    180 บทที่ 10การจัดการข้อมูลจากฟอร์ม การอ่านข้อมูลที่ส่งด้วยเมธอด POST หากข้อมูลถูกส่งมาด้วยเมธอด POST การอ่านข้อมูลในฝั่งเซิร์ฟเวอร์จะใช้ตัวแปร $_POST ใน รูปแบบดังนี้ $_POST ['ชื่อ input']; เช่น หากที่ฟอร์มกาหนดชื่อ input เป็น "login" จะอ่านข้อมูลในฝั่งเซิร์ฟเวอร์ดังนี้ $login = $_POST ['login']; การตรวจสอบเมธอดที่ส่งข้อมูล บางครั้งการเขียนโปรแกรมนั้นจะต้องรองรับการทางานแบบไดนามิก จึงไม่อาจกาหนดได้ล่วงหน้า ว่า ข้อมูลถูกส่งมาด้วยเมธอดใด แต่สามารถตรวจสอบได้จากตัวแปร $_SERVER ['REQUEST_METHOD'] มีตัวอย่างดังนี้ ตัวอย่างที่ 10.10 การใช้ตัวแปรจาก ตัวแปร $_SERVER ['REQUEST_METHOD'] <?php $method = $_SERVER ['REQUEST_METHOD']; if ($method == "GET"){ $x = $_GET ['x']; } else if ($method == "POST") { $x = $_POST ['x']; } ?> การอ่านข้อมูลจาก input ชนิดข้อความ input ประเภทข้อความที่สาคัญ ได้แก่ Text, Password, Textarea และ Hidden ซึ่งการอ่าน ข้อมูลจาก input ประเภทนี้ ก็อ่านจากตั วแปร $_GET หรือ $_POST ตามเมธอดที่ถูกส่งเข้ามา โดย ผลลัพธ์ที่ได้ คือ ข้อมูลที่ใส่ลงไปใน input แต่ถ้าเป็น Hidden จะได้เป็นข้อมูลที่กาหนดให้แก่ input ใน ส่วนของแอตทริบิวต์ "value" ตัวอย่างดังนี้ ตัวอย่างที่ 10.11 การอ่านข้อมูลจาก input ชนิดข้อความ <form action="form_action.php" method="GET"> ชื่อ: <input type="text" name="fname" /> นามสกุล: <input type="text" name="lname" /> รหัสผ่าน: <input type="password" name="pswd" /> <input type="submit" value="Submit" /> </form> ที่ฝั่งของเซิร์ฟเวอร์จะอ่านข้อมูลในลักษณะ ดังต่อไปนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 196.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม181 <?php $fname = $_GET ['fname']; $lname = $_GET ['lname']; $pswd = $_GET ['pswd']; ?> การอ่านข้อมูลจาก input ชนิด Radio จากที่ได้กล่าวไปแล้วข้างต้นเกี่ยวกับ input ชนิด Radio ว่า ตัวเลือกที่อยู่ในกลุ่มเดียวกันต้อง กาหนดแอตทริบิวต์ "name" ให้เป็นชื่อเดียวกัน เพื่อให้เลือกได้เพียงรายการเดียวในกลุ่มนั้น ซึ่งในการ อ่านข้อมูลจาก input ชนิด Radio จะใช้วิธีการเดียวกับ input อื่นๆ โดยค่าที่อ่านได้จะเป็นค่าที่กาหนด ให้แก่แอตทริบิวต์ "value" ของ input ที่ถูกเลือก แต่อย่างไรก็ตามหากผู้ใช้ไม่ได้เลือกรายการใดๆ เลยจะ ไม่มีข้อมูลของ input ชนิด Radio ที่ถูกส่งไปยังเซิร์ฟเวอร์ ดังนั้นเพื่อป้องกันข้อผิดพลาดของการนาข้อมูล ไปใช้งานในขั้นตอนต่อๆ ไป จึงควรตรวจสอบด้วยฟังก์ชัน isset ( ) ก่อนการอ่านข้อมูลจาก input ชนิดนี้ เสมอ ตัวอย่างดังต่อไปนี้ ตัวอย่างที่ 10.12 การตรวจสอบข้อมูลด้วยฟังก์ชัน isset ( ) <form action="form_action.php" method="POST"> <input type="radio" name="animal" value="แมว" /> แมว <input type="radio" name="animal" value="หนู" /> หนู <input type="radio" name="animal" value="สุนัข" /> สุนัข <input type="radio" name="animal" value="นก" /> นก </form> ตัวอย่างที่ 10.13 การตรวจสอบและอ่านข้อมูล <?php if (isset ($_POST ['animal'])) { $animal = $_POST ['animal']; echo "สัตว์ที่ท่านเลือก คือ $animal <br/>"; } ?> การอ่านข้อมูลจาก input ชนิด Checkbox การอ่านข้อมูลจาก Checkbox จะคล้ายกับ input ประเภทข้อความ แต่ข้อมูลจะถูกส่งไปยัง เซิร์ฟเวอร์เฉพาะรายการที่ถูกเลือก (checked) เท่านั้น ส่วนรายการที่ไม่ได้เลือกจะไม่ถูกส่งไป ตัวอย่าง ดังต่อไปนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 197.
    182 บทที่ 10การจัดการข้อมูลจากฟอร์ม ตัวอย่างที่ 10.14 การอ่านข้อมูลจาก Checkbox <form action="form_action.php" method="POST"> <input type="checkbox" name="red" value="แดง" /> แดง <input type="checkbox" name="green" value="เขียว" /> เขียว <input type="checkbox" name="yellow" value="เหลือง" /> เหลือง <input type="checkbox" name="blue" value="น้าเงิน" /> น้าเงิน </form> ตัวอย่างการอ่านค่าข้อมูล (จากตัวอย่างสมมติว่าเลือกเฉพาะ "แดง เขียว และเหลือง" เพียง 3 รายการเท่านั้น) ตัวอย่างที่ 10.15 การกาหนดค่าข้อมูลที่ได้รับมาจาก Checkbox <?php $red = $_POST ['red']; // $red = "แดง" $green = $_POST ['green']; // $green = "เขียว" $yellow = $_POST ['yellow']; // $yellow = "เหลือง" $blue = $_POST ['blue']; // $blue = null มีค่าเป็นค่าว่าง ?> แต่เนื่องจากไม่สามารถทราบได้ล่ว งหน้าได้ว่า ผู้ใช้จะเลือกรายการใดบ้าง ดังนั้นเพื่อป้องกัน ข้อผิดพลาดของการนาข้อมูลไปใช้ในขั้นตอนต่อๆ ไป ก่อนที่จะอ่านข้อมูลจาก input ประเภท checkbox ควรตรวจสอบก่อนว่าผู้ใช้เลือกรายการนั้นหรือไม่ โดยใช้ฟังก์ชัน isset ( ) มีตัวอย่างรูปแบบดังนี้ <?php if (isset ($_POST ['red'])) { ... ... } if (isset ($_POST ['green'])) { ... ... } ?> แต่อย่างไรก็ตาม กรณีที่ฟอร์มมี input ชนิด checkbox อยู่เป็นจานวนมาก การที่จะคอย ตรวจสอบ input ทีละตัวแบบนี้อาจไม่สะดวกนัก ซึ่งหากมี checkbox จานวนมาก สามารถเปลี่ยนไปใช้ วิธีส่งข้อมูลแบบอาร์เรย์แทนก็ได้ ซึ่งจะกล่าวถึงในลาดับต่อไป ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 198.
    บทที่ 10 การจัดการข้อมูลจากฟอร์ม183 การอ่านข้อมูลจาก input ชนิด Select การอ่านข้อมูลจาก input ชนิด Select หากไม่ได้กาหนดให้เลือกได้หลายค่า จะทาให้เลือกได้ เพียงรายการเดียว ซึ่งกรณีนี้การอ่านข้อมูลจะคล้ายกับ input ประเภทข้อความ โดยค่าที่กาหนดให้แก่ แอตทริบิวต์ "value" ของแท็ก "Option" ที่ถูกเลือก ตัวอย่างดังต่อไปนี้ ตัวอย่างที่ 10.16 การอ่านข้อมูลจาก input ชนิด Select <form action="form_action.php" method="POST"> <select name = "color"> <option value="red" /> แดง </option> <option value="green" /> เขียว </option> <option value="blue" /> น้าเงิน </option> </select> </form> ตัวอย่างที่ 10.17 ตัวอย่างการอ่านค่าข้อมูล <?php $color = $_POST ['color']; ?> จากตัวอย่าง หากเลือกรายการ "น้าเงิน" ตัวแปร $color จะมีค่าเป็น "blue" แต่สาหรับกรณีที่ กาหนดแอตทริบิวต์เป็นแบบ multiple ด้วย จะทาให้สามารถเลือกได้มากกว่า 1 รายการ ดังนั้นจะต้อง กาหนดแอตทริบิวต์ "name" ให้เป็นแบบอาร์เรย์ การส่งข้อมูลแบบอาร์เรย์ ในกรณีที่ฟอร์มจะต้องมี input ชนิดเดียวกันอยู่เป็นจานวนมาก เช่น มี Checkbox จานวน 10 รายการ เป็นต้น ซึ่งหากจะต้องเขียนโปรแกรมเพื่ออ่านข้อมูลจาก input เหล่านั้นทีละรายการ คงจะไม่ สะดวกนัก ดังนั้นเพื่อเป็นการแก้ปัญ หานี้ จะเปลี่ยนมาใช้การส่งและการรับข้อมูลแบบอาร์เรย์แทน โดยมี วิธีการดังต่อไปนี้ การเตรียมการทางด้านฟอร์ม ทางด้านฟอร์ม ต้องกาหนดแอตทริบิวต์ "name" ของ input ชนิดเดียวกัน และอยู่ในกลุ่ม เดียวกันให้เป็นชื่อเดียวกัน และลงท้ายชื่อนั้นด้วยเครื่องหมาย [ ] เพื่อทาให้อยู่ในรูปแบบของอาร์เรย์นั่ง เอง ซึ่งวิธีการนี้สามารถนาไปใช้ได้กับ input ทุกประเภท ตัวอย่างที่ 10.18 กาหนดแอตทริบิวต์ "name" ของ input ชนิดเดียวกัน <form action="form_action.php" method="POST"> <input type="text" name="mytext [ ]" /> <br/> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 199.
    184 บทที่ 10การจัดการข้อมูลจากฟอร์ม <input type="text" name="mytext [ ]" /> <br/> <input type="text" name="mytext [ ]" /> <br/> <input type="text" name="mytext [ ]" /> <br/> </form> การจัดการทางด้านเซิร์ฟเวอร์ ด้านเซิร์ฟเวอร์จะอ่านข้อมูลที่ถูกส่งเข้ามา โดยใช้รูปแบบดังนี้ $_POST [ ชื่อ input ] [ เลขลาดับอาร์เรย์ ]; โดยที่ "เลขลาดับอาร์เรย์" คือ ลาดับของข้อมูลที่ถูกส่งมายังเซิร์ฟเวอร์ เช่น ถ้ามี input ชนิด Text จานวน 10 รายการๆ แรกจะมีลาดับเป็น 0 ต่อไปเป็น 1, 2, 3, ... ตามลาดับ ตัวอย่างดังนี้ ตัวอย่างที่ 10.19 การอ่านค่าจาก input ชนิดเดียวกันในรูปแบบอาร์เรย์ <?php $text1 = $_POST ['mytext'] [0]; $text2 = $_POST ['mytext'] [1]; $text3 = $_POST ['mytext'] [2]; ?> ตัวอย่างที่ 10.20 การอ่านค่าจาก input ชนิดเดียวกันในรูปแบบอาร์เรย์ โดยใช้คาสั่งทาซ้า for หรือ foreach อ่านข้อมูลได้ ดังนี้ <?php $count = count ($_POST ['mytext']); // ใช้สาหรับนับจานวนสมาชิกในอาร์เรย์ mytext for ($loop = 0; $loop < $count; $loop++) { echo $_POST ['mytext'] [$loop] . "<br />"; } // หรือใช้ foreach ดังนี้ foreach ($_POST ['mytext'] as $value) { echo $value . "<br/>"; } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 200.
    บทที่ 11 คุกกี้ เซสชั่นและการเชื่อมโยงระหว่างเพจ การเชื่อมต่อระหว่างบราวเซอร์และเซิร์ฟเวอร์นั้น จะเกิดขึ้นเมื่อบราวเซอร์ส่ง Request ออกไป และเมื่อเซิร์ฟเวอร์ส่งข้อมูลผลลัพธ์กลับมาครบทั้งหมดแล้ว การเชื่อมต่อก็เป็นอันสิ้นสุดลง ซึ่งก็จะส่งผลให้ ข้อมูลต่างๆ ที่ถูกสร้างขึ้นภายในเพจที่เรียกใช้ในขณะนั้นถูกทาลายลงไปด้วย แต่ถ้าข้อมูลที่ถูกสร้างขึ้นใน เพจนี้เรามีความจาเป็นต้องนาไปใช้ในเพจอื่นๆ ด้วย ทาอย่างไรจึงจะเก็บรักษาข้อมูลนั้นเอาไว้ได้ ดังนั้นใน บทนี้จะมาศึกษาถึงวิธีการที่จะจัดเก็บข้อมูลเพื่อให้สามารถนาไปใช้งานระหว่างเพจได้ ที่จะกล่าวถึงในที่นี้ คือ Cookie, Session, Hidden และ Query String เฮดเดอร์ (Header) เฮดเดอร์ เป็นข้อมูลบางอย่างที่ใช้ในการสื่อสารกันระหว่างเซิร์ฟเวอร์ และบราวเซอร์ เฮดเดอร์นี้อาจ เป็นข้อมูลที่ส่งจากเซิร์ฟเวอร์ไปยังบราวเซอร์ หรือส่งจากบราวเซอร์ไปยังเซิร์ฟเวอร์ก็ได้ โดยวัตถุประสงค์ของ การส่งเฮดเดอร์นั้นมีหลายลักษณะ การกาหนดเฮดเดอร์จะใช้ฟังก์ชัน header ( ) ซึ่งมีรูปแบบดังนี้ รูปแบบ void header ( string $string [, bool $replace = true [, int $http_response_code ]] ) เมื่อ $string หมายถึง ชื่อ เฮดเดอร์ มี ห ลายลั ก ษณะขึ้ น อยู่กั บ ว่ าจะส่ งข้ อ มู ล อะไรไปยั ง บราวเซอร์ $replace หมายถึง การแทนที่ ค่าโดยปริยายคือ true $http_response_code หมายถึง ลักษณะการตอบสนอง จะต้องกาหนดให้อยู่ในสตริง เดียวกันกับชื่อเฮดเดอร์ ตัวอย่างที่ 11.1 การย้ายหน้าเว็บเพจ (Webpage Redirect) ไปยัง URL อื่น ๆ <?php header ('Location: http://www.freebsd.sru.ac.th/'); ?> ตัวอย่างที่ 11.2 การย้ายหน้าเว็บเพจแบบ refresh (หน่วงเวลาก่อนเปลี่ยนหน้าเว็บเพจ มีหน่วยเป็นวินาที) <?php header ('Refresh: 10; url=http:// www.freebsd.sru.ac.th/'); ?>
  • 201.
    186 บทที่ 11คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ ตัวอย่างที่ 11.3 การกาหนดภาษาที่ใช้ในหน้าเว็บ <?php header ('Content-language: en'); ?> ตัวอย่างที่ 11.4 header สาหรับการสร้าง file download <?php header ('Content-Type: application/octet-stream'); header ('Content-Disposition: attachment; filename="example.zip"'); header ('Content-Transfer-Encoding: binary'); ?> ตัวอย่างที่ 11.5 การสร้าง webpage โดยไม่ให้มีการเขียน cache <?php header ('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); ?> ตัวอย่างที่ 11.6 การกาหนดประเภทของ content เว็บ <?php header ('Content-Type: text/html; charset=iso-8859-1'); header ('Content-Type: text/html; charset=utf-8'); header ('Content-Type: text/plain'); // plain text file header ('Content-Type: image/jpeg'); // JPG picture header ('Content-Type: application/zip'); // ZIP file header ('Content-Type: application/pdf'); // PDF file header ('Content-Type: audio/mpeg'); // Audio MPEG (MP3,...) file ?> การส่งข้อมูลระหว่างเพจแบบ Query String Query String คือ รูปแบบการส่งข้อมูลจากเพจหนึ่งไปยังอีกเพจหนึ่ง โดยแนบข้อมูลต่อท้าย URL มีตัวอย่างดังต่อไปนี้ ตัวอย่างที่ 11.7 การส่งข้อมูลระหว่างเพจแบบ Query String http://localhost/login.php?username=admin&password=123 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 202.
    บทที่ 11 คุกกี้เซสชั่น และการเชื่อมโยงระหว่างเพจ 187 จากตัวอย่าง มีความหมายดังนี้ ? หมายถึง ใช้คั่น URL กับข้อมูลที่จะแนบไป & หมายถึง ใช้คั่นตัวแปรแต่ละตัว = หมายถึง ใช้คั่นระหว่างตัวแปรและค่าของตัวแปร เช่น password=123 + หมายถึง ใช้แทนช่องว่าง 1 ช่องของชุด URL เช่น keyword=parinya+noidonprai % หมายถึง ใช้แทนอักขระพิเศษที่ไม่ใช่ตัวอักษรหรือตัวเลข โดยจะใช้เครื่องหมาย % นาหน้า เลขฐาน 16 ที่จะใช้แทนอักขระตัวนั้นๆ เช่น %28 ใช้แทนเครื่องหมายวงเล็บเปิด เป็นต้น สาหรับการอ่านข้อมูลที่เพจปลายทางที่รับข้อมูล ทาได้หลายลักษะ ดังนี้  ใช้ตัวแปร $_GET เหมือนกับการอ่านข้อมูลที่ส่งจากฟอร์มด้วยเมธอด GET ตามปกติ เช่น $x = $_GET ['x'];  ถ้าต้องการอ่าน Query String ทั้งหมดออกมาจาก URL เช่น อาจเพื่อส่งต่อไปยังเพจอื่นๆ ก็ สามารถอ่านจากตัวแปร $_SERVER ['Query_STRING'] ตัวอย่างที่ 11.8 ต้องการอ่าน Query String ทั้งหมดออกมาจาก URL $qrystr = $_SERVER ['Query_STRING']; // $qrystr = "x=123&y=abc" $goto = "nextpage.php" . "?" . $qrystr; header ("Location: $goto");  ใช้ฟังก์ชัน parse_str ( ) ซึ่งจะได้ผลลัพธ์เป็นตัวแปรพารามิเตอร์ และค่าของตัวแปรนั้น ดังนี้ ตัวอย่างที่ 11.9 การใช้ฟังก์ชัน parse_str ( ) $qrystr = $_SERVER ['Query_STRING']; parse_str ($qrystr); // จะได้ตัวแปรดังนี้ คือ $x = 123 และ $y = "abc" การจัดเก็บข้อมูลแบบคุกกี้ คุกกี้ (Cookie) เป็น รูป แบบของการเก็บรักษาข้อมูลบางอย่างไว้บนเครื่องของผู้ ใช้ เพื่อจะนา ข้อมูลนี้กลับมาใช้ใหม่ภายหลังได้ โดยข้อมูลที่เก็บในแบบคุกกี้ไม่ควรเป็นข้อมูลที่ต้องเก็บเป็นความลับ เช่น รหัสผ่าน เป็นต้น เนื่องจากข้อมูลคุกกี้จะเก็บไว้ในรูปแบบของ Text File ธรรมดา ระดับความปลอดภัยจึง ค่อนข้างต่า แต่อย่างไรก็ตาม เนื่องจากผู้ใช้บางกลุ่มกลับเห็นว่า คุกกี้นั้นเป็นการล่วงละเมิดสิทธิของผู้ใช้ ดังนั้นโปรแกรมเว็บบราวเซอร์จึงมีตัวเลือกสาหรับให้ผู้ใช้ สามารถปฏิเสธการบันทึกคุกกี้จากเว็บไซต์ที่ไม่ ต้องการได้ ด้วยเหตุนี้การใช้คุกกี้จึงอาจไม่บรรลุผลเสมอไป นอกจากการปฏิเสธคุกกี้จากผู้ใช้แล้ว ยังมีสาเหตุอื่นๆ ที่อาจทาให้ไม่สามารถใช้คุกกี้ได้ เช่น การ หมดอายุของคุกกี้ หรือไฟล์ที่จัดเก็บคุกกี้อาจเสียหาย ใช้การไม่ได้ หรือถูกทาลาย เช่น การติดตั้งระบบใหม่ เป็นต้น ดังนั้นต้องจัดเตรียมทางเลือกไว้เผื่อกรณีนี้ด้วย ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 203.
    188 บทที่ 11คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ การสร้างคุกกี้ ฟังก์ชันหลักในการใช้งานเกี่ยวกับคุกกี้ก็ คือ ฟังก์ชัน setcokkie ( ) ซึ่งมีรูปแบบดังนี้ รูปแบบ bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain]]]]) เมื่อ $name หมายถึง ชื่อคุกกี้ที่ต้องการสร้าง $value หมายถึง ค่าที่จะกาหนดให้กับคุกกี้ $expire หมายถึง อายุของคุกกี้ $path หมายถึง พาธบนเซิร์ฟเวอร์ที่คุกกี้สามารถใช้งานได้ $domain หมายถึง กาหนดโดเมนที่สามารถอ่านคุกกี้ได้ ตัวอย่างที่ 11.10 การใช้ฟังก์ชัน setcokkie ( ) <?php $value = 'something from somewhere'; setcookie ("TestCookie", $value); setcookie ("TestCookie", $value, time()+3600); /* หมดอายุใน 1 ชั่วโมง */ setcookie ("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1); ?> หากกาหนดชื่อคุกกี้ซ้ากับชื่อที่มีอยู่แล้ว จะเป็นการแทนที่ข้อมูลเดิม หรือเท่ากับเป็นการแก้ไขค่า ของคุกกี้นั่งเอง สาหรับรูปแบบของฟังก์ชัน setcookie ( ) นี้เป็นแบบอย่างง่ายเท่านั้น ความจริงยัง สามารถกาหนดพารามิเตอร์เพิ่มเติมได้อีกหลายตัว การอ่านข้อมูลจากคุกกี้ การอ่านคุกกี้จะใช้ตัวแปร $_COOKIE ซึ่งเป็นตัวแปรแบบอาร์เรย์ โดยระบุชื่อของคุกกี้เป็นค่าคีย์ ก็จะได้ค่า value ที่กาหนดในตอนสร้างคุกกี้ แต่อย่างไรก็ตาม หากคุกกี้นั้นไม่มีอยู่จริง หรือหมดอายุไป แล้ว การอ่านคุกกี้นั้นโดยไม่ตรวจสอบก่อนจะเกิดข้อผิดพลาดขึ้น ดังนั้ นเพื่อให้แน่ใจว่ามีคุกกี้นั้นอยู่จริง หรือไม่ ควรตรวจสอบด้วยฟังก์ชัน isset ( ) ก่อนอ่านเสมอ ตัวอย่างดังนี้ ตัวอย่างที่ 11.11 การอ่านข้อมูลจากคุกกี้ if (isset ($_COOKIE ['book'])) { $b = $_COOKIE ['book']; } การกาหนดอายุ และลบคุกกี้ ปกติแล้วหากสร้างคุกกี้ด้วยวิธีการตามที่กล่าวมาแล้ว คือ ไม่ได้กาหนดอายุ จะทาให้คุกกี้หมดอายุ ทันทีที่ปิดบราวเซอร์ แต่โดยทั่วไปมักจะเก็บข้อมูลคุกกี้นี้ไว้ใช้ในคราวต่อๆ ไปด้วย ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 204.
    บทที่ 11 คุกกี้เซสชั่น และการเชื่อมโยงระหว่างเพจ 189 การกาหนดอายุของคุกกี้จะกาหนดเป็นเวลาในหน่วยวินาทีโดยเทียบกับเวลาปัจจุบัน โดยทั่วไปแล้ว มักอ้างอิงเวลาปัจจุบันด้วยฟังก์ชัน time ( ) ซึ่งฟังก์ชันนี้จะคืนค่า timestamp ของเวลาปัจจุบัน ดังนั้น สามารถนาอายุของคุกกี้มาบวกเพิ่มเข้าไปได้เลย เช่น time ( ) + 30 หมายความว่า กาหนดให้คุกกี้หมดอายุ ภายใน 30 วินาที หลังจากนี้ หรือหากต้องการกาหนดเวลาในหน่วยที่ยาวนานกว่านี้ต้องนามาแปลงเป็นวินาที เช่น หากต้องการให้คุกกี้มีอายุ 1 วัน ต้องเขียนเป็น time ( ) + (24 * 60 * 60) เป็นต้น มีตัวอย่างดังนี้ ตัวอย่างที่ 11.12 การกาหนดอายุของคุกกี้ <?php $expire = time ( ) + (24 * 60 * 60); setcookie ("mycookie", "Parinya Noidonprai", $expire); ?> หากต้องการลบคุกกี้ที่ชื่อ "mycookie" สามารถประยุกต์ตามตัวอย่าง ดังนี้ ตัวอย่างที่ 11.13 การลบคุกกี้ <?php $expire = time ( ) - 3600; // ลบด้วยเลขอะไรก็ได้เพื่อให้เป็นเวลาที่ผ่านมาแล้ว setcookie ("mycookie", "", $expire); ?> การจัดเก็บข้อมูลแบบเซสชัน เซสชัน (Session) เป็นการจัดเก็บข้อมูลบางอย่างไว้ชั่วคราวที่เครื่องเซิร์ฟเวอร์ เพื่อให้สามารถนา ข้อมูลนั้นมาใช้งานใหม่หลังจากที่เพจนั้นสิ้นสุดการทางานไปแล้ว และยังสามารถนาไปใช้งานที่เพจอื่นๆ ได้ สาหรับลักษณะทั่วๆ ไปของเซสชันมีดังนี้  เมื่อผู้ใช้เชื่อมต่อไปยังเว็บไซต์แต่ละแห่ง เซิร์ฟเวอร์จะสร้างรหัสสาหรับการอ้างอิงถึงผู้ใช้คนนั้น โดยรหัสนี้เรียกว่า Session ID หรือ SID ซึ่งประกอบด้วยตัวเลข 0 - 9 และตัวอักษร a - z จานวน 32 ตัว เช่น d77a4f704b938b240e4228a7e0847895 ทั้งนี้ค่า SID ของผู้ใช้แต่ละคนที่เชื่อมต่อกับเว็บไซต์แห่ง นั้นในช่วงเวลาเดียวกันจะต้องไม่ซ้ากันเลย  ค่า SID นี้จะถูกนาไปใช้ในการอ้างอิงถึงผู้ใช้คนนั้นตลอดการเชื่อมต่อ และเมื่อใดก็ตามที่ผู้ใช้ เลิกการเชื่อมต่อ เช่น การปิดบราวเซอร์ จะส่งผลให้ค่า SID ของผู้ใช้คนนั้นถูกยกเลิกไป จนกว่าจะมีการ เชื่อมต่อไปยังเว็บไซต์แห่งนั้น ครั้งต่อไปค่า SID จึงจะถูกสร้างขึ้นมาให้ใหม่เป็นเช่นนี้ไปตลอด  เมื่อสร้างข้อมูลแบบเซสชันสาหรับผู้ใช้คนใด ข้อมูลนั้นก็จะมีผลหรือใช้งานได้เฉพาะกับผู้ใช้คนนั้น ส่วนคนอื่นๆ ไม่สามารถเรียกใช้งานได้ เนื่องจากข้อมูลเซสชันของผู้ใช้แต่ละคนจะถูกแยกออกจากกันนั่นเอง  ข้อมูลแบบเซสชันที่สร้างขึ้นจากเพจหนึ่งจะสามารถนาไปใช้งานที่เพจอื่นๆ ที่ถูกเรียกใช้โดย ผู้ใช้ที่เป็นผู้สร้างเซสชันนั้นได้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 205.
    190 บทที่ 11คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ  ข้อมูลเซสชันที่ถูกสร้างขึ้นจะสามารถใช้งานได้ชั่วระยะเวลาที่เปิดใช้บราวเซอร์อยู่ แต่ไม่เกิน 180 นาที ถ้าปิดบราวเซอร์หรือเวลาเกินกว่า 180 นาที ข้อมูลก็จะถูกยกเลิกไป หรือนอกจากนี้เราสามารถ สั่งลบข้อมูลเซสชันเมื่อไม่ต้องการใช้งานต่อไปได้  เซสชันจะมีความเกี่ยวข้องกับคุกกี้ โดยเซสชันจะใช้การเก็บข้อมูลรหัสแบบคุกกี้ไว้ที่เครื่องของ ผู้ใช้แต่ละคน และเมื่อเชื่อมต่อไปยังเซิร์ฟเวอร์ ข้อมูลนี้จะถูกนาไปใช้ในการตรวจสอบว่าเป็นผู้ใช้คนใด ดังนั้นหากเครื่องของผู้ใช้คนใดปฏิเสธการใช้คุกกี้ก็จะส่งผลถึงเซสชันด้วย แต่ปัจจุบันนี้มีการใช้เทคนิค URL Rewriting หรือนารหัสเซสชันไปต่อท้าย URL ในแบบ Query String ในชื่อตัวแปร PHPSESSID  แม้เซสชันจะเป็น การพักเก็บ ข้อมูลไว้ชั่ว คราวคล้ ายกับคุกกี้ แต่ทั้งคุกกี้และเซสชันก็มีแนว ทางการนาไปใช้งานที่แตกต่างกัน การเริ่มการทางานของเซสชัน ก่ อ นที่ จ ะเริ่ ม ใช้ ง านเซสชั น ต้ อ งเริ่ ม ด้ ว ยการสั่ ง ให้ เ ซสชั น เริ่ ม ท างานเสี ย ก่ อ นด้ ว ยฟั ง ก์ ชั น session_start ( ) โดยต้องกาหนดไว้ที่ส่วนบนสุดของเพจ ตัวอย่างการใช้งานดังนี้ ตัวอย่างที่ 11.14 การเริ่มการทางานของเซสชัน <?php session_start ( ); ?> หมายเหตุ ข้อควรระวัง คือ เนื่องจากเซสชันต้องอาศัยคุกกี้เป็นกลไกร่วมด้วย และคุกกี้จะอาศัยการส่ ง ข้ อมู ล แบบเฮดเดอร์ ท าให้ เซสชั นมี ความเกี่ ยวพั นกั บเฮดเดอร์ ด้ ว ย ดั งนั้ นการใช้ ฟั งก์ ชั น session_start ( ) ต้องทาก่อนการส่งข้อมูลใดๆ ไปที่บราวเซอร์เช่นเดียวกับเฮดเดอร์และคุกกี้ การเก็บข้อมูลด้วยตัวแปร $_SESSION ตัวแปร $_SESSION เป็ นตัว แปรอาร์เรย์สาหรับจัดเก็บข้อมูล แบบเซสชัน ซึ่งตัวแปรนี้จะมี ลักษณะเป็น Key/Value โดยที่ Key คือ ชื่อของเซสชัน (คล้ายกับชื่อของคุกกี้) และ Value ก็คือค่าของ เซสชัน ทั้งนี้จะสร้างตัวแปร $_SESSION จานวนกี่ตัวก็ได้ ตัวอย่างดังนี้ ตัวอย่างที่ 11.15 การเก็บข้อมูลด้วยตัวแปร $_SESSION <?php session_start ( ); $_SESSION ['user'] = "Parinya"; $_SESSION ['pass'] = $_POST ['pass']; ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 206.
    บทที่ 11 คุกกี้เซสชั่น และการเชื่อมโยงระหว่างเพจ 191 และเมื่อต้องการนาค่าเซสชันใดไปใช้งานก็ระบุผ่านตัวแปร $_SESSION พร้อมระบุชื่อเซสชันที่ ต้องการแต่ต้องทาหลังจากที่ได้สั่งเซสชันเริ่มทางานด้วย session_start ( ) แล้ว แต่อย่างไรก็ตาม เนื่องจากเซสชันสามารถถูกลบ หรือหมดอายุได้ ซึ่งก่อนอ่านต้องแน่ใจว่าเซสชันนั้นมีอยู่จริง ดังนั้นควร ตรวจสอบด้วยฟังก์ชัน isset ( ) ก่อนอ่าน ตัวอย่างดังนี้ ตัวอย่างที่ 11.16 การใช้งานตัวแปร $_SESSION <?php session_start ( ); if (isset ($_SESSION ['login'])) $login = $_SESSION ['login']; ?> การลบข้อมูลเซสชัน ปกติแล้วเมื่อบราวเซอร์ที่เปิดเอาไว้ถูกปิดทั้งหมด หรือระยะเวลาที่สร้างเซสชันเอาไว้นานเกินกว่า 180 นาที (3 ชั่วโมง) ค่าตัวแปรเซสชันที่ถูกสร้างขึ้นก็จะยกเลิกไปเองโดยอัตโนมัติอยู่แล้ว แต่บางครั้งก็ ต้องการยกเลิกข้อมูลเซสชันที่เวลาใดเวลาหนึ่งขณะที่ยังใช้งานเว็บไซต์อยู่ เช่น กรณีการออกจากระบบ (Logout) เป็นต้น การลบข้อมูลเซสชันสามารถใช้ฟังก์ชันดังนี้  ฟังก์ชัน unset ( ) เป็นฟังก์ชันที่ใช้ในการยกเลิกตัวแปรทั่วๆ ไปของ PHP ซึ่งสามารถนามาใช้กับตัวแปรเซสชันได้ เช่นกัน มีรูปแบบดังนี้ void unset ( mixed $var [, mixed $... ] ) เมื่อ $var หมายถึง ชื่อของตัวแปรที่จะลบหรือยกเลิก ตัวอย่างที่ 11.17 การใช้ฟังก์ชัน unset ( ) <?php session_start ( ); $_SESSION ['name'] = "Mr.Parinya"; echo $_SESSION ['name'] . "<br/>"; unset ($_SESSION ['name']); echo $_SESSION ['name'] . "<br/>"; // จะไม่พบข้อมูลใดๆ เนื่องจากได้ลบแล้ว ?>  ฟังก์ชัน session_destroy ( ) เป็นฟังก์ชันที่ใช้การลบข้อมูลหรือยกเลิกตัวแปรเซสชันทั้งหมดที่ได้สร้างขึ้นให้กับผู้ใช้คนนั้น อย่าลืมว่าฟังก์ชันนี้มีผลกับตัวแปรเซสชันทุกตัว มีรูปแบบดังนี้ bool session_destroy ( void ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 207.
    192 บทที่ 11คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ หมายเหตุ ฟังก์ชัน session_destroy ( ) ใช้สาหรับลบหรือยกเลิกตัวแปรเซสชันทั้งหมด หากต้องการลบตัว แปรเซสชันตัวใดตัวหนึ่ง ขอแนะนาให้เลือกใช้ฟังก์ชัน unset ( ) ฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับเซสชัน  ฟังก์ชัน session_id ( ) เป็นฟังก์ชันที่ใช้สาหรับคืนค่า session id ( SID ) มีรูปแบบดังนี้ string session_id ([ string $id ] ) ตัวอย่างที่ 11.18 การใช้ฟังก์ชัน session_id ( ) <?php session_start ( ); echo session_id ( ); ?>  ฟังก์ชัน session_regenerate_id ( ) เป็นฟังก์ชันที่ใช้สาหรับการสร้าง session id ( SID ) ขึ้นมาใหม่ มีรูปแบบดังนี้ bool session_regenerate_id ([ bool $delete_old_session = false ] ) ตัวอย่างที่ 11.19 การใช้ฟังก์ชัน session_regenerate_id ( ) <?php session_start ( ); echo session_id ( ); session_regenerate_id ( ); echo session_id ( ); ?>  ฟังก์ชัน session_encode ( ) เป็นฟังก์ชันที่ใช้สาหรับเข้ารหัสข้อมูล session ทั้งหมด โดยจะคืนค่าข้อมูลที่เข้ารหัสไว้แล้ว รูปแบบ คือ ชื่อเซสซัน ชนิดข้อมูล ค่าข้อมูล ชื่อเซสซัน.. มีรูปแบบดังนี้ ่ string session_encode ( void ) ตัวอย่างที่ 11.20 การใช้ฟังก์ชัน session_encode ( ) <?php session_start ( ); $_SESSION ["user"] = "bamboo"; $_SESSION ["pass"] = "1234"; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 208.
    บทที่ 11 คุกกี้เซสชั่น และการเชื่อมโยงระหว่างเพจ 193 echo session_encode ( ); ?>  ฟังก์ชัน session_decode ( ) เป็นฟังก์ชันที่ใช้สาหรับถอดรหัสข้อมูล ที่ถูกเข้ารหัสโดย session_encode ( ); มีรูปแบบดังนี้ bool session_decode ( string $data ) ตัวอย่างที่ 11.21 การใช้ฟังก์ชัน session_decode ( ) <?php session_start ( ); $_SESSION["user"] = "bamboo"; $_SESSION["pass"] = "1234"; $secret = session_encode ( ); session_decode ( $secret ); ?>  ฟังก์ชัน session_register ( ) เป็นฟังก์ชันที่ใช้สาหรับใช้ลงทะเบียน ตัวแปร ให้เป็นตัวแปร session มีรูปแบบดังนี้ bool session_register ( mixed $name [, mixed $... ] ) ตัวอย่างที่ 11.22 การใช้ฟังก์ชัน session_register ( ) <?php session_start ( ); $user = "bamboo"; session_register ( "user" ); echo $_SESSION["user"]; ?>  ฟังก์ชัน session_unregister ( ) เป็นฟังก์ชันที่ใช้สาหรับยกเลิกการลงทะเบียนตัวแปร session มีรูปแบบดังนี้ bool session_register ( mixed $name [, mixed $... ] ) ตัวอย่างที่ 11.23 การใช้ฟังก์ชัน session_unregister ( ) <?php $user = "bamboo"; session_register ( "user" ); echo $_SESSION ["user"]; session_unregister ("user"); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 209.
    194 บทที่ 11คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ echo $user; ?>  ฟังก์ชัน session_unset ( ) เป็นฟังก์ชันที่ใช้สาหรับใช้ยกเลิกตัวแปร session ทั้งหมด คือ ยกเลิกตัวแปร ที่ได้ลงทะเบียน ไว้มีรูปแบบดังนี้ void session_unset ( void ) ตัวอย่างที่ 11.24 การใช้ฟังก์ชัน session_unset ( ) <?php session_start ( ); $user = "bamboo"; session_register ( "user" ); session_unset ( ); ?>  ฟังก์ชัน session_is_registered ( ) เป็นฟังก์ชันที่ใช้สาหรับใช้ตรวจสอบว่าตัวแปรนั้นได้ลงทะเบียน seesion หรือยังมีรูปแบบดังนี้ bool session_is_registered ( string $name ) ตัวอย่างที่ 11.25 การใช้งานฟังก์ชัน session_is_registered ( ) <?php session_start ( ); $user = "bamboo"; if ( ! session_is_registered ( $user ) ) { session_register( $user ); } ?> ขั้นตอนการประยุกต์ใช้เซสชั่น เพื่อเป็นแนวทางในการพัฒนาระบบ Login 1. สร้างแบบฟอร์มสาหรับการ Login ประกอบด้วย User Name และ Password ดังภาพ ภาพที่ 11.1 สร้างฟอร์มสาหรับการ Login กรณีศึกษาและประยุกต์ใช้งานเซสชั่น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 210.
    บทที่ 11 คุกกี้เซสชั่น และการเชื่อมโยงระหว่างเพจ 195 ตัวอย่างที่ 11.26 หน้าฟอร์ม กาหนดให้ใช้ชื่อ index.php และเขียนโค้ดคาสั่ง ดังนี้ <?php session_start ( ); session_destroy ( ); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ตัวอย่างหน้า Login</title> </head> <body> <form id="form1" name="form1" method="post" action=" check_login.php"> <table width="300" border="1" cellspacing="0" cellpadding="0"> <tr> <td width="117">User:</td> <td width="283"><label> <input type="text" name="user" id="user" /> </label></td> </tr> <tr> <td>Password:</td> <td><label> <input type="password" name="pass" id="pass" /> </label></td> </tr> <tr> <td colspan="2" align="center"><label> <input type="submit" name="login" id="login" value="Login" /> </label></td> </tr> </table> </form> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 211.
    196 บทที่ 11คุกกี้ เซสชั่น และการเชื่อมโยงระหว่างเพจ </body> </html> 2. สร้างไฟล์เพื่อตรวจสอบข้อมูลที่ผู้ใช้ Login เข้ามา กาหนดให้ใช้ชื่อ check_login.php และเขียนโค้ด คาสั่ง ดังนี้ ตัวอย่างที่ 11.27 ไฟล์เพื่อตรวจสอบข้อมูลที่ผู้ใช้ Login เข้ามา <?php session_start ( ); $user_check="testuser"; // กาหนดชื่อผู้ใช้เป็น testuser $pass_check="testpass";// กาหนดรหัสผ่านเป็น testpass if (($_POST['user']==$user_check) && ($_POST['pass']==$pass_check)) { $user = $_POST['user']; // $_POST['user'] คือ ตัวแปรที่รับมาจาก input form $pass = $_POST['pass']; // $_POST['pass'] คือ ตัวแปรที่รับมาจาก input form $fullname = "Mr.Parinya Noidonprai"; session_register ("fullname"); // ลงทะเบียน ตัวแปร fullname ให้เป็นตัวแปร session session_register ("user"); // ลงทะเบียน ตัวแปร user ให้เป็นตัวแปร session session_register ("pass"); // ลงทะเบียน ตัวแปร pass ให้เป็นตัวแปร session header ("location: member.php"); // ส่งต่อไปยังหน้า member.php } else header ("location: index.php"); // ส่งกลับไปยังหน้า index.php ?> 3. กาหนดหน้า เว็บ เพจที่จะประมวลผลต่อ เมื่อตรวจสอบชื่อผู้ใช้และรหัส ผ่ านถูกต้องให้ ทางานต่อที่ เว็บเพจ member.php มีโค้ดคาสั่ง member.php ดังนี้ ตัวอย่างที่ 11.28 กาหนดหน้าเว็บเพจที่จะประมวลผลต่อ เมื่อตรวจสอบชื่อผู้ใช้และรหัสผ่านถูกต้อง <?php session_start ( ); if (isset ($_SESSION[fullname])) // ตรวจสอบตัวแปร ได้ถูกสร้างแล้วหรือไม่ echo "Congratulation, You are login with: $_SESSION[fullname]"; else header ("location: index.php"); // ในกรณีไม่พบตัวแปรให้กลับไป login ใหม่ ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 212.
    บทที่ 12 การเขียนโปรแกรมแบบ OOP ในบทนี้จะกล่าวถึงการเขียนโปรแกรมแบบOOP (Object Oriented Programming) ซึ่งแม้ว่า ในความเป็นจริงแล้ว ไม่จาเป็นต้องมีความรู้เกี่ยวกับ OOP เลย ก็สามารถสร้างเว็บด้วย PHP ได้ แต่ว่าใน ปัจจุบันมักจะมีผู้สร้างส่วนที่มาขยายขีดความสามารถของ PHP (หรือ Extension) ใหม่ๆ เพิ่มขึ้นมา เรื่อยๆ ซึ่ง Extension เหล่านี้ มักถูกสร้างในรูปแบบของคลาส ดังนั้นจึงควรมีพื้นฐานความรู้เกี่ยวกับ OOP เพื่อจะนาไปใช้กับการเขียนโปรแกรมในบางเรื่องได้ คลาส (Class) โดยปกติแล้ว PHP จะเป็นภาษาแบบ Procedural โดยไม่ได้อยู่ภายใต้ข้อกาหนด หรือโครงสร้าง แบบ OOP จะเห็นได้ว่า PHP นั้นประกอบด้วยฟังก์ชันต่างๆ เป็นจานวนมาก และก็สามารถใช้ ฟังก์ชัน เหล่านี้ได้โดยตรง และตั้งแต่ PHP4 เป็นต้นมา PHP ได้รองรับการเขียนโปรแกรมทางด้าน OOP เพิ่มเข้า มา โดยรูปแบบของ OOP นั้นจะช่วยให้สามารถรวบรวมการกระทาที่เกี่ยวข้องกับเรื่องใดเรื่องหนึ่งให้มา รวมเป็นหน่วยเดียวกัน หรือที่เรียกว่า "ออบเจ็กต์" นั่นเอง โดยภายในตัวออบเจ็กต์นั้นก็จะมีองค์ประกอบ หลายอย่าง เช่น เมธอด (Method) ฟิลด์ (Field) พร็อปเพอร์ตี้ (Property) เป็นต้น ซึ่งมักเรียกสิ่งที่อยู่ใน ออบเจ็กต์ว่าเป็น "สมาชิกของออบเจ็กต์" และการเรียกใช้งานสมาชิกเหล่านี้ก็จะต้องทาผ่านออบเจ็กต์ เท่านั้น ดังนั้น OOP จึงช่วยให้สร้างขึ้นมานี้ จะเรียกว่า "คลาส" ดังนั้นจากที่ได้กล่าวมาทั้งหมดก็พอสรุปได้ ว่า คลาส คือ โครงร่างที่ใช้ในการกาหนดองค์ประกอบ และวิธีการทางานของออบเจ็กต์ ก่อนที่จะเรียนรู้เกี่ยวกับออบเจ็กต์ และองค์ประกอบภายในออบเจ็กต์ ต้องเริ่มศึกษาจากรูปแบบ ของคลาสไปก่อน โดยลักษณะทั่วไปของคลาสจะเป็นดังนี้ รูปแบบ Class ชื่อคลาส { . . } โดยทั่วไปนิยมตั้งชื่อคลาสให้ขึ้นต้นด้วยตัวพิมพ์ใหญ่ (แต่ไม่จาเป็น) ส่วนข้อกาหนดอื่นๆ ในการตั้ง ชื่อจะคล้ายกับการตั้งชื่อตัวแปร เช่น
  • 213.
    198 บทที่ 12การเขียนโปรแกรมแบบ OOP Class MyClass { . . } การนาคลาสมาใช้ในสคริปต์ PHP เนื่องจาก PHP ไม่ได้มีโครงสร้างแบบ OOP อย่างแท้จริง การนาคลาสที่สร้างขึ้นมาใช้ก็จะใช้ รูปแบบเดียวกับการ include file นั่นเอง โดยมีแนวทางดังนี้  สร้างเอกสารเว็บเพจ ชนิด PHP  เขียนคลาสที่จะสร้างลงไปเหมือนการเขียนสคริปต์ PHP ปกติ เช่น <?php Class PHPMySQL { . . } ?>  การบั น ทึ ก ให้ ก าหนดชื่ อ เหมื อ นกั บ ไฟล์ เ ว็ บ เพจทั่ ว ไป แต่ ใ ห้ มี ส่ ว นขยายเป็ น .php เช่ น MyClass.php หรือบางคนอาจต้องการให้ต่างจากไฟล์เว็บเพจทั่วไป อาจกาหนดชื่อในรูปแบบ ชื่อไฟล์ . class.php เช่น สมมติคลาสชื่อ "PHPMySQL" ก็บันทึกไฟล์นี้ด้วยชื่อ "PHPMySQL.class.php" เป็นต้น เมื่อจะนาคลาสนี้มาใช้ในเพจใด ก็ใช้ฟังก์ชัน include ( ) หรือ require ( ) เพื่อนาคลาสนั้นเข้ามา  <?php include ("PHPMySQL.class.php"); . . ?> ออบเจ็กต์ และอินสแตนซ์ คลาสที่สร้างขึ้นเป็นเพียงข้อกาหนดหรือวิธีในการประมวลผลข้อมูลเท่านั้น แต่ยังไม่สามารถนา คลาสไปใช้งานได้ จนกว่าคลาสนั้นจะถูกสร้างเป็นออบเจ็กต์เสียก่อน ดังนั้นคลาสกับออบเจ็กต์ก็คือ สิ่ง เดียวกันเพียงแต่อยู่คนละสถานภาพ ด้วยเหตุนี้จึงเรียกออบเจ็กต์ว่าเป็นอินสแตนซ์ (Instance) ของคลาส หรือสิ่งที่ใช้แทนคลาสนั่นเอง การสร้างออบเจ็กต์มีรูปแบบดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 214.
    บทที่ 12 การเขียนโปรแกรมแบบOOP 199 รูปแบบ $ชื่อของอินสแตนซ์ = new ชื่อคลาส ( ); ตัวอย่างที่ 12.1 การสร้างออบเจ็กต์ $mycls = new MyClass ( ); ขั้นตอนในการสร้างออบเจ็กต์ของคลาสนี้เรียกว่า Instantiate ซึ่งหลังจากออบเจ็กต์ถูกสร้างขึ้น แล้วก็จะมีความสามารถตามที่ระบุไว้ในคลาสทุกประการโดยคลาสแต่ละคลาสสามารถนาไปสร้างเป็น ออบเจ็กต์ได้มากกว่า 1 ออบเจ็กต์ มีตัวอย่างดังนี้ ตัวอย่างที่ 12.2 การสร้างเป็นออบเจ็กต์ได้มากกว่า 1 ออบเจ็กต์ <?php $myclass1 = new MyClass ( ); $myclass2 = new MyClass ( ); ?> เมธอด (Method) เมธอดเป็นองค์ประกอบของคลาสสาหรับการกระทาอย่างใดอย่างหนึ่ง ซึ่งโดยทั่วไปแล้วคลาส จะต้องประกอบด้วยเมธอดอย่างน้อย 1 เมธอดเสมอ รายละเอียดเกี่ยวเมธอดมีดังนี้ การสร้างเมธอด ความจริ งแล้ ว เมธอดก็คือ ฟังก์ชัน ของคลาสนั่ นเอง ดังนั้นรูปแบบ และวิธีการสร้างเมธอดก็ เหมือนกันกับการสร้างฟังก์ชันธรรมดานั่นเอง และภายในคลาสหนึ่งๆ จะมีกี่เมธอดก็ได้ ตัวอย่างลักษณะ ของการสร้างเมธอด ตัวอย่างดังนี้ ตัวอย่างที่ 12.3 ลักษณะของการสร้างเมธอด <?php class Circle { function area ($radius) return pi ( ) * $radius * $radius; function perimeter ($radius) return 2 * pi ( ) * $radius; } ?> การเรียกใช้เมธอด การเรียกใช้เมธอดจะใช้โอเปอเรเตอร์ -> ในการระบุเมธอดที่ต้องการเรียกใช้งาน โดยหากเป็น การเรียกใช้ภายในคลาสเดียวกัน (เรียกใช้เมธอดหนึ่งจากอีกเมธอดหนึ่ง) ก็ใช้รูปแบบดังนี้ $this -> เมธอด (อาร์กิวเมนต์) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 215.
    200 บทที่ 12การเขียนโปรแกรมแบบ OOP เช่น สมมติว่าต้องการเรียกใช้เมธอด area ( ) ภายในคลาส Circle ก็ทาดังนี้ ตัวอย่างที่ 12.4 ตัวอย่างการเรียกใช้เมธอด $a = $this -> area (10); หากเป็นการเรียกจากนอกคลาส ก็ต้องเรียกผ่านอินสแตนซ์ในรูปแบบดังนี้ $อินสแตนซ์ -> เมธอด (อาร์กิวเมนต์) เช่น สมมติว่าต้องการเรียกใช้เมธอด area ( ) ของคลาส Circle ตัวอย่างที่ 12.5 ตัวอย่างการเรียกใช้เมธอด area ( ) ของคลาส Circle <?php $cir = new Circle ( ); echo $cir -> area(10); ?> ตัวอย่าง เป็นการทดสอบการสร้าง และการใช้คลาส โดยเป็นคลาสง่ายๆ เกี่ยวกับการคานวณเลข ทั้งนี้ต้องสร้างขึ้นมา 2 เพจ โดยเพจแรกเป็นคลาส ส่วนอีกเพจสาหรับทดสอบคลาส ดังนี้ ตัวอย่างที่ 12.6 ตัวอย่าง เป็นการทดสอบการสร้าง และการใช้คลาส โดยเป็นคลาสง่ายๆ ชื่อไฟล์ calculator.class.php <?php class Calculator { function showResult ($num1, $num2, $op) { if (!is_numeric ($num1) || !is_numeric ($num2)) { echo "ตัวแปรที่รับมาไม่ใช่ตัวเลขไม่สามารถคานวณได้ <br/>"; } else if ( !in_array ($op, array ("+", "-" , "*", "/"))) { echo "เครื่องหมายดาเนินการไม่ถูกต้อง <br/>"; } else { echo "$num1 $op $num2 = "; eval ("echo $num1 $op $num2;"); // ฟังก์ชัน eval ( ) ใช้ประมวลผล คาสั่ง PHP ที่เขียนในแบบสตริง } } } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 216.
    บทที่ 12 การเขียนโปรแกรมแบบOOP 201 ชื่อไฟล์ที่จะเรียกใช้งานคลาส index.php <?php include ("calculator.class.php"); $cal = new Calculator ( ); $cal -> showResult (10, 20, " * "); ?> การกาหนดค่า Default Parameter ให้กับเมธอด เนื่องจากเมธอดนั้นก็คือฟังก์ชัน และฟังก์ชันใน PHP สามารถกาหนดค่าดีฟอลต์ให้ได้ ซึ่งสามารถ นารูปแบบตรงนี้มาใช้เพื่อเป็นทางเลือกให้ผู้ใช้สามารถที่จะกาหนดพารามิเตอร์บางตัวหรือไม่ก็ได้ ทั้งนี้ วิธีการต่างๆ ก็เหมือนกับฟังก์ชันที่ได้ศึกษามาแล้ว มีตัวอย่างดังนี้ ตัวอย่างที่ 12.7 การกาหนดค่า Default Parameter ให้กบเมธอด ั <?php class Payment { function total ($quantity, $price, $vat=7) { return $quantity * $price * (1+$vat/100); } } ?> จากคลาส Payment เมื่อเรียกใช้เมธอด total ( ) จะกาหนด %VAT หรือไม่ก็ได้ โดยหากไม่ กาหนดก็จะใช้ค่าดีฟอลต์ คือ 7% แต่หากต้องการใช้ค่าอื่นก็กาหนดลงไปโดยตรง มีตัวอย่างดังนี้ ตัวอย่างที่ 12.8 การเรียกใช้คลาส Payment <?php $p = new Payment(); $t1 = $p -> total (10, 20); //VAT 7% $t2 = $p -> total (30, 40, 10); //VAT 10% ?> โมดิฟายเออร์ (Modifier) แบบ public และ private โมดิฟายเออร์ เป็นการควบคุมการเข้าใช้งานสมาชิกของคลาส เช่น เมธอด และพร็อปเพอร์ตี้ทั้งนี้ เนื่องจากตามข้อกาหนดของ OOP นั้น สามารถที่จะเรียกใช้สมาชิกของคลาสหนึ่งจากภายนอกคลาสได้ แต่ภายในคลาสอาจมีข้อมูลบางอย่างที่มีความสาคัญ จึงจาเป็นต้องมีวิธีการที่จะจากัดขอบเขตในการเข้าใช้ งานข้อมูลเหล่านี้ โดยใช้คีย์เวิร์ดกลุ่มหนึ่งเรียกว่า โมดิฟายเออร์ สาหรับใน PHP มีโมดิฟายเออร์หลายตัว ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 217.
    202 บทที่ 12การเขียนโปรแกรมแบบ OOP แต่ตัว ที่น่ าสนใจที่จ ะพบเห็น ได้บ่ อยๆ มีเพียงไม่กี่ตัว ส าหรับในที่นี้จะกล่ าวถึงเฉพาะตัว ที่ควรรู้จักใน เบื้องต้น ดังนี้ public ใช้ public เมื่อไม่ต้องการปกป้องสิทธิการเข้าใช้สมาชิกนั้น private ใช้ private เมื่อไม่ต้องให้เข้าถึงสมาชิกนั้นจากภายนอกคลาสได้ จึงมักใช้ private กับ สมาชิกที่มีความสาคัญ และต้องการสงวนไว้ใช้เฉพาะภายในคลาสเองเท่านั้น ลักษณะการนาไปใช้กับเมธอด มีตัวอย่างดังนี้ ตัวอย่างที่ 12.9 ตัวอย่างลักษณะการนาไปใช้กับเมธอด <?php class Cylinder { private function CircleArea ($radius){ return pi ( ) * $radius * $radius; } public function volume ($radius, $height) { $base_area = $this -> circleArea ($radius); $volume = $base_area * $height; return $volume; } } ?> ตัวอย่างที่ 12.10 ลักษณะผลการเรียกใช้ใช้เมธอดแบบ private และ public <?php include ("Cylinder.class.php"); $cyl = new Cylinder ( ); echo $cyl -> circleArea (10); //ไม่สามารถใช้งานได้เพราะ circleArea( ) เป็น private method echo $cyl -> volume (10, 20); //สามารถใช้งานได้เพราะ volume ( ) เป็น public method ?> พร็อปเพอร์ตี้ (Property) และฟิลด์ (Field) พร็อปเพอร์ตี้ คือ ข้อมูลประจาตัวของคลาส ส่วนใหญ่แล้วมักเป็นข้อมูลที่ต้องใช้ร่วมกันในหลายๆ เมธอด หรื อ ไม่ ก็ เ ป็ น ข้ อ มู ล เบื้ อ งต้ น ที่ จ าเป็ น ต่ อ การท างานของคลาส เช่ น หากเป็ น วงกลมข้ อ มู ล ที่ จาเป็นต้องใช้เสมอ คือ รัศมี เป็นต้น ซึ่งแม้ว่าข้อมูลนี้จะรับผ่านทางพารามิเตอร์ของเมธอดได้ แต่ก็จะต้อง ระบุข้อมูลนี้ทุกๆ ครั้ง ทั้งนี้การสร้างพร็อปเพอร์ตี้มีรูปแบบดังนี้ public $ชื่อพร็อปเพอร์ตี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 218.
    บทที่ 12 การเขียนโปรแกรมแบบOOP 203 สาหรับโมดิฟายเออร์ โดยทั่วไปจะกาหนดเป็น public เนื่องจากในกรณีของพร็อปเพอร์ตี้นั้น จะต้องสามารถเข้าถึงจากภายนอกคลาสได้ มีตัวอย่างดังนี้ class Cylinder { public $radius; public $height; . . } หมายเหตุ การเขียน OOP สาหรับ PHP ในยุคแรกการกาหนดพร็อปเพอร์ตี้จะใช้คีย์เวิร์ด "var" ตามด้วย ชื่อพร็อปเพอร์ตี้ เช่น var $radius; แต่ในปัจจุบันนิยมกาหนดโดยโมดิฟายเออร์ "public" แทน แต่หากกาหนดโมดิฟายเออร์เป็น "private" มักเรียกว่า "ฟิลด์" เนื่องจากพร็อปเพอร์ตี้ คือ ข้อมูลของคลาส ดังนั้นจึงอาจถูกเรียกใช้จากทั้งภายใน และภายนอก คลาส หากเป็นการเรียกภายในคลาสจะต้องระบุผ่านคีย์เวิร์ดพิเศษ $this และหากเป็นการอ้างอิง ภายนอกคลาสจะต้องระบุผ่านอินสแตนซ์ ตามรูปแบบดังนี้ เรียกใช้ภายในคลาส: $this -> ชื่อพร็อปเพอร์ตี้ เรียกใช้ภายนอกคลาส: $อินสแตนซ์ -> ชื่อพร็อปเพอร์ตี้ ตัวอย่างที่ 12.11 การเรียกใช้ภายในคลาสผ่านคีย์เวิร์ดพิเศษ $this <?php class Cylinder { public $radius = 0; public $hight = 0; private function CircleArea ( ) { return pi ( ) * $this -> circleArea ($this -> radius); } public function volume ( ) { $base_area = $this -> circleArea($this -> radius); $volime = $base_area * $this -> hight; return $volume; } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 219.
    204 บทที่ 12การเขียนโปรแกรมแบบ OOP } ?> ตัวอย่างที่ 12.12 การใช้พร็อปเพอร์ตี้จากภายนอกคลาสผ่านอินสแตนซ์ <?php include ("Cylinder.class.php"); $cy1 = new Cylinder ( ); $cy1 -> redius = 10; $cy2 -> redius = 20; echo $cy1 -> volume(); ?> ฟิลด์ตามรูปแบบ OOP ของ PHP จะมีลักษณะคล้ายกับพร็อปเพอร์ตี้ คือ เป็นข้อมูลของคลาส แต่ละข้อมูลแบบฟิลด์นี้มักจะใช้เฉพาะภายในคลาสเท่านั้น โดยไม่อนุญาตให้เข้าถึงจากนอกคลาสได้ ดังนั้น จึงต้องกาหนดโมดิฟายเออร์เป็น "private" ขณะที่พร็อปเพอร์ตี้นั้นสามารถเข้าถึงจากนอกคลาสได้ ซึ่ง โดยทั่วไปแล้วมักใช้ฟิลด์ร่วมกับคอนสตรักเตอร์เป็นหลัก เพื่อรับข้อมูลที่จาเป็นเบื้องต้นจากนอกคลาสเข้า มา ตัวอย่างลักษณะการกาหนดฟิลด์ดังนี้ class Cylinder { private $redius = 0; private $hight = 0; . } ค่าคงที่ (Constant) ค่าคงที่ คือ ค่าที่กาหนดไว้อย่างตายตัว ซึ่งเหมือนกับค่าคงที่ที่ใช้ในการเขียนสคริปต์ปกตินั่นเอง โดยรูปแบบการกาหนดดังนี้ const ชื่อค่าคงที่ = ค่าที่กาหนด; ค่าคงที่นี้ ไม่ต้องกาหนดโมดิฟายเออร์ใดๆ และชื่อค่าคงที่ก็ไม่มีเครื่องหมาย $ นาหน้าและวิธีการ เรียกใช้ค่าคงที่ก็จ ะต่างไปจากการเรียกใช้พร็อปเพอร์ตี้ โดยสามารถเรียกผ่านชื่อคลาสได้โดยตรงโดย ไม่ต้องเรียกผ่านอินสแตนซ์ของคลาส มีรูปแบบดังนี้ ชื่อคลาส :: ชื่อค่าคงที่ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 220.
    บทที่ 12 การเขียนโปรแกรมแบบOOP 205 ตัวอย่างที่ 12.13 การกาหนดค่าคงทีภายในคลาส ่ <?php class Circle { const PI = 3.14; public function area($radius) { return Circle :: PI * $radius * $radius; } } ?> คอนสตรักเตอร์ (Constructor) คลาสบางคลาสก่อนที่จะทาการประมวลผลใดๆ ได้ จาเป็นต้องอาศัยข้อมูลพื้นฐานบางอย่าง เสียก่อน ซึ่งหากขาดข้อมูลเหล่านี้ไปแล้ว คลาสจะทางานไม่ได้เลย เช่น คลาสวงกลม หากขาดข้อมูลที่เป็น ค่ารัศมี ก็ไม่อาจคานวณหาค่าพื้นที่ และเส้นรอบวงได้ และผู้ใช้คลาสก็อาจไม่ทราบว่าต้องกาหนดข้อมูล พื้นฐานอะไรให้แก่คลาสนั้นบ้าง ด้วยเหตุนี้คลาสจึงต้องมรเมธอดพิเศษที่เรียกว่าคอนสตรักเตอร์ เพื่อใช้ใน การกาหนดข้อมูลที่จาเป็นเริ่มแรกให้แก่คลาส โดยลักษณะที่สาคัญของคอนสตรักเตอร์ คือ  คอนสตรั ก เตอร์ เ ป็ น เมธอดพิ เ ศษที่ ใ ช้ ใ นการรั บ ข้ อ มู ล เริ่ ม ต้ น เข้ า มายั ง คลาสในรู ป แบบ พารามิเตอร์ แต่คอนสตรักเตอร์ไม่จาเป็นต้องมีพารามิเตอร์เสมอไป  เมธอดที่ เ ป็ น คอนสตรั ก เตอร์ จ ะถู ก เรี ย กขึ้ น มาท างานโดยอั ต โนมั ติ ใ นขั้ น ตอนการสร้ า ง ออบเจ็กต์  สาหรับ PHP คอนสตรักเตอร์จะถูกกาหนดตายตัวไปเลยว่าต้องใช้ชื่อ __construct ( ) เท่านั้น (หน้า construct มีเครื่องหมาย underscore 2 ขีด) ส่วนโมดิฟายเออร์ไม่จาเป็นต้องกาหนด หรือ กาหนดเป็น public เท่านั้น  พารามิเตอร์ที่คอนสตรักเตอร์รับเข้ามาจะต้องนาไปเก็บไว้ในตัวแปรฟิลด์ เพื่อรอการนาไปใช้ งานเมธอดอื่นๆ ต่อไป ตัวอย่างที่ 12.14 การสร้างคอนสตรักเตอร์ของคลาส <?php class Circle{ private $redius = 0; function __construct($radius) { $this -> radius = $radius; //นาค่าพารามิเตอร์ไปเก็บไว้ในตัวแปรฟิลด์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 221.
    206 บทที่ 12การเขียนโปรแกรมแบบ OOP } } ?> การเรียกใช้ Constructor เมธอดที่เป็นคอนสตรักเตอร์จะถูกเรียกขึ้นมาทางานโดยอัตโนมัติในขั้นตอนการสร้างออบเจ็กต์ ทั้งนี้หากคอนสตรักนั้นมีพารามิเตอร์ ต้องระบุลงไปด้วย เช่น $cir = new Circle(10); //กาหนดรัศมีเท่ากับ 10 โมดิฟายเออร์ Static โมดิฟายเออร์แบบ static ใช้เมื่อต้องการให้เกิดการอ้างอิงข้อมูลเดียวกันของทุกออบเจ็กต์ที่สร้าง มาจากคลาสเดียวกัน ทาให้เมื่อเปลี่ย นแปลงข้อมูลที่ออบเจ็กต์ตัว ใด จะส่ งผลให้ข้อมูลอันเดียวกันใน ออบเจ็กต์อื่นๆ เปลี่ยนตามไปด้วย เพราะเป็นการอ้างอิงค่าเดียวกัน ทั้งนี้ static ใช้ได้กับทั้งพร็อปเพอร์ตี้ และเมธอด โดยแต่ละคลาสจะมรสมาชิกที่เป็นแบบ static มีดังต่อไปนี้ โมดิฟายเออร์ static $พร็อปเพอร์ตี้; โมดิฟายเออร์ static function เมธอด ( ) { . . } ตัวอย่างที่ 12.15 โมดิฟายเออร์ Static private static $field; public static $property; public static function method ( ) { . . } การเรียกใช้งานสมาชิกแบบ static ภายในคลาส ภายในคลาสเมื่อต้องการเรียกใช้สมาชิกแบบ static จะต้องระบุด้วยคาว่า self ตามด้วย โอเปอเรเตอร์ :: และชื่อพร็อปเพอร์ตี้หรือเมธอด ตามรูปแบบคือ self :: $พร็อปเพอร์ตี้ หรือ self :: เมธอด ( ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 222.
    บทที่ 12 การเขียนโปรแกรมแบบOOP 207 ตัวอย่างที่ 12.16 การเรียกใช้งานสมาชิกแบบ static ภายในคลาส self :: $x //พร็อปเพอร์ตี้ self :: f1 ( ); //เมธอด การเรียกใช้งานสมาชิกแบบ static จากนอกคลาส ส่วนภายนอกคลาสการระบุถึงสมาชิกที่เป็น static จะระบุผ่านชื่อคลาสโดยตรง หรือระบุผ่าน อินสแตนซ์ก็ได้ ในรูปแบบดังนี้ คลาส :: เมธอด คลาส :: พร็อปเพอร์ตี้ หรือเรียกใช้ผ่านอินสแตนซ์ อินสแตนซ์ -> เมธอด อินสแตนซ์ -> พร็อปเพอร์ตี้ นอกจากนี้ในการเรียกใช้สมาชิกแบบ static มีข้อกาหนดที่สาคัญดังนี้  สามารถเรียกใช้สมาชิกแบบ static ได้โดยตรง โดยไม่จาเป็นต้องเรียกผ่านอินสแตนซ์  เฉพาะเมธอดแบบ static เท่านั้นที่สามารถเรียกพร็อปเพอร์ตี้แบบ static ได้ ตัวอย่างการทดสอบการกาหนดสมาชิกแบบ static โดยประกอบด้วย 2 เพจ สาหรับคลาสและ ทดสอบการใช้คลาส ตัวอย่างที่ 12.17 การกาหนดคลาสภายในไฟล์ Visitor.class.php <?php class Visitor { private static $num_visitor = 0; function _construct ( ) { self :: $num_visitor++; } public static function getVisitor ( ) { return self :: $num_visitor; } } ?> ตัวอย่างที่ 12.18 การเรียกใช้คลาสในไฟล์ index.php <?php include ("Visitor.class.php"); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 223.
    208 บทที่ 12การเขียนโปรแกรมแบบ OOP $v1 = new Visitor(); echo "Visitors :" . $v1 -> getVisitor ( ) . "<br/>"; $v2 = new Visitor ( ); echo "Visitors :" . $v2 -> getVisitor ( ) . "<br/>"; $v3 = new Visitor ( ); echo "Visitors :" . $v3 -> getVisitor ( ) . "<br/>"; ?> ตัวอย่างนี้ สร้างออบเจ็กต์ของคลาส Visitor จานวน 3 ครั้ง โดยที่คอนสตรักเตอร์ได้เพิ่มค่า ให้แก่พร็อปเพอร์ตี้ $num_visitor ซึ่งเป็นแบบ static ไปอีก 1 และเมื่อเรียกเมธอด getVisitor ( ) ซึ่ง เมธอดนี้ จ ะไปอ่านข้อมู ล จาก $num_visitor จะพบว่าค่ าจะเพิ่ม ขึ้นเรื่ อยๆ แสดงว่ าพร็ อปเพอร์ ตี้ $num_visitor นั้นอ้างอิงข้อมูลเดียวกัน จึงทาให้ค่าเพิ่มขึ้นจากค่าเดิมได้ ไม่เช่นนั้นแล้วค่าจะต้องเป็น 1 ทั้งหมด การสืบทอด (Inheritance) การสืบทอด หมายถึง การที่คลาสหนึ่งถูกสร้างขึ้นโดยการสืบทอดมาจากอีกคลาสหนึ่ง ผลจาก การสืบทอดจะทาให้คลาสที่เป็นผู้สืบทอดมีองค์ประกอบทั้งหมดเหมือนกับคลาสต้นแบบ เรียกคลาสที่เป็น คลาสต้นแบบว่า Parent Class ส่วนคลาสที่เป็นผู้ทาการสืบทอดมาเรียกว่า Sub Class ทั้งนี้การสืบทอด จะใช้คีย์เวิร์ด extends เป็นตัวกาหนด เช่น class Shape { . . } class Rectangle extends Shape { //Rectangle สืบทอดมาจาก Shape . . } การสืบทอดมักทาเพื่อความสามารถบางอย่างเข้าไปใน Sub Class โดยนาความสามารถเดิม บางอย่างของ Parent Class มาใช้ เนื่องจากภายหลังการสืบทอดจะทาให้สามารถเรียกสมาชิกต่างๆ ของ Parent Class จาก Sub Class ได้เหมือนกับคลาสเดียวกัน ยกเว้นสมาชิกที่มีโมดิฟายเออร์เป็น private มีตัวอย่างดังนี้ ตัวอย่างที่ 12.19 การสืบทอดคลาส <?php class circle { ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 224.
    บทที่ 12 การเขียนโปรแกรมแบบOOP 209 function circle_area ($radius) { return pi ( ) * pow ($radius, 2); } } class Cylinder extends Circle { function volume ($radius, $height) { $base_area = $this -> circle_area ($radius); //ปริมาตร=พื้นที่ฐาน*สูง return $base_area * $height; } } $cyl = new Cylinder ( ); echo $cyl -> volume (10, 20); echo $cyl -> circle_area (30); ?> จากโค้ดตัวอย่างนี้จะพบว่าคลาส Cylinder นั้นสืบทอดมาจาก Circle และได้เพิ่มเมธอด volume ( ) เข้ามาในคลาส Cylinder จึงสามารถเข้าถึงเมธอด circle_area ( ) ของคลาส Circle จาก คลาส Cylinder ได้โดยใช้ $this -> เหมือนกับอยู่ในคลาสเดียวกัน รวมถึงการเข้าถึงผ่านทางอินสแตนซ์ได้ เช่นกัน แต่ทั่วไปแล้วคลาสมักต้องมีคอนสตรักเตอร์ และกรณีการสืบทอด Sub Class สามารถมี คอนสตรักเตอร์เป็นของตนเองที่ต่างไปจาก Parent Class ได้ และสามารถเข้าถึงคอนสตรักเตอร์ของ Parent Class ด้วยการอ้างอิงในรูปแบบดังนี้ parent :: _construct (อาร์กิวเมนต์) ซึ่งจากการสืบ ทอดระหว่างคลาส Circle/Cylinder ที่ผ่ านมา สามารถแก้ไขให้ ถูกต้องตาม แนวทาง OOP ยิ่งขึ้นได้ดังนี้ ตัวอย่างที่ 12.20 การสืบทอดระหว่างคลาส <?php class Circle { private $radius = 0; function _construct($radius) { $this -> radius = $radius; } function area ( ) { ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 225.
    210 บทที่ 12การเขียนโปรแกรมแบบ OOP return pi ( ) * pow ($this -> radius, 2); } } class Cylinder extends Circle { private $height = 0; function _construct ($radius, $height) { $this -> height = $height; private :: _construct($radius); //เรียกคอนสตรักเตอร์ของคลาส Circle } function volume ( ) { $base_area = $this -> area ( ); return $base_area * $this -> height; } } //--------------------------------------------------------------------------------------------------------$cy = new Cylinder (10, 20); echo $cy -> volume(); ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 226.
    บทที่ 13 การใช้เทคนิค AJAXร่วมกับ PHP ปัจจุบันนี้ ลักษณะการทางานแบบ ไคลเอนต์ - เซิร์ฟเวอร์ เริ่มถูกนามาใช้งานอย่างแพร่หลายใน ลักษณะการติดต่อสื่อสารผ่านทางเว็บบราวเซอร์ ซึ่งการทางานแบบนี้ จะมีการทางานโดย ไคลเอนต์ จะ ร้องขอและต้องการข้อมูลบางอย่างจาก เซิร์ฟเวอร์ ดังนั้นการโหลดและการรีเฟรชหน้าจอ เป็นสิ่งที่ หลีกเลี่ยงไม่ได้ จึงเป็นผลให้การทางานของฝั่ง ไคลเอนต์ นี้ทาให้ผู้ใช้ต้องหยุดรอการโหลดและการรีเฟรช หน้าจอ ซึ่งถือว่าเป็นการทางานที่ไม่มีประสิทธิภาพ AJAX (Asynchronous JavaScript and XML) AJAX ไม่ใช่ชื่อของการเขียนโปรแกรมหรือเป็นชื่อของภาษาที่ใช้ในการโปรแกรม แต่เป็นชุดของ เทคโนโลยีต่างๆ AJAX ย่อมาจาก Asynchronous JavaScript And XML หมายถึง การทางานร่วมกัน ของ JavaScript และ XML แบบ Asynchronous มีหลักการทางาน 2 ประเด็น คือ การ update หน้าจอแบบบางส่วน และการติดต่อสื่อสารกับ เซิร์ฟเวอร์ โดยใช้หลักการ Asynchronous ทาให้ผู้ใช้ไม่ ต้องหยุดการทางาน เพื่อรอการประมวลผลจาก เซิร์ฟเวอร์ รวมถึงการโหลดและการรีเฟรชหน้าจอ ของ บราวเซอร์ทางฝั่ง ไคลเอนต์ มีการใช้ AJAX โดยการเพิ่มเลเยอร์ระหว่างเว็บบราวเซอร์ของผู้ใช้ กับ เซิร์ฟเวอร์ ทาให้ผู้ใช้สามารถทางานได้โดยไม่ต้องรอให้ ไคลเอนต์ติดต่อไปยังเซิร์ฟเวอร์ รวมถึงการโหลด และการรีเฟรชหน้าจอทั้งหมดด้วย ดังนั้นผู้ใช้สามารถใช้งาน application ได้อย่างมีประสิทธิภาพมากขึ้น AJAX จึงไม่ใช่เทคโนโลยีในตัวของมันเอง แต่ว่าเป็นการนาเทคโนโลยีหลายๆ ตัวมารวมกันเช่น JavaScript, DHTML, XML, CSS, DOM และ XMLHTTPRequest AJAX Engine ทาหน้าที่เป็นตัวกลางระหว่าง ไคลเอนต์และเซิร์ฟเวอร์ ฉะนั้นเมื่อ ไคลเอนต์ มีการ ร้องขอแทนที่จะส่ง HTTP request ไปยังเซิร์ฟเวอร์โดยตรง ไคลเอนต์จะส่ง JavaScript call ไปยัง AJAX Engine เพื่อโหลดข้อมูลที่ผู้ใช้ต้องการ และหาก AJAX Engine ต้องการข้อมูลเพิ่มเติมในการตอบสนอง ต่อ AJAX Engine ของผู้ใช้จะส่งการร้องขอไปยังเซิร์ฟเวอร์ โดยใช้ XML เทคโนโลยีต่างๆ ที่เป็นส่วนประกอบของ AJAX ได้แก่  HTML/XHTML เป็นภาษาในการจัดแสดงข้อมูล  CSS เป็นรูปแบบการจัดแต่ง XHTML  Document Object Model (DOM) สาหรับ dynamic display and interaction  XML เป็นรูปแบบการแลกเปลี่ยนข้อมูล  XSLT สาหรับ แปลง XML เป็น XHTML
  • 227.
    212 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP  XMLHTTPRequest สาหรับ asynchronous data retrieval  JavaScript เป็นภาษาในการใช้งาน AJAX Engine ประวัติความเป็นมา ในช่วงแรกๆ ของการพัฒนา คือ ปี 1997 นั้น Component แรกที่เกิดขึ้นทางฝั่งไคลเอนต์ ถูก เขียนขึ้นโดยทีมพัฒนา Outlook Web Access ซึ่งต่อมาถูกนามาใช้เป็นส่วนหนึ่งของ Internet Explorer 5.0 นั่นก็คือจุดเริ่มต้นที่เริ่มรู้จักการทางานแบบ AJAX และในปี 2005 Google ได้ใช้การติดต่อสื่อสาร แบบ Asynchronous เพื่อเป็นรากฐานที่ทาให้รู้จักกับ AJAX กันอย่างแพร่หลาย การทางานแบบ ไคลเอนต์ - เซิร์ฟเวอร์ ถูกนามาใช้งานเป็นจานวนมาก เช่น การติดต่อกับฐานข้อมูลที่ เซิร์ฟเวอร์ หรือการ ให้บริการทางอินเทอร์เน็ต ซึ่ง Google เป็นผู้ลงทุนลงแรงอย่างหนัก ในพัฒนาและการทดสอบ AJAX จึง สังเกตได้ว่า ผลผลิตใหญ่ของ Google คริส อัลแมน และลูซินดา ดิเคส (Chris Ullman and Lucinda Dykes, 2007, p.3) ได้กล่าวไว้ว่า ในช่วงต้นปี 2005 ได้มีการนาการนา AJAX มาประยุกต์ใช้งานกับ เว็บไซต์ต่างๆ ทั่วโลก เช่น Flickr (www.flickr.com), Basecamp (basecamp.com), Amazon CloudSearch (www.A9.com), Google Suggest and Google Maps และอีกหลายเว็บไซต์ทั่วโลก ที่มาของปัญหา เนื่ องจากแอพลิ เ คชั่น ที่ ใช้งานในปั จจุบัน นี้ มีห ลั กการที่ทางานแล้ ว เกิ ดการสู ญเสี ยเวลาและ ทรัพยากรของผู้ใช้ในการรอคอยการทางานต่างๆ ทาให้ผู้ใช้ต้องหยุดคอย ดังนั้นการทางานของผู้ใช้จึง เป็นไปอย่างไม่ต่อเนื่อง ซึ่งหลักการดังกล่าวคือ 1. "Click, wait, and refresh" user interaction paradigm การที่บราวเซอร์ตอบสนองต่อการทางานของผู้ใช้ โดยจะทิ้งหน้าเว็บที่แสดงอยู่ในขณะนั้น แล้วไป ทาการส่ง HTTP request กลับไปยังเซิร์ฟเวอร์แทน ซึ่งทาให้ผู้ใช้ไม่สามารถทาอะไรได้เลยในขณะนั้น นอกจากการรอคอย เมื่อเซิร์ฟเวอร์ทาการประมวลเสร็จก็จะส่งหน้า HTML กลับมายังบราวเซอร์ ต่อจากนั้น บราวเซอร์ก็จะรีเฟรชและแสดงหน้า HTML หน้าใหม่ และนี้เองที่ทาให้ผู้ใช้สามารถใช้งานต่อไปได้ จะเห็ น ว่ า ผู้ ใ ช้ มี ช่ ว งเวลาของการหยุ ด รอคอยเป็ น เวลานานส าหรั บ การประมวลผลของ เซิร์ฟเวอร์ และการรีเฟรชหน้า HTML ใหม่ทั้งหน้า ซึ่งเป็นสิ่งที่ไม่มีประสิทธิภาพในเชิง Dynamic ของการ ทางานบนเว็บแอพลิเคชั่น 2. Synchronous "request/response" communication mode การที่บราวเซอร์เริ่มทาการร้องขอข้อมูลและเซิร์ฟเวอร์ ก็ตอบสนองเฉพาะการร้องขอที่ บราวเซอร์ร้องขอมาเซิร์ฟเวอร์ จะไม่สามารถส่งข้อมูลได้ถ้าบราวเซอร์ไม่ได้ร้องขอข้อมูลในขณะนั้น ซึ่งถือ ว่าเป็นการติดต่อสื่อสารเป็นแบบทิศทางเดียว ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 228.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 213 วงจรการ Request/Response แบบ Synchronous คือ การทางานแบบประสานจังหวะ ระหว่างบราวเซอร์กับเซิร์ฟเวอร์ ทาให้เกิดความล่าช้าในการทางานทาให้ผู้ใช้ทาอะไรไม่ได้อีก นอกจาก การคอยการตอบสนองกลับมาจากเซิร์ฟเวอร์ เมื่อเซิร์ฟเวอร์ประมวลผลเสร็จ ภาพที่ 13.1 เปรียบเทียบการทางานแบบเดิม กับ AJAX ที่มา: http://wiki.nectec.or.th/gitiwiki/pub/Knowledge/Ajax/ajax2.png โครงสร้างของ AJAX มุมมองของโครงสร้างของ AJAX ต่างจากเว็บแอพลิเคชั่นในทุกวันนี้ เนื่องจากมีการเพิ่ม Engine ทางฝั่งไคลเอนต์ ภาพที่ 13.2 โครงสร้างของ AJAX ในปัจจุบัน ที่มา: http://wiki.nectec.or.th/gitiwiki/pub/Knowledge/Ajax/ajax_archi.gif ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 229.
    214 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP จากภาพ AJAX Engine นี้ อยู่ระหว่างผู้ใช้งานกับเซิร์ฟเวอร์ ซึ่งจะมองว่าเป็นการทางานที่ ไคลเอนต์ การทางานต่างๆ ของผู้ใช้ โปรแกรมจะไปเรียก AJAX Engine ตัวนี้ขึ้นมา แทนที่การร้องขอหน้า เว็บจากเซิร์ฟเวอร์โดยตรง และจะใช้โครงสร้างข้อมูลแบบ XML ในการขนย้ายข้อมูลระหว่า งเซิร์ฟเวอร์ กับ AJAX Engine เมือบราวเซอร์ทาการร้องขอข้อมูลจากเซิร์ฟเวอร์ ่ นอกจากนี้ AJAX Engine ไม่ต้องทาการติดตั้งส่วนเสริมการทางานต่างๆ และไม่สามารถดาวน์ โหลดได้ เพราะ AJAX เป็นแนวคิดในการแก้ปัญหาการหยุดชะงักการทางานของผู้ใช้ การทางานของ AJAX AJAX จะช่วยลดการติดต่อระหว่างไคลเอนต์กับเซิร์ฟเวอร์ โดยในการโหลดหน้าเว็บนั่น บราวเซอร์ จะโหลดข้อมูลจาก AJAX Engine แทนการร้องขอข้อมูลจากเซิร์ฟเวอร์ โดยตรง ดังนั้น AJAX จะทาหน้าที่ทั้ง การแสดงผลรวมทั้งติดต่อกับผู้ใช้ และติดต่อไปยัง เซิร์ฟเวอร์ แล้ว AJAX Engine อนุญาตให้การกระทาต่างๆ ใน web application เป็นแบบ Asynchronous คือ ความเป็นอิสระในการติดต่อไปยังเซิร์ฟเวอร์นั่นเอง ดังนั้นผู้ใช้จะไม่พบกับบราวเซอร์หน้าขาวๆ อีกต่อไป และไม่ต้องรอการโหลดข้อมูลต่างๆ จากเซิร์ฟเวอร์ ภาพที่ 13.3 หลักการทางานของ AJAX ที่มา: http://wiki.nectec.or.th/gitiwiki/pub/Knowledge/Ajax/ajax_work.gif Asynchronous ลักษณะของ Asynchronous ในที่นี้คือ ไม่ต้องหยุดรอข้อมูล หมายความว่า หลังจากส่งข้อมูล ออกไปแล้วก็ยังสามารถใช้งานส่วนอื่น ๆ ในเพจนั้นได้ตามปกติ เพราะกระบวนทั้งหมดเป็นแบบ behind the scene JavaScript เนื่องจาก AJAX คือ การเอาเทคโนโลยีอื่นๆ มาใช้ร่วมกัน ซึ่งการที่จะใช้เทคโนโลยีต่างๆ เหล่านั้น ได้ จาเป็นต้องใช้ภาษาอย่าง JavaScript มาเป็นตัวจัดการให้ และสาหรับ AJAX ต้องใช้ JavaScript เป็น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 230.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 215 ตัวควบคุมกระบวนการทั้งหมด นับตั้งแต่เริ่มต้นจนสิ้นสุดการติดต่อสื่ อสาร ดังนั้นผู้จะศึกษาเทคนิค AJAX นี้ได้จึงจาเป็นต้องมีพื้นฐานด้านภาษา JavaScript และ DHTML ที่ดีพอสมควร ยิ่งรู้เกี่ยวกับ DHTML/ JavaScript มากเท่าใด ก็ยิ่งมีแนวทางในการประยุกต์ใช้ AJAX มากเท่านั้น XML XML (Extensible Markup Language) เป็นภาษาที่ใช้สาหรับการเขียนเอกสาร markup (markup document) โดยที่เอกสาร markup นั้นมีการใช้ metadata หรือ tags เพื่อบอกหน้าที่และ ประเภทของข้อมูลของส่วนต่างๆ ของเอกสารนั้นได้โดยชัดเจน การเพิ่ม metadata หรือ tags เข้าไปใน เอกสารสามารถทาให้โครงสร้างของเอกสารชัดเจนขึ้น และทาให้การประมวลผลเอกสารเป็นไปโดยง่าย และไม่จาเป็นที่จะต้องอาศัยมนุษย์เพื่อตีความเอกสาร การใช้เทคโนโลยี XML ในการพัฒนามาตรฐานเพื่อการกระจายข่าวเนื่องจาก XML เป็นภาษาที่ เหมาะกับการแลกเปลี่ยนข้อมูลผ่านเครือข่ายคอมพิ วเตอร์ เนื่องจาก XML ไม่ได้ขึ้นอยู่กับโปรแกรม ประยุกต์หรือระบบปฏิบัติการใด นอกจากนี้ XML ยังเป็นภาษาที่มีความยืดหยุ่น เนื่องจากผู้ใช้สามารถที่ จะกาหนดและตั้งค่า metadata หรือ tags ให้เหมาะกับเอกสารเฉพาะที่ต้องการได้อย่างอิสระ และยัง สามารถเพิ่มเติม metadata หรือ tags ได้ในภายหลังโดยไม่มีผลกระทบต่อโปรแกรมที่มีอยู่ก่อนหน้า XML สาหรับการพัฒนาร่วมกับ AJAX Application แล้วนั้น อาจไม่จาเป็นต้องรู้ XML เลยก็ได้ เพราะ AJAX มีเมธอดที่ใช้แปลงข้อมูลให้อยู่ในรูปแบบสตริงธรรมดาแบบง่ายๆ ได้ Server Side Script กับ AJAX ตามหลักการของ AJAX จาเป็นต้องส่งข้อมูลบางอย่างไปยัง เซิร์ฟเวอร์ ดังนั้นทางฝั่งเซิร์ฟเวอร์ก็ จาเป็นต้องเขียนสคริปต์ไว้สาหรับรับข้อมูลเข้ามาประมวลผล และส่งผลลัพธ์กลับไปให้ ซึ่งสามารถเลือกใช้ Engine ตัวใดก็ได้ที่ถนัด เช่น PHP, ASP, NET, JSP เป็นต้น ทั้งนี้การเขียนสคริปต์ทางฝั่ง เซิร์ฟเวอร์นั้น ก็ เหมือนกับการเขียนสาหรับเพจทั่วไปตามปกติ ไม่มีวิธีการหรือองค์ประกอบใดๆ เป็นพิเศษสาหรับ AJAX การใช้ AJAX Framework ตามขั้นตอนที่แท้จริงของเทคนิค AJAX นั้น ต้องเริ่มจากการใช้ JavaScript สร้างแบบเจ็กต์ XMLHTTP (สาหรับ IE 5-6) หรือไม่ก็ XMLHttpRequest (สาหรับ IE 7 ขึ้นไป และบราวเซอร์อื่นๆ) ขึ้นมาก่อน แล้วขั้นตอนต่าง ๆ ของ AJAX ก็ทาผ่านเมธอด และพร็อปเพอร์ตี้ ของออบเจ็กต์นี้ แต่เนื่องจาก ลาดับขั้นตอนมีค่อนข้างมาก ซึ่งเพื่อเป็นการลดความยุ่งยากดังกล่าวนี้ ในที่นี้จะนา AJAX Framework มา ใช้แทน ซึ่งลักษณะของเฟรมเวิร์กนี้ก็คือจะแยกส่วนที่เป็น JavaScript ที่ต้องทาซ้าๆ เหมือนกันทุกครั้งใน รั บ ส่ ง ข้อมู ล ไปไว้ใ นไฟล์ ต่า งหาก แล้ ว สามารถน าเข้า มาใช้งานได้ ในทุ กเพจที่ต้ องการ (คล้ ายกั บการ include file ใน PHP นั่งเอง) ซึ่งก็จะช่วยลดขั้นตอนการเขียน JavaScript ลงไปได้มากทีเดียว ข้อกาหนด เบื้องต้นที่ต้องรู้ที่เอาไว้ในเบื้องต้นของการใช้ AJAX Framework มีดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 231.
    216 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP เมธอดที่ใช้ในการส่งข้อมูล ใน AJAX ต้องกาหนดเมธอดในการส่งข้อมูลเช่นเดียวกับฟอร์ม โดยเมธอดที่กาหนดได้ก็ คือ POST หรือ GET หากเป็นข้อมูลสั้นๆ ไม่เน้นความปลอดภัยนักก็ใช้เมธอด GET หากเป็นข้อมูลยาวและ ต้องการความปลอดภัยก็ใช้แบบ POST เพจปลายทางด้านเซิร์ฟเวอร์ เพจปลายทาง คือ เพจที่ จะเป็ นผู้ รับข้อมูล มาประมวลผล เหมือนกับการกาหนดแอตตริบิว ต์ "action" ของฟอร์ ม ทั้งนี้ เพจปลายทางควรแยกไปสร้างไว้อีกเพจหนึ่งต่างหาก มากกว่าที่จะใช้วิธี Postback (การทางานทั้งหมดอยู่ในหน้าเดียวกัน) ข้อมูลที่จะส่งออกไป ถ้าหากเขียนโปรแกรมตามขั้นตอนปกติ จะต้องนาข้อมูลจากฟอร์มมาเรียงต่อกันในลักษณะของ Query String เช่น Keyword=AJAX&page=2&rowperpage=20 แต่เพื่อลดความยุ่งยากตรงจุดนี้ ผู้เขียนจึงได้ สร้างฟังก์ชันไว้ใน AJAX Framework สาหรับการ อ่านข้อมูลจากฟอร์มเพื่อมาเรียงต่อกันแบบ Query String ให้เรียกใช้งานแบบง่ายๆ แต่หากข้อมูลนั้น ไม่ได้อ่านจากฟอร์มต้องกาหนดวิธีการจัดเรียงเอง แต่ก็ไม่มีอะไรยุ่งยาก สามารถนาความรู้เรื่องการสร้าง Query String ใน PHP ซึ่งใช้ลักษณะเดียวกันมาใช้ได้เลย การแสดงผลลัพธ์ หลังส่งข้อมูลขึ้นไปประมวลผลที่ เซิร์ฟเวอร์แล้ว เมื่อผลลัพธ์ถูกส่งกลับมา หากเป็นข้อมูลสตริง ธรรมดา (หรืออาจมีแท็ก HTML รวมอยู่ด้วย) ต้องกาหนดว่าจะนาไปแสดงที่อิลิเมนต์ (Element หรือ input form คือ ตัวเดียวกัน) ใดภายในเพจนั้น นั่นแสดงว่าต้องสร้างอิลิเมนต์ที่ใช้แสดงผลเอาไว้ล่วงหน้า แล้ว ก่อนที่จะเริ่มการทางานของ AJAX ซึ่งโดยทั่วไปมักใช้ div หรือไม่ก็ span พร้อมกาหนดค่า id ให้กับ มันเพื่อนามาใช้อ้างอิงได้ การสร้างออบเจ็กต์ XMLHTTP/XMLHttpRequest บัญชา ปะสีละเตสัง (2551, หน้า 174) ได้กล่าวไว้ว่า คลาส XMLHTTP และ XMLHttpRequest คือ คลาสที่ใช้จัดการข้อมูลของ AJAX ทั้งหมด ตั้งแต่การส่งข้อมูลไปจนถึงการรับข้อมูลผลลัพธ์กลับมา แต่ อย่างไรก็ตาม เนื่องบราวเซอร์แต่ละตัวนั้นรองรับการใช้คลาสนี้แตกต่างกันออกไป ถ้าเป็น IE จะใช้คลาสที่ มีชื่อว่า XMLHTTP แต่ถ้าเป็น Netscape/Firefox/Mozilla จะใช้คลาสที่ชื่อว่า XMLHttpRequest แต่ สมาชิกภายในคลาส คือ เมธอด และพร็อปเพอร์ตี้สาคัญที่จะใช้งานหลักๆ จะคล้ายกัน แต่เนื่องจากทั้ง XMLHTTP/XMLHttpRequest อยู่ในรูปแบบของคลาสไม่ใช่ออบเจ็กต์ จึงยังไม่สามารถนามาใช้งาน โดยตรงได้ ต้องสร้างเป็นออบเจ็กต์เสียก่อน โดยแยกพิจารณาตามชนิดของบราวเซอร์ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 232.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 217 ตัวอย่างที่ 13.1 การออบเจ็กต์ XMLHTTP สาหรับ IE <script> var ajax = null; if (window.ActiveXObject) { ajax = new ActiveXObject ("Microsoft.XMLHTTP"); } . // เขียนโค้ดคาสั่งตามความต้องการของผู้ใช้ . </script> จากตัวอย่าง สามารถอธิบายได้ดังนี้ 1. สร้างตัวแปรอินสแตนซ์สาหรับออบเจ็กต์ โดยกาหนดตัวแปรชื่อ ajax 2. ตรวจสอบว่าบราวเซอร์รองรับการใช้ ActiveX หรือไม่ ถ้ารองรับแสดงว่าเป็น IE เพราะ เทคโนโลยี ActiveX นั้นจะมีเฉพาะในไมโครซอฟต์ แต่ถ้าไม่รองรับแสดงว่าเป็นบราวเซอร์ชนิดอื่นๆ 3. สร้างออบเจ็กต์สาหรับ AJAX เพื่อนาไปใช้งานต่อไป ตัวอย่างที่ 13.2 การออบเจ็กต์ XMLHttpRequest สาหรับบราวเซอร์ที่ไม่ใช่ IE <script> var ajax = null; if (window.XMLHttpRequest) { ajax = new XMLHttpRequest; } . // เขียนโค้ดคาสั่งตามความต้องการของผู้ใช้ . </script> จากตัวอย่าง สามารถอธิบายได้ดังนี้ 1. สร้างตัวแปรอินสแตนซ์สาหรับออบเจ็กต์ โดยใช้ตัวแปรชื่อ ajax แบบ XMLHttpRequest 2. ตรวจสอบว่าบราวเซอร์ รองรับการใช้ XMLHttpRequest หรือไม่ ถ้ารองรับจึงจะสร้าง ออบเจ็กต์นี้ได้ 3. สร้างออบเจ็กต์สาหรับ AJAX เพื่อนาไปใช้งานต่อไป แม้ว่าผู้ใช้โดยส่สวนใหญ่จะใช้ IE เป็นหลัก และมีเพียงส่วนน้อยที่ใช้บราวเซอร์อื่นๆ แต่การสร้าง เว็บไซต์ที่ดีควรสามารถใช้ได้ในหลายๆ บราวเซอร์ จะได้ไม่ เกิดปัญหา จากการสร้างออบเจ็กต์สาหรับ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 233.
    218 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP AJAX ที่ผ่านมาจะเห็นว่าสามารถตรวจสอบบราวเซอร์ของผู้ใช้งานได้ ดังนั้นการประยุกต์ใช้ในขั้นตอนนี้ คือ การตรวจสอบบราวเซอร์ก่อนการใช้งานดังนี้ ตัวอย่างที่ 13.3 การออบเจ็กต์ของ AJAX ให้รองรับในทุกบราวเซอร์ <script> var ajax = null; if (window.ActiveXObject) { ajax = new ActiveXObject ("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { ajax = new XMLHttpRequest; } else { alert ("บราวเซอร์ของคุณไม่รองรับการใช้งาน AJAX"); } . // เขียนโค้ดคาสั่งตามความต้องการของผู้ใช้ . </script> ฟังก์ชันที่ใช้จัดการข้อมูล ภายใน AJAX Framework ผู้เขียนได้สร้างฟังก์ชันเพิ่มเติมขึ้นมา 2 ฟังก์ชัน เพื่อใช้ในการรับส่ง ข้อมูล และอ่านข้อมูลจากฟอร์มดังนี้ ฟังก์ชัน AJAXLoad ( ) ใช้ในการส่งข้อมูลจากบราวเซอร์ไปยัง เซิร์ฟเวอร์ และรับผลลัพธ์กลั บมาแสดงผลที่อิลิเมนต์ที่ กาหนด มีรูปแบบดังนี้ รูปแบบ AJAXLoad (เมธอดเพจปลายทาง, ข้อมูลที่จะส่งออกไป, อิลิเมนต์แสดงผล) ตัวอย่างที่ 13.4 ฟังก์ชัน AJAXLoad ( ) AJAXLoad ("post,test.php","kw=AJAX&page=10","mydiv"); ฟังก์ชัน getFormData( ) ใช้ในการอ่านข้อมูลจากฟอร์มมาต่อกันแบบ Query String โดยต้องระบุ id หรือชื่อแอตตริบิวต์ ของฟอร์มที่ต้องการอ่านข้อมูล รูปแบบ getFormData (form_id หรือ form_name) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 234.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 219 ตัวอย่างที่ 13.5 ฟังก์ชัน getFormData( ) var data = getFromData ("from1"); แนวทางการพัฒนา AJAX Application กระบวนการของ AJAX สามารถแยกกระบวนการทางานเป็น 2 ส่วน คือ กระบวนการฝั่ง บราวเซอร์ และกระบวนฝั่งเซิร์ฟเวอร์ มีรายละเอียดดังนี้ การบวนการฝังบราวเซอร์ ่ 1. ถ้าจะส่งข้อมูลจากฟอร์มออกไป ก็ให้นาฟอร์มและอินพุตมาวางตามปกติ ทั้งนี้ต้องกาหนดค่า id หรือ name ให้กับฟอร์มด้วย เพื่อใช้อ้างถึงในการอ่านข้อมูล 2. จัดวางอิลิเมนต์ที่จะใช้แสดงผลลงไป ณ ตาแหน่งที่ต้องการ ซึ่งอาจใช้ Div หรือ Span และ จะต้องกาหนดค่า id ให้กับอิลิเมนต์ด้วย ตัวอย่างดังนี้ <div id="diplayAJAX"> </div> 3. สร้างฟังก์ชัน JavaScript สาหรับจัดการ AJAX โดยภายในฟังก์ชันเป็นการจัดเตรียมข้อมูล สาหรับฟังก์ชัน AJAXLoad ( ) ตามที่ได้กล่าวถึงมาแล้ว ตัวอย่างดังนี้ ตัวอย่างที่ 13.6 การสร้างฟังก์ชัน JavaScript สาหรับจัดการ AJAX <head> <script src="../AJAX/framework.js"> </script> <script> function AJAXCall ( ) { var data = getFromdataa ('form1'); var URL = 'AJAX_test.php'; // นาข้อมูลไปกาหนดให้แก่ฟังก์ชัน AJAXLoad() // เพื่อส่งออกไป ซึ่งฟังก์ชันนี้อยู่ใน framework.js AJAXLoad ('post', URL,data, 'DisplayAJAX'); } </script> </head> 4. จากฟังก์ชัน AJAXCall ( ) ที่สร้างขึ้นในข้อที่ 3 ต้องพิจารณาต่อไปอีกว่า จะเรียกฟังก์ชันนี้ ขึ้นมาทางานเมื่อใด เช่นอาจเพิ่มปุ่ม Button เข้าไป แล้วเพื่อเรียกใช้ฟังก์ชัน AJAXCall ดังนี้ ตัวอย่างที่ 13.7 การสร้างปุ่มเพื่อเรียกใช้ฟังก์ชัน AJAXCall <input type="button" value="OK" onclick = "AJAXCall ( )"/> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 235.
    220 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP กระบวนการฝั่งเซิร์ฟเวอร์ ทางด้านเซิร์ฟเวอร์นั้ น ก็ใช้วิธีที่เหมือนกับการเขียนเพจปกติ โดยไม่มีอะไรเป็นพิเศษส าหรับ AJAX แต่ก็พอสรุปเป็นหลักการได้ดังนี้  การรับข้อมูลที่ถูกส่งเข้ามาผ่านตัวแปร $_GET หรือ $_POST ขึ้นอยู่กับเมธอดที่ถูกส่งเข้ามา  หลังการประมวลผล ก็ส่งข้อมูลกลับออกไปด้วยเพื่อแสดงผลด้วยฟังก์ชัน echo ( ) หรือ print ( ) ตามปกติ ถ้าข้อมูลที่ส่งนั้นยาวมากก็ควรนามารวมเป็นสตริงเดียวกันก่อนส่ง ปัญหาภาษาไทยใน AJAX ในการใช้ AJAX ร่วมกับPHPจะมีปัญหาสาคัญอย่างหนึ่ง คือ การแสดงภาษาไทยจะกลายเป็น อักขระที่อ่านไม่รู้เรื่อง เช่น จากตัวอย่างที่แล้ว หากไม่ใช้ฟังก์ชัน header ( ) และถ้าใส่ข้อมูลที่ไม่ใช่ตัวเลข จะได้ผลลัพธ์เป็นคาว่า "ค่าที่ใส่ไม่ใช่ตัวเลข" สาหรับปัญหาอักขระภาษาไทยที่เกิดขึ้นกับAJAX/PHPโดยส่วนใหญ่จะมี2ลักษณะ คือ 1. ถ้าผลลัพธ์ที่ส่งกลับมาแสดงผลภาษาไทยไม่ถูกต้อง แก้ปัญหาโดยใช้ ฟังก์ชัน header ( ) แล้ว กาหนด Content-Type เป็น tis-620 หรือ utf-8 เช่น ตัวอย่างที่ 13.8 การใช้ฟังก์ชัน header ( ) เพื่อควบคุมการแสดงผลภาษาไทย header ("Content-Type:text/plain; charset=tis-620"); 2. ถ้ามีการส่งข้อมูลที่มีภาษาไทยจากฝั่ง บราวเซอร์ขึ้นไป ก่อนส่ง JavaScript จะเปลี่ยนเป็น Unicode แบบ utf-8 ซึ่งแม้ว่า utf-8 จะรองรับภาษาไทยได้ แต่ก็อาจเกิดปัญหาในบางกรณี ดังนั้นเพื่อ เป็นการป้องกันปัญหาเกี่ยวกับอักขระ ทางฝั่งเซิร์ฟเวอร์ที่รับข้อมูลควรเข้ารหัสใหม่ให้เป็น tis-620 ด้วย ฟังก์ชัน iconv ( ) ซึงฟังก์ชันนี้ก็คุ้นเคยกันดีอยู่แล้วเพราะในหลายๆ บทที่ผ่านมาก็ใช้งานมาตลอด เช่น ่ ตัวอย่างที่ 13.9 การส่งข้อมูลที่มีภาษาไทยจากฝั่งบราวเซอร์ขึ้นไป ก่อนส่ง JavaScript $input = iconv ("utf-8","tis-620",$_POST["input"]); ในทางปฏิบัติ การรับข้อมูลของทางฝั่งเซิร์ฟเวอร์ที่ส่งผ่าน AJAX เข้ามา ควรเข้ารหัสก่อนเสมอ ซึ่ง ถึงแม้ข้อมูลที่ผ่านส่งไปจะไม่มีภาษาไทยอยู่ด้วยก็ไม่มีปัญหา หลังการใช้ ฟังก์ชัน iconv ( ) ข้อมูลที่ได้จะ ตรงกับข้อมูลที่ส่งไปเสมอ การส่งผลลัพธ์กลับมาเป็น JavaScript การส่ ง ผลลั พ ธ์ ก ลั บ มาในรู ป แบบสตริ ง ธรรมดา อาจท าให้ ไ ม่ ส ามารถแก้ ไ ขอะไรได้ ม ากนั ก โดยเฉพาะอย่างยิ่งในกรณีที่ต้องควบคุมการทางานจากเซิร์ฟเวอร์ ซึ่งวิธีที่จะทาได้ก็คือ ส่งผลลัพธ์กลับคืน มาในรูปแบบคาสั่งของ JavaScript โดยแยกพิจารณาระหว่างฝั่งเซิร์ฟเวอร์และบราวเซอร์ดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 236.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 221 การส่งผลลัพธ์ที่เป็น JavaScript ในฝั่งเซิร์ฟเวอร์ จะต้องสร้างคาสั่ง JavaScript ในรูปแบบของสตริงธรรมดา โดยจะมีจานวนคาสั่งเท่าไหร่ก็ได้ แต่ ต้องไม่มีแท็ก <script> และ </script> คร่อมระหว่างคาสั่งเหล่านั้น นอกจากนี้เพื่อให้ทางฝั่งบราวเซอร์ สามารถตรวจสอบได้ว่า ผลลัพธ์ที่ได้รับมานั้นเป็น JavaScript ควรกาหนดเฮดเดอร์กากับไว้ด้วยฟังก์ชัน header ( ) ในลักษณะดังนี้ header ("Content-type:text/javascript; charset=tis-620"); หรือบางครั้งการจะส่งผลลัพธ์กลับไปแบบใด อาจขึ้นกับเงื่อนไข ดังนั้นอาจตรวจสอบเงื่อนไปก่อน กาหนดเฮดเดอร์ เช่น ตัวอย่างที่ 13.10 การเขียนคาสั่งเพื่อให้รองรับภาษาไทยผ่านฟังก์ชัน header ( ) <?php $x = ...; if (empty($x)) { header ("Content-Type: text/plain; charset=tis-620"); echo"..."; } else { header ("Content-Type: text/javascript;charset=tis-620"); //สร้างคาสั่ง JavaScriptในแบบสตริง กี่คาสั่งก็ได้ แล้วส่งออกไป $js = '' var el = document.getElementById('x'); el.style.display='none alert ('...'); "; echo $js; } ?> การจัดการผลลัพธ์ที่เป็น JavaScript ฝังบราวเซอร์ ่ หากเขียนโปรแกรม Javascript เอง ปกติก็ต้องมีการตรวจสอบเฮดเดอร์ของผลลัพธ์ก่อน แล้วใช้ ฟังก์ชัน eval ( ) ของใน JavaScript ในการประมวลผล แต่เนื่องจากใน AJAX Framework นั้น ผู้เขียน ได้ทาให้รองรับผลลัพธ์ที่เป็นคาสั่ง JavaScript โดยอัตโนมัติอยู่แล้ว ดังนั้นจึงไม่ต้องทาอะไร เพียงแต่ ฝั่ง เซิร์ฟเวอร์ต้องกาหนดเฮดเดอร์ก่อนไม่เช่นนั้นจะไม่สามารถจาแนกได้ว่า ผลลัพธ์เป็นสตริงธรรมดาหรือเป็น JavaScript และสาหรับอิลิเมนต์ที่จะใช้แสดงผล หากจะกาหนดวิธีการผ่าน JavaScript อาจไม่มีอิลิเมนต์ นี้กได้ และกาหนดค่าให้กับฟังก์ชัน AJAXLoad ( ) เป็น null เช่น ็ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 237.
    222 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP AJAXLoad ('get', URL, data, null); เพื่อให้เข้าในแนวทางการส่งผลลัพธ์เป็น JavaScript มากยิ่งขึ้น ลองมาทดสอบด้วยตัวอย่างง่ายๆ ดังนี้ ตัวอย่าง การส่งผลลัพธ์เป็น JavaScript โดยการจะเป็นการรับข้อมูลตัวเลข 2 ตัวและ เครื่องหมายแล้วส่งด้วยเทคนิค AJAX ไปคานวณที่เซิร์ฟเวอร์ หลังจากนั้นส่งผลลัพธ์กลับมาในแบบคาสั่ง JavaScript ตัวอย่างที่ 13.11 ตัวอย่างการเรียกใช้ฟังก์ชัน AJAXcall ในไฟล์ index.html <head> . . <script src="../AJAX/framwork.js"></script> <script> function AJAXcall ( ) { var data = getFormData ('from1'); var URL = 'calculator.php'; AJAXLoad ('post', URL, date, null); //ให้อิลิเมนต์ที่ใช้แสดงผลเป็น null เพราะส่งผลลัพธ์เป็น JavaScript } </script> </head> เพิ่มตัวจัดการอีเวนต์ (Event) ให้กับปุ่ม Button โดยการเรียกใช้ฟงก์ชัน AJAXCall ( ) ั <input type="button" value"คานวน" onclick = "AJAXCall ( )"/> ตัวอย่างที่ 13.12 ไฟล์ calculator.php เป็นเพจฝั่งเซิร์ฟเวอร์สาหรับรับข้อมูลเพื่อประมวลผล <?php $num1 = $_POST ['num1']; $num2 = $_POST ['num2']; $op = $_POST ['op']; $result = 0 ; switch ($op) { case "+" : $result = num1 + $num2; break; case "-" : $result = num1 - $num2; break; case "*" : $result = num1 * $num2; break; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 238.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 223 case "/" : $result = num1 / $num2; break; } // สร้างคาสั่ง JavaScript ในแบบสตริงของ PHP มาแทรกลงไปได้ $js = " var msg = '$num1 $op $num2 =$result'; "; header ("Content-Type:Text/javascript;Charset=tis-620"); echo $js; ?> การใช้ AJAX กับการตรวจสอบข้อมูล ซึ่งเทคนิคนิยมที่ใช้กันมากในปัจจุบัน สาหรับตัวอย่างนี้จะ เป็นการตรวจสอบล็อกอินว่าใช้งานได้หรือไม่ โดยส่งล็อกอินผ่าน AJAX ไปยังเซิร์ฟเวอร์ แล้วส่งผลลัพธ์ เป็น JavaScript ตัวอย่างที่ 13.13 การใช้ AJAX กับการตรวจสอบข้อมูล ภายในไฟล์ index.php <head> . . <script src="../AJAX/framework.js"></script> <script> function AJAXCall ( ) { var date = getFormData ('form1'); var url = 'check_login.php'; AJAXLoad ('post', url. date, 'displayAJAX'); } // ฟังก์ชันนี้จะถูกเรียกขึ้นมาทางานจากฝั่งเซิร์ฟเวอร์ // เพื่อแสดงผลลัพธ์ว่าล็อกอินนั้นสามารถใช้ได้หรือไม่ function displayResult (valid) { var el = document.getElementById('displayAJAX'); If (!valid) { el.style.color = 'red'; el.innerHTML ='ชื่อนี้ใช้ไม่ได้ หรือมีผู้อื่นใช้แล้ว กรุณาเปลี่ยนชื่อใหม่' Document.getElementById('login').select(); } else { ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 239.
    224 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP el.sytle.color = 'black'; el.innerHTML = 'ชื่อนี้สามารถใช้งานได้'; } } </script> </head> กาหนดอีเวนต์ onblur เพื่อว่าหลังป้อนข้อมูลไปแล้ว และย้ายไปยังอินพุตอื่นๆ จะใช้อีเวนต์นี้ในการ ส่งล็อกอินผ่าน AJAX ไปตรวจสอบ โดยในมุมมองโค๊ดให้เพิ่มอีเวนต์ onblur และ เพิ่มแท็ก <span> ดังนี้ <input name="login" type="text" id="login" onblur="AJAXCall ( )"/> <span id="displayAJAX"></span> ตัวอย่างไฟล์ check_login.php เป็นเพจฝั่งเซิร์ฟเวอร์ที่รับข้อมูลล็อกอินไปตรวจสอบ แล้วส่ง ผลลั พธ์เป็ น JavaScript กลับ มาโดยในที่นี้จะเป็นพียงการเรียกใช้ฟังก์ชัน displayReuslt ที่เพจ index.php ขึ้นมาทางาน ตัวอย่างที่ 13.14 รับข้อมูลล็อกอินไปตรวจสอบ แล้วส่งผลลัพธ์เป็น JavaScript <?php $login = $_POST['LOGIN']; $patter = "^[a-zA-Z0-9]{3,10}$"; $users = array ("abc","123","xyz"); //สมมติชื่อผู้ใช้ที่มีอยู่แล้ว // ตรวจสอบ login แล้วเรียกฟังก์ชัน Javascripth displayResult ( ) // ที่เพจ index.php ขึ้นมาทางาน If (!eregi (pattern,$login) || in_array ($login,$users)) { //ถ้าล็อกอินไม่สาเร็จ $js = "displayResult (false);"; } else { //ถ้าล็อกอินสาเร็จ $js = "displayResult (ture);"; } header ("Content-Type:text/javascript;Charset=tis-620"); echo $js; ?> การอัปเดทอินพุต Select ด้วยเทคนิค AJAX โดยปกติแล้วตัวเลือก (option) ของอินพุต Select จะสร้างไว้ล่วงหน้าด้วยแท็ก <option> เช่น อัปเดตอินพุต Select ด้วยเทคนิค AJAX ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 240.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 225 การเปลี่ยนแปลงตัวเลือกของอินพุต Select จะต้องอาศัยคาสั่ง JavaScript เป็นหลัก ดังนั้น ก่อนที่จะกล่าวถึงเทคนิคการใช้ร่วมกับ AJAX จะกล่าวถึงการใช้ JavaScript ในการแปลงรายการใน Select ก่อน การสร้างตัวเลือกด้วย JavaScript หากต้องการจะเพิ่มตัวเลือกนั้นต้อ งเริ่มที่การสร้างตัวเลือกใหม่ขึ้นมาก่อน ซึ่ งการสร้างตัวเลือก ใหม่นั้นวิธีที่ง่ายที่สุด คือ การสร้างด้วยออบเจ็กต์ Option โดยมีรูปแบบดังนี้ option ('text', 'value') เมื่อ text หมายถึง ข้อความที่ปรากฏบนตัวเลือกนั้น ต้องกาหนดในรูปแบบสตริง value หมายถึง ค่าของตัวเลือกนั้น ต้องกาหนดในรูปแบบสตริง ตัวอย่างที่ 13.15 การสร้างตัวเลือกด้วย JavaScript var opt = new option ('Thailand', 'th'); เทียบได้กับในรูปแบบ HTML ต่อไปนี้ <option value="th">Thailand</option> การเพิ่มตัวเลือกด้วย JavaScript การเพิ่มตัว เลื อกเข้าไปในอินพุต Select นั้นปกติทาได้หลายวิธี แต่บางวิธีจะได้ผ ลเฉพาะกับ บราวเซอร์ IE เท่านั้น ดังนั้นจะกล่าวถึงเฉพาะวิธีที่ใช้ได้ทั้ง IE และ Firefox โดยใช้วิธีการกาหนดค่าให้แก่ คุณสมบัติ option เช่น ถ้าต้องการเพิ่มตัวเลือกเข้าไปให้เป็นรายการลาดับที่สาม ก็กาหนดโค้ดคาสั่งดังนี้ ตัวอย่างที่ 13.16 การเพิ่มตัวเลือกด้วย JavaScript Document.getElementById ('id').option [2] = opt; // เมื่อรายการแรกลาดับเป็น0 การลบตัวเลือกด้วย JavaScript การลบนั้นเพื่อให้เป็นแนวทางเดียวกับการเพิ่ ม ก็อาจใช้วิธีกาหนดคุณสมบัติ options ของ รายการลาดับนั้นให้เป็น Null เช่น ตัวอย่างที่ 13.17 การลบตัวเลือกด้วย JavaScript Document.getElementById ('id').option [2] = Null; // ลบรายการที่ 3 การใช้ AJAX กับการอัปเดตอินพุต Select หลั งจากที่ทราบเทคนิ คการเปลี่ ยนแปลงตัว เลื อกด้ว ย JavaScript แล้ว ต่อไป คือ การนามา ประยุกต์ใช้ร่วมกับ AJAX ซึ่งการเปลี่ยนแปลงตัวเลือกที่ได้กล่าวมานั้น ข้อมูลที่จะทาตัวเลือกถูกกาหนด ตายตัวมาแล้ว แต่เป็นกรณีที่ข้อมูลเก็บอยู่ในฐานข้อมูลทางฝั่งเซิร์ฟเวอร์ อาจไม่สามารถใช้วิธีตามที่กล่าว มาแล้วได้ แต่จากการที่สร้างคาสั่งที่เซิร์ฟเวอร์ แล้วส่งผ่านทาง AJAX มันรันที่บราวเซอร์ได้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 241.
    226 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP เว็บเพจที่จะแสดงตัวเลือกทางด้านบราวเซอร์ ต้องประกอบด้วยสิ่งที่จะใช้กาหนดเงื่อนไขในการ เปลี่ยนตัวเลือก โดยทั่วไปนิยมใช้อินพุต Select คู่กัน เช่น Select อันแรกแสดงชื่อฐานข้อมูลที่มีใน MySQL และอีกอันแสดงชื่อตารางที่มีอยู่ในฐานข้อมูลที่เลือกใน Select อันแรก เป็นต้น เมื่อส่งข้อมูลจาก Select อันแรกผ่าน AJAX ขึ้นไป ทางฝั่งเซิร์ฟเวอร์จะนาข้อมูลนั้นไปใช้เป็น เงื่อนไขในการอ่านข้อมูลจากตาราง เพื่อนามาสร้างตัวเลือกใน Select อันที่สอง หลังจากได้ข้อมูลต่อไป คือ การส่งผลลัพธ์กลับไปเพื่ออัปเดตอินพุต Select โดยก่อนที่จะอัปเดต ต้องลบตัวเลือกเดิมทั้งหมดออกไปก่อน แต่การลบตัวเลือกนั้นไม่ขึ้นกับข้อมูล ดังนั้นในที่นี้การลบตัวเลือก จะสร้างเป็นฟังก์ชันเอาไว้ที่เพจด้านบราวเซอร์ แล้วใช้วิธีสั่งคาสั่ง JavaScript จากด้านเซิร์ฟเวอร์มาเรียก ฟังก์ชันนี้ขึ้นมา ต่อไปคือ การนาข้อมูลที่อ่านได้จากฐานข้อมูลจากขั้นตอนก่อนนี้ มาสร้างเป็นตัวเลือกในรูปแบบ คาสั่ง JavaScript เพื่อส่งกลับไปประมวลผลที่ด้านบราวเซอร์ ทั้งนี้ตัวเลือกอาจมีมากกว่า 1 รายการดังนั้น อาจต้องใช้การวนลูปเพื่อสร้างคาสั่ง JavaScript ตามจานวนตัวเลือกที่มี ขั้นตอนการออกแบบ และเขียนโค๊ด สร้างเพจจานวน 2 เพจ โดยเพจแรกสาหรับวางอินพุต Select จานวน 2 รายการ เอาไว้ทดสอบ ส่วนอีกเพจหนึ่งฝั่งเซิร์ฟเวอร์สาหรับอ่านชื่อตารางฐานข้อมูล แล้วส่งผลลัพธ์กลับมาในแบบ JavaScript ตัวอย่างที่ 13.18 ตัวอย่างข้อมูลภายในไฟล์ index.php <head> . . <script> function AJAXCall ( ) { var data = getFormData ('form1'); var URL = 'update_tables.php'; AJAXLoad ('get', URL, data, null); } function removeOption ( ) { var el = document.getElementByld ('table'); while (el.length > 0) { el.option [0] = null; } } </script> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 242.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 227 </head> ตาแหน่งอินพุต Select อันแรก (ที่ใช้เก็บชื่อฐานข้อมูล) สิ่งที่ต้องทาก็คือ  เพิ่มอีเวนต์ change เพื่อเรียกใช้ AJAX ในการอัปเดต Select  เนื่องจากเป็นการแสดงชื่อฐานข้อมูล ซึ่งควรอ่านจาก MySQL โดยตรงมากกว่าที่จะสร้างเป็น รายการไว้ล่วงหน้าดังนั้นในส่วนรายตัวเลือกใช้ สคริปต์ PHP ในการอ่านชื่อฐานข้อมูลแล้วนามาสร้างเป็น รายการตัวเลือก ตัวอย่างที่ 13.19 แสดงส่วนของการติดต่อกับฐานข้อมูล <select id = "database" name = "database" onchange = "AJAXCall ( )"> <?php @mysql_connect ("localhost", "root", "leaf") or die (mysql_error ( ))' $dbs = mysql_list_dbs(); while (list ($db) = mysql_fetch_row ($dbs)) { echo "<option value = $db</option>"; } ?> </select> เพื่อให้เกิดการอัปเดตทันทีที่เปิดเพจ ให้เพิ่มการเรียกใช้ฟังก์ชัน AJAXCall ( ) ไว้ที่ส่วนท้ายของ เพจดังนี้ </form> <script> AJAXCall ( ); </script> </body> update_tables.php เพจนี้ จ ะน าชื่ อ ฐานข้ อ มู ล ที่ รั บ เข้ า มาไปใช้ ก ารอ่ า นชื่ อ ตารางที่ มี อ ยู่ ใ น ฐานข้อมูลนั้น แล้วนามาสร้างเป็นคาสั่ง JavaScript เพื่อส่งกลับไปอัปเดตที่อินพุต Select ที่แสดงชื่อ ตาราง ตามหลักการที่ได้กล่าวมาแล้ว ตัวอย่างที่ 13.20 ส่วนของการ Update ข้อมูลภายในไฟล์ update_tables.php <?php @mysql_connect ("localhost", "root", "leaf"> or die (mysql_error ( )); $db = $_GET ['database']; $tbs = mysql_list_tables($db); // คาสั่ง JavaScript สาหรับลบ Option เดิม โดยเรียกฟังก์ชัน remeveOption ( ) // ซึ่งสร้างไว้ที่เพจ index.php ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 243.
    228 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP $js = "removeOption ( );"; If (mysql_num_rows($tbs) == 0 { // ถ้าฐานข้อมูลนั้นไม่มีตารางอยู่เลย $js .= " var opt = new Option ('', ''); Document.getElementByID ('table') .options [0] = opt; } else { $i = 0; while (list ($tb) = mysql_fetch_row ($tbs)) { //คาสั่ง javascript สาหรับสร้าง และเพิ่ม Option ใหม่จนครบทุกตัว $js .= " var opt = new Option ('$tb', '$tb'); Document.getElementByID ('table') .options [$i] = opt; "; $i++; } } header ("Content-Type:text/Javascript; charset=tis-620); echo $js; ?> อีเวนต์ (Event) บัญชา ปะสีละเตสัง (2551, หน้า 103) อธิบายความหมายของอีเวนต์ คือ เหตุการณ์หรือการ กระทาบางอย่างที่เกิดขึ้น เช่น การคลิกหรือเคลื่อนย้ายเมาส์ การกดปุ่มคีย์บอร์ด เป็นต้น ทั้งนี้มักใช้อีเวนต์ ที่เกิดขึ้นเป็นตัวกาหนดให้เกิดการตอบสนอง หรือกระทาบางอย่างต่อไป เช่น เมื่อคลิกปุ่มก็ให้ส่งข้อมูลจาก ฟอร์มไปยังเซิร์ฟเวอร์ หรือ เมื่อมีการพิมพ์คีย์บอร์ด ก็อาจตรวจสอบว่าข้อมูลที่ใส่เข้ามาตรงตามเงื่อนไขที่ กาหนดหรือไม่ เป็นต้น ชนิดของการเกิดอีเวนต์ เนื่ องจากอี เวนต์เกิด ได้จ ากหลายสาเหตุ เช่น การคลิ กเมาส์ การเคลื่ อ นย้ายเมาส์ การพิม พ์ ข้อความ เป็ น ต้ น นอกจากนี้ แต่ ล ะอิ ลิ เ มน์ ก็ส ามารถเกิ ดอี เวนต์ ได้เ พีย งบางลั ก ษณะเท่ านั้ น เช่ น div สามารถเกิดอีเวนต์เกี่ยวกับเมส์ได้ แต่ไม่สามารถเกิดอีเวนต์เกี่ยวกับคีย์บอร์ด เป็นต้น ดังนั้นจึงควรทราบ ก่อนว่าใน JavaScript มีอีเวนต์ชนิดใดบ้าง เพื่อจะได้นาไปใช้ร่วมกันได้อย่างถูกต้อง มีรายละเอียดดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 244.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 229 ตารางที่ 13.1 แสดงอีเวนต์ของ JavaScript สาหรับกาหนดให้กับอิลิเมนต์ Event Handler การเกิดอิลิเมนต์ onclick เกิดเมื่อคลิกที่อิลิเมนต์ (กดแล้วปล่อย) ondblclick เกิดเมื่อดับเบิลคลิก onmousedown เกิดเมื่อกดเมาส์ลงไป (เกิดทันที่กด) onmouseup เกิดเมื่อปล่อยมือจากการกดเมาส์ onmouseover เกิดเมื่อเคลื่อนย้ายเมาส์เข้าไปในอิลิเมนต์ onmouseout เกิดเมื่อนาเมาส์ออกจากอิลิเมนต์ onmousemove เกิดเมื่อเคลื่อนย้ายเมาส์ไปบนอิลิเมนต์ onkeypress เป็นลักษณะการพิมพ์ทั่วไป คือ กดแล้วปล่อย onkeydown เกิดเมื่อกดปุ่มคีย์บอร์ด (เกิดทันทีที่กด) onkeyup เกิดเมื่อปล่อยมือจากปุ่มคีย์บอร์ด onabort เกิดเมื่อขัดจังหวะขณะที่กาลังโหลดรูปภาพ เช่น คลิกปุ่ม Stop ของบราวเซอร์ ขณะที่ยังโหลดภาพไม่สมบูรณ์ onblur เกิดเมื่ออิลิเมนต์นั้นเสียโฟกัส หรือย้ายโฟกัสไปยังอิลิเมนต์ onchange เกิดเมื่อเปลี่ยนข้อความใช้ช่องรับข้อมูล เช่น text, textarea หรือเกิดเมื่อเปลี่ยน รายการที่เลือกจากเดิมไปเป็นรายการอื่นใน <select> onerror เกิดเมื่อมีข้อผิดพลาดเกิดขึ้นขณะที่กาลังโหลดภาพ onfocus เกิดเมื่ออิลิเมนต์นั้นได้รับโฟกัส onload เกิดเมื่อเริ่มทาการโหลดเอกสารหรือรูปภาพ onreset เกิดเมื่อคลิกปุ่ม Reset ของฟอร์ม onresize เกิดเมื่อเปลี่ยนขนาดของวินโดว์ onselect เกิดเมื่อทาแถบสีเพื่อเลือกข้อความ onsubmit เกิดเมื่อส่งข้อมูลจากฟอร์มไปยังเซิร์ฟเวอร์ onunload เกิดเมื่อยกเลิกการโหลดเอกสาร เช่น คลิกปุ่ม Stop หมายเหตุ Event Handler คือ ตัวจัดการอีเวนต์ หรือทาหน้าที่การเรียกสคริปต์ส่วนที่ใช้ตอบสนองอี เวนต์ขึ้นมาทางานเมื่อเกิดอีเวนต์ขึ้น ซึ่งถ้าตัดคาว่า "on" ข้างหน้า Event Handler ออกก็จะ กลายเป็นชนิดของอีเวนต์นั้นๆ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 245.
    230 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP การกาหนดอีเวนต์ ก่อนการกาหนดอีเวนต์จะต้องตรวจสอบและพิจารณาก่อนว่าต้องการกระทาเมื่อเกิดอีเวนต์ใด และเกิดกับอิลิเมนต์ใด โดยดูว่าอิลิเมนต์นั้นรองรับอีเวนต์ที่ต้องการหรือไม่ เช่น หากต้องการจะกระทา บางอย่างเมื่อผู้ใช้คลิกที่ <div> ก็ต้องดูว่า <div> รองรับอีเวนต์ที่เกี่ยวกับ "click" หรือไม่เป็นต้น การกาหนดอีเวนต์แบบแอททริบิวต์ วิธีนี้จะเขียนสคริปต์แทรกไว้ในแท็กของอิลิเมนต์ที่เกิดอีเวนต์ โดยนา Event Handler ของอี เวนต์นั้นมาเป็นแอททริบิวต์ตัวหนึ่ง เช่น ตัวอย่างที่ 13.21 การแทรกสคริปต์ในแท็กของอิลิเมนต์ที่เกิดอีเวนต์ <body onclick = "alert ('Hello')"> หมายความว่าเมื่อคลิกที่เอกสารจะเกิด alert ที่แสดงข้อความ Hello ซึ่งวิธีนี้เหมาะสาหรับ สคริปต์ที่ไม่ยาวมากนัก เพราะหากเป็นสคริปต์ยาวๆ อาจจะเขียนไม่สะดวก เช่น ตัวอย่างที่ 13.22 การแทรกสคริปต์ในแท็กของอิลิเมนต์ที่เกิดอีเวนต์ แบบมีเงื่อนไข <div id="dv" onmousedown="if (confirm ('Are you 18+')) { location.href='index.html'; } else { window.close ( ) }" > 18+ ? </div> จากโค้ด หมายถึง เมื่อเกิดอีเวนต์ mousedown ที่ <div> จะปรากฏกล่องโต้ตอบ (Dialog box) ยืนยันอายุ โดยหากยืนยันว่าคุณอายุมากกว่า 18 จะโหลดหน้า index.html หากไม่จะปิดบราวเซอร์ที่ กาลังเรียกใช้งานอยู่ การกาหนดอีเวนต์แบบพร็อปเพอร์ตี้ วิธีนี้จะไม่เขียน Event Handler ไว้ในแท็กของอิลิเมนต์ที่ต้องการดักอีเวนต์ แต่จะนามากาหนด ในรูปแบบพร็อปเพอร์ตี้ของอิลิเมนต์นั้นแทน เช่น ตัวอย่างที่ 13.23 การกาหนดอีเวนต์แบบพร็อปเพอร์ตี้ <script> function fa ( ) { . . } </script> <div id="dv"> Click Me </div> <script> document.getElementById ("dv").onclick = f1; </script> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 246.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 231 จะพบว่าชื่อฟังก์ชันที่นามากาหนดให้กับ Event Handler นั้นจะต้องไม่มีวงเล็กต่อท้าย ต้องมี เฉพาะชื่อฟังก์ชันอย่างเดียวเท่านั้น ทั้งนี้อิลิเมนต์เดียวกันสามารถมีได้มากกว่า 1 Event Handler เช่น ตัวอย่างที่ 13.24 การกาหนดให้อิลิเมนต์เดียวมีมากกว่า 1 Event Handler var el = document.getElementById ("dv"); el.onclick = f1; el.onmouseover = f2; el.onmousout = f3; หรือจะเขียนแบบ Anonymous Function ก็ได้ เช่น ตัวอย่างที่ 13.25 การกาหนดอิลิเมนต์เดียว แบบ Anonymous Function var el = document.getElementById ("dv"); el.onclick = function ( ) { . . } ออบเจ็กต์อีเวนต์ (Object Event) เมื่อเกิดอีเวนต์ขึ้นอาจจะมีข้อมูลบางอย่างเกี่ยวกับอีเวนต์นั้นที่อาจต้องการทราบ เช่น ปุ่มเมาส์ หรือคีย์บอร์ดที่ถูกกด หรือตาแหน่งที่เกิดอีเวนต์ เป็นต้น เมื่อมีอีเวนต์เกิดขึ้น สาหรับ IE แล้วข้อมูลต่างๆ เกี่ยวกับอีเวนต์จะถูกเก็บไว้ในออบเจ็กต์อีเวนต์ ทั้งนี้จะต้องอ้างถึงข้อมูลเหล่านั้นในแบบพร็อปเพอร์ตี้ ซึ่งพร็อปเพอร์ตี้ที่น่าสนใจมีรายละเอียดดังนี้ ตารางที่ 13.2 แสดงอีเวนต์ของ JavaScript แบบพร็อปเพอร์ตี้ พร็อปเพอร์ตี้ ความหมาย allKey ตรวจสอบว่าคีย์บอร์ดปุ่ม "Alt" ถูกกดขณะเกิดอีเวนต์หรือไม่ ctrlKey ตรวจสอบว่าคีย์บอร์ดปุ่ม "Ctrl" ถูกกดขณะเกิดอีเวนต์หรือไม่ shiftKey ตรวจสอบว่าคีย์บอร์ดปุ่ม "Shift" ถูกกดขณะเกิดอีเวนต์หรือไม่ keyCode รหัสของปุ่มคีย์บอร์ดที่ถูกกด button ตรวจสอบว่าปุ่มของเมาส์ปุ่มใดที่ถูกคลิ ก โดย 1=ซ้าย, 2=ขวา, 4=กลาง และ 3=ซ้าย+ขวา fromElement อิลิ เมนต์ ที่เ มาส์ ชี้อ ยู่ก่ อนจะมาที่ อิลิ เมนต์ ปัจ จุ บัน เช่น ตอนแรกเมาส์ ชี้อ ยู่ ที่ <div id="div1"> ต่อมาเลื่อนเมาส์มายัง <div id="div2"> ถ้าอ่านค่า fromElement ที่ div2 จะได้ค่าเป็น div1 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 247.
    232 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP ตารางที่ 13.2 (ต่อ) พร็อปเพอร์ตี้ toElement ความหมาย อิลิเมน์ที่เมาส์ชี้อยู่หลังจากเลื่อนไปจากอิลิเมนต์เดิม เช่น ตอนแรกเมาส์ชี้อยู่ที่ <div id="div1"> ต่อมาเลื่อนเมาส์มายัง <div id="div2"> ถ้าอ่านค่า fromElement ที่ div1 จะได้ค่าเป็น div2 srcElement อิลิ เ มนต์ที่ ทาให้ เ กิด อีเ วนต์ เช่น ถ้ าคลิ กที่ <div id="div1"> จะได้ค่ า srcElement เป็น div1 type ชนิดของอีเวนต์ที่เกิดขึ้น คือ การนาชื่อ Event Handler มาตัดคาว่า "on" ออกไป เช่น เป็นอีเวนต์ "onclick" จะได้ type เป็น "click" เป็นต้น clientX, clientY เป็นการวัดระยะโดยเทียบกับพื้นที่ในการแสดงผลของบราวเซอร์ offsetX, offsetY เป็นการวัดค่าจะวัดจากขอบด้านซ้าย และด้านบนของอิลิเมนต์ที่ทาให้เกิดอีเวนต์ screenX, screenY เป็นการวัดระยะโดยเทียบกับหน้าจอด้านซ้าย และด้านบนมายังจุดที่เกิดอีเวนต์ cancelButton ใช้ในการหยุดการเกิด Event Bubbling จาก child ไปยังพาเรนต์ returnValue กาหนดค่าที่ส่งคืนให้แก่ระบบ มักใช้เพื่อยกเลิกพฤติกรรมปกติของอีเวนต์ เช่น ไม่ต้องการแสดงเมนูเมื่อคลิกขวาก็กาหนดค่า returnValue เป็น false เป็นต้น เนื่องจากในแต่ละพร็อปเพอร์ตี้ยังมีรายละเอียดเพิ่มเติมอีกมาก ซึ่งจะนาไปกล่าวถึงในหัวข้อต่อๆ ไป แยกตามความเกี่ยวข้องของอีเวนต์ สาหรับแนวทางการใช้พร็อปเพอร์ตี้ของออปเจ็กต์อีเวนต์ มีตัวอย่างดังนี้ ตัวอย่างที่ 13.26 การใช้พร็อปเพอร์ตี้ของออปเจ็กต์อีเวนต์ <script> function eventType ( ) { var ev_type = event.type; alert ("อีเวนต์ที่เกิดขึ้น คือ " + ev_type); } </script> <body onclick = "eventType ( )" onmousedown = "eventType ( ) "> อีเวนต์เกี่ยวกับเมาส์ จากเรื่ อ งออบเจ็ กต์อี เวนต์ จะเห็ นว่า เมื่ อเกิ ดอี เ วนต์ เกี่ย วกับ เมาส์ ขึ้น มีข้ อมูล หลายอย่ างที่ สามารถตรวจสอบ หรือนามาใช้งานต่อไปได้ เช่น ปุ่มหรือตาแหน่งที่ถูกคลิก เป็นต้น อีเวนต์เกี่ยวกับการเคลื่อนไหวของเมาส์ อีเวนต์ที่เกี่ยวกับการเคลื่อนไหวของเมาส์ได้แก่ mousemove, mouseover และ mouseout โดยมีรายละเอียดดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 248.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 233  เมื่อเคลื่อนเมาส์เข้ามาแตะของของอิลิเมนต์จะเกิดอีเวนต์ mouseover  ถ้าเคลื่อนเมาส์เข้าไปอยู่เหนืออิลิเมนต์จะเกิดอีเวนต์ mousemove แม้จะหยุดการเคลื่อนไหว ก็ยังเป็นอีเวนต์ mousemove  หากนาเมาส์ออกไปจากอิลิเมนต์จะเกิดอีเวนต์ mouseout  หากไม่กาหนดอีเวนต์ mousemove แต่กาหนดเฉพาะ mouseover เมื่อเคลื่อนที่เมาส์มา วางเหนืออิลิเมนต์ก็จะเกิดอีเวนต์ mousemove อีเวนต์เกี่ยวกับการกดเมาส์ อีเวนต์ที่เกี่ยวกับการกดเมาส์ได้แก่ click, dblclick, mousedown และ mouseup มีตัวอย่างดังนี้ ตัวอย่างที่ 13.27 อีเวนต์ที่เกี่ยวกับการกดเมาส์ <body onmousedown = "window.status=event.type" onmouseup = "alert (event.type)" > การตรวจสอบปุ่มเมาส์ที่ถูกกด ปุ่มเมาส์ที่ถูกกดสามารถตรวจสอบได้จากพร็อปเพอร์ตี้ button ของออบเจ็กต์อีเวนต์ ค่าที่ได้ สาหรับบราวเซอร์ IE มีตัวอย่างดังนี้ ตัวอย่างที่ 13.28 การตรวจสอบปุ่มเมาส์ที่ถูกกด <script> function mouseButton ( ) { var bt = event.button; switch (bt) { case 1 : window.status = "ซ้าย"; break; case 2 : window.status = "ขวา"; break; case 4 : window.status = "กลาง"; break; case default : window.status = "ไม่สามารถระบุได้"; break; } } </script> อีเวนต์เกี่ยวกับคีย์บอร์ด อีเวนต์ที่เกี่ยวกับคีย์บอร์ด เช่น การตรวจสอบว่าปุ่มถูกกดหรือมีการปุ่ม Alt/Ctrl/Shift ด้วย หรือไม่ เป็นต้น ทั้งนี้การตรวจสอบปุ่มนั้น สามารถนาไปใช้ในการป้องกันไม่ให้ผู้ใช้ใส่ข้อมูลที่ไม่ตรงตาม ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 249.
    234 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP เงื่อนไข เช่น ต้องการระบุให้ป้อนข้อมูลชนิดตัวเลข 0-9 เท่านั้น หากผู้ใช้กดปุ่มคีย์ที่ไม่ใช่ 0-9 ก็จะไม่ ยอมรับข้อมูลนั้น เป็นต้น อีเวนต์ที่เกี่ยวกับคีย์บอร์ดมี 3 อีเวนต์ คือ keypress, keydown และ keyup มีตัวอย่างดังนี้ ตัวอย่างที่ 13.29 อีเวนต์ที่เกี่ยวกับคีย์บอร์ด <body onkeydown = "window.status = event.type" onkeypress = "alert (event.type)" onkeyup = "alert (event.type)" > การตรวจสอบปุ่มคีย์ที่ถูกกด เมื่อคีย์บ อร์ ดปุ่มใดๆ ถูกกดสามารถตรวจสอบได้ว่าปุ่มนั้น คือ ปุ่มอะไร โดยใช้พร็อปเพอร์ตี้ keyCode แต่ค่า keyCode ที่ได้จะเป็นตัวเลขรหัสที่ใช้แทนปุ่มนั้น มีรายละเอียดของรหัสดังตารางต่อไปนี้ ตารางที่ 13.3 แสดงตัวอย่างรหัสที่ใช้แทนปุ่มคีย์บอร์ด ปุ่มคีย์บอร์ด keyCode ปุ่มคีย์บอร์ด backspace 8 right window key tab 9 select key enter 13 numpad 0-9 shift 16 multiply ctrl 17 add alt 18 subtract pause/break 19 decimal point caps lock 20 divide escape 27 F1-F12 page up 33 num lock page down 34 scroll lock end 35 semi-colon home 36 equal sign left arrow 37 comma up arrow 38 dash right arrow 39 period down arrow 40 forward slash insert 45 grave accent delete 46 open bracket keyCode 92 93 96-105 106 107 109 110 111 112-123 144 145 186 187 188 189 190 191 192 219 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 250.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 235 ตารางที่ 13.3 (ต่อ) ปุ่มคีย์บอร์ด keyCode ปุ่มคีย์บอร์ด keyCode เลข 0-9 48-57 back slash 220 อักขระ a-z 65-90 close braket 221 left window key 91 single quote 222 ก-ฮ 3585-3630 ๐-๙ 3664-3673 ในทางตรงข้าม ถ้าทราบค่า keyCode และต้องการทราบว่าตรงกับอักขระใด ให้ใช้เมธอด fromCharCode ( ) ของออบเจ็กต์ String ในการแปลง เช่น var char = String.fromCharCode (65); ตัวอย่างที่ 13.30 การเขียนคาสั่งเพื่อควบคุมการป้อนเลข 0-9 เท่านั้น <html> <head> <script> function isValidKey ( ) { var keyCode = event.keyCode; if (keyCode < 48 || event.keyCode > 57) { window.status = "key invalid"; alert ("กรุณาป้อนตัวเลข 0-9 เท่านั้น"); } else { window.status = String.fromCharCode (keyCode); } } </script> </head> <body onkeydown = "isValidKey ( )"> </body> </html> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 251.
    236 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP ตัวอย่างการสร้าง AJAX dictionary จาก longdo ด้วย jQuery ตั ว อ ย่ า ง ก า ร ใ ช้ ง า น ต่ อ ไ ป นี้ เ ป็ น ก า ร น า ร ะ บ บ ค้ น ห า ค า ศั พ ท์ จ า ก เ ว็ บ ไ ซ ต์ http://dict.longdo.com/ เหมาะสาหรับใครที่ต้องการนาระบบค้นหาคาศัพท์ dictionary รูปแบบ AJAX ไปตกแต่งเว็บไซต์ โดยเฉพาะเว็บไซต์เกี่ยวกับการศึกษา มีขั้นตอนดังต่อไปนี้ 1. สร้างไฟล์ php ชื่อ ajax_translate.php มีคาสั่งดังต่อไปนี้ ตัวอย่างที่ 13.31 การสร้าง AJAX dictionary ในไฟล์ ajax_translate.php <?php header("Content-type:text/html; charset=UTF-8"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); // ตรวจสอบว่ามีการส่งคาค้นมาหรือไม่ if(isset($_GET['keyword']) && trim($_GET['keyword'])!=""){ $keyword=trim($_GET['keyword']); // นาผลลัพธ์การค้นหา จาก longdo dictionary มาไว้ในตัวแปร $data=file_get_contents("http://dict.longdo.com/mobile.php?search=".$keyword); // แสดงส่วนของเนื้อหาที่จาเป็นต้องแสดง echo strip_tags($data,"<a><table><td><tr><font><style><meta><br>"); } else { // กรณีไม่มีการส่งคาค้นมา echo "โปรดระบุคาที่ต้องการแปล"; // แสดงข้อความแจ้งเตือน } ?> 2. สร้างไฟล์สาหรับทดสอบ demo_ajax_translate.php โดยจะมีอยู่ 3 ส่วน หลักๆ ดังนี้ 2.1 ส่วนของ css สาหรับกาหนดรูปแบบ สีข้อความ พื้นหลัง หรืออื่นๆ ตามต้องการ 2.2 ส่วนของ element องค์ประกอบในการใช้งาน 2.3 ส่วนของ javascript โดยใช้งานผ่าน jQuery ตัวอย่างที่ 13.32 ไฟล์สาหรับทดสอบ demo_ajax_translate.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 252.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 237 <title>longdo ajax dictionary</title> <!--1.ส่วนของ css สาหรับกาหนดรูปแบบ สีข้อความ พื้นหลัง หรืออื่นๆ ตามต้องการ--> <style type="text/css"> div#myblock_dict{ font-family:tahoma, "Microsoft Sans Serif", sans-serif, Verdana; font-size:12px; margin:auto; width:350px; } input#translate_it{ background-color:#F6C; color:#FFF; border:1px groove #F9C; cursor:pointer; } div#input_search{ background-color:#000; color:#FFF; text-align:center; } div#context_search{ border:1px solid #F9C; height:300px; overflow:auto; } div#context_search{ font-family:tahoma, "Microsoft Sans Serif", sans-serif, Verdana; font-size:12px; padding:5px; background-color:#FDEDFE; } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 253.
    238 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP div#context_search a{ margin-left:3px !important; color:#F09; } div#context_search td{ padding:5px !important; } </style> </head> <body> <!--2.ส่วนของ element องค์ประกอบในการใช้งาน--> <div id="myblock_dict"> <div id="input_search">คาค้น <input type="text" name="keyword_q" id="keyword_q" /> <input type="button" name="translate_it" id="translate_it" value="แปล" /> </div> <div id="context_search"> </div> </div> <!--3.ส่วนของ javascript โดยใช้งานผ่าน jQuery--> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <script type="text/javascript"> $(function(){ // กาหนดตัวแปรสาหรับแสดงรูปกาลังโหลด var loading_img='<center>'; loading_img+='<img src="http://static.ak.fbcdn.net/rsrc.php/z5R48/hash/ejut8v2y.gif">'; loading_img+='</center>'; $("#keyword_q").click(function(){ // เมื่อคลิกที่ช่องคาค้น // เพื่อสะดวกในการพิมพ์คาค้นใหม่ได้เลย $(this).select(); // ถ้ามีขอความอยู่ ให้ทาการเลือกข้อความนั้น ้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 254.
    บทที่ 13 การใช้เทคนิคAJAX ร่วมกับ PHP 239 $("#context_search").html(""); // ล้างค่าข้อความผลลัพธ์เดิม ถ้ามี }); $("#translate_it").click(function(){ // เมื่อคลิกที่ปุ่มคาว่า แปล // แสดงรูปกาลังโหลดในส่วนผลลัพธ์ $("#context_search").html(loading_img); // ใช้ ajax ใน jQuery ส่งข้อมูลแบบ get $.get("ajax_translate.php",{keyword:$.trim($("#keyword_q").val()) },function(data) { $("#context_search").html(data); // แสดงผลลัพธ์จากการค้นหา }); }); $("#keyword_q").keyup(function(event){ if(event.keyCode==13) { // เมื่อกดปุ่ม Enter ให้เริ่มการค้นหา // แสดงรูปกาลังโหลดในส่วนผลลัพธ์ $("#context_search").html(loading_img); $.get("ajax_translate.php",{keyword:$.trim($("#keyword_q").val())},function(data){ // แสดงผลลัพธ์จากการค้นหา $("#context_search").html(data); }); } }); // เมื่อคลิกที่ Link ในผลลัพธ์ $("div#context_search a").live("click",function(){ // นาคาจาก Link ที่คลิก มาเก็บในตัวแปร var text_search=$.trim($(this).text()); // แสดงรูปกาลังโหลดในส่วนผลลัพธ์ $("#context_search").html(loading_img); // นาคาจาก Link ไปแสดงที่ช่อง คาค้น $("#keyword_q").val(text_search); $.get("ajax_translate.php",{keyword:text_search},function(data){ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 255.
    240 บทที่ 13การใช้เทคนิค AJAX ร่วมกับ PHP $("#context_search").html(data); // แสดงผลลัพธ์จากการค้นหา }); return false; }); }); </script> </body> </html> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 256.
    บทที่ 14 ฐานข้อมูล MySQLและการใช้งาน phpMyAdmin MySQL จัดอยู่ในกลุ่มของระบบริหารจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS : Relational Database Management System) ชนิดหนึ่ง และเป็นที่นิยมใช้กันมากในปัจจุบัน โดยเฉพาะอย่างยิ่งใน โลกของอินเทอร์เน็ตเนื่องจาก  MySQL เป็นฟรีแวร์ทางด้านฐานข้อมูลที่มีประสิทธิภาพสูง  นักพัฒนาฐานข้อมูลที่เคยใช้ MySQL ต่างยอมรับในความรวดเร็ว การรองรับจานวนผู้ใช้ และ ขนาดของข้อมูลจานวนมหาศาล  สนับสนุนการใช้งานบนระบบปฏิบัติการมากมาย เช่น UNIX OS/2 MAC OS Windows  สามารถใช้งานร่วมกับ Web Development platform เช่น C, C++ , Java, Perl, PHP, Python, TCL, หรือ ASP  ได้รับความนิยมอย่างมากในปัจจุบัน และมีแนวโน้มสูงขึ้นเรื่อยๆ ในอนาคต คาสั่งพื้นฐานของ MySQL บัญชา ปะสีละเตสัง (2553, หน้า 194) ได้กล่าวไว้ว่า การศึกษา MySQL ควรเริ่มต้นจากการใช้ คาสั่งพื้นฐานให้เกิดความคุ้น เคยเสียก่อน แม้ในการใช้งานจริง จะส่งคาสั่งผ่านฟังก์ชันต่างๆ ของ PHP ก็ ตาม แต่หากไม่มีพื้นฐานในการใช้งานกับตัวฐานข้อมูลโดยตรงจะทาให้เข้าใจในขั้นตอน และหลักการ ทางานที่แท้จริง คาสั่ง SHOW DATABASES; เป็นคาสั่งในการแสดงรายชื่อฐานข้อมูลทั้งหมด มีตัวอย่างดังนี้ ตัวอย่างที่ 14.1 การใช้คาสั่ง SHOW DATABASES; mysql> SHOW DATABASES; +-------------------------+ | Database | +-------------------------+ | mysql | | test | | parinya_db | +-------------------------+
  • 257.
    242 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin คาสั่ง USE; เป็นคาสั่งที่ใช้สาหรับเลือกใช้งานฐานข้อมูล มีตัวอย่างดังนี้ ตัวอย่างที่ 14.2 การใช้คาสั่ง USE; USE tablename; เมื่อ tablename หมายถึง ชื่อตารางที่จะเลือก ตัวอย่างที่ 14.3 ตัวอย่างการใช้ฐานข้อมูลชื่อ parinya_db จะใช้คาสั่งดังนี้ mysql>USE parinya_db; คาสั่ง SHOW TABLES; เป็นคาสั่งในการแสดงรายชื่อ ตาราง (Table) ที่มีในฐานข้อมูลที่เลือกจากการใช้คาสั่ง USE มี ตัวอย่างดังนี้ ตัวอย่างที่ 14.4 การใช้คาสั่ง SHOW TABLES; mysql> USE parinya_db; Database changed mysql> SHOW TABLES; +-----------------------+ | Tables_in_parinya_db | +-----------------------+ | question_suit1 | | question_user | +-----------------------+ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 258.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 243 | user_id | varchar(30) | NO | | NULL | | | password | varchar(30) | NO | | NULL | | | before_name | varchar(20) | YES | | NULL | | | name | varchar(60) | YES | | NULL | | | lastname | varchar(60) | YES | | NULL | | | privilege | varchar(1) | NO | |3 | | +-------------+-------------+------+-----+---------+----------------+ คาสั่ง DROP เป็นคาสั่งในการลบฐานข้อมูล หรือตารางข้อมูลที่ไม่ต้องการทิ้งไป โดยมีรูปแบบดังนี้ DROP ชื่อตาราง หรือชื่อฐานข้อมูล หากลบฐานข้อมูลจะทาให้ทุกๆ ตารางที่อยู่ในฐานข้อมูลนั้นถูกลบออกไปด้วย ตัวอย่างดังนี้ ตัวอย่างที่ 14.6 การใช้คาสั่ง DROP mysql>DROP parinya_db; คาสั่ง Quit หรือ Exit เป็นคาสั่งในการออกจากโปรแกรม MySQL ลักษณะองค์ประกอบของฐานข้อมูล โดยทั่วไปแล้ว องค์ประกอบหลักของระบบฐานข้อมูล MySQL จะมีลักษณะดังต่อไปนี้ ฐานข้อมูล (Database) ในการที่จะจัดเก็บข้อมูลใน MySQL ได้ จะต้องเริ่มต้นที่การสร้าง "ฐานข้อมูล" ก่อน ซึ่งฐานข้อมูลนี้อาจเปรียบได้กับโฟลเดอร์ที่อยู่ในไดเรกทอรี ตาราง (Table) ลาดับถัดไปจากฐานข้อมูลก็คือ ตารางฐานข้อมูล ซึ่งตารางเป็นการแยกจัดเก็บ ข้อมูล ในแต่ละเรื่องออกจากกัน เช่น ตารางพนักงาน ตารางสินค้า ตารางลูกค้า เป็นต้น ทั้งนี้ตารางอาจ เปรี ย บได้กับ ไฟล์ ต่างๆ ที่อยู่ ในโฟลเดอร์นั่นเอง และฐานข้อมูล หนึ่งๆ จะมีตารางจานวนเท่าไหร่ ก็ได้ (ขึ้นอยู่กับการวิเคราะห์ความสัมพันธ์ของข้อมูลภายในระบบที่จะพัฒนา) เช่นเดียวกับโฟลเดอร์หนึ่งๆ จะมี ไฟล์อยู่กี่ไฟล์ก็ได้ คอลัมน์ (Column) หรือขอบเขตข้อมูล (Field) ภายในตารางฐานข้อมูลจะประกอบไปด้ว ย คอลัมน์ต่างๆ เพื่อกาหนดว่า ตารางนั้นจะเก็บข้อมูลอะไรบ้าง ซึ่งโดยปกติแล้วข้อมูลที่จัดเก็บในตาราง เดียวกัน จะต้องมีความเกี่ยวข้องอย่างใดอย่างหนึ่งต่อกัน เช่น หากเป็นตารางที่จัดเก็บข้อมูลของพนั กงาน ก็อาจประกอบไปด้วยคอลัมน์เกี่ยวกับรหัส ชื่อ ที่อยู่ ตาแหน่ง เงินเดือน เป็นต้น นอกจากนี้แล้ว แต่ละ คอลัมน์จะต้องระบุชนิดข้อมูลให้สัมพันธ์กับข้อมูลที่จะจัดเก็บในคอลัมน์นั้นด้วย ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 259.
    244 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin ชนิดข้อมูลของคอลัมน์ เนื่องจากคอลัมน์ใช้สาหรับเก็บข้อมูลในแต่ละเรื่อง โดยข้อมูลเหล่านี้อาจจะมีหลายชนิดแตกต่าง กันออกไป เช่น ชื่อ หรือ ที่อยู่เป็นข้อมูลชนิดสตริง หรืออายุ หรือเงินเดือนมักจะเป็นชนิดตัวเลข และถ้า เป็นวันเกิดก็มักจะเป็นข้อมูลชนิดวันเวลา เป็นต้น ทั้งนี้เนื่องจากวิธีในการจัดการกับข้อมูลเหล่านี้ จะ ต่างกันออกไปตามลักษณะของข้อมูล ดังนั้นทุกคอลัมน์ของตารางฐานข้อมูล จะต้องกาหนดชนิดข้อมูล ให้กับมันเสมอ สาหรับ MySQL ได้แบ่งชนิดข้อมูลของคอลัมน์ออกเป็นดังนี้ ข้อมูลชนิดตัวเลข ข้อมูล ชนิ ดตัว เลขนั้ น มีอยู่ ห ลายชนิดตามขนาดของตัว เลข และในแต่ล ะชนิดนั้น ยังสามารถ กาหนดได้อีกว่าจะเป็นได้ทั้ งจานวนบวกและลบ (SIGNED) หรือเป็นได้เฉพาะจานวนบวกอย่างเดียว (UNSIGNED) ดังตารางต่อไปนี้ ตารางที่ 14.1 แสดงชนิดข้อมูลของ MySQL ชนิดตัวเลข ชนิด ไบต์ ไซน์ ค่าต่าสุด ค่าสูงสุด TINYINT 1 SIGNED -128 127 UNSIGNED 0 255 SMALLINT 2 SIGNED -32768 32767 UNSIGNED 0 65535 MEDLUMINT 3 SIGNED -8388608 8388067 UNSIGNED 0 16777215 INT 4 SIGNED -2147483648 2147483647 UNSIGNED 0 4294967295 BIGINT 8 SIGNED -9223372036854775808 9223372036854775807 UNSIGNED 0 18446744073709551615 FLOAT 4 SIGNED -3.402823466E+38 -1.1754966E-38 UNSIGNED 1.7976931348632157E+38 3.402823466+38 DOUBLE 8 SIGNED -1.7976931348623157E+308 -2.2250738585072014E-308 UNSIGNED 2.225073858072014E-308 1.7976931348623157E+308 ข้อมูลชนิดสตริง ข้อมูลชนิดสตริงที่กาหนดได้มีดังตารางด้านล่ าง ทั้งนี้ข้อมูลชนิด CHAR หรือ VARCHAR จะต้อง ระบุความยาวสูงสุดของสตริงลงไปด้วย ซึ่งกาหนดได้ไม่เกินค่า Maximum คือ 255 เช่น CHAR(50) หรือ VARCHAR(250) เป็นต้น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 260.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 245 ตารางที่ 14.2 แสดงชนิดข้อมูลของ MySQL ชนิดสตริง ชนิด ค่าสูงสุด CHAR(length) 255 VARCHAR(length) 255 YINYTEXT 255 TEXT 65535 MEDIUMTEXT 16777215 LONGTEXT 4294967295 ข้อมูลชนิด BLOB (Binary Large Object) ข้อมูลชนิด BLOB มักใช้กับข้อมูลประเภทรูปภาพ หรือมั ลติมีเดีย ซึ่งเป็นข้อมูลแบบไบนารี มีรายละเอียดดังตารางต่อไปนี้ ตารางที่ 14.3 แสดงชนิดข้อมูลของ MySQL ชนิด BLOB ชนิด TINYBLOB 255 BLOB 65535 MEDIIUMBLOB 16777215 LONGBLOB 4294967295 ค่าสูงสุด ข้อมูลชนิด SET และ ENUM ข้อมูลชนิด SET และ ENUM คือ กลุ่มของข้อมูลที่ทราบค่าที่แน่นอนแล้ วจานวนหนึ่ง ข้อมูลที่จะ กาหนดให้แก่คอลัมน์ชนิดนี้ได้ต้องเป็นข้อมูลที่เป็นสมาชิกของ SET หรือ ENUM เท่านั้น โดยข้อมูลชนิด SET จะมีสมาชิกได้ไม่เกิน 64 ตัว และ ENUM มีสมาชิกได้ไม่เกิน 65,535 ตัว รูปแบบของคอลัมน์ ประเภทนี้คือ ตารางที่ 14.4 แสดงชนิดข้อมูลของ MySQL ชนิด SET และ ENUM ชนิด รูปแบบ SET SET ("member1”, "member2”,…, "member64”) ENUM ENUM ("member1”, "member2”,…, "member65535”) ค่าสูงสุด 64 65535 ข้อมูลชนิดวันเวลา โดยปกติข้อมูลชนิดวันเวลาของ MySQL จะอยู่ในรูปแบบต่อไปนี้ YYYY-MM-DD หรือ Year-Month-Date เช่น วันที่ 20 เดือนตุลาคม ปี ค.ศ. 2010 จะต้องเขียนเป็น 2010-10-20 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 261.
    246 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin ตารางที่ 14.5 แสดงชนิดข้อมูลของ MySQL ชนิดวันเวลา ชนิด รายละเอียด ค่าสูงสุด DATE เฉพาะข้อมูลวันเดือนปี 1000 01 01 ถึง 9999 12 31 TIME เฉพาะข้อมูลเวลา -838:59:59 ถึง 838:59:59 DATETIME ทั้งวันเดือนปีและเวลา 1000-01-01 00:00:00 ถึง 9999-12-31 23-59-59 แอททริบิวต์ของคอลัมน์ แอททริบิวต์ (Attribute) หรือแฟล็ก (Flag) คือ ข้อกาหนดเพิ่มเติมนอกเหนือจากชนิดข้อมูลที่กาหนด ให้แก่คอลัมน์ ซึ่งแอททริบิวต์นี้จะช่วยให้จัดการข้อมูลได้สะดวกขึ้นและบางแอททริบิวต์ก็ยังช่วยตรวจสอบความ ถูกต้องของข้อมูลได้ด้วย แต่ต้องกาหนดให้สัมพันธ์กับชนิดข้อมูลของคอลัมน์ แอททริบิวต์ของคอลัมน์มดังนี้ ี ตารางที่ 14.6 แสดงแอททริบิวต์ของคอลัมน์ใน MySQL แอททริบิวต์ รายละเอียด NOT NULL ห้ามคอลัมน์ เป็นค่าว่าง (NULL) คือ จะต้องใส่ข้อมูลให้กับคอลัมน์เสมอแอททริ บิวต์ NOT NULL มักจะใช้เพื่อควบคุมความถูกต้องของตารางฐานข้อมูล BINARTY ใช้กับข้อมูลชนิด CHAR หรือ VARCHAR เพื่อให้ข้อมูลนาความแตกต่างของ รูปแบบตัวพิมพ์เล็ก-ตัวพิมพ์ใหญ่มาพิจารณาด้วย หรือเป็นแบบ case-sensitive นั่นเอง เพราะโดยปกติแล้วฐานข้อมูลจะจัดการสตริงในแบบ case-insensitive AUTO_INCREMENT กาหนดให้ใส่ตัวเลขลงไปในคอลัมน์แบบอัตโนมัติ ซึ่งตัวเลขที่ใส่เข้าไปโดยปกติจะ เริ่มจาก 1 แล้วเพิ่มค่าทีละ 1 ไปเรื่อยๆ ซึ่งค่าที่โปรแกรมใส่ให้ จะไม่สามารถ เปลี่ยนแปลงแก้ไขได้ ทั้งนี้คอลัมน์ที่จะกาหนดให้เป็นแบบ AUTO_INCREMEN ได้ ต้องกาหนดชนิดข้อมูลให้เป็นแบบเลขจานวนเต็ม เช่น INT เป็นต้น และห้ามใช้ ร่วมกับแอททริบิวต์ NULL แต่ส่วนมากนิยมใช้ร่วมกับ NOT NULL DEFAULT เป็นการกาหนดค่าให้แก่คอลัมน์ ด้วยค่าใดค่าหนึ่งเอาไว้ล่วงหน้า ซึ่งมักเป็นค่าที่ใช้ กั น บ่ อ ยๆ เช่ น พนั ก งานส่ ว นใหญ่ เ ป็ น เพศหญิ ง ดั ง นั้ น จึ ง อาจก าหนดค่ า DEFAULT ให้แก่คอลัมน์ sex เป็น 'female' เป็นต้น แต่หากไม่ต้องการใช้ค่า DEFAULT ที่กาหนดไว้ ก็สามารถกาหนดเป็นอย่างอื่นได้ INDEX ใช้ในการจัดเรียงลาดับข้อมูลจากน้อยไปหามาก หรือมากไปหาน้อย ซึ่งข้อมูลที่ เรียงลาดับจะช่วยให้ค้นหารวดเร็วขึ้น สามารถจัดเรียงลาดับข้อมูลได้มากกว่า 1 คอลัมน์ เมื่อสร้าง index โปรแกรมฐานข้อมูลจะสร้างไฟล์ index แยกออกไป ต่างหาก เนื่องจากเรื่อง index ถือว่าเป็นเรื่องสาคัญอย่างหนึ่งของฐานข้อมูล ดังนั้นจะได้ศึกษารายละเอียดเพิ่มเติมอีกครั้งในเรื่อง index ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 262.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 247 ตารางที่ 14.6 (ต่อ) แอททริบิวต์ UNIQUE PRIMARY KEY รายละเอียด เป็น index ในอีกลักษณะหนึ่ง โดยมีข้อกาหนดที่สาคัญ คือ ห้ามมีข้อมูลซ้ากันใน คอลัมน์เดียวกัน ซึ่งที่มักใช้กับข้อมูลที่คาดว่า ข้อมูลในแต่ละแถวจะไม่ มีทางซ้ากัน ได้ เ ลย เช่ น รหั ส พนั ก งาน อี เ มล เป็ น ต้ น และถ้ า ใส่ ข้ อ มู ล ซ้ ากั บ ที่ มี อ ยู่ แ ล้ ว โปรแกรมจะไม่ยอมรับข้อมูลนั้น ดังนั้น แอททริบิวต์ UNIQUE สามารถนามาช่วย ในการตรวจสอบความถูกต้องได้อีกทางหนึ่ง เป็น index ในอีกลักษะหนึ่ง โดย Primary Key คือ คอลัมน์ที่จะใช้เป็นคอลัมน์ หลักของตาราง แต่ Primary Key มีข้อกาหนดที่สาคัญคือ คอลัมน์ที่จะใช้เป็น Primary Key ข้อมูลในคอลัมน์นั้นต้องไม่ซ้ากันเลย โดยทั่วไปทุกๆ ตารางนิยมให้ มี Primary Key เสมอ การสร้างฐานข้อมูล เจย์ กรีนสแปน และแบรด บุลเกอร์ (Jay Greenspan and Brad Bulger, 2001, p.28) ได้กล่าว ไว้ว่า ขั้นตอนการสร้างฐานข้อมูลเป็นขั้นตอนแรกสุดก่อนเริ่มขั้นตอนต่อๆ ไป โดยใช้รูปแบบคาสั่งพื้นฐาน ของ SQL (Structure Query Language) การสร้างฐานข้อมูลมีรูปแบบดังนี้ CREATE DATABASE (IF NOT EXISTS) tablename; หมายเหตุ คาสั่ง IF NOT EXISTS ใช้ป้องกันข้อผิดพลาดในกรณีที่มีฐานข้อมูลนั้นอยู่ก่อนหน้าแล้ว ซึ่งจะ ระบุหรือไม่ก็ได้ ตัวอย่างที่ 14.6 การใช้คาสั่ง CREATE DATABASE เพื่อสร้างฐานข้อมูลใหม่ดังนี้ mysql> CREATE DATABASE guestbook; จากตัวอย่างเป็นการสร้างฐานข้อมูลชื่อ guestbook โดยฐานข้อมูลที่สร้างขึ้นนี้ใช้เพื่อเก็บตาราง ต่ า งๆ ที่ เ กี่ ย วข้ อ ง สามารถตรวจสอบได้ ว่ า ฐานข้ อ มู ล ได้ ถู ก สร้ า งแล้ ว หรื อ ยั ง โดย ใช้ ค าสั่ ง SHOW DATABASES ก่อนหน้าที่ได้อธิบายไปแล้ว การสร้างตารางฐานข้อมูล การสร้างตารางฐานข้อมูลจะต้องเขียนเป็นคาสั่ง SQL เพื่อกาหนดโครงสร้างของตาราง การสร้าง ตารางตามชื่อที่กาหนดไว้ในฐานข้อมูลที่กาลังเปิดอยู่ โดยมีกฎการตั้งชื่อตาราง คือ อนุญาตให้ตั้งชื่อที่มี ความยาวได้ไม่เกิน 64 ตัวอักษร และห้ามใช้อักขระ "/" หรือ "." ในชื่อตาราง เพราะอาจเกิดข้อผิดพลาดใน ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 263.
    248 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin การอ้างถึงตารางฐานข้อมูล ตารางจะมีโครงสร้างประกอบด้วย ชื่อตาราง ชื่อขอบเขตข้อมูล ชนิดข้อมูล ขนาด และแอททริบิวต์เพิ่มเติมอื่นๆ มีตัวอย่างการใช้คาสั่งดังนี้ ตัวอย่างที่ 14.7 การสร้างตารางชื่อ guestbook ในฐานข้อมูลชื่อ guestbook mysql> USE guestbook; Database changed mysql> CREATE TABLE guestbook ( -> name VARCHAR (40) NULL, -> location VARCHAR (40) NULL, -> email VARCHAR (40) NULL, -> url VARCHAR (40) NULL, -> comment TEXT NULL); จากโค้ดคาสั่งนี้ แสดงว่าตาราง guestbook ประกอบด้วย 5 คอลัมน์ ประกอบด้วย name, location, email, url และ comment นอกจากนี้ตารางยังสามารถสร้างได้หลายวิธีและสามารถกาหนด แอททริบิวต์ให้กับคอลัมน์ได้มากกว่า 1 แอททริบิวต์ มีตัวอย่างดังนี้ ตัวอย่างที่ 14.8 การสร้างตารางและกาหนดแอททริบิวต์ให้กับคอลัมน์มากกว่า 1 แอททริบิวต์ mysql> CREATE TABLE employees ( -> emp_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -> firstname VARCHAR (20) NOT NULL, -> lastname VARCHAR (30) NOT NULL, -> position VARCHAR (20), -> salary MEDIUMINT UNSIGNED, -> address TEXT, -> email VARCHAR (40) UNIQUE ) ; การกาหนด Primary Key Primary key คือ คอลัมน์ที่ใช้เป็นคอลัมน์หลักของตาราง โดยมีข้อกาหนดที่สาคัญ คือ คอลัมน์ที่ จะใช้เป็น Primary key ต้องไม่มีข้อมูลที่ซ้ากันเลย แต่กรณีที่คอลัมน์ที่ต้องการใช้เป็น Primary key มี โอกาสที่ข้อมูลจะซ้ากัน ก็สามารถเลือกมากกว่า 1 คอลัมน์ มาเป็น Primary key ร่วมกันได้ เช่น สมมติ ตารางฐานข้อมูลพนักงานประกอบด้วยคอลัมน์ "firstname" และ "lastname" หากคาดว่าชื่อของ พนักงานอาจซ้ากันได้ ดังนั้นจึงไม่สามารถใช้คอลัมน์ "firstname" เป็น Primary key เพียงคอลัมน์เดียว ได้ จึงอาจเลือกใช้ทั้ง firstname และ lastname เป็น Primary key ร่วมกัน กรณีที่ต้องใช้หลายคอลัมน์เป็น Primary key ร่วมกัน จึงไม่สามารถระบุแอททริบิวต์ Primary key แบบแยกคอลัมน์ได้ จะต้องกาหนดในรูปแบบของฟังก์ชันตามรูปแบบต่อไปนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 264.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 249 PRIMARY KEY (column1, column2,…) โดยการระบุไว้ต่อจากคอลัมน์สุดท้ายของตารางตามรูปแบบที่ได้กล่าวมาแล้ว เช่น ตัวอย่างที่ 14.9 การระบุ PRIMARY KEY ให้กับคอลัมน์ของตารางใดๆ mysql>CREATE TABLE employees ( -> firstname VARCHAR (30), -> lastname VARCHAR (30), -> address TEXT , -> PRIMARY KEY (firstname, lastname)); คอลัมน์แบบ Unique จากข้อกาหนดของ Unique ข้อมูลในคอลัมน์นั้นจะต้องไม่ซ้ากันเลย ซึ่งสามารถสร้างคอลัมน์ แบบ Unique ได้หลายคอลัมน์ และแต่ละคอลัมน์จะเป็นอิสระจากกัน (ต่างจาก Primary Key ที่จะนา คอลัมน์ที่เป็น Primary Key มาพิจารณาร่วมกัน) นั่นคือ ไม่ว่าจะสร้างคอลัมน์แบบ Unique ขึ้นมากี่ คอลัมน์ก็ตาม คอลัมน์เหล่านั้น ในคอลัมน์เดียวกันต้องไม่มีข้อมูลที่ซ้ากันเลย ดังนั้นการสร้ าง Unique แบบระบุแยกคอลัมน์ หรือจะสร้างรวมด้วยฟังก์ชัน UNIQUE ( ) ก็ให้ผลที่ไม่แตกต่างกัน เช่น คาสั่งต่อไปนี้ ให้ผลลัพธ์ที่เหมือนกัน ตัวอย่างที่ 14.10 ตัวอย่างการกาหนดคอลัมน์แบบ UNIQUE mysql>CREATE TABLE friends ( -> name CHAR (30) , -> email CHAR (40) UNIQUE , -> phone CHAR (30) UNIQUE ) ; หรือ mysql>CREATE TABLE friends ( -> name CHAR (30), email CHAR (40), phone CHAR (30) , -> UNIQUE (email, phone)) ; การสร้าง Index Index เป็นการจัดเรียงลาดับข้อมูลเพื่อให้สามารถค้นหาข้อมูลได้รวดเร็วยิ่งขึ้นโดย MySQL จะ สร้างไฟล์ Index แยกจากข้อมูลไว้ต่างหาก ซึ่งเรียงลาดับข้อมูลสามารถเรียงได้ทั้งแบบจากน้อยไปหามาก หรือถ้าเป็นตัวอักษรคือ เรียงจาก A ไป Z โดยเขียนแทนด้วย ASC และเรียงจากมากไปหาน้อย หรือจาก Z ไป A เขียนแทนด้วย DESC สาหรับค่าโดยปริยาย คือ ASC ทั้งนี้สามารถสร้าง Index ให้กับคอลัมน์ใด คอลัมน์หนึ่ง หรือกาหนดให้กับหลายๆ คอลัมน์ได้ เช่นเดียวกับ UNIQUE หรือ PRIMARY KEY ด้วยการ กาหนดแบบฟังก์ชัน เช่น ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 265.
    250 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin ตัวอย่างที่ 14.11 การสร้าง Index mysql>CREATE TABLE employees ( -> firstname VARCHAR (20) , -> lastname VARCHAR (30) , -> address TEXT , -> INDEX (firstname, lastname)); การกาหนดหลายๆ แอททริบิวต์แบบฟังก์ชัน หากต้อ งการก าหนดหลายๆ แอททริ บิ ว ต์ แ บบฟั ง ก์ชั น ก็ใ ห้ ว างต่ อท้ า ยคอลั ม น์ สุ ดท้ า ย โดย เรียงลาดับอย่างไรก็ได้ ตัวอย่างดังนี้ ตัวอย่างที่ 14.12 การกาหนดหลายๆ แอททริบิวต์แบบฟังก์ชัน mysql>CHEATE TABLE employees ( -> id INT AUTO_INCREMENT , -> firstname VARCHAR (30) , -> lastname VARCHAR (30) , -> phone VARCHAR (30) , -> PRIMARY KEY (id) , INDEX (firstname, lastname) , UNIQUE (email, phone)) ; การสร้างตารางจากตารางอื่นที่มีอยู่แล้ว การสร้างตารางฐานข้อมูล อาจสร้างโดยการคัดลอกมาจากตารางที่มีอยู่แล้ว ถ้าคัดลอกมาทั้งหมด ก็จะทาให้ตารางใหม่มีลั กษณะเหมือนกับตารางต้นแบบทุกประการ หรืออาจเลือกเพียงบางคอลัมน์ก็ได้ รูปแบบการคัดลอกตารางคือ CREATE TABLE ชื่อตารางใหม่ SELECT คอลัมน์_1, คอลัมน์_2, …, คอลัมน์_N FROM ชื่อตารางเดิม [WHERE เงื่อนไข] คาสั่ง SELECT…FROM เป็นคาสั่งสาหรับการคัดเลือกคอลัมน์ที่ต้องการ ในการเลือกคอลัมน์ หาก ต้องการคัดลอกทุกคอลัมน์ อาจใช้เครื่องหมาย * แทนการระบุชื่อคอลัมน์ เช่น ตัวอย่างที่ 14.13 การใช้คาสั่ง SELECT…FROM เป็นคาสั่งสาหรับการคัดเลือกคอลัมน์ที่ต้องการ mysql>CREATE TABLE employee2 SELECT * FROM employees; หากต้องการคัดเลือกเพียงบางคอลัมน์ ก็ให้ระบุชื่อคอลัมน์ลงไป เช่น mysql>CREATE TABLE employee2 SELECT firstname, lastname FROM employees; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 266.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 251 ปกติหากไม่ระบุ เงื่อนไข ถ้าตารางต้นแบบมีข้อมูลอยู่แล้ว ข้อมูลนั้นก็จะถูกคัดลอกมาทั้งหมด ทุกแถว แต่สามารถกาหนดเงื่อนไขเพื่อคัดลอกเฉพาะข้อมูลที่ต้องการได้ เช่น ตัวอย่างที่ 14.14 การใช้คาสั่ง SELECT…FROM แบบมีเงื่อนไข mysql>CREATE TABLE emp -> SELECT * FROM employees -> WHERE position = "Programmer"; การแทรก ปรับปรุง ลบ และเรียกดูข้อมูลในตาราง การแทรกข้อมูลในตารางด้วยคาสั่ง INSERT การแทรกข้อมูลลงในตารางด้วยคาสั่ง INSERT มีรูปแบบคาสั่งดังนี้ INSERT INTO tablename [column1, column2,… )] VALUES (value1, value2, ...) ; เมื่อ tablename หมายถึง ชื่อตาราง column หมายถึง ชื่อคอลัมน์ ซึ่งจะกาหนดหรือไม่ก็ได้ โดยหากกาหนด จะต้องระบุ value เรียงตามลาดับการจัดเรียงของ column หากไม่กาหนด จะต้องระบุ value ให้ครบทุกคอลัมน์ และเรียงตามลาดับการ จัดเรียงของคอลัมน์ในตาราง ตัวอย่างที่ 14.15 การแทรกข้อมูลในตารางด้วยคาสั่ง INSERT mysql>INSERT INTO employees VALUES (123, "John", "john@example.com"); จากรูปแบบของ INSERT ที่กล่าวมานี้ จะสามารถใส่ข้อมูลได้เพียงครั้งละ 1 แถว หากจะแทรก ข้อมูลมากกว่า 1 แถว ก็ต้องใช้คาสั่ง INSERT ซ้าๆ ในทุกแถว ซึ่งอาจดูไม่สะดวกนัก แต่ใน MySQL ยังมี วิธีที่สามารถแทรกข้อมูลพร้อมกันครั้งละหลายๆ แถว โดยคาสั่ง INSERT เพียงครั้งเดียว ในรูปแบบดังนี้ INSERT INTO tablename VALUES (ค่าคอลัมน์_1_ของแถวที่_1,ค่าของคอลัมน์_2_ของแถวที่_1,…) , (ค่าคอลัมน์_1_ของแถวที่_2,ค่าของคอลัมน์_2_ของแถวที่_2,…) , . . . (ค่าคอลัมน์_N_ของแถวที่_N,ค่าของคอลัมน์_N_ของแถวที่_N,…); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 267.
    252 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin ตัวอย่างที่ 14.16 การแทรกข้อมูลในตารางด้วยคาสั่ง INSERT หลายระเบียนในครั้งเดียว mysql>INSERT INTO employees VALUES -> (123, "John", "john@example.com") , -> (456, "Jim", "jim@yahoo.com") , -> (789, "Jane", "jane@hotmail.com") ; การปรับปรุงข้อมูลในตารางด้วยคาสั่ง UPDATE คาสั่งที่ใช้สาหรับปรับปรุงข้อมูลในตารางด้วยคาสั่ง UPDATE สามารถทาการปรับปรุงข้อมูลได้ หลายคอลัมน์และหลายระเบียนภายในคาสั่ง 1 คาสั่ง ทั้งนี้ขึ้นอยู่กับ WHERE ที่ผู้ใช้ได้เขียนขึ้น การ ปรับปรุงข้อมูลลงในตารางจะต้องใช้คาสั่ง SQL มีรูปแบบโดยทั่วไปดังนี้ UPDATE tablename SET column1=expression1, column2=expression2, ... [WHERE condition] [LIMIT limit_criteria] ; เมื่อ tablename หมายถึง ชื่อตารางที่ต้องการปรับปรุงข้อมูล column หมายถึง คอลัมน์ที่ต้องการปรับปรุงข้อมูล expression หมายถึง รูปแบบการคานวณหรือค่าใหม่ที่ต้องการกาหนด condition หมายถึง เงื่อนไข limit_criteria หมายถึง กาหนดแถวเริ่มต้นและจานวนแถวที่จะปรับปรุงข้อมูล ตัวอย่างที่ 14.17 การปรับปรุงข้อมูลในตารางด้วยคาสั่ง UPDATE mysql> UPDATE country SET CountryCode='JP',CountryName='Japan' WHERE CountryCode='CH'; จากตัวอย่างเป็นการปรับปรุงข้อมูลในตาราง country โดยกาหนดให้คอลัมน์ CountryCode มี ค่าเท่ากับ 'JP' และ CountryName มีค่าเท่ากับ 'Japan' โดยมีเงื่อนไขว่าจะปรับปรุงข้อมูลก็ต่อเมื่อ คอลัมน์ CountryCode มีค่าเท่ากับ 'CH' เท่านั้น การลบข้อมูลในตารางด้วยคาสั่ง DELETE คาสั่งที่ใช้สาหรับลบข้อมูลในตารางด้วยคาสั่ง DELETE สามารถทาการลบได้หลายระเบียนภายใน คาสั่งเดียว หรือว่าระเบียนเดียว ทั้งนี้ขึ้นอยู่กับ WHERE ที่ผู้ใช้เขียนขึ้นด้วย การลบข้อมูลลงในตาราง จะต้องใช้คาสั่ง SQL ซึ่งมีรูปแบบโดยทั่วไปดังนี้ DELETE FROM tablename [WHERE condition] [LIMIT limit_criteria] ; เมื่อ tablename หมายถึง ชื่อตาราง condition หมายถึง เงื่อนไข limit_criteria หมายถึง กาหนดแถวเริ่มต้นและจานวนแถวที่จะลบข้อมูล ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 268.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 253 ตัวอย่างที่ 14.18 การลบข้อมูลในตารางด้วยคาสั่ง DELETE mysql>DELETE FROM country WHERE CountryCode = 'JP'; จากตัวอย่างเป็นการลบข้อมูลในตารางด้วยคาสั่ง DELETE ในตาราง "country" โดยมีเงื่อนไข การลบ คือ คอลัมน์ "CountryCode" จะต้องมีค่าเท่ากับ 'JP' จึงจะลบข้อมูล การเรียกดูข้อมูลด้วยคาสั่ง SELECT คาสั่งที่ใช้สาหรับการเรียกดูข้อมูลในตาราง จะใช้คาสั่ง SELECT ซึ่งสามารถระบุเงื่อนไขต่างๆ ได้ การใช้คาสั่ง SELECT สามารถแบ่งตามลักษณะการใช้งาน มีรูปแบบดังนี้  การเรียกดูข้อมูลอย่างง่าย มีรูปแบบดังนี้ SELECT item FROM tablename; เมื่อ item หมายถึง ชื่ อ คอลั ม น์ ที่ ต้ อ งการเรี ย กดู หากมี ห ลายคอลั ม น์ จ ะคั่ น ด้ ว ย เครื่องหมาย Comma หากต้องการเรียกดูข้อมูลทุกคอลัมน์ สามารถใช้เครื่องหมาย * แทน tablename หมายถึง ชื่อตาราง ตัวอย่างข้อมูล (ชื่อตาราง customer) Customer Name Email Country Budget Used ID Code C001 Parinya Noidonprai parinya@hotmail.com TH 1000000 600000 C002 John Smith john.smith@ya.com EN 2000000 300000 C003 Jame Born jame.born@test.com US 3000000 600000 C004 Chalee Angel chalee@hotmail.com US 4000000 100000 ตัวอย่างที่ 14.19 การใช้คาสั่งสาหรับเรียกดูข้อมูล mysql>SELECT CustomerID, Name, Email FROM customer; ผลลัพธ์ที่ได้จากคาสั่ง Customer Name Email ID C001 Parinya Noidonprai parinya@hotmail.com C002 John Smith john.smith@ya.com C003 Jame Born jame.born@test.com C004 Chalee Angel chalee@hotmail.com ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 269.
    254 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin  การเรียกดูข้อมูลแบบมีเงื่อนไข มีรูปแบบดังนี้ SELECT item FROM tablename [WHERE condition] [GROUP BY group_type] [HAVING where_definition] [ORDER BY order_type] [LIMIT limit_criteria] ; เมื่อ condition หมายถึง เงื่อนไขที่ต้องการกาหนด group_type หมายถึง รายชื่อคอลัมน์ที่ใช้ในการกาหนดกลุ่ม where_definition หมายถึง เงื่อนไขที่ใช้ร่วมกับคาสั่ง GROUP BY order_type หมายถึง ชนิดของการเรียงลาดับ limit_criteria หมายถึง ตาแหน่งและจานวนแถวที่ต้องการเลือก หมายเหตุ WHERE ใช้เรียกดูข้อมูลแบบมีเงื่อนไข เป็นการระบุค่าเฉพาะข้อมูลที่ต้องการเรียกดู อาจใช้ เงื่อนไขเพื่อดึงข้อมูลบางแถวจากตารางก็ได้ โดยภายในคาสั่ง WHERE ประกอบด้วยส่วนสาคัญ ได้แก่ ชื่อคอลัมน์ ได้แก่ ชื่อคอลัมน์โอเปอร์เรเตอร์ และข้อมูลเฉพาะที่ต้องการแสดงเป็นเงื่อนไข ของคอลัมน์ที่ระบุ ตารางที่ 14.7 แสดงโอเปอร์เรเตอร์ที่ใช้งานร่วมกับคาสั่ง WHERE โอเปอร์เรเตอร์ ชื่อ ตัวอย่าง = เท่ากับ column = 8000 > มากกว่า column > 66.00 < น้อยกว่า column < 66.00 >= มากกว่าหรือเท่ากับ column >= 66.00 <= น้อยกว่าหรือเท่ากับ column <= 66.00 != หรือ <> ไม่เท่ากับ column !=0 IS NULL ค่าว่าง column IS NULL IS NOT NULL ไม่ใช่ค่าว่าง column IS NOT NULL BETWEEN ค่าที่อยู่ระหว่าง column BETWEEN 0 AND 66.00 IN ค่าที่อยู่ในคอลัมน์ที่กาหนด column IN ("mai", "mon") ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 270.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 255 ตารางที่ 14.7 (ต่อ) โอเปอร์เรเตอร์ ชื่อ ตัวอย่าง NOT IN ค่าที่ไม่ได้อยู่ในคอลัมน์ที่กาหนด column NOT IN ("mai", "mon") LIKE เหมือนกับรูปแบบที่กาหนด column LIKE ("mai%") NOT LIKE ไม่เหมือนกับรูปแบบที่กาหนด column NOT LIKE ("mai%") REGEXP Regular Expression column REGEXP ตัวอย่างที่ 14.20 การเรียกดูข้อมูลจากตาราง "books" ที่มีค่า cat_id เป็น 1 เท่านั้น mysql>SELECT * FROM books WHERE cat_id = 1; ตัวอย่างที่ 14.21 การเรียกดูข้อมูลจากตาราง "books" ที่มีค่า price อยู่ระหว่าง 250 ถึง 340 mysql>SELECT * FROM books WHERE price BETWEEN 250 AND 340; ตัวอย่างที่ 14.22 การเรียกดูข้อมูลจากตาราง "books" โดยกาหนดเงื่อนไขด้วย LIKE (เฉพาะ หนังสือที่มีคาว่า PHP) mysql>SELECT * FROM books WHERE book_title LIKE '%PHP%'; การใช้ GROUP BY เพื่อค้นหาข้อมูลแล้วแยกเป็นกลุ่มตามเงื่อนไขที่กาหนด สามารถใช้ร่วมกับ ฟังก์ชัน Aggregate เพื่อหาค่าทางสถิติของกลุ่มข้อมูล มีรายละเอียดดังนี้ ตารางที่ 14.8 แสดงฟังก์ชัน Aggregate สาหรับใช้ร่วมกับ GROUP BY ฟังก์ชัน คาอธิบาย AVG (column) หาค่าเฉลี่ยของคอลัมน์ COUNT (item) นับจานวนรายการ MIN (column) / MAX (column) หาค่าต่าสุด / ค่าสูงสุด ในคอลัมน์ STD (column) / STDDEV (column) หาค่า Standard Deviation (ส่วนเบี่ยงเบนมาตรฐาน) ใน คอลัมน์ SUM (column) หาค่าผลรวมของคอลัมน์ ตัวอย่างที่ 14.23 การใช้ GROUP BY และฟังก์ชัน COUNT ( ) mysql>SELECT pub_id, COUNT (book_isbn) FROM books GROUP BY pub_id; จากตัวอย่างเป็นการใช้คาสั่ง SELECT แสดงคอลัมน์ "pub_id" และใช้ฟังก์ชัน COUNT ( ) นับ คอลัมน์ "book_isbn" จากนั้นใช้คาสั่ง GROUP BY เพื่อหาค่าของข้อมูลตามกลุ่มของคอลัมน์ "pub_id" การใช้ HAVING ในการกาหนดกลุ่มให้กับข้อมูลด้วยการใช้คาสั่ง GROUP BY เมื่อต้องการกาหนด เงื่อนไขเพิ่มเติมเพื่อแบ่งกลุ่มข้อมูล ให้กาหนดเงื่อนไขที่ต้องการนั้นในคาสั่ง HAVING มีตัวอย่างดังนี้ ตัวอย่างที่ 14.24 การใช้ HAVING ในการกาหนดกลุ่มให้กับข้อมูล mysql> SELECT pub_id, COUNT (book_isbn) FROM books GROUP BY pub_id HAVING pub_id=1; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 271.
    256 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin จากตัวอย่างเป็นการใช้คาสั่ง SELECT แสดงคอลัมน์ "pub_id" และใช้ฟังก์ชัน COUNT ( ) นับ คอลัมน์ "book_isbn" จากนั้นใช้คาสั่ง GROUP BY เพื่อหาค่าของข้อมูลตามกลุ่มของคอลัมน์ "pub_id" และใช้ HAVING เพื่อแสดงเฉพาะ "pub_id" ที่มีค่าเป็น 1 เท่านั้น การใช้ ORDER BY ร่วมกับคาสั่ง SELECT เพื่อเลือกข้อมูลโดยการเรียงลาดับตามเงื่อนไขที่ กาหนดจากน้อยไปมา (ASC: Ascending) หรือมากไปน้อย (DESC: Descending) มีตัวอย่างดังนี้ ตัวอย่างที่ 14.25 การใช้ ORDER BY ร่วมกับคาสั่ง SELECT mysql>SELECT * FROM books ORDER BY price DESC; จากตัวอย่างเป็นการใช้คาสั่ง SELECT โดยเรียงลาดับค่าในคอลัมน์ "price" จากมากไปน้อย (DESC) การใช้ LIMIT ร่วมกับคาสั่ง SELECT ใช้เพื่อระบุแนวเริ่มต้นและจานวนแถวที่จะแสดง โดย จะต้องส่งค่าพารามิเตอร์ 2 ค่า คือ ตาแหน่งของแถวเริ่มต้นและจานวนแถว มีตัวอย่างดังนี้ ตัวอย่างที่ 14.26 การใช้ LIMIT ร่วมกับคาสั่ง SELECT mysql>SELECT * FROM books LIMIT 3, 2; จากตัวอย่างเป็นการใช้คาสั่ง SELECT ร่วมกับ LIMIT โดยเริ่มต้นจากแถวที่ 3 (เริ่มนับแถวแรก คือ 0) แสดงทั้งหมด 2 แถว จัดการฐานข้อมูลด้วย phpMyAdmin เนื่องจากฐานข้อมูล MySQL ติดต่อกับผู้ใช้ผ่านทางคอมมานต์ไลน์ (Command Line) ทาให้ ผู้ใช้ต้องพิมพ์คาสั่งต่างๆ ลงไปเอง ทาให้ไม่สะดวกต่อการใช้งาน จากปัญหาดังกล่าวทาให้มีผู้ที่คิดสร้าง เครื่องมือขึ้นมาช่วยให้บรรดาโปรแกรมเมอร์ PHP สามารถจัดการกับฐานข้อมูล MySQL ได้ง่ายขึ้น โดย เครื่องมือที่ว่ามีชื่อว่า phpMyAdmin เป็นเว็บแอปพลิเคชั่นที่เขียนด้วย PHP แต่มีความสามารถในการ จัดการกับ MySQL ได้เกือบทุกอย่าง โดยจะติดต่อกับผู้ใช้ในแบบ GUI ทาให้ใช้งานง่าย ประหยัดเวลาใน การพิมพ์คาสั่ง และช่วยลดข้อผิดพลาดลงได้ค่อนข้างมาก นอกจากนี้บรรดาผู้ให้บริการ Web Hosting ส่วนใหญ่จะมี phpMyAdmin ติดตั้งไว้ให้ใช้งานด้วย สาหรับผู้ที่ติดตั้ง AppServ จะมี phpMyAdmin เป็นองค์ประกอบอย่างหนึ่งอยู่แล้ว และหากใน ตอนติดตั้ง เลือกให้ติดตั้ง phpMyAdmin ลงไปด้วย ก็พร้อมใช้งานได้ทันที หรือสามารถติดตั้งเวอร์ชั่น ใหม่ ๆ สามารถดาวน์ โ หลดได้ ที่ http://www.phpmyadmin.net/home_page/downloads.php เนื่องจาก phpMyAdmin มีหลายเวอร์ชั่น สาหรับหนังสือเล่มนี้ผู้แต่งได้เลือกใช้เวอร์ชั่น 3.5.4 การเริ่มต้นใช้งาน phpMyAdmin การใช้งาน phpMyAdmin จะต้องทาผ่านบราวเซอร์เท่านั้น หน้าโฮมเพจ (Homepage) ปกติจะ อยู่ที่ http://localhost/phpmyadmin/index.php เมื่อเปิดเพจนี้ จะพบกับหน้าจอที่ให้ใส่ล็อกอิน และ พาสเวิร์ด สาหรับพาสเวิร์ดก็เป็นของ MySQL ตามที่กาหนดไว้ตอนติดตั้ง ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 272.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 257 ภาพที่ 14.1 หน้าล็อกอินเพื่อเข้าสู่ระบบของ phpMyAdmin เวอร์ชัน 3.5.4 หลังการล็อกอินเข้าสู่ phpMyAdmin จะปรากฏหน้าเพจ ดังรูป ภาพที่ 14.2 หน้าเพจหลังจากล็อกอินเข้าสู่ระบบ phpMyAdmin เวอร์ชัน 3.5.4 การสร้างฐานข้อมูล การสร้างฐานข้อมูลนี้ จะเหมือนกับการใช้คาสั่ง CREDATE DATABASE ที่ใช้ผ่านคอมมานด์ไลน์ ของ MySQL นั่นเอง การสร้างฐานข้อมูลให้เริ่มจากเพจ ตามขั้นตอนดังนี้ 1. คลิก "Databases" 2. พิมพ์ชื่อฐานข้อมูล ที่ต้องการสร้างใหม่ ส่ ว นการเรียงล าดั บ (Collation) หากมีข้อมูล เป็ น ภาษาไทย และต้องการใช้เป็นเกณฑ์ในการเรียงลาดับ ก็ให้เลือก utf8_general_ci 3. คลิกที่ปุ่ม "Create" เพื่อเริ่มต้นการสร้างฐานข้อมูลใหม่ หากต้องการสร้างฐานข้อมูลเพิ่ม ก็ให้ ย้อนกลับไปขั้นตอนเริ่มแรกใหม่ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 273.
    258 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin    ภาพที่ 14.3 แสดงขั้นตอนการสร้างฐานข้อมูลใหม่ การสร้างตาราง ก่อนการสร้างตารางต้องสร้างฐานข้อมูลไว้ก่อนแล้ว หลังจากนั้นก็ทาตามขั้นตอนดังนี้ 1. เลือกชื่อฐานข้อมูลจากเฟรมด้านซ้ายก่อน ว่าจะสร้างตารางนี้ไว้ในฐานข้อมูลใด 2. หลังการเลือกชื่อฐานข้อมูลในข้อที่ 1 ให้ไปที่กรอบ "Create Table" ที่เฟรมด้านขวา แล้วใส่ ชื่อตาราง และจานวนขอบเขตข้อมูลของตารางนั้นลงไป 3. คลิกปุ่ม "Go" หรือกดปุ่ม Enter เพื่อเริ่มสร้างตาราง 4. ในขั้นตอนต่อไป จะเป็น การกาหนดโครงสร้างของตาราง หลังการสร้างตาราง จะปรากฏ รายชื่อตารางที่ เฟรมด้านซ้าย (ถ้าไม่ปรากฏ ให้เ ลือกชื่อฐานข้อมูลจากอินพุต Select ก่อน) ซึ่งหาก ต้องการจัดการใดๆ เกี่ยวกับตาราง เช่น เพิ่มข้อมูล แก้ไขข้อมูล ก็ให้มาเริ่มเลือกที่นี่ก่อน 5. ถ้าต้องการสร้างตารางเพิ่ม ให้ระบุชื่อตารางและจานวนขอบเขตข้อมูล    ภาพที่ 14.4 แสดงขั้นตอนการสร้างตารางใหม่ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 274.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 259  ภาพที่ 14.5 แสดงขั้นตอนการสร้างขอบเขตข้อมูลในตาราง เมื่อ Name Type Length/Value Default Collation Attributes Null Index A_I Comments คือ คือ คือ คือ คือ คือ คือ คือ คือ ชื่อขอบเขตข้อมูล ชนิดของขอบเขตข้อมูล ความกว้างของข้อมูล กาหนดค่าปริยาย เมื่อผู้ใช้ไม่ป้อนข้อมูล กาหนดรูปแบบการจัดเรียง กาหนดรูปแบบการจัดเก็บข้อมูล อนุญาตให้เป็นค่าว่างหรือไม่ หากเลือกจะหมายถึงอนุญาตให้เป็นค่าว่าง การกาหนดให้เป็นคีย์ประเภทใด Auto Increment หากเลือกจะหมายถึงกาหนดให้เพิ่มข้อมูลแบบ อัตโนมัติ (จะใช้รูปแบบนี้ได้จะต้องกาหนดชนิดข้อมูล เป็นชนิดตัวเลข จานวนเต็มเท่านั้น) คือ หมายเหตุเพิ่มเติม  ภาพที่ 14.6 แสดงขั้นตอนการสร้างตารางและกาหนดขอบเขตข้อมูลในตาราง ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 275.
    260 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin การแทรกข้อมูลลงในตาราง การแทรกข้อมูลลงในตารางต้องเลือกที่ตารางนั้นก่อน โดยไปที่เฟรมด้านซ้าย เลือกฐานข้อมูลแล้ว เลือกชื่อตารางที่ต้องการ จากนั้นไปที่เฟรมด้านขวามือคลิก "Insert" ดังภาพ ภาพที่ 14.7 แสดงขั้นตอนการแทรกข้อมูลลงในตาราง หลังจากคลิก "Insert" จะมีฟอร์มมาให้ป้อนข้อมูลลงในแต่ละคอลัมน์โดยมีหลักการสาคัญดังนี้ ภาพที่ 14.8 แสดงตัวอย่างรายการสาหรับการแทรกข้อมูลลงในตาราง  ช่อง "Function" นั้นใช้ในกรณีที่ต้องการกาหนดค่าด้วยฟังก์ชันบางอย่าง โดยข้อมูลที่ใส่ลงใน ช่อง Value นั้น จะกลายเป็นอาร์กิวเมนต์ให้กับ ฟังก์ชัน แล้วผลลัพธ์ที่ได้จากฟังก์ชัน จะถูกใส่เป็นข้อมูล ให้แก่คอลัมน์นั้น  ถ้าต้องการใส่ข้อมูลไปโดยตรง ก็ให้เว้นช่องฟังก์ชันเอาไว้  หากดูที่ตัวแอปพลิเคชั่นจริงจะเห็นว่า มีฟอร์มให้ใส่ข้อมูล 2 ฟอร์ม (ในรูปที่แสดงนี้ได้ตัดมา เฉพาะฟอร์มอันบน) โดยแต่ละฟอร์มใช้สาหรับข้อมูล 1 แถว (ฟอร์มด้านบนจะมีการตรวจสอบรูปแบบของ ขอบเขตข้อมูลตามโครงสร้างที่ระบุ เช่น ไม่อนุญาตให้เป็นค่าว่าง เป็นต้น ส่วนฟอร์มด้านล่างจะข้ามการ ตรวจสอบลักษณะดังกล่าว) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 276.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 261  หากต้องการใส่ข้อมูลพร้อมกัน 2 แถว ต้องคลิกเอาเซ็กบ็อกซ์ "Ignore" ออก แต่ถ้าต้องการใส่ เพียงแถวเดียว ก็ให้คลิกที่เซ็กบ็อกซ์ตัวเลือกนี้ มิฉะนั้นจะเกิดการแทรกแถวว่างเข้าไป 1 แถว  หลังจากที่ใส่ข้อมูลลงไปจนครบทุกคอลัมน์แล้ว คลิกที่ปุ่ม "Go" เพื่อบันทึกลงฐานข้อมูล และ ถ้าต้องการใส่ข้อมูลแถวถัดไป ก็ให้เริ่มที่คลิก "Insert" เช่นเดิม การอ่านข้อมูลจากตาราง การอ่านข้อมูลทั้งหมดให้เริ่มจากการเลือกฐานข้อมูล และตารางจากเฟรมด้านซ้าย แล้วคลิกที่ "Browse" ดังขั้นตอนในรูปต่อไปนี้ ภาพที่ 14.9 แสดงขั้นตอนการอ่านข้อมูลในตาราง การปรับปรุงข้อมูล การที่จะปรับปรุงข้อมูลในตารางใดนั้น ต้องเปิดข้อมูลในตารางนั้นขึ้นมาแสดงก่อน โดยอาจเลือก จาก "Browse" ตามที่ได้กล่าวมาแล้ว ซึ่งจะสังเกตเห็นว่า ข้อมูลในแต่ละแถวนั้นจะมีไอคอนรูปดินสอหรือ ข้อความ "Edit" ไอคอนดังกล่าวใช้สาหรับการเลือกข้อมูลเพื่อปรับปรุงข้อมูลแถวที่ถูกเลือก ภาพที่ 14.10 แสดงขั้นตอนการเลือกข้อมูลเพื่อแก้ไขข้อมูล ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 277.
    262 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin ให้คลิกที่รูปดินสอตรงแถวที่ต้องการปรับปรุงข้อมูล "Edit" จากนั้นจะมีฟอร์มแสดงข้อมูลเดิม ขึ้นมาให้เลือกปรับปรุงข้อมูล สาหรับขั้นตอนนี้ก็เหมือนกับการเพิ่มข้อมูลแถวใหม่นั่นเอง การลบข้อมูล การลบก็ต้องเกิดข้อมูลตารางนั้นขึ้นมาก่อน เช่นเดียวกับการแก้ไข จากนั้นคลิกที่ ไอคอนวงกลมสี แดงหรือที่ข้อความ "Delete" หน้าแถวที่ต้องการลบ ดังภาพ ภาพที่ 14.11 แสดงขั้นตอนการเลือกข้อมูลเพื่อลบข้อมูล จากนั้นโปรแกรมจะถามยืนยันการลบอีกครั้ง หากยืนยันที่จะลบ ก็ให้เลือกคลิกที่ปุ่ม OK แต่หาก ต้องการยกเลิกก็ให้คลิกเลือกที่ปุ่ม Cancel การเปลี่ยนแปลงโครงสร้างของตาราง การแก้ไขโครงสร้างของตารางที่ต้องการจากเฟรมด้านซ้ายก่อน แล้วคลิกที่ "Structure" จากนั้น จะปรากฏโครงสร้างของตารางให้เลือกแก้ไขดังนี้ 1. ถ้าต้องการเปลี่ ย นแปลงเพีย งคอลั มน์ห นึ่ง ให้ เลือกคลิ ก "Change" ตามแถวที่ต้องการ เปลี่ยนแปลง 2. ถ้าต้องการเปลี่ยนแปลงมากกว่า 1 คอลัมน์ ให้คลิกเซ็กบ็อกซ์ที่หน้าคอลัมน์นั้นๆ แล้วเลือกที่ "Change" ด้านล่างของข้อมูล   ภาพที่ 14.12 แสดงตัวอย่างการเลือกข้อมูลเพื่อแก้ไขโครงสร้างข้อมูล ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 278.
    บทที่ 14 ฐานข้อมูลMySQL และการใช้งาน phpMyAdmin 263 การลบฐานข้อมูล และตาราง การลบฐานข้อมูล หรือตารางใดนั้น โดยแยกพิจารณาได้ดังนี้ การลบฐานข้อมูล ให้เลือกชื่อฐานข้อมูลจากเฟรมด้านซ้ายก่อน แล้วเลือกที่ "Drop" จากนั้นจะปรากฏข้อความเพื่อ ถามยืนยันการการลบ ซึ่งการลบฐานข้อมูลจะทาให้ทุกตารางที่อยู่ในฐานข้อมูลนั้นถูกลบทิ้งไปด้วย การลบตาราง ต้องเริ่มจากการเลือกตารางที่ต้องการลบจากเฟรมด้านซ้ายก่อน ทั้งนี้การลบตารางจะแบ่งเป็น 2 กรณี คือ ลบเฉพาะข้อมูลในตาราง หรือลบทั้งตาราง ซึ่งจะมี 2 ตัวเลือก มีรายละเอียดดังนี้ 1. "Empty" ใช้สาหรับการลบข้อมูลทั้งหมดในตาราง ซึ่งเป็นการลบเฉพาะข้อมูล แต่ตัวตาราง ซึ่ง เป็นการลบเฉพาะข้อมูลในตาราง แต่โครงสร้างยังอยู่ เมื่อคลิกรายการนี้จะมีข้อความเพื่อให้ยืนยัน 2. "Drop" สาหรับการลบตาราง และข้อมูลทั้งหมดในตารางทิ้งไป เมื่อคลิก รายการนี้จะมี ข้อความเพื่อให้ยืนยัน   ภาพที่ 14.13 แสดงตัวอย่างการลบข้อมูลในตารางและลบตาราง ส่วนของการใช้คาสั่ง SQL เมื่อคลิก SQL จะปรากฏหน้าจอสาหรับพิมพ์คาสั่ง SQL เพื่อประมวลผล เมื่อพิมพ์คาสั่ง SQL แล้ว ให้คลิกปุ่ม "Go" มีตัวอย่างดังภาพ ภาพที่ 14.14 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 279.
    264 บทที่ 14ฐานข้อมูล MySQL และการใช้งาน phpMyAdmin ส่วนของการค้นหา ใช้ค้นหาข้อมูลในตารางตามคาและตารางที่ระบุ เมื่อคลิกส่วนของการค้นหา "Search" มีตัวอย่าง ดังภาพ ภาพที่ 14.15 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อค้นหาข้อมูล เมื่อ at least one of the words คือ all words คือ the exact phrase คือ as regular expression คือ เหมือนอย่างน้อยหนึ่งคาของคาที่ค้นหา เหมือนทุกคาที่ค้นหา เหมือนทุกวลีที่ต้องการค้นหา ค้นหาตามหลัก Regular Expression ส่วนของการกาหนดสิทธิ์ ใช้กาหนดสิทธิ์การใช้ฐานข้อมูลให้กับผู้ใช้ เมื่อคลิก "Privileges" จะปรากฏหน้าแสดงรายชื่อผู้ใช้ และสิทธิ์ในการเข้าใช้งานฐานข้อมูล มีตัวอย่างดังภาพ ภาพที่ 14.15 แสดงตัวอย่างการใช้คาสั่ง SQL ผ่าน "Run SQL Query" เพื่อกาหนดสิทธิ์ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 280.
    บทที่ 15 การใช้ PHPร่วมกับ MySQL การใช้ PHP ร่วมกับ MySQL ในบทนี้จะกล่าวถึงฟังก์ชันของ PHP สาหรับการติดต่อ และประยุกต์ใช้งานร่วมกับ MySQL สาหรับฟังก์ชันที่เกี่ยวข้องนั้นมีจานวนมาก แต่มีข้อแนะนา คือ ชื่อฟังก์ชันที่เกี่ยวข้องเหล่านี้จะขึ้นต้นด้วย คาว่า mysql เป็นส่วนใหญ่ ทาให้จาได้ไม่ยาก เน้นประยุกต์การใช้งานเป็นสาคัญ เพื่อเป็นพื้นฐานสาหรับ การนาไปประยุกต์ใช้งานอื่นๆ ต่อไป ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL ก่อนที่จะใช้งานฐานข้อมูลได้ จะต้องเปิดการเชื่อมต่อกับฐานข้อมูลให้ได้ก่อน โดยฟังก์ชันที่ใช้ใน การเปิดการเชื่อมต่อกับ MySQL คือ mysql_connect ( ) หรือ mysql_pconnect ( ) แต่เนื่องจาก MySQL เป็นโปรแกรมที่มีระบบตรวจสอบสิทธิ์ในการเข้าใช้งาน และจัดการกับฐานข้อมูล ดังนั้นฟังก์ชันที่ ใช้ จ ะต้ อ งระบุ ข้ อ มู ล ที่ ส าคั ญ ประกอบด้ ว ย เซิ ร์ ฟ เวอร์ (Server) ชื่อ ผู้ ใ ช้ (Username) และรหั ส ผ่ า น (Password) เพื่อใช้ตรวจสอบกับข้อมูลที่อยู่ในฐานข้อมูล "mysql" หากข้อมูลถูกต้องฟังก์ชันจะคืนค่าเป็น MySQL link identifier (Resource) แต่หากไม่ถูกต้องจะคืนค่าเป็นเท็จ (False) สาหรับความแตกต่าง ของฟังก์ชัน mysql_connect ( ) และ mysql_pconnect ( ) มี 2 ประการดังนี้ 1. ขั้นตอนการเชื่อมต่อกับ MySQL ฟังก์ชัน mysql_pconnect ( ) จะค้นหาว่ามีการเชื่อมต่อ ของโฮสท์ ชื่อผู้ใช้ และรหัสผ่านนี้หรือไม่ หากพบ จะใช้ MySQL link identifier เดิม (เรียกการเชื่อมต่อ แบบนี้ว่า "Persistent") แต่หากไม่พบจึงสร้างการเชื่อมต่อใหม่ แต่สาหรับฟังก์ชัน mysql_connect ( ) จะทาการเชื่อมต่อใหม่ทุกครั้ง 2. ยกเลิกการเชื่อมต่อกับ MySQL ฟังก์ชัน mysql_pconnect ( ) ไม่ต้องยกเลิก MySQL link identifier หลั ง จากที่ ใ ช้ ง านฐานข้ อ มู ล เสร็ จ แล้ ว เพราะเก็ บ ไว้ ใ ช้ ง านในครั้ ง ต่ อ ไป ส่ ว นฟั ง ก์ ชั น mysql_connect ( ) จะใช้ฟังก์ชัน mysql_close ( ) สาหรับยกเลิก MySQL link identifier เพื่อคืน หน่วยความจาให้กับระบบ รูปแบบฟังก์ชัน mysql_connect ( ) และ mysql_pconnect ( ) มีดังนี้ resource mysql_connect | mysql_pconnect (string $server, string $username, string $password)
  • 281.
    266 บทที่ 15การใช้ PHP ร่วมกับ MySQL เมื่อ $server หมายถึง ชื่อเครื่องเซิร์ฟเวอร์หรือหมายเลข IP หรือใช้ localhost ก็ได้ $username หมายถึง ชื่อผู้ใช้ $password หมายถึง รหัสผ่าน ส่วนรูปแบบคาสั่งของฟังก์ชัน mysql_close ( ) มีดังนี้ bool mysql_close ([ resource $link_identifier = NULL ] ) เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ตัวอย่างที่ 15.1 ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL <?php $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { echo "ไม่สามารถเชื่อมต่อกับฐานข้อมูล"; exit; } else { echo 'การเชื่อมต่อเสร็จสมบูรณ์'; mysql_close ($link); } ?> จากตัวอย่าง นอกจากเรียกใช้ฟังก์ชันสาหรับเชื่อมต่อ/ยกเลิกการเชื่อมต่อระหว่าง PHP และ MySQL แล้ว ยังมีการตรวจสอบผลลัพธ์ของฟังก์ชันก่อนจะดาเนินการใดๆ ต่อไป หรือหากไม่ใช้ การตรวจสอบตาม ตัวอย่างข้างต้น อาจใช้เทคนิค Error Suppression คู่กับฟังก์ชัน die ( ) หรือ exit ( ) ก็ได้ มีตัวอย่างดังนี้ ตัวอย่างที่ 15.2 เทคนิค Error Suppression คู่กับฟังก์ชัน die ( ) หรือ exit ( ) <?php $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้: ' . mysql_error ( )); echo 'การเชื่อมต่อเสร็จสมบูรณ์'; ?> แต่อย่างไรก็ตาม การใช้ฟังก์ชัน mysql_close ( ) ไม่ใช่สิ่งที่จาเป็น เนื่องจาก PHP จะปิดการ เชื่อมต่อไปโดยอัตโนมัติอยู่แล้วเมื่อสิ้นสุดสคริปต์ของเพจนั้นๆ ซึ่งถ้าไม่จาเป็นต้องปิดการเชื่อมต่อเอง ก็จะ ทาให้เขียนโปรแกรมได้สะดวกขึ้น เพราะบางครั้งการเปิดการเชื่อมต่อจะขึ้นกับเงื่อนไข จึงไม่ต้องมาคอยสั่ง ปิดการเชื่อมต่อตามเงื่อนไขนั้นด้วย ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 282.
    บทที่ 15 การใช้PHP ร่วมกับ MySQL 267 ฟังก์ชันสาหรับการเลือกฐานข้อมูล ตามที่ทราบแล้วว่า การจะใช้ตารางใดนั้น ได้ ต้องเลือกฐานข้อมูลที่ตารางนั้นอยู่เสียก่อน หากใช้ คอมมานด์ไลน์โดยตรงก็คือ การใช้คาสั่ง USE นั่นเอง แต่ PHP ได้จัดเตรียมฟังก์ชันให้เลือกฐานข้อมูลได้ สะดวกขึ้น คือ mysql_select_db ( ) เป็นฟังก์ชันในการกาหนดชื่อฐานข้อมูลที่จะใช้งาน มีรูปแบบดังนี้ bool mysql_select_db ( string $database_name [, resource $link_identifier ] ) เมื่อ $database_name หมายถึง ชื่อฐานข้อมูลที่ต้องการใช้งาน $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ตัวอย่างที่ 15.3 ฟังก์ชันสาหรับการเลือกฐานข้อมูล <?php $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ : ' . mysql_error ( )); } $db_selected = mysql_select_db ('foo', $link); if (!$db_selected) { die ('ไม่สามารถเลือกฐานข้อมูลได้ : ' . mysql_error ( )); } ?> หากไม่ใช้ฟังก์ชัน mysql_select_db ( ) ก็สามารถใช้ฟังก์ชัน mysql_query ( ) แล้วระบุชื่อ ฐานข้อมูลในรูปแบบคาสั่ง SQL เรียกใช้คาสั่ง USE แทนได้ มีตัวอย่างดังนี้ ตัวอย่างที่ 15.4 การใช้ฟังก์ชัน mysql_query ( ) แทน ฟังก์ชัน mysql_select_db ( ) <?php $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ : ' . mysql_error ( )); } $db_selected = mysql_query ("USE foo;"); if (!$db_selected) { die ('ไม่สามารถเลือกฐานข้อมูลได้ : ' . mysql_error ( )); } ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 283.
    268 บทที่ 15การใช้ PHP ร่วมกับ MySQL แต่การใช้ฟังก์ชัน mysql_query จะเร็วกว่ากว่าการใช้ฟังก์ชัน mysql_select_db ( ) สาหรับ รายละเอียดของฟังก์ชัน mysql_query ( ) จะกล่าวถึงในหัวข้อต่อไป การส่งคาสั่ง SQL ไปยังฐานข้อมูล การส่งคาสั่ง SQL ไปยังโปรแกรมฐานข้อมูล หรือการคิวรี (Query) นั้น ขึ้นกับว่าต้องการทาอะไร เช่น การอ่านข้อมูล การเพิ่ม หรือเปลี่ยนแปลงข้อมูล เป็นต้น ทั้งนี้ PHP ไม่ได้เป็นผู้ประมวลผลคาสั่ง SQL เอง แต่เป็นเพียงผู้ส่งคาสั่ง SQL ที่กาหนดขึ้นในรูปแบบสตริงไปยังฐานข้อมูลเท่านั้น โดยฟังก์ชันที่ใช้คิวรี คือ mysql_query ( ) ซึ่งมีรูปแบบดังนี้ resource mysql_query ( string $query [, resource $link_identifier = NULL ] ) เมื่อ $query หมายถึง ชื่อฐานข้อมูลที่ต้องการใช้งาน $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ตัวอย่างที่ 15.5 การส่งคาสั่ง SQL ไปยังฐานข้อมูล <?php $firstname = 'fred'; $lastname = 'fox'; $query = sprintf ("SELECT firstname, lastname, address, age FROM friends WHERE firstname='%s' AND lastname='%s'", mysql_real_escape_string ($firstname), mysql_real_escape_string ($lastname)); $result = mysql_query ($query); //<<--------- ตัวอย่างการใช้ฟังก์ชัน if (!$result) { $message = 'Invalid query: ' . mysql_error ( ) . "n"; $message .= 'Whole query: ' . $query; die ($message); } while ($row = mysql_fetch_assoc ($result)) { echo $row ['firstname']; echo $row ['lastname']; echo $row ['address']; echo $row ['age']; } mysql_free_result ($result); ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 284.
    บทที่ 15 การใช้PHP ร่วมกับ MySQL 269 ฟังก์ชัน mysql_query ( ) จะใช้รูปแบบคาสั่ง SQL ในรูปแบบสตริง ดังนั้นจึงสามารถใช้ร่วมกับ ฟังก์ชัน sprintf ( ) เพื่อต่อสตริงให้ เป็นประโยคเดียวกันก่อนส่ งเข้าไปประมวลผลในฟังก์ชัน mysql_query ( ) และผลลัพธ์ที่ได้จากฟังก์ชันนี้จะเป็นอะไรนั้น ขึ้นอยู่กับ คาสั่ง SQL ที่กาหนด สาหรับผลลัพธ์ที่คืนกลับมาจะขึ้นกับคาสั่ง SQL ที่กาหนด ซึ่งสามารถสรุปได้ดังนี้  หากเป็นคาสั่งสาหรับการอ่านข้อมูล เช่น SELECT, SHOW, DESCRIBE หากทางานสาเร็จจะ คืนค่ากลับมาเป็นชุดข้อมูล ผลลัพธ์ที่ได้หรือเรียกว่า result set  คาสั่ง SQL ในกรณีอื่นๆ เช่น การเปลี่ยนแปลงข้อมูล (INSERT, UPDATE, DELETE) หากการ ทางานสาเร็จจะคืนค่า true  หากเกิดข้อผิดพลาดจาการใช้ฟังก์ชัน mysql_query ( ) เช่น เขียนคาสั่ง SQL ผิด จะคืนค่า false การอ่านข้อมูลผลลัพธ์ หลังจากการใช้ฟังก์ชัน mysql_query ( ) หากคาสั่ง SQL เป็นคาสั่งเกี่ยวกับการค้นหาข้อมูล อาจ ได้ข้อมูลที่เป็นผลลัพธ์มาจากจานวนใดจานวนหนึ่งเรียกว่า result set โดยข้อมูลนี้จะถูกเก็บไว้ในตัวแปรที่ใช้ รับค่าที่ส่งมาจากฟังก์ชัน mysql_query ( ) สาหรับการอ่านข้อมูลไปใช้มีหลายรูปแบบให้เลือกใช้ดังนี้ ฟังก์ชัน mysql_num_rows ( ) ฟังก์ชันสาหรับนับจานวนแถวผลลัพธ์จะต้องใช้ฟังก์ชัน mysql_num_rows ( ) ซึ่งมีรายละเอียดดังนี้ รูปแบบ int mysql_num_rows ( resource $result ) เมื่อ $result หมายถึง ตัวแปรที่เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ตัวอย่างที่ 15.6 การใช้ฟังก์ชัน mysql_num_rows ( ) <?php $link = mysql_pconnect ("localhost", "mysql_user", "mysql_password"); mysql_select_db ("database", $link); $result = mysql_query ("SELECT * FROM table1", $link); $num_rows = mysql_num_rows ($result); echo "$num_rows Rowsn"; ?> ฟังก์ชัน mysql_result ( ) ฟังก์ชันสาหรับการอ่านผลลัพธ์แบบระบุแถวและคอลัมน์ วิธีนี้เป็นการอ่านข้อมูลโดยใช้ ฟังก์ชันใน การดึงข้อมูล result set ในคอลัมน์ และลาดับแถวทีระบุโดยมีรูปแบบดังนี้ ่ string mysql_result ( resource $result , int $row [, mixed $field = 0 ] ) เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 285.
    270 บทที่ 15การใช้ PHP ร่วมกับ MySQL $row หมายถึง แถวของข้อมูล $field หมายถึง ขอบเขตข้อมูลหรือคอลัมน์ของข้อมูล (เป็นตัวเลขหรือสตริงก็ได้) ตัวอย่างที่ 15.7 การใช้ฟังก์ชัน mysql_result ( ) <?php $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die ('ไม่สามารถเชื่อมต่อ MySQL ได้: ' . mysql_error ( )); } if (!mysql_select_db ('database_name')) { die ('ไม่สามารถเลือกฐานข้อมูลได้: ' . mysql_error ( )); } $result = mysql_query ('SELECT name FROM work.employee'); if (!$result) { die ('ไม่สามารถคิวรีข้อมูล:' . mysql_error ( )); } echo mysql_result ($result, 2); // ผลลัพธ์ คือ ชื่อของพนักงานคนที่ 3 ?> ฟังก์ชัน mysql_fetch_rows ( ) การอ่านผลลัพธ์แบบตามลาดับแถว เป็นการอ่านแบบเลื่อนพอยน์เตอร์ (Pointer) ไปยังตาแหน่ง ที่ต้องการอ่าน แล้วอ่านข้อมูลที่พอยน์เตอร์ชี้อยู่ ด้วยฟังก์ชัน mysql_fetch_rows ( ) ซึ่งข้อมูลที่อ่านได้ จะอยู่ในรูปแบบของอาร์เรย์ รูปแบบของฟังก์ชันมีดังนี้ รูปแบบ array mysql_fetch_row ( resource $result ) เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ตัวอย่างที่ 15.8 การใช้ฟังก์ชัน mysql_fetch_rows ( ) <?php $result = mysql_query ("SELECT id, email FROM people WHERE id = '42'"); if (!$result) { echo 'ไม่สามารถคิวรีข้อมูล เนื่องจาก: ' . mysql_error(); exit; } $row = mysql_fetch_row ($result); echo $row [0]; // ค่าของคอลัมน์ id คือ 42 ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 286.
    บทที่ 15 การใช้PHP ร่วมกับ MySQL 271 echo $row [1]; // ค่าของคอลัมน์ email ?> ฟังก์ชัน mysql_fetch_array ( ) การอ่านผลลัพธ์แบบอาร์เรย์เป็นการอ่านข้อมูลจาก result set ในรูปแบบ Key/Value โดยที่ใช้ Key จะเป็นชื่อขอบเขตข้อมูล ในขณะที่ Value จะเป็นข้อมูลโดยใช้ฟังก์ชัน mysql_fetch_array ( ) มีรูปแบบดังนี้ array mysql_fetch_array ( resource $result [, int $result_type ] ) เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) $result_type หมายถึง ก าหนดค่ า อิ น เด็ ก ซ์ ของอาร์ เ รย์ (ผลลั พ ธ์ ที่ เ ก็ บ อยู่ ใ น หน่วยความจา) สามารถกาหนดได้ 3 ค่า คือ MYSQL_ASSOC (ใช้ชื่อฟิลด์เป็นอินเด็กซ์), MYSQL_NUM (ใช้ตัวเลขลาดับเป็น อินเด็กซ์) และ MYSQL_BOTH (ใช้ชื่อฟิลด์และตัวเลขลาดับเป็น อินเด็กซ์ร่วมกัน) หากไม่กาหนด ตัวแปร $result_type จะมีอิน เด็กซ์เป็นแบบ MYSQL_BOTH เป็นค่าปริยาย ตัวอย่างที่ 15.9 การใช้ฟังก์ชัน mysql_fetch_array ( ) <?php mysql_pconnect ("localhost", "mysql_user", "mysql_password") or die ("ไม่สามารถ เชื่อมต่อฐานข้อมูลได้: " . mysql_error ( )); mysql_select_db ("mydb"); $result = mysql_query ("SELECT id, name FROM mytable"); while ($row = mysql_fetch_array ($result, MYSQL_NUM)) { printf ("ID: %s Name: %s", $row [0], $row [1]); } mysql_free_result ($result); ?> ฟังก์ชัน mysql_fetch_object ( ) เป็นฟังก์ชันที่ใช้สาหรับอ่านข้อมูลแบบออบเจ็กต์ ซึ่งการอ่านแบบนี้เหมาะสาหรับผู้ที่ถนัดในแนว OOP โดยใช้ฟังก์ชัน mysql_fetch_object ( ) ซึ่งผลลัพธ์ที่ได้จะอยู่ในรูปแบบออบเจ็กต์ ทั้งนี้การอ้างถึง ขอบเขตข้อมูลต่างๆ จะใช้รูปแบบการอ้างถึงพร็อปเพอร์ตี้ของออบเจ็กต์ จะใช้หลักการเลื่อนพอยน์เตอร์ไป ยังแถวที่ต้องการอ่านข้อมูล คล้ายกับฟังก์ชันที่ได้ศึกษาผ่านมาแล้ว มีรูปแบบดังนี้ รูปแบบ object mysql_fetch_object ( resource $result ) เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 287.
    272 บทที่ 15การใช้ PHP ร่วมกับ MySQL ตัวอย่างที่ 15.10 การใช้ฟังก์ชัน mysql_fetch_object ( ) <?php mysql_pconnect ("hostname", "user", "password"); mysql_select_db ("mydb"); $result = mysql_query ("select * from mytable"); while ($row = mysql_fetch_object ($result)) { echo $row->user_id; echo $row->fullname; } mysql_free_result ($result); ?> การแก้ไขข้อมูลภาษาไทยกลายเป็น "?????...." สาหรับผู้ที่เกิดปัญหาการแสดงข้อมูลที่เป็นภาษาไทย แล้วกลายเป็น "???...." ให้ลองแก้ปัญหาโดย การกาหนดเซตอักขระใหม่ให้รองรับภาษาไทย ด้วยการส่งคาสั่งต่อไปนี้ก่อนที่จะอ่านข้อมูล ตัวอย่างที่ 15.11 การแก้ไขข้อมูลภาษาไทยกลายเป็น "?????...." mysql_query ("SET CHARCTER SET tis620"); //หรือใช้ mysql_query ("SET NANES tis620"); การตรวจสอบการเปลี่ยนแปลงข้อมูล ถึงแม้คาสั่ง SQL ที่เกี่ยวกับการเปลี่ยนแปลงข้อมูล เช่น คาสั่ง INSERT , UPDATE , DELETL , DROP และ ALTER จะไม่มีข้อมูลผลลัพธ์ส่งกลับมา แต่สามารถตรวจสอบการเปลี่ยนแปลงที่เกิดขึ้นใน กรณีดังต่อไปนี้ ฟังก์ชัน mysql_affected_rows ( ) เป็นฟังก์ชันที่ใช้สาหรับ การนับจานวนแถวที่เปลี่ยนแปลงข้อมูล โดยถ้าต้องการตรวจสอบว่า มี ข้อมูลจานวนกี่แถว ที่เกิดการเปลี่ยนแปลงจากการคิวรีครั้งล่าสุด ก็สามารถตรวจสอบได้โดยใช้ ฟังก์ชัน mysql_affected_rows ( ) ซึ่งมีรูปแบบดังนี้ รูปแบบ int mysql_affected_rows ([ resource $link_identifier = NULL ] ) เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 288.
    บทที่ 15 การใช้PHP ร่วมกับ MySQL 273 ตัวอย่างที่ 15.12 การใช้ฟังก์ชัน mysql_affected_rows ( ) <?php $link = mysql_connect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูลได้ เนื่องจาก: ' . mysql_error ( )); } mysql_select_db ('mydb'); mysql_query ('DELETE FROM mytable WHERE id < 10'); printf ("Records deleted: %dn", mysql_affected_rows ( )); ?> ฟังก์ชัน mysql_insert_id ( ) เป็นฟังก์ชันที่ใช้สาหรับ การตรวจสอบ ID ของข้อมูลที่เพิ่มใหม่ จากการที่ขอบเขตข้อมูล แบบ "AUTO_INCREMENT" นั้ น ข้อมูลจะถูกเพิ่มต่อจากข้อมูล ล่าสุ ดโดยอัตโนมัติ ซึ่งโดยส่ว นใหญ่จะใช้ AUTO_INCREMENT กับข้อมูลที่เป็นค่า ID เนื่องจากจะมีลักษณะการเรียงลาดับที่ต่อเนื่อ ง และไม่ซ้ากัน และหลังจากที่เพิ่มข้อมูลลงในตารางแล้ว อาจจาเป็นต้องนาค่า ID นั้นไปใช้งานอื่นต่อไป เช่น นาไปใช้กับ การประมวลผลอื่นๆ ของ PHP หรือการนาไปเติมกับตารางอื่นๆ ที่เกี่ยวข้องกัน เป็นต้น นี่คือเหตุผลที่ จาเป็นต้องทราบว่า แถวล่าสุดที่ถูกเพิ่มลงในตารางมีค่า ID เป็นเท่าไร โดย PHP มีฟังก์ชันในการ ตรวจสอบค่า ID นี้ได้คือ ฟังก์ชัน mysql_insert_id ( ) โดยมีรูปแบบดังนี้ รูปแบบ int mysql_insert_id ([ resource $link_identifier = NULL ] ) เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ฟังก์ชันนี้จะคืนค่ากลับมาเป็นข้อมูลในขอบเขตข้อมูลที่เป็น AUTO_INCREMENT ของแถวล่าสุด ที่ถูกเพิ่มเข้าไปด้วยคาสั่ง INSERT หรือ REPLACE เช่น สมมติจากเดิมข้อมูลในตารางแรก และขอบเขต ข้อมูล id เป็นแบบ AUTO_INCREMENT ตัวอย่างที่ 15.13 การใช้ฟังก์ชัน mysql_insert_id ( ) <?php $link = mysql_connect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die ('ไม่สามารถเชื่อมต่อกับฐานข้อมูล เนื่องจาก: ' . mysql_error ( )); } mysql_select_db (' mydb'); mysql_query ("INSERT INTO mytable (product) values ('kossu')"); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 289.
    274 บทที่ 15การใช้ PHP ร่วมกับ MySQL printf ("Last inserted record has id %dn", mysql_insert_id ( )); ?> แต่อย่างไรก็ตาม ต้องเรียกใช้ฟังก์ชัน mysql_insert_id ( ) ทันทีหลังจากเพิ่มข้อมูล ด้วยคาสั่ง INSERT หรือคาสั่ง REPLACE ทั้งนี้เพื่อให้ได้ค่า ID ของแถวล่าสุดที่ถูกเพิ่มเข้าใหม่อย่างแท้จริง ฟังก์ชัน mysql_data_seek ( ) เป็นฟังก์ชันที่ใช้สาหรับระบุตาแหน่งของแถวข้อมูลที่ต้องการให้เริ่มต้น นับแถวแรกเป็น 0 โดยมี รูปแบบดังนี้ รูปแบบ bool mysql_data_seek ( resource $result , int $row_number ) เมื่อ $result หมายถึง ตัวแปรที่ใช้เก็บผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) $row_number หมายถึง ค่าของแถวที่ต้องการเริ่มต้น ตัวอย่างที่ 15.14 การใช้ฟังก์ชัน mysql_data_seek ( ) <?php $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die('ไม่สามารถเชื่อมต่อฐานข้อมูลได้ เนื่องจาก: ' . mysql_error()); } $db_selected = mysql_select_db ('sample_db'); if (!$db_selected) { die('ไม่สามารถเลือกฐานข้อมูลได้ เนื่องจาก: ' . mysql_error()); } $query = 'SELECT last_name, first_name FROM friends'; $result = mysql_query ($query); if (!$result) { die('การคิวรีเกิดข้อผิดพลาด เนื่องจาก: ' . mysql_error ( )); } /* เรียกดูข้อมูลในตาแหน่งลาดับแบบย้อนกลับ */ for ($i = mysql_num_rows ($result) - 1; $i >= 0; $i--) { if (!mysql_data_seek ($result, $i)) { echo "ไม่สามารถระบุตาแหน่งแถวข้อมูลแถวที่ $i: " . mysql_error ( ) . "<br/>"; continue; } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 290.
    บทที่ 15 การใช้PHP ร่วมกับ MySQL 275 if (!($row = mysql_fetch_assoc ($result))) { continue; } echo $row ['last_name'] . ' ' . $row ['first_name'] . "<br />n"; } mysql_free_result ($result); ?> การตรวจสอบข้อผิดพลาดระหว่างการทางานร่วมกับ MySQL เมื่อเกิดข้อผิดพลาดในการทางาน MySQL ขึ้น หากต้องการทราบว่าข้อผิดพลาดนั้นมาจากสาเหตุ อะไร ก็สามารถตรวจสอบได้โดยใช้ฟังก์ชัน mysql_error ( ) ซึ่งมีรูปแบบดังนี้ รูปแบบ string mysql_error ([ resource $link_identifier = NULL ] ) เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ในทางปฏิบัติแล้ว มักจะใช้ ฟังก์ชันนี้ร่วมกับขั้นตอนที่คาดว่า อาจเกิดข้อผิดพลาดขึ้น แล้วอ่าน ข้อผิดพลาดนั้นมาแสดง การตรวจสอบชื่อฐานข้อมูลและตาราง บางครั้งต้องการทราบว่า ภายในฐานข้อมูล MySQL นั้นประกอบด้วยฐานข้อมูล หรือตารางชื่อ อะไรบ้าง ก็จะมีการตรวจสอบดังนี้ การตรวจสอบชื่อฐานข้อมูล ชื่อฐานข้อมูลที่ใช้ตรวจสอบได้ต้องเป็นชื่อของฐานข้อมูลที่เป็นผู้สร้างขึ้นมา หรือมีสิทธิ์ในการใช้ งาน โดยการตรวจสอบจะใช้ ฟังก์ชัน mysql_list_dbs ( ) ฟังก์ชันนี้จะคืนค่ากลับคืนมาเป็น result set โดยที่ข้อมูลในแต่ละแถวก็คือ ชื่อฐานข้อมูลที่อ่านได้ มีรูปแบบดังนี้ รูปแบบ resource mysql_list_dbs ([ resource $link_identifier = NULL ] ) เมื่อ $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier จากการทีฟังก์ชันนี้คืนมาเป็น result set หากต้องการจะอ่านรายชื่อฐานข้อมูลเหล่านี้ จะต้องใช้ ่ ฟังก์ชันที่ใช้ในการอ่านข้อมูลจาก result set เช่น mysql_fetch_row ( ) หรือ mysql_fetch_array ( ) หรือ mysql_fetch_object ( ) หรือ mysql_fetch_assoc ( ) เป็นต้น มีตัวอย่างดังนี้ ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 291.
    276 บทที่ 15การใช้ PHP ร่วมกับ MySQL ตัวอย่างที่ 15.15 การตรวจสอบชื่อฐานข้อมูล <?php // ตัวอย่างการใช้งานแบบทั่วไปถ้าไปใช้ฟังก์ชัน mysql_list_dbs ( ) $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); $res = mysql_query ("SHOW DATABASES"); while ($row = mysql_fetch_assoc ($res)) { echo $row ['Database'] . "<br/>"; } // ตัวอย่างการใช้งานแบบทั่วไปถ้าไปใช้ฟังก์ชัน mysql_list_dbs ( ) สาหรับ PHP 5.4.0 $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); $db_list = mysql_list_dbs ($link); while ($row = mysql_fetch_object ($db_list)) { echo $row->Database . "<br/>"; } ?> การตรวจสอบชื่อตารางที่มีอยู่ในฐานข้อมูล ถ้าต้องการทราบว่า ภายในฐานข้อมูลนั้นมีตารางชื่ออะไรบ้าง ก็สามารถตรวจสอบด้วยฟังก์ชัน mysql_list_tables ( ) มีรูปแบบดังนี้ รูปแบบ resource mysql_list_tables ( string $database [, resource $link_identifier = NULL ] ) เมื่อ $database หมายถึง ชื่อของฐานข้อมูล ต้องกาหนดในแบบสตริงผลลัพธ์ที่ได้จาก ฟังก์ชันนี้จะอยู่ในรูปแบบของ result set $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ตัวอย่างที่ 15.16 การตรวจสอบชื่อตารางที่มีอยู่ในฐานข้อมูล <?php $dbname = 'mysql_dbname'; if (!mysql_pconnect ('mysql_host', 'mysql_user', 'mysql_password')) { echo 'ไม่สามารถเชื่อต่อกับฐานข้อมูล MySQL ได้ เนื่องจาก:' . mysql_error ( ); exit; } $sql = "SHOW TABLES FROM $dbname"; $result = mysql_query ($sql); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 292.
    บทที่ 15 การใช้PHP ร่วมกับ MySQL 277 if (!$result) { echo "เกิดข้อผิดพลาด ไม่พบข้อมูลตารางในฐานข้อมูล $dbname "; exit; } while ($row = mysql_fetch_row ($result)) { echo "Table: {$row [0]} <br/>"; } mysql_free_result ($result); ?> การตรวจสอบโครงสร้างของขอบเขตข้อมูล การตรวจสอบโครงสร้างของขอบเขตข้อมูล เป็นการอ่านรายละเอียดทั้งหมดเกี่ยวกับ ขอบเขต ข้อมูล ชนิดข้อมูล และแอททริบิวต์ต่างๆ สาหรับใน PHP มีฟังก์ชันที่ใช้ในการตรวจสอบองค์ประกอบของ ขอบเขตข้อมูล ดังต่อไปนี้ การนับจานวนขอบเขตข้อมูล การนับจานวนฟิวด์จะนับจานวนจากขอบเขตข้อมูลที่มีอยู่ใน result set ที่กาหนด เนื่องจากเป็น การนับจานวนขอบเขตข้อมูลที่มีอยู่ใน $result ที่ได้จากการใช้ฟังก์ชัน mysql_query ( ) กาหนดให้อ่าน ข้อมูลจากขอบเขตข้อมูล ใดบ้าง ดังนั้นจานวนขอบเขตข้อมูล ที่นับได้ อาจแตกต่างจานวนจริงที่มีอยู่ใน ตารางมีรูปแบบดังนี้ รูปแบบ int mysql_num_fields ( resource $result ) เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ตัวอย่างที่ 15.17 การนับจานวนขอบเขตข้อมูล <?php $result = mysql_query ("SELECT id, email FROM people WHERE id = '42'"); if (!$result) { echo 'ไม่สามารถคิวรีข้อมูลได้ เนื่องจาก: ' . mysql_error ( ); exit; } /* จะมีการคืนค่า 2 ขอบเขตข้อมูล ประกอบด้วย id, email ที่ได้จากฟังก์ชัน mysql_query ( )*/ echo mysql_num_fields ($result); ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 293.
    278 บทที่ 15การใช้ PHP ร่วมกับ MySQL การตรวจสอบชื่อขอบเขตข้อมูล การตรวจสอบชื่อขอบเขตข้อมูลในตาราง จะมีฟังก์ชันดังนี้  ฟังก์ชัน mysql_list_fields ( ) เป็นฟังก์ชันที่ใช้สาหรับตรวจสอบชื่อขอบเขตข้อมูลในตารางของฐานข้อมูลที่กาหนด มี รูปแบบการใช้งานดังนี้ รูปแบบ resource mysql_list_fields ( string $database_name , string $table_name [, resource $link_identifier = NULL ] ) เมื่อ $database_name หมายถึง ชื่อฐานข้อมูล $table_name หมายถึง ชื่อตาราง $link_identifier หมายถึง ตัวแปรที่ใช้เก็บค่า MySQL link identifier ตัวอย่างที่ 15.18 การใช้ฟังก์ชัน mysql_list_fields ( ) <?php $result = mysql_query ("SHOW COLUMNS FROM sometable"); if (!$result) { echo 'ไม่สามารถคิวรีข้อมูลได้ เนื่องจาก: ' . mysql_error(); exit; } if (mysql_list_fields ($result) > 0) { while ($row = mysql_fetch_assoc ($result)) { print_r ($row); } } ?>  ฟังก์ชัน mysql_field_name ( ) เป็นฟังก์ชันที่ใช้สาหรั บตรวจสอบชื่อขอบเขตข้อมูลในตารางของฐานข้อมูลที่กาหนด เช่นเดียวกับฟังก์ชัน mysql_list_fields ( ) มีรูปแบบการใช้งานดังนี้ รูปแบบ string mysql_field_name ( resource $result ) เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 294.
    บทที่ 15 การใช้PHP ร่วมกับ MySQL 279 ตัวอย่างที่ 15.19 การใช้ฟังก์ชัน mysql_field_name ( ) <?php /* ตัวอย่าง ตารางประกอบด้วย 3 ขอบเขตข้อมูล ดังนี้: * user_id , username และ password */ $link = mysql_pconnect ('localhost', 'mysql_user', 'mysql_password'); if (!$link) { die ('ไม่สามารถเชื่อมต่อกับ MySQL server เนื่องจาก: ' . mysql_error ( )); } $dbname = 'mydb'; $db_selected = mysql_select_db ($dbname, $link); if (!$db_selected) { die ("ไม่สามารถติดต่อกับฐานข้อมูล $dbname ได้เนื่องจาก: " . mysql_error ( )); } $res = mysql_query ('select * from users', $link); echo mysql_field_name ($res, 0) . "<br/>"; echo mysql_field_name ($res, 2); ?> ผลลัพธ์ user_id password การตรวจสอบความยาวของขอบเขตข้อมูล การตรวจสอบความยาวของขอบเขตข้อมูลจะใช้ฟังก์ชัน mysql_fields_len ( ) มีรูปแบบดังนี้ รูปแบบ int mysql_field_len ( resource $result ) เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ตัวอย่างที่ 15.20 การตรวจสอบความยาวของขอบเขตข้อมูล <?php $result = mysql_query ("SELECT id,email FROM people WHERE id = '42'"); if (!$result) { echo 'ไม่สามารถคิวรีข้อมูลได้ เนื่องจาก: ' . mysql_error ( ); exit; } $length = mysql_field_len ($result, 0); // ตรวจสอบความยาวของขอบเขตข้อมูล "id" echo $length; ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 295.
    280 บทที่ 15การใช้ PHP ร่วมกับ MySQL การตรวจสอบชนิดข้อมูลของขอบเขตข้อมูล การตรวจสอบชนิดข้อมูลของขอบเขตข้อมูลด้วยฟังก์ชัน mysql_fields_type ( ) มีรูปแบบดังนี้ รูปแบบ string mysql_field_type ( resource $result ) เมื่อ $result หมายถึง ผลลัพธ์ที่ได้จากฟังก์ชัน mysql_query ( ) ตัวอย่างที่ 15.21 การตรวจสอบชนิดข้อมูลของขอบเขตข้อมูล <?php mysql_pconnect ("localhost", "mysql_username", "mysql_password"); mysql_select_db ("mysql"); $result = mysql_query ("SELECT * FROM func"); $fields = mysql_num_fields ($result); $rows = mysql_num_rows ($result); $table = mysql_field_table ($result, 0); echo "ตาราง '" . $table . "' มี " . $fields . " ขอบเขตข้อมูล จานวน " . $rows . " ระเบียนbr/>"; echo "โดยตารางประกอบด้วยขอบเขตข้อมูลดังนี้:<br/>"; for ($i=0; $i < $fields; $i++) { $type = mysql_field_type ($result, $i); $name = mysql_field_name ($result, $i); $len = mysql_field_len ($result, $i); $flags = mysql_field_flags ($result, $i); echo $type . " " . $name . " " . $len . " " . $flags . "<br>"; } mysql_free_result ($result); ?> ผลลัพธ์ ตาราง 'func' มี 4 ขอบเขตข้อมูล จานวน 1 ระเบียน โดยตารางประกอบด้วยขอบเขตข้อมูลดังนี้: string name 64 not_null primary_key binary int ret 1 not_null string dl 128 not_null string type 9 not_null enum ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 296.
    บทที่ 16 กรณีศึกษา: ระบบจัดการสมาชิก กรณีศึกษา:ระบบจัดการสมาชิก ซึ่งเป็นระบบที่ไม่ยุ่งยากและซ้าซ้อนมากนัก เพื่อเป็นกรณีศึกษา และง่ายส้ าหรั บ ผู้ เริ่ มต้น พัฒ นาระบบ ในที่นีจะกล่ าวถึง วิธีการ เพิ่ม แก้ไข และลบ ข้อมูล สมาชิก มี รายละเอียดดังนี โปรเซสการทางานของระบบจัดการสมาชิก 0 เข้าสู่ระบบ (Login Page) 1 หน้ารายการหลัก (Main Page) 1.1 กลุ่มสมาชิก (Cat Member) 1.1.1 เพิ่มกลุ่มสมาชิก (Add Member) 1.1.2 ลบ/แก้ไข กลุ่ม (Edit/Del Member) 1.2 ข้อมูลสมาชิก (Member) 1.2.1 เพิ่มสมาชิก (Add Member) 1.2.2 ลบ/แก้ไข สมาชิก (Edit/Del Member) อธิบายการทางานของระบบ Level 0 Login Page ใช้ส้าหรับตรวจสอบ username และ password เพื่อเข้าสู่ระบบ Level 1 Main Page หน้ารายการหลัก คือ ล้าดับถัดไปหลังจากที่ login ถูกต้อง เป็นหน้าเว็บ เพจเริ่มต้นส้าหรับจัดการข้อมูลภายในระบบ แบ่งเป็น 2 ส่วนย่อย คือ ส่วนที่ใช้ในการ จัดการกับ กลุ่ม สมาชิก และส่วนที่ใช้ในการจัดการกับข้อมูลสมาชิก Level 1.1 กลุ่มสมาชิก ใช้ส้าหรับเลือกดู รายการกลุ่มสมาชิกทังหมด แบ่งออกเป็น 2 ส่วนย่อย ประกอบด้วย 1.1.1) เพิ่มกลุ่มสมาชิกใหม่ และ 1.1.2) ลบ/แก้ไข กลุ่มสมาชิก Level 1.2 ข้อมูลสมาชิก ใช้ส้าหรับ เลือกดู รายการสมาชิกทังหมด แบ่งออกเป็น 2 ส่วยย่อย ประกอบด้วย 1.2.1) เพิ่มข้อมูลสมาชิกใหม่ และ 1.2.2) ลบ/แก้ไข ข้อมูลสมาชิกเดิม
  • 297.
    282 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก สร้างฐานข้อมูลและตาราง ก้าหนดให้สร้างฐานข้อมูลชื่อ memberDB และสร้างตาราง 2 ตาราง มีรายละเอียดดังนี ตารางที่ 16.1 ตารางข้อมูล tblcatmember ขอบเขต ชนิด ว่างเปล่า ค่าปริยาย คีย์ หมายเหตุ ข้อมูล (null) catid int(5) no PK auto_increment catname varchar(50) no catactive int(1) no 1 ค้าสั่ง SQL ส้าหรับสร้างตาราง tblcatmember CREATE TABLE tblcatmember ( catid INT( 5 ) NOT NULL AUTO_INCREMENT , catname VARCHAR( 50 ) NOT NULL , catactive INT( 1 ) DEFAULT '1' NOT NULL , PRIMARY KEY ( catid ) ); ตารางที่ 16.2 ตารางข้อมูล tblmember ขอบเขต ชนิด ว่างเปล่า ค่าปริยาย ข้อมูล (null) catid int(5) no catname varchar(50) no catactive int(1) no 1 ค้าสั่ง SQL ส้าหรับสร้างตาราง tblmember CREATE TABLE tblmember ( memid INT( 5 ) NOT NULL AUTO_INCREMENT , mem_fullname VARCHAR( 50 ) NOT NULL , mem_email VARCHAR( 50 ) NOT NULL , mem_username VARCHAR( 30 ) NOT NULL , mem_password VARCHAR( 50 ) NOT NULL , catid INT( 5 ) NOT NULL , PRIMARY KEY ( memid )); รายละเอียดของไฟล์ที่เกี่ยวข้อง ชื่อไฟล์ style.css admin_secure.php function_validate.php index.php chklogin.php admin_main.php คีย์ หมายเหตุ PK auto_increment คาอธิบาย เก็บ css ส้าหรับจัดการกับหน้าเว็บเพจ เก็บ username และ password ส้าหรับ admin ระบบ ฟังก์ชัน Library ที่เกี่ยวข้องทังหมด เว็บเพจหน้าแรก ใช้ส้าหรับ login เข้าสู่ระบบ ใช้ส้าหรับตรวจสอบการ login หน้าเว็บเพจหลัก (Main Page) ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL เข้าสู่
  • 298.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 283 ชื่อไฟล์ คาอธิบาย config.php ใช้ส้าหรับเก็บตัวแปรของเว็บเพจทังหมด admin_menu.php ใช้แสดงผลเมนูหลัก admin_footer.php ใช้แสดงส่วนล่างสุดของระบบ (Page Footer) admin_logout.php เว็บเพจส้าหรับ logout ออกจากระบบ admin_catmember.php เว็บเพจส้าหรับเพิ่มกลุ่มสมาชิกใหม่ admin_catmemberedit.php เว็บเพจส้าหรับแสดงรายการกลุ่มสมาชิก admin_catmembereditsave.php เว็บเพจส้าหรับแก้ไขกลุ่มสมาชิก admin_member.php เว็บเพจส้าหรับเพิ่มสมาชิกใหม่ admin_memberedit.php เว็บเพจส้าหรับแสดงข้อมูลสมาชิกทังหมด admin_membereditsave.php เว็บเพจส้าหรับแก้ไขสมาชิก มีรายละเอียดค้าสั่งของไฟล์ทังหมด ดังต่อไปนี style.css B {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10pt} table {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10pt ; color: #333333;} .Bfont {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 12pt ; color: #666666; } .sfont {FONT-FAMILY: MS Sans Serif; FONT-SIZE: 8pt ; } A {COLOR: #000099; FONT-FAMILY: MS Sans Serif; FONT-SIZE: 10pt; TEXT-DECORATION: none} A:visited {COLOR: #000099; FONT-SIZE: 10pt; TEXT-DECORATION: none; MS: AngsanaUPC} a:visited:hover {font-family: MS Sans Serif; font-size: 10px; color: #000000;} A:hover {COLOR:#FF0000; FONT-FAMILY: MS Sans Serif,AngsanaUPC; FONT-SIZE: 10pt; text-decoration: none ; } .borderstyle {border: 1px dotted #d7eadf;} .gradian_up {filter:progid:dximagetransform.microsoft.gradient(gradienttype=0,startcolorstr=#FCFBFF,,e ndcolorstr=#D7D7D7);} admin_secure.php <?php $admin_user="admin"; $admin_pass="123"; ?> function_validate.php <?php function connectDB ( ) { // ฟังก์ชันส้าหรับเชื่อมต่อกับฐานข้อมูล global $host,$username,$password,$connect,$dberr,$db,$useerr; // Connect mysql ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 299.
    284 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก if (@$connect = mysql_connect($host, $username, $password)) { if (@!mysql_select_db($db, $connect)) { exit ($useerr); } } else { exit ($dberr); } return false; } function closeDB ( ) { // ฟังก์ชันส้าหรับยกเลิกการเชื่อมต่อกับฐานข้อมูล global $connect; return mysql_close($connect); return false; } function listcatmember ($sql,$var="") { // ฟังชั่นที่ใช้ในการแสดง list ข้อมูลใน combo box connectDB ( ); // เรียกใช้ฟังก์ชันเชื่อมต่อฐานข้อมูล if (!@$result=mysql_query ($sql)) { $showlist= "<option>ไม่สามารถแสดงรายการได้ </option>"; } else { //========== หากแสดงข้อมูลเรียบร้อย ============= while ($dbarr=mysql_fetch_array ($result)) { $showlist .="<option value=".$dbarr[0]." .chkselected($dbarr[0],$var).">".$dbarr[1]."</option>n"; } } // จบค้าสั่ง if closeDB ( ); // เรียกใช้ฟังก์ชันยกเลิกการเชื่อมต่อกับฐานข้อมูล return $showlist; // return ค่า showlist " } // function chkselected ท้าหน้าที่ตรวจเช็คข้อมูลประเภท Control Select 2 ข้อมูลว่า ได้ถูกเลือกอยู่ // หรือเปล่าโดยเปรียบเทียบค่าที่อยู่ในฐานข้อมูลกับค่าที่จะแสดงโดยอัตโนมัติ // วิธีการใช้งานคือchkselected (ค่าที่อยู่ในฐานข้อมูล,ค่าของตัวมันเอง); function chkselected ($var1,$var2) { if ($var1 == $var2){ $chkselected = "Selected"; } else { $chkselected = ""; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 300.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 285 } return $chkselected; } ?> index.php <?php session_start ( ); session_unregister("session_user"); echo $_SESSION["err"]; ?> <html> <head> <title>ระบบจัดการข้อมูลสมาชิก</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-874"> <link rel="stylesheet" type="text/css" href="css/style.css"> </head> <body> <form action="chklogin.php" method="post"> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr bgcolor="#CCCCCC"> <td colspan="2">กรอกข้อมูล</td> </tr> <tr bgcolor="#E5E5E5"> <td width="25%">username</td> <td width="75%"><input name="txtuser" type="text" id="txtuser"></td> </tr> <tr bgcolor="#E5E5E5"> <td>password</td> <td><input name="txtpass" type="text" id="txtpass"></td> </tr> <tr bgcolor="#E5E5E5"> <td> </td> <td><input type="submit" name="cmdsubmit" value="Submit"> <input type="reset" name="cmdreset" value="Reset"></td> </tr> </table> </form> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 301.
    286 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก </body> </html> chklogin.php <?php session_start(); include "includes/admin_secure.php"; $submit=$_POST["cmdsubmit"]; // น้าเข้าไฟล์ admin_secure.php if (isset($submit)) { // ตรวจสอบตัวแปร $submin ว่าถูกส่งมาหรือไม่ $txtuser=$_POST["txtuser"]; $txtpass=$_POST["txtpass"]; if ($txtuser==$admin_user and $txtpass==$admin_pass) { session_unregister("err"); $_SESSION["session_user"] = $txtuser; header("Location:admin_main.php"); } else { $err = "<font color="#ff0000">Login ไม่ ถูกต้อง กรุณา login ใหม่</font>"; $_SESSION["err"] = $err ; // สร้างตัวแปร session err ไว้ส้าหรับ เก็บค่า err header("Location:index.php"); } } ?> config.php <?php session_start ( ); $host = "localhost" ; $username = "parinya" ; // ชื่อผู้ใช้ส้าหรับเชื่อมต่อฐานข้อมูล $password = "parinya123456" ; // รหัสผ่านส้าหรับเชื่อมต่อกับฐานข้อมูล $db = " memberDB " ; // ชื่อฐานข้อมูลที่จะเชื่อมต่อ // ตัวแปรส้าหรับเก็บข้อผิดพลาดต่างๆ ส้าหรับแจ้งกลับ $dberr ="<center>เกิด ความผิ ดพลาดไม่ ส ามารถเชื่ อมต่อ กับฐานข้อมู ล บนเซิร์ฟเวอร์ นี </center>"; $useerr = "เรียกใช้ ฐานข้อมูลไม่ส้าเร็จ"; $inserterr = "เกิดข้อผิดพลาดในการเพิ่มข้อมูล กรุณาตรวจสอบ ข้อมูลอีกครังว่าถูกต้องหรือไม่"; $selecterr = "ไม่สามารถ น้าข้อมูลออกมาจากฐานข้อมู ลได้ เนื่องจากปัญหาเกี่ยวกับ ค้าสั่ง query กรุณาตรวจสอบค้าสั่งอีกครัง"; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 302.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 287 $updateerr = "เกิดข้อผิดพลาดในการแก้ไขข้อมูล กรุณาตรวจสอบ ข้อมูลอีกครังว่าถู กต้อง หรือไม่"; $realdate=date("Y-m-j H:i:s"); include "includes/function_validate.php"; // น้าเข้าไฟล์ function ?> admin_menu.php <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td><div align="center"><strong><font size="5">ยินดีต้อนรับคุณ <?php echo $_SESSION["session_user"]; ?> เข้าสู่ระบบ<br>Admin Back office</font></strong></div></td> </tr> <tr> <td bgcolor="#EAEAEA"> <div align="center"><a href="admin_logout.php">[Log out]</a></div></td> </tr> <tr> <td bgcolor="#EAEAEA"> <div align="center"> <a href="admin_main.php">กลับหน้าหลัก</a> <a href="admin_catmemberedit.php">จัดการหมวดหมู่สมาชิก</a> <a href="admin_memberedit.php">จัดการสมาชิก</a> </div></td> </tr> </table> <p></p> admin_footer.php <p></p> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#EAEAEA"><div align="center" style="font-size:11px;"> <font color="#666666">กรณีศึกษา: ระบบจัดการสมาชิก<br>Copyright © 2013 By SRU Com-SCI, All rights reserved.</font></div></td> </tr> </table> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 303.
    288 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก admin_logout.php <?php // ท้าลายตัวแปร session ทังหมด session_start ( ); session_destroy ( ); ?> <head><title>ขอบคุณมากครับ</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-874"> <link rel="stylesheet" type="text/css" href="css/style.css"> <meta http-equiv="refresh" content="3;URL=index.php"> </head> <body class="gradian_up"> <table width="300" height="100" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> <tr><td colspan="3" bgcolor="#EAEAEA"> <table width="300" border="0" cellspacing="2" cellpadding="0"> <tr><td height="30"> <div align="center"> <font color="#000000"><strong>ออกจากระบบเรียบร้อย</strong></font> </div></td></tr> <tr><td height="30"> <div align="center"> <font color="#000000"><strong>โปรดรอซัก 3 วินาที </strong></font> </div></td></tr> <tr><td height="30"> <div align="center"> <font color="#000000"><strong>จะกลับไปหน้า homepage</strong></font> </div></td></tr> </table></td> </tr> </table> </body> admin_catmember.php <?php include "config.php"; // ตรวจสอบการ login if (!isset($_SESSION["session_user"])) header("Location:index.php"); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 304.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 289 // ========================= $cmdsubmit = $_POST["cmdsubmit"]; if ($cmdsubmit<>"") { // ตรวจสอบการกดปุ่ม submit $txtcat=$_POST["txtcat"]; // น้าค่าผ่านฟอร์ม มาเก็บเข้าตัวแปร $cboactive=$_POST["cboactive"]; connectDB ( ); // เรียกใช้ฟังก์ชันเชื่อมต่อฐานข้อมูล $sqlinsert = "insert into tblcatmember (catname,catactive) values ('".$txtcat."','".$cboactive."')"; if (@$result = mysql_query ($sqlinsert)) { // ตรวจสอบว่า ค้าสั่ง sql command $response_text ="<font color=#FF0000>เพิ่มข้อมูลเรียบร้อย</font>"; } else { $response_text ="<font color=#000099>ติดปัญหาในการเพิ่มข้อมูล</font>"; } closeDB ( ); // เรียกใช้ฟังก์ชันยกเลิกการเชื่อมต่อฐานข้อมูล } ?> <html> <head> <title>รายละเอียดข้อมูลกลุ่มสมาชิก</title> <meta http-equiv="Content-Type" content="text/html; charset=tis-620"> <link rel="stylesheet" type="text/css" href="css/style.css"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <?php include "admin_menu.php"; ?> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#EAEAEA"> <div align="center"><strong> <a href="admin_catmember.php">เพิ่มกลุ่มสมาชิกใหม่</a> <a href="admin_catmemberedit.php">รายชื่อกลุ่มสมาชิก </a> </strong></div></td> </tr> </table> <?php echo $response_text; // ส่วนส้าหรับ แสดงข้อความ ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 305.
    290 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"> <table width="300" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr><td colspan="2"><strong>กลุ่มสมาชิก</strong></td></tr> <tr> <td width="163" bgcolor="#EAEAEA">ชื่อกลุ่มสมาชิก</td> <td width="326" bgcolor="#EAEAEA"><input name="txtcat" type="text"></td> </tr> <tr> <td bgcolor="#EAEAEA">สถานะ</td> <td bgcolor="#EAEAEA"> <select name="cboactive"> <option value="1"> แสดง </option> <option value="0"> ซ่อน </option> </select></td> </tr> <tr> <td bgcolor="#EAEAEA"> </td> <td bgcolor="#EAEAEA"> <input name="cmdsubmit" type="submit" value="Submit"> <input name="cmdreset" type="reset" value="Reset"></td> </tr> </table> </form> <?php include "admin_footer.php"; ?> </body> </html> admin_catmemberedit.php <?php include "config.php"; // ตรวจสอบการ login if (!isset ($_SESSION["session_user"])) header ("Location:index.php"); // ========================= // รับค่าตัวแปรแบบ get $delid=$_GET["delid"]; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 306.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 291 // ============================ // หาก มีการกดปุ่ม ลบข้อมูล ======= if ($delid<>"") { connectDB ( ); $sqldel="delete from tblcatmember where catid=".$delid; if (!@$resultdel=mysql_query($sqldel)) { exit("ไม่สามารถลบข้อมูลได้"); } else { $response_text = "<font color=#FF0000>ลบข้อมูลเรียบร้อย</font>"; } closeDB ( ); } ?> <html> <head> <title>ข้อมูลกลุ่มสมาชิก</title> <meta http-equiv="Content-Type" content="text/html; charset=tis-620"> <link rel="stylesheet" type="text/css" href="css/style.css"> <script language="javascript"> <!-function conf (txt) { if (confirm (txt)) { return true; } return false; } //--> </script> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <?php include "admin_menu.php"; ?> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#EAEAEA"> <div align="center"><strong> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 307.
    292 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก <a href="admin_catmember.php">เพิ่มกลุ่มสมาชิกใหม่</a> <a href="admin_catmemberedit.php">รายชื่อกลุ่มสมาชิก </a> </strong></div></td> </tr> </table> <br> <?php echo $response_text; // แสดงข้อมูลตอบกลับ ?> <table width="500" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td width="30"> <div align="center"> <strong>ล้าดับ</strong></div></td> <td width="255"> <div align="center"> <strong>ชื่อกลุ่มสมาชิก</strong></div></td> <td width="50"> </td> <td width="50"> </td> </tr> <?php connectDB(); // ดึงข้อมูลจากฐานข้อมูลมาแสดงผล $sqlselect="select * from tblcatmember"; if (!@$result = mysql_query($sqlselect)) { exit("ไม่สามารถเลือกข้อมูลได้"); } $count=1; while ($dbarr=mysql_fetch_array($result)) { ?> <tr> <td width="30" bgcolor="#EAEAEA"><div align="center"> <?php echo $count;?> </div></td> <td bgcolor="#EAEAEA"><?php echo $dbarr["catname"];?></td> <td width="50" bgcolor="#EAEAEA"><div align="center"> <a href="<?php echo "admin_catmembereditsave.php?editid=".$dbarr["catid"];?>">แก้ไข </a></div></td> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 308.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 293 <td width="50" bgcolor="#EAEAEA"><div align="center"><a href="<?php echo $_SERVER["PHP_SELF"]."?delid=".$dbarr["catid"];?>">ลบ</a></div></td> </tr> <?php $count++; } // ปีกกาปิดของฟังก์ชัน while เพื่อวนรอบดึงข้อมูลขึนมาแสดงผล closeDB(); ?> </table> <?php include "admin_footer.php"; ?> </body> </html> admin_catmembereditsave.php <?php include "config.php"; // ตรวจสอบการ login if (!isset($_SESSION["session_user"])) header("Location:index.php"); $cmdsubmit = $_POST["cmdsubmit"]; $catid=$_GET["editid"]; // ==================================== connectDB(); if ($cmdsubmit<>"") { // ตรวจสอบการกดปุ่ม submit // น้าค่าผ่านฟอร์ม มาเก็บเข้าตัวแปร $catid=$_POST["catid"]; $txtcat=$_POST["txtcat"]; $cboactive=$_POST["cboactive"]; // ==================================== $sqlupdate = "update tblcatmember set ". "catname='".$txtcat."' , ". "catactive='".$cboactive."' ". "where catid=".$catid; if (!@$result = mysql_query($sqlupdate)) { $response_text ="<font color=#000099>ติดปัญหาในการแก้ไขข้อมูล</font>"; }else{ $response_text ="<font color=#FF0000>แก้ไขข้อมูลเรียบร้อย</font>"; } ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 309.
    294 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก } // แสดงข้อมูล ที่ต้องการแก้ไข $sql="select * from tblcatmember where catid=".$catid; if (!@$result=mysql_query($sql)) { exit("ไม่สามารถแสดงข้อมูลได้"); } $dbarr=mysql_fetch_array ($result); closeDB(); ?> <html> <head> <title>แก้ไขกลุ่มสมาชิก</title> <meta http-equiv="Content-Type" content="text/html; charset=tis-620"> <link rel="stylesheet" type="text/css" href="css/style.css"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <?php include "admin_menu.php"; ?> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#EAEAEA"><div align="center"><strong> <a href="admin_catmember.php">เพิ่มกลุ่มสมาชิกใหม่</a> <a href="admin_catmemberedit.php">รายชื่อกลุ่มสมาชิก </a> </strong></div></td> </tr> </table> <?php echo $response_text; // ส่วนส้าหรับ แสดงข้อความ ?> <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"> <table width="300" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td colspan="2"><strong>แก้ไขกลุ่มสมาชิก</strong></td> </tr> <tr> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 310.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 295 <td width="163" bgcolor="#EAEAEA">ชื่อกลุ่มสมาชิก</td> <td width="326" bgcolor="#EAEAEA"> <input name="txtcat" type="text" value=" <?php echo $dbarr["catname"]; ?>"></td> </tr> <tr> <td bgcolor="#EAEAEA">สถานะ</td> <td bgcolor="#EAEAEA"> <select name="cboactive"> <option value="1" <?php if ($dbarr["catactive"]=="1") echo "selected" ;?>> แสดง </option> <option value="0" <?php if ($dbarr["catactive"]=="0") echo "selected" ;?>> ซ่อน </option> </select></td> </tr> <tr> <td bgcolor="#EAEAEA"> </td> <td bgcolor="#EAEAEA"> <input type="hidden" name="catid" value="<?php echo $dbarr["catid"];?>"> <input name="cmdsubmit" type="submit" value="Submit"> <input name="cmdreset" type="reset" value="Reset"></td> </tr> </table> </form> <?php include "admin_footer.php"; ?> </body> </html> admin_member.php <?php include "config.php"; // ตรวจสอบการ login if (!isset($_SESSION["session_user"])) header("Location:index.php"); // ========================= // รับค่าจากฟอร์ม มาเก็บไว้ที่ตัวแปร $submit = $_POST["cmdsubmit"]; $catmemid=$_POST["cbocatmem"]; ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 311.
    296 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก $txtname=$_POST["txtfullname"]; $txtemail=$_POST["txtemail"]; $txtusername=$_POST["txtusername"]; $txtpass=$_POST["txtpass"]; // ===================== if ($submit<>"") { connectDB(); $sqlinsert="insert into tblmember (mem_fullname,mem_email ,mem_username,mem_password, catid) values ". "('".$txtname."','".$txtemail."','".$txtusername."','".$txtpass."','".$catmemid."')"; if (!@$result=mysql_query($sqlinsert)) { exit("ไม่สามารถเพิ่มข้อมูลสมาชิกได้"); } closeDB ( ); $response_text="<font color=#FF0000>เพิ่มข้อมูลคุณ ".$txtname." เรียบร้อย</font>"; } ?> <html> <head> <title>เพิ่มข้อมูลสมาชิก</title> <meta http-equiv="Content-Type" content="text/html; charset=tis-620"> <link rel="stylesheet" type="text/css" href="css/style.css"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <?php include "admin_menu.php"; ?> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#EAEAEA"><div align="center"><strong> <a href="admin_member.php">เพิ่มสมาชิก</a> <a href="admin_memberedit.php">รายชื่อสมาชิก</a></strong></div></td> </tr> </table> <?php echo $response_text; // ข้อความตอบกลับ ?> <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 312.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 297 <table width="500" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td colspan="2"><strong>ข้อมูลทั่วไป</strong></td> </tr> <tr> <td width="139" bgcolor="#EAEAEA">ฝ่าย :</td> <td width="350" bgcolor="#EAEAEA"> <select name="cbocatmem"> <option value="">-- กรุณาเลือกกลุ่มสมาชิก --</option> <?php $sql="select catid,catname from tblcatmember"; echo listcatmember($sql); ?> </select> </td> </tr> <tr> <td bgcolor="#EAEAEA">ชื่อเต็ม : </td> <td bgcolor="#EAEAEA"><input type="text" name="txtfullname"></td> </tr> <tr> <td bgcolor="#EAEAEA">e-mail :</td> <td bgcolor="#EAEAEA"><input type="text" name="txtemail"></td> </tr> <tr> <td colspan="2"><strong>ข้อมูลระบบ</strong></td> </tr> <tr> <td bgcolor="#EAEAEA">username</td> <td bgcolor="#EAEAEA"><input type="text" name="txtusername"></td> </tr> <tr> <td bgcolor="#EAEAEA">password</td> <td bgcolor="#EAEAEA"><input type="password" name="txtpass"></td> </tr> <tr> <td bgcolor="#EAEAEA"> </td> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 313.
    298 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก <td bgcolor="#EAEAEA"> <input name="cmdsubmit" type="submit" id="cmdsubmit" value="Submit"> <input name="cmdreset" type="reset" id="cmdreset" value=" clear "></td> </tr> </table> </form> <?php include "admin_footer.php"; ?> </body> </html> admin_memberedit.php <?php include "config.php"; // ตรวจสอบการ login if (!isset($_SESSION["session_user"])) header("Location:index.php"); // ========================= // รับค่าตัวแปรแบบ get $delid=$_GET["delid"]; // ============================ // หาก มีการกดปุ่ม ลบข้อมูล ======= if ($delid<>"") { connectDB ( ); $sqldel="delete from tblmember where memid =".$delid; if (!@$resultdel=mysql_query($sqldel)) { exit("ไม่สามารถลบข้อมูลได้"); } else { $response_text = "<font color=#FF0000>ลบข้อมูลเรียบร้อย</font>"; } closeDB ( ); } ?> <html> <head><title>ลบข้อมูลสมาชิก</title> <meta http-equiv="Content-Type" content="text/html; charset=tis-620"> <link rel="stylesheet" type="text/css" href="css/style.css"> <script language="javascript"> <!-ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 314.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 299 function conf(txt) { if (confirm(txt)) { return true; } return false; } //--> </script> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <?php include "admin_menu.php"; ?> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#EAEAEA"><div align="center"><strong> <a href="admin_member.php">เพิ่มสมาชิก</a> <a href="admin_memberedit.php">รายชื่อสมาชิก</a></strong></div></td> </tr> </table> <br> <?php echo $response_text; // แสดงข้อมูล ตอบกลับ ?> <table width="600" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td width="30"> <div align="center"><strong>ล้าดับ</strong></div></td> <td width="100"> <div align="center"><strong>ชื่อกลุ่ม</strong></div></td> <td width="210"><strong>ชื่อสมาชิก</strong></td> <td width="30"> </td> <td width="30"> </td> </tr> <?php ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 315.
    300 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก connectDB(); // ดึงข้อมูลจากฐานข้อมูลมาแสดงผล $sqlselect="select * from tblmember m inner join tblcatmember cm on cm.catid = m.catid"; if (!@$result = mysql_query($sqlselect)) { exit("ไม่สามารถเลือกข้อมูลได้"); } $count=1; while ($dbarr=mysql_fetch_array($result)) { ?> <tr> <td width="30" bgcolor="#EAEAEA"> <div align="center"><?php echo $count;?></div></td> <td width="100" bgcolor="#EAEAEA"> <?php echo $dbarr["catname"];?></td> <td bgcolor="#EAEAEA"><?php echo $dbarr["mem_fullname"];?></td> <td width="30" bgcolor="#EAEAEA"> <div align="center"><a href=" <?php echo "admin_membereditsave.php?editid=".$dbarr["memid"];?>"> แก้ไข</a></div></td> <td width="30" bgcolor="#EAEAEA"> <div align="center"> <a href="<?php echo $_SERVER["PHP_SELF"]."?delid=".$dbarr["memid"];?>"> ลบ</a></div></td> </tr> <?php $count++; } // ปีกกาปิดของฟังก์ชัน while เพื่อวนรอบดึงข้อมูลมาแสดงผล closeDB(); ?> </table> <?php include "admin_footer.php"; ?> </body> </html> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 316.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 301 admin_membereditsave.php <?php include "config.php"; // ตรวจสอบการ login if (!isset($_SESSION["session_user"])) header("Location:index.php"); // ========================= // รับค่าตัวแปรแบบ get $submit = $_POST["cmdsubmit"]; $memid=$_GET["editid"]; // ==================================== connectDB(); // เรียกใช้ฟังก์ชันเชื่อมต่อฐานข้อมูล if ($submit<>"") { // รับค่าจากฟอร์ม มาเก็บไว้ที่ตัวแปร $memid=$_POST["memid"]; $catmemid=$_POST["cbocatmem"]; $txtname=$_POST["txtfullname"]; $txtemail=$_POST["txtemail"]; $txtusername=$_POST["txtusername"]; $txtpass=$_POST["txtpass"]; // ===================== $sqlupdate="update tblmember set ". "mem_fullname='".$txtname."' , ". "mem_email='".$txtemail."' , ". "mem_username='".$txtusername."' , ". "mem_password='".$txtpass."' , ". "catid='".$catmemid."' ". "where memid=".$memid; if (!@$result = mysql_query($sqlupdate)) { $response_text ="<font color=#000099>ติดปัญหาในการแก้ไขข้อมูล</font>"; } else { $response_text ="<font color=#FF0000>แก้ไขข้อมูลเรียบร้อย</font>"; } } // แสดงข้อมูล ที่ต้องการแก้ไข $sql="select * from tblmember where memid=".$memid; if (!@$result=mysql_query($sql)) { exit("ไม่สามารถแสดงข้อมูลได้"); } $dbarr=mysql_fetch_array($result); ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 317.
    302 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก closeDB(); // ปิดการเชื่อมต่อกับฐานข้อมูล ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>แก้ไขข้อมูลสมาชิก</title> <meta http-equiv="Content-Type" content="text/html; charset=tis-620"> <link rel="stylesheet" type="text/css" href="css/style.css"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <?php include "admin_menu.php"; ?> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#EAEAEA"><div align="center"><strong> <a href="admin_member.php">เพิ่มสมาชิก</a> <a href="admin_memberedit.php">รายชื่อสมาชิก</a></strong></div></td> </tr> </table> <?php echo $response_text; // ข้อความตอบกลับ ?> <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post"> <table width="500" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td colspan="2"><strong>ข้อมูลทั่วไป</strong></td> </tr> <tr> <td width="139" bgcolor="#EAEAEA">กลุ่มสมาชิก :</td> <td width="350" bgcolor="#EAEAEA"> <select name="cbocatmem"> <option value="">-- กรุณาเลือกกลุ่มสมาชิก --</option> <?php $sql="select catid,catname from tblcatmember"; echo listcatmember($sql,$dbarr["catid"]); ?> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 318.
    บทที่ 16 กรณีศึกษา:ระบบจัดการสมาชิก 303 </select> </td> </tr> <tr> <td bgcolor="#EAEAEA">ชื่อเต็ม : </td> <td bgcolor="#EAEAEA"> <input type="text" name="txtfullname" value=" <?php echo $dbarr["mem_fullname"];?>"></td> </tr> <tr> <td bgcolor="#EAEAEA">e-mail :</td> <td bgcolor="#EAEAEA"><input type="text" name="txtemail" value=" <?php echo $dbarr["mem_email"];?>"></td> </tr> <tr> <td colspan="2"><strong>ข้อมูลระบบ</strong></td> </tr> <tr> <td bgcolor="#EAEAEA">username</td> <td bgcolor="#EAEAEA"><input type="text" name="txtusername" value=" <?php echo $dbarr["mem_username"];?>"></td> </tr> <tr> <td bgcolor="#EAEAEA">password</td> <td bgcolor="#EAEAEA"><input type="text" name="txtpass" value=" <?php echo $dbarr["mem_password"];?>"></td> </tr> <tr> <td bgcolor="#EAEAEA"> </td> <td bgcolor="#EAEAEA"> <input type="hidden" name="memid" value=" <?php echo $dbarr["memid"];?>"> <input name="cmdsubmit" type="submit" id="cmdsubmit" value="Submit"> <input name="cmdreset" type="reset" id="cmdreset" value=" clear "></td> </tr> </table> </form> <?php ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 319.
    304 บทที่ 16กรณีศึกษา: ระบบจัดการสมาชิก include "admin_footer.php"; ?> </body> </html> ปริญญา น้อยดอนไพร || การเขียนโปรแกรมบนเว็บด้วย PHP ร่วมกับฐานข้อมูล MySQL
  • 320.
    บรรณานุกรม Chris Ullman andLucinda Dykes. (2007). Beginning Ajax. Canada: Wiley Publishing. Hege Refsnes, Stale Refsnes, Kai Jim Refsnes, and Jan Egil Refsnes with Kelly Dobbs Henthorne. (2010). Learn JavaScript and AJAX with w3schools. Canada: Wiley Publishing. Jay Greenspan and Brad Bulger. (2001). MySQL/PHP Database Applications. Chicago, New York: IDG Books Worldwide. Kevin Yank. (2004). Build Your Own Database Driven Website Using PHP and MySQL. 3rd Edition, United States of America: SitePoint Pty. Luke Welling and Laura Thomson. (2001). PHP and MySQL Web Development. United States of America: SAMS. PHP Manual. (2012). Available at: http://www.php.net. Accessed October 1, 2012. Shelley Powers. (2007). Adding Ajax. United States of America: O'Reilly Media. Tim Converse and Joyce Park with Clark Morgan. (2004). PHP5 and MySQL Bible. Canada: Wiley Publishing. The phpMyAdmin devel team. (2012). Available at: http://www.phpmyadmin.net /home_page/docs.php. Accessed December 04, 2012. W. Jason Gilmore. (2008). Beginning PHP and MySQL: From Novice to Professional, Third Edition. United States of America: Apress. กิตติ ภักดีวัฒนะกุล และจันทรขจร แซ่อุ๊น . (2552). PHP, พิมพ์ครั้งที่ 12. กรุงเทพฯ : เคทีพี คอมพ์ แอนด์ คอนซัลท์. กิติศักดิ์ เจริญโภคานนท์. (2550). คู่มือเรียนเขียนเว็บอีคอมเมิร์ซด้วย PHP 5, พิมพ์ครั้งที่ 2. กรุงเทพฯ: ซัคเซส มีเดีย. บัญชา ปะสีละเตสัง. (2553). พัฒนาเว็บแปพลิเคชั่นด้วย PHP ร่วมกับ MySQL และ Dreamweaver. กรุงเทพฯ: ซีเอ็ดยูเคชั่น. ______________. (2551). พัฒนาเว็บด้วยเทคนิค Ajax และ PHP. กรุงเทพฯ: ซีเอ็ดยูเคชั่น. ภาควิชาวิศวกรรมคอมพิวเตอร์ . (2553). Introduction to MySQL Database Server. เชียงใหม่: คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่. สาธิต ชัยวิวัฒน์ตระกูล. (2550). เก่ง PHP ให้ครบสูตร. กรุงเทพฯ: วิตตี้กรุ๊ป.