Your SlideShare is downloading. ×
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Book sru
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Book sru

1,611

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,611
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
179
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. (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. (2)
  • 3. (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. (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. (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. (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. (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. (8) สำรบัญ (ต่อ) หน้ำที่ การส่งคาสั่ง SQL ไปยังฐานข้อมูล ...........................................................................................268 การอ่านข้อมูลผลลัพธ์ ............................................................................................................. 269 การแก้ไขข้อมูลภาษาไทยกลายเป็น "?????...." ........................................................................272 การตรวจสอบการเปลี่ยนแปลงข้อมูล ......................................................................................272 การตรวจสอบข้อผิดพลาดระหว่างการทางานร่วมกับ MySQL .............................................. 275 การตรวจสอบชื่อฐานข้อมูลและตาราง ................................................................................... 275 การตรวจสอบโครงสร้างของขอบเขตข้อมูล ............................................................................ 277 บทที่ 16 กรณีศึกษำ: ระบบจัดกำรสมำชิก ..................................................................................... 281 โปรเซสการทางานของระบบจัดการสมาชิก ............................................................................ 281 อธิบายการทางานของระบบ ................................................................................................... 281 สร้างฐานข้อมูลและตาราง ...................................................................................................... 282 รายละเอียดของไฟล์ที่เกี่ยวข้อง .............................................................................................. 282 บรรณำนุกรม ...................................................................................................................................... 305
  • 9. (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) สำรบัญตำรำง (ต่อ) ตำรำงที่ 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. (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. (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. (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
  • 14. บทที่ 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 ได้อีกด้วย
  • 15. 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
  • 16. บทที่ 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
  • 17. 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
  • 18. บทที่ 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
  • 19. 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
  • 20. บทที่ 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
  • 21. 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
  • 22. บทที่ 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
  • 23. 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
  • 24. บทที่ 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) ในเครื่องของผู้ใช้นั่นเอง สาหรับโปรแกรมเว็บเซิร์ฟเวอร์นั้น จะถูกติดตั้งไว้ในเครื่องของผู้ให้บริการเว็บไซต์ (มักเรียกเครื่องคอมพิวเตอร์ที่ติดตั้งโปรแกรมเว็บเซิร์ฟเวอร์
  • 25. 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
  • 26. บทที่ 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
  • 27. 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
  • 28. บทที่ 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
  • 29. 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
  • 30. บทที่ 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
  • 31. 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
  • 32. บทที่ 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
  • 33. 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
  • 34. บทที่ 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
  • 35. 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
  • 36. บทที่ 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
  • 37. 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
  • 38. บทที่ 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
  • 39. 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
  • 40. บทที่ 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
  • 41. 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
  • 42. บทที่ 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
  • 43. 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
  • 44. บทที่ 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>
  • 45. 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
  • 46. บทที่ 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
  • 47. 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
  • 48. บทที่ 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
  • 49. 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
  • 50. บทที่ 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
  • 51. 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
  • 52. บทที่ 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
  • 53. 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
  • 54. บทที่ 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
  • 55. 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
  • 56. บทที่ 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
  • 57. 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
  • 58. บทที่ 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, $ผลลัพธ์ เป็นต้น แต่โดยทั่วไปแล้ว นิยมตั้งชื่อตัวแปรเป็นภาษาอังกฤษมากกว่า เมื่อได้ประกาศตัวแปรก็สามารถเริ่มต้นใช้งานได้ทันที แต่ก่อนที่จะนาตัวแปรไปใช้งานได้นั้น ตัว แปรจะต้องเก็บข้อมูลบางอย่างเอาไว้ หรือเรียกว่าการกาหนดค่าตัวแปร การกาหนดค่าตัวแปรแบบง่ายๆ คื อ การคั ด ลอกค่ า หรื อ โอนถ่ า ยค่ า ของนิ พ จน์ ห รื อ สมการต่ า งๆ โดยมี สั ญ ลั ก ษณ์ ที่ ใ ช้ ก าหนดค่ า คื อ
  • 59. 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
  • 60. บทที่ 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
  • 61. 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 ที่ชื่อว่า
  • 62. บทที่ 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
  • 63. 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
  • 64. บทที่ 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
  • 65. 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
  • 66. บทที่ 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
  • 67. 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
  • 68. บทที่ 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
  • 69. 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
  • 70. บทที่ 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
  • 71. 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
  • 72. บทที่ 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
  • 73. 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
  • 74. บทที่ 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
  • 75. 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
  • 76. บทที่ 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
  • 77. 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
  • 78. บทที่ 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
  • 79. 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
  • 80. บทที่ 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 (เงื่อนไข) { คาสั่งต่างๆ เมื่อเงื่อนไขเป็นจริง }
  • 81. 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
  • 82. บทที่ 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
  • 83. 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
  • 84. บทที่ 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
  • 85. 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
  • 86. บทที่ 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
  • 87. 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
  • 88. บทที่ 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
  • 89. 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
  • 90. บทที่ 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
  • 91. 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
  • 92. บทที่ 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
  • 93. 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
  • 94. บทที่ 6 ฟังก์ชัน (Functions) ในบทนี้จะกล่าวถึง PHP ฟังก์ชัน รวมถึงวิธีการสร้าง ข้อกาหนด คุณสมบัติต่างๆ และการเรียกใช้ งานฟังก์ชัน การส่งค่าตัวแปรเพื่อประมวลผลในฟังก์ชัน การส่งค่ากลับเมื่อฟังก์ชันทางานเสร็จ เป็นต้น ซึงหน้าที่หลักๆ ของฟังก์ชันนั้นจะช่วยลดขั้นตอนการเขียนโปรแกรมที่ต้องทาซ้าๆ หรือใช้งานบ่อยครั้ง ทา ่ ให้การเขียนโปรแกรมทาได้ง่ายและรวดเร็ว สามารถสร้างเป็น ไลบรารีฟังก์ชัน สาหรับการใช้งานในครั้ง ต่อๆ ไป ฟังก์ชัน ฟังก์ชัน คือ กลุ่มหรือชุดของคาสั่งที่สร้างขึ้นเพื่อทาหน้าที่หนึ่งๆ เมื่อต้องการใช้งานก็เพียงเรียกชื่อ ฟังก์ชันนั้นก็สามารถใช้งานได้ทันที ฟังก์ชันใน PHP สามารถแบ่งได้เป็น 2 ชนิด คือ 1) ฟังก์ชันมาตรฐาน (Built-in Functions) และ 2) ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง (User Defined Functions) มี รายละเอียด ดังนี้ ฟังก์ชันมาตรฐาน (Built-in Functions) ฟังก์ชันมาตรฐาน คือ ฟังก์ชันที่มาพร้อมกับ PHP สามารถเรียกใช้งานได้ทันที ฟังก์ชันมาตรฐานมี หลายกลุ่มการทางาน สามารถจาแนกตามหน้าที่ ดังนี้  ฟังก์ชันที่เกี่ยวกับวันที่และเวลา  ฟังก์ชันที่เกี่ยวกับการคานวณทางคณิตศาสตร์  ฟังก์ชันที่เกี่ยวกับการติดต่อกับฐานข้อมูล  ฟังก์ชันที่เกี่ยวกับการจัดการกับกับสตริงหรือข้อความ ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง (User Defined Functions) ฟังก์ชันที่ผู้ใช้งานเป็นผู้สร้างเอง คือ กลุ่มของคาสั่งที่ผู้ใช้เป็นผู้เขียนหรือพัฒนาขึ้นมาเอง เพื่อ ทางานหรือทาหน้าที่อย่างใดอย่างหนึ่งตามต้องการ จากที่ได้กล่าวถึงในข้างต้น สรุปได้ว่า หลักๆ แล้วฟังก์ชันมีอยู่ด้วยกัน 2 ประเภท ทั้ง 2 ประเภท ก็จะมีฟังก์ชันที่ประกอบไปด้วย ฟังก์ชันที่ไม่มีการส่งค่าระหว่างฟังก์ชัน และฟังก์ชันที่มีการส่งค่าระหว่าง ฟังก์ชัน ค่าที่ใช้รับส่งระหว่างฟังก์ชัน จะเรียกว่า พารามิเตอร์ (parameter) หรือบ้างก็เรียกว่า อากิวเมนต์ (argument) ในหนังสือเล่มนี้ ผู้แต่งขอใช้คาว่า พารามิเตอร์ เพียงอย่างเดียวเมื่อกล่าวถึงค่าตัวแปรที่ใช้ สาหรับการรับส่งค่าระหว่างฟังก์ชัน
  • 95. 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
  • 96. บทที่ 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
  • 97. 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
  • 98. บทที่ 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
  • 99. 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
  • 100. บทที่ 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
  • 101. 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
  • 102. บทที่ 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
  • 103. 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
  • 104. บทที่ 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); // ใช้แสดงข้อมูลในอาร์เรย์ ?>
  • 105. 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
  • 106. บทที่ 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
  • 107. 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
  • 108. บทที่ 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
  • 109. 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
  • 110. บทที่ 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
  • 111. 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
  • 112. บทที่ 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
  • 113. 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
  • 114. บทที่ 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
  • 115. 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
  • 116. บทที่ 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
  • 117. 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
  • 118. บทที่ 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
  • 119. 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
  • 120. บทที่ 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
  • 121. 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
  • 122. บทที่ 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
  • 123. 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
  • 124. บทที่ 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
  • 125. 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
  • 126. บทที่ 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
  • 127. 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
  • 128. บทที่ 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
  • 129. 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
  • 130. บทที่ 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
  • 131. 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
  • 132. บทที่ 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
  • 133. 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
  • 134. บทที่ 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
  • 135. 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
  • 136. บทที่ 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
  • 137. 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
  • 138. บทที่ 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
  • 139. 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
  • 140. บทที่ 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
  • 141. 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
  • 142. บทที่ 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
  • 143. 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
  • 144. บทที่ 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
  • 145. 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
  • 146. บทที่ 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
  • 147. 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
  • 148. บทที่ 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
  • 149. 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
  • 150. บทที่ 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
  • 151. 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
  • 152. บทที่ 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
  • 153. 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
  • 154. บทที่ 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
  • 155. 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
  • 156. บทที่ 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
  • 157. 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
  • 158. บทที่ 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>
  • 159. 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
  • 160. บทที่ 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
  • 161. 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
  • 162. บทที่ 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
  • 163. 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
  • 164. บทที่ 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
  • 165. 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
  • 166. บทที่ 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
  • 167. 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
  • 168. บทที่ 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
  • 169. 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
  • 170. บทที่ 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
  • 171. 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
  • 172. บทที่ 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
  • 173. 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
  • 174. บทที่ 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
  • 175. 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
  • 176. บทที่ 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
  • 177. 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
  • 178. บทที่ 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
  • 179. 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
  • 180. บทที่ 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
  • 181. 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
  • 182. บทที่ 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> กาหนดตัวเลือกสาหรับรายการที่ให้เลือก
  • 183. 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
  • 184. บทที่ 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
  • 185. 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
  • 186. บทที่ 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
  • 187. 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
  • 188. บทที่ 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
  • 189. 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
  • 190. บทที่ 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
  • 191. 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
  • 192. บทที่ 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
  • 193. 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
  • 194. บทที่ 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
  • 195. 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
  • 196. บทที่ 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
  • 197. 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
  • 198. บทที่ 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/'); ?>
  • 199. 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
  • 200. บทที่ 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
  • 201. 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
  • 202. บทที่ 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
  • 203. 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
  • 204. บทที่ 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
  • 205. 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
  • 206. บทที่ 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
  • 207. 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
  • 208. บทที่ 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
  • 209. 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
  • 210. บทที่ 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 ชื่อคลาส { . . } โดยทั่วไปนิยมตั้งชื่อคลาสให้ขึ้นต้นด้วยตัวพิมพ์ใหญ่ (แต่ไม่จาเป็น) ส่วนข้อกาหนดอื่นๆ ในการตั้ง ชื่อจะคล้ายกับการตั้งชื่อตัวแปร เช่น
  • 211. 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
  • 212. บทที่ 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
  • 213. 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
  • 214. บทที่ 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
  • 215. 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
  • 216. บทที่ 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
  • 217. 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
  • 218. บทที่ 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
  • 219. 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
  • 220. บทที่ 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
  • 221. 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
  • 222. บทที่ 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
  • 223. 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
  • 224. บทที่ 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
  • 225. 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 การที่บร