Tag: พื้นฐาน PHP

  • PHP101 – ก้าวต่อไปในการเรียนรู้ PHP

    ขอแสดงความยินดีที่คุณได้เดินทางมาถึง Module สุดท้ายของคู่มือการเรียนรู้ภาษา PHP เบื้องต้นถึงระดับกลางนี้! ในตลอด 14 Modules ที่ผ่านมา คุณได้เรียนรู้พื้นฐานที่สำคัญของภาษา PHP รวมถึงแนวคิดการเขียนโปรแกรมเชิงวัตถุ การทำงานกับฐานข้อมูล การจัดการไฟล์ และการใช้ฟังก์ชันและไลบรารีต่างๆ ใน Module นี้ เราจะมาพูดถึงก้าวต่อไปในการพัฒนาทักษะ PHP ของคุณให้ก้าวหน้ายิ่งขึ้น

    ทบทวนสิ่งที่คุณได้เรียนรู้

    ก่อนที่เราจะพูดถึงก้าวต่อไป ลองใช้เวลาสักครู่เพื่อทบทวนหัวข้อสำคัญที่คุณได้เรียนรู้:

    • พื้นฐานภาษา PHP: Syntax, ตัวแปร, Data Types, Operators, Control Structures (if, else, switch, for, while, foreach)
    • ฟังก์ชัน: การสร้างและเรียกใช้ฟังก์ชัน, Arguments, Return Values, Variable Scope
    • Arrays: Indexed Arrays, Associative Arrays, Multidimensional Arrays, Array Functions
    • Strings: String Manipulation Functions, Regular Expressions
    • Forms และ User Input: การสร้าง Form HTML, HTTP Methods (GET, POST), การรับและประมวลผลข้อมูลด้วย PHP, Form Validation
    • Session และ Cookie: การจัดการ Session และ Cookie สำหรับการคงสถานะและการจดจำผู้ใช้
    • การจัดการไฟล์: การอ่าน, เขียน, และจัดการไฟล์บน Server
    • ฐานข้อมูล MySQL เบื้องต้น: การเชื่อมต่อ, การ Query ข้อมูล (SELECT, INSERT, UPDATE, DELETE), การป้องกัน SQL Injection
    • Object-Oriented Programming (OOP): Classes, Objects, Properties, Methods, Encapsulation, Inheritance, Polymorphism, Abstraction, Namespaces, Autoloading, Traits, Interfaces
    • การจัดการข้อผิดพลาดและ Exception Handling: Error Reporting, Custom Error Handlers, try-catch-finally blocks, Custom Exceptions
    • ฟังก์ชันและไลบรารีที่สำคัญ: String Functions, Array Functions, Date/Time Functions, File System Functions, HTTP Functions, Composer, PHP Frameworks (Laravel, Symfony, CodeIgniter), ORM, HTTP Client, Testing Framework

    ก้าวต่อไปในการพัฒนาทักษะ PHP

    การเรียนรู้ไม่มีที่สิ้นสุด และโลกของการพัฒนาเว็บก็มีการเปลี่ยนแปลงอยู่เสมอ นี่คือแนวทางและหัวข้อที่คุณควรศึกษาเพิ่มเติมเพื่อพัฒนาทักษะ PHP ของคุณให้ก้าวหน้า:

    1. เรียนรู้ Framework อย่างลึกซึ้ง

    PHP Frameworks เช่น Laravel, Symfony, และ CodeIgniter เป็นเครื่องมือสำคัญสำหรับการพัฒนาเว็บแอปพลิเคชันขนาดใหญ่ การศึกษา Framework อย่างละเอียดจะช่วยให้คุณเข้าใจถึงสถาปัตยกรรมของแอปพลิเคชัน, Routing, ORM, Templating Engines, Security Features, และอื่นๆ เลือก Framework ที่คุณสนใจและลองสร้างโปรเจคจริงด้วย Framework นั้นๆ

    2. ศึกษาเกี่ยวกับฐานข้อมูลขั้นสูง

    นอกเหนือจากการ Query ข้อมูลพื้นฐานแล้ว ยังมีหัวข้อที่น่าสนใจเกี่ยวกับฐานข้อมูล เช่น การทำ Indexing เพื่อเพิ่มประสิทธิภาพในการ Query, การใช้ Joins เพื่อรวมข้อมูลจากหลายตาราง, Transactions สำหรับการจัดการการเปลี่ยนแปลงข้อมูลหลายรายการ, และการใช้ Database Migrations สำหรับการจัดการ Schema ของฐานข้อมูล

    3. ทำความเข้าใจเกี่ยวกับ API และ Web Services

    การสร้างและใช้งาน API (Application Programming Interface) เป็นทักษะที่สำคัญมากในการพัฒนาเว็บยุคปัจจุบัน ศึกษาเกี่ยวกับ RESTful APIs, JSON, XML, และเครื่องมือต่างๆ ที่ใช้ในการสร้างและทดสอบ API (เช่น Postman)

    4. เน้นเรื่องความปลอดภัย

    ความปลอดภัยเป็นสิ่งที่ไม่ควรมองข้ามในการพัฒนาเว็บ เรียนรู้เกี่ยวกับช่องโหว่ที่พบบ่อย เช่น Cross-Site Scripting (XSS), SQL Injection, Cross-Site Request Forgery (CSRF), และวิธีการป้องกันช่องโหว่เหล่านี้

    5. การทดสอบ (Testing)

    การเขียน Unit Tests และ Integration Tests ช่วยให้คุณมั่นใจได้ว่าโค้ดของคุณทำงานได้อย่างถูกต้องและสามารถตรวจจับข้อผิดพลาดได้ตั้งแต่เนิ่นๆ ศึกษาเกี่ยวกับ PHPUnit และเครื่องมืออื่นๆ ที่เกี่ยวข้องกับการทดสอบ

    6. Version Control ด้วย Git

    Git เป็นระบบ Version Control ที่ใช้กันอย่างแพร่หลายในการพัฒนาซอฟต์แวร์ เรียนรู้วิธีการใช้งาน Git สำหรับการจัดการโค้ด การทำงานร่วมกันกับทีม และการย้อนกลับไปยังเวอร์ชันเก่าของโค้ด

    7. Containerization ด้วย Docker

    Docker เป็นเครื่องมือที่ช่วยในการสร้างและจัดการ Containers ซึ่งเป็นสภาพแวดล้อมที่แยกจากกันสำหรับการรันแอปพลิเคชัน การเรียนรู้ Docker จะช่วยให้การ Deploy แอปพลิเคชันของคุณง่ายขึ้นและมีความสม่ำเสมอในทุกสภาพแวดล้อม

    8. เรียนรู้เกี่ยวกับ Design Patterns

    Design Patterns คือแนวทางแก้ไขปัญหาที่เกิดขึ้นซ้ำๆ ในการออกแบบซอฟต์แวร์ การศึกษา Design Patterns จะช่วยให้คุณเขียนโค้ดที่มีโครงสร้างที่ดี ยืดหยุ่น และง่ายต่อการบำรุงรักษา

    9. ติดตามข่าวสารและเทคโนโลยีใหม่ๆ

    โลกของการพัฒนาเว็บมีการเปลี่ยนแปลงอยู่เสมอ ติดตามข่าวสารล่าสุดเกี่ยวกับ PHP, Frameworks, Tools, และ Best Practices ผ่าน Blog, Podcasts, และ Communities ต่างๆ

    10. สร้างโปรเจคจริง

    วิธีที่ดีที่สุดในการเรียนรู้คือการลงมือทำ ลองสร้างโปรเจคเว็บแอปพลิเคชันของคุณเอง ไม่ว่าจะเป็น Blog ส่วนตัว, ระบบจัดการข้อมูลอย่างง่าย, หรืออะไรก็ตามที่คุณสนใจ การทำโปรเจคจริงจะช่วยให้คุณได้ประยุกต์ใช้ความรู้ที่เรียนมาและพบกับปัญหาที่ต้องแก้ไข ซึ่งจะนำไปสู่การเรียนรู้ที่ลึกซึ้งยิ่งขึ้น

    แหล่งข้อมูลเพิ่มเติม

    นี่คือแหล่งข้อมูลเพิ่มเติมที่คุณสามารถใช้ในการเรียนรู้และพัฒนาทักษะ PHP ของคุณ:

    • PHP.net: Documentation หลักของภาษา PHP
    • เว็บไซต์ของ Framework ต่างๆ: Laravel, Symfony, CodeIgniter
    • เว็บไซต์เกี่ยวกับ PHP Packages: Packagist (สำหรับ Composer)
    • เว็บไซต์และ Blog เกี่ยวกับการพัฒนาเว็บ: เช่น SitePoint, Scotch.io, DigitalOcean Tutorials
    • Communities และ Forums: Stack Overflow, Reddit (r/php, r/laravel, r/symfony)
    • Online Courses: Udemy, Coursera, Laracasts, SymfonyCasts

    ขอให้สนุกกับการเดินทางในโลกของ PHP!

    การเรียนรู้ PHP เป็นการเดินทางที่น่าตื่นเต้นและมีโอกาสมากมายรอคุณอยู่ อย่าหยุดที่จะเรียนรู้และพัฒนาตัวเองอย่างต่อเนื่อง ขอให้คุณประสบความสำเร็จในการเป็นนักพัฒนา PHP ที่ยอดเยี่ยม!

  • PHP101 – ฟังก์ชันและไลบรารีที่สำคัญของ PHP

    ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับฟังก์ชันและไลบรารีที่สำคัญของ PHP ซึ่งเป็นเครื่องมือที่มีประโยชน์อย่างมากในการพัฒนาเว็บแอปพลิเคชัน ช่วยให้คุณทำงานต่างๆ ได้อย่างรวดเร็วและมีประสิทธิภาพ โดยไม่ต้องเขียนโค้ดทุกอย่างเองตั้งแต่เริ่มต้น

    ฟังก์ชันที่เกี่ยวข้องกับ String

    เราได้เรียนรู้ฟังก์ชันจัดการ String เบื้องต้นไปแล้วใน Module 6 นี่คือฟังก์ชันเพิ่มเติมที่สำคัญ:

    • sprintf(): จัดรูปแบบ String ตามรูปแบบที่กำหนด
    PHP
    <?php
      $name = "สมชาย";
      $age = 30;
      $formattedString = sprintf("ชื่อ: %s, อายุ: %d ปี", $name, $age);
      echo $formattedString; // Output: ชื่อ: สมชาย, อายุ: 30 ปี
    ?>
    • explode() และ implode(): (ทบทวน) แยก String เป็น Array และรวม Array เป็น String
    • strip_tags(): ลบแท็ก HTML และ PHP ออกจาก String
    PHP
    <?php
      $html = "<p>ข้อความที่มี <b>ตัวหนา</b></p>";
      $stripped = strip_tags($html);
      echo $stripped; // Output: ข้อความที่มี ตัวหนา
    ?>
    • htmlspecialchars(): แปลง Special Characters เป็น HTML Entities เพื่อป้องกัน XSS
    PHP
    <?php
      $userInput = '<script>alert("XSS!")</script>';
      $safeInput = htmlspecialchars($userInput);
      echo $safeInput; // Output: <script>alert("XSS!")</script>
    ?>

    ฟังก์ชันที่เกี่ยวข้องกับ Array

    • array_push(): เพิ่ม Element หนึ่งหรือมากกว่าที่ส่วนท้ายของ Array
    PHP
    <?php
      $fruits = ["apple", "banana"];
      array_push($fruits, "orange", "grape");
      print_r($fruits); // Output: Array ( [0] => apple [1] => banana [2] => orange [3] => grape )
    ?>
    • array_pop(): นำ Element สุดท้ายออกจาก Array
    PHP
    <?php
      $fruits = ["apple", "banana", "orange"];
      $lastFruit = array_pop($fruits);
      echo $lastFruit; // Output: orange
      print_r($fruits); // Output: Array ( [0] => apple [1] => banana )
    ?>
    • array_shift(): นำ Element แรกออกจาก Array
    • array_unshift(): เพิ่ม Element หนึ่งหรือมากกว่าที่ส่วนต้นของ Array
    • count() หรือ sizeof(): นับจำนวน Element ใน Array
    • in_array(): ตรวจสอบว่ามีค่าอยู่ใน Array หรือไม่
    • array_key_exists(): ตรวจสอบว่ามี Key อยู่ใน Array หรือไม่
    • array_keys(): ส่งคืน Array ที่มี Key ทั้งหมดของ Array
    • array_values(): ส่งคืน Array ที่มี Value ทั้งหมดของ Array
    • array_merge(): รวม Array หนึ่งหรือมากกว่าเข้าด้วยกัน
    • sort(), rsort(), asort(), arsort(), ksort(), krsort(): ฟังก์ชันสำหรับการเรียงลำดับ Array

    ฟังก์ชันที่เกี่ยวข้องกับ Date และ Time

    • date(): จัดรูปแบบวันที่และเวลา
    PHP
    <?php
      echo "วันนี้คือวันที่ " . date("Y-m-d") . "<br>";
      echo "เวลาปัจจุบันคือ " . date("H:i:s");
    ?>
    • time(): ส่งคืน Unix timestamp (จำนวนวินาทีตั้งแต่ January 1 1970 00:00:00 GMT)
    • strtotime(): แปลง Human-readable Date/Time String เป็น Unix timestamp
    PHP
    <?php
      $timestamp = strtotime("next Sunday");
      echo date("Y-m-d", $timestamp);
    ?>
    • mktime(): สร้าง Unix timestamp จากวันที่และเวลาที่ระบุ

    ฟังก์ชันที่เกี่ยวข้องกับ File System

    (ทบทวนจาก Module 9)

    • fopen(), fclose(), fread(), fwrite(), file_get_contents(), file_put_contents()
    • file_exists(), is_file(), is_dir()
    • mkdir(), rmdir(), unlink(), rename()

    ฟังก์ชันที่เกี่ยวข้องกับ HTTP

    • header(): ส่ง HTTP Header ไปยัง Browser (ต้องเรียกใช้ก่อนที่จะมี Output ใดๆ)
    PHP
    <?php
      // Redirect ไปยัง URL อื่น
      header("Location: http://example.com/");
      exit();
    ?>
    • http_build_query(): สร้าง URL-encoded Query String จาก Array หรือ Object
    PHP
    <?php
      $params = ["name" => "John Doe", "age" => 30];
      $queryString = http_build_query($params);
      echo $queryString; // Output: name=John+Doe&age=30
    ?>

    ไลบรารีและ Framework ที่สำคัญ

    PHP มีไลบรารีและ Framework มากมายที่ช่วยในการพัฒนาเว็บแอปพลิเคชันขนาดใหญ่และซับซ้อนได้อย่างมีประสิทธิภาพ นี่คือตัวอย่างบางส่วน:

    • Composer: เครื่องมือจัดการ Dependency สำหรับ PHP ช่วยในการจัดการและติดตั้งไลบรารีภายนอก
    • Laravel: PHP Framework ที่ได้รับความนิยม มี Features มากมาย เช่น ระบบ Routing, ORM (Eloquent), Templating Engine (Blade)
    • Symfony: อีกหนึ่ง PHP Framework ที่แข็งแกร่งและยืดหยุ่น เป็นส่วนประกอบหลักของหลายๆ โปรเจค Open Source
    • CodeIgniter: PHP Framework ที่มีขนาดเล็กและเรียนรู้ง่าย เหมาะสำหรับโปรเจคที่ไม่ซับซ้อนมาก
    • Doctrine: PHP Object-Relational Mapper (ORM) ที่มีประสิทธิภาพ
    • Guzzle: PHP HTTP Client สำหรับส่ง HTTP Requests
    • PHPUnit: Framework สำหรับการทำ Unit Testing ใน PHP

    การเรียนรู้และใช้งานไลบรารีและ Framework เหล่านี้จะช่วยเพิ่มประสิทธิภาพในการพัฒนาของคุณอย่างมาก

    กิจกรรมใน Module 14

    1. ทดลองใช้ฟังก์ชัน sprintf() ในการจัดรูปแบบ String
    2. ใช้ strip_tags() และ htmlspecialchars() เพื่อจัดการกับ String ที่อาจมี HTML หรือ Special Characters
    3. ทดลองใช้ฟังก์ชัน Array ต่างๆ เช่น array_push(), array_pop(), in_array(), และฟังก์ชันเรียงลำดับ
    4. ใช้ฟังก์ชัน date() และ strtotime() ในการจัดการกับวันที่และเวลา
    5. ทดลองใช้ header() เพื่อ Redirect ไปยัง URL อื่น
    6. สร้าง Query String จาก Array โดยใช้ http_build_query()
    7. (Optional) ศึกษาเกี่ยวกับ Composer และลองติดตั้งไลบรารีอย่างง่าย
    8. (Optional) ทำความคุ้นเคยกับโครงสร้างพื้นฐานของ Framework เช่น Laravel หรือ CodeIgniter

    ใน Module สุดท้ายของเรา เราจะมาสรุปเนื้อหาทั้งหมดที่ได้เรียนรู้ และให้แนวทางในการพัฒนาตัวเองต่อไปในโลกของ PHP ครับ!

  • PHP101 – การจัดการข้อผิดพลาดและ Exception Handling

    ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับการจัดการข้อผิดพลาด (Error Handling) และการจัดการ Exception (Exception Handling) ใน PHP ซึ่งเป็นสิ่งสำคัญอย่างยิ่งในการสร้างแอปพลิเคชันที่มีความเสถียร สามารถรับมือกับสถานการณ์ที่ไม่คาดฝัน และให้ข้อมูลที่เป็นประโยชน์แก่ผู้ใช้หรือผู้พัฒนาเมื่อเกิดปัญหา

    ประเภทของข้อผิดพลาดใน PHP (Types of Errors in PHP)

    PHP มีระดับของข้อผิดพลาดหลายประเภท ซึ่งแต่ละประเภทมีความรุนแรงและลักษณะการทำงานที่แตกต่างกัน:

    • Notice: ข้อผิดพลาดที่ไม่ร้ายแรง มักเกิดจากการเข้าถึงตัวแปรที่ยังไม่ได้กำหนดค่า
    • Warning: ข้อผิดพลาดที่ไม่ร้ายแรง แต่ควรได้รับการแก้ไข เช่น การ include ไฟล์ที่ไม่พบ
    • Fatal Error: ข้อผิดพลาดร้ายแรงที่ทำให้สคริปต์หยุดการทำงานทันที เช่น การเรียกใช้ฟังก์ชันที่ไม่มีอยู่ หรือการพยายามสร้าง Object จากคลาสที่ไม่มีอยู่

    การตั้งค่าการรายงานข้อผิดพลาด (Error Reporting)

    คุณสามารถกำหนดระดับการรายงานข้อผิดพลาดใน PHP ได้โดยใช้ฟังก์ชัน error_reporting() และการตั้งค่าในไฟล์ php.ini

    PHP
    <?php
    
      // รายงานทุกข้อผิดพลาด ยกเว้น Notices
      error_reporting(E_ALL & ~E_NOTICE);
    
      // รายงานเฉพาะ Warnings และ Fatal Errors
      error_reporting(E_WARNING | E_ERROR);
    
      // รายงานทุกข้อผิดพลาด
      error_reporting(E_ALL);
    
      // ไม่รายงานข้อผิดพลาดใดๆ (สำหรับการใช้งานจริง ไม่แนะนำ)
      error_reporting(0);
    
    ?>

    สำหรับการพัฒนา ควรตั้งค่าให้รายงานข้อผิดพลาดทั้งหมด เพื่อช่วยในการตรวจหาและแก้ไขปัญหา แต่สำหรับการใช้งานจริง อาจต้องการปิดการแสดงผลข้อผิดพลาดบนหน้าเว็บเพื่อความปลอดภัยและความเป็นมิตรต่อผู้ใช้

    การจัดการข้อผิดพลาดแบบกำหนดเอง (Custom Error Handling)

    คุณสามารถกำหนดฟังก์ชันที่จะถูกเรียกใช้เมื่อเกิดข้อผิดพลาดใน PHP ได้โดยใช้ฟังก์ชัน set_error_handler()

    PHP
    <?php
    
      function customErrorHandler($errno, $errstr, $errfile, $errline) {
        echo "<b>Error:</b> [$errno] $errstr in $errfile on line $errline<br>";
        echo "Ending Script";
        die();
      }
    
      // ตั้งค่า Error Handler ของเรา
      set_error_handler("customErrorHandler");
    
      // ทำให้เกิดข้อผิดพลาด (Warning)
      echo $undefined_variable;
    
      // ทำให้เกิดข้อผิดพลาด (Fatal Error) - จะไม่ถูกจับโดย Error Handler ปกติ
      // nonExistentFunction();
    
      echo "This line will not be executed if a non-fatal error occurs.";
    
    ?>

    ข้อควรทราบ: Error Handler ที่กำหนดเองจะไม่สามารถจัดการกับ Fatal Errors ได้

    Exception Handling

    Exception Handling เป็นกลไกที่มีประสิทธิภาพในการจัดการกับสถานการณ์ที่ไม่คาดฝันที่อาจเกิดขึ้นระหว่างการทำงานของโปรแกรม โดยใช้ Keywords try, catch, และ finally

    try

    บล็อก try ล้อมรอบโค้ดที่อาจทำให้เกิด Exception

    catch

    บล็อก catch ระบุโค้ดที่จะถูกดำเนินการเมื่อ Exception ที่ระบุถูกโยนออกมาจากบล็อก try คุณสามารถมีหลายบล็อก catch เพื่อจัดการกับ Exception ประเภทต่างๆ กันได้

    finally

    บล็อก finally (ถ้ามี) จะถูกดำเนินการเสมอ ไม่ว่าจะมี Exception เกิดขึ้นหรือไม่ก็ตาม มักใช้สำหรับการทำความสะอาดทรัพยากร (เช่น ปิดไฟล์, ปิด Connection ฐานข้อมูล)

    PHP
    <?php
    
      function divide($dividend, $divisor) {
        if ($divisor == 0) {
          throw new Exception("Division by zero.");
        }
        return $dividend / $divisor;
      }
    
      try {
        echo divide(10, 2) . "<br>";
        echo divide(5, 0) . "<br>"; // จะโยน Exception
        echo "This line will not be executed.";
      } catch (Exception $e) {
        echo "Caught exception: " . $e->getMessage() . "<br>";
      } finally {
        echo "Finally block executed.";
      }
    
      echo "Program continues after try-catch block.";
    
    ?>

    การสร้าง Exception แบบกำหนดเอง (Custom Exceptions)

    คุณสามารถสร้างคลาส Exception ของคุณเองได้โดยการสืบทอดจากคลาส Exception หรือคลาส Exception อื่นๆ ที่มีอยู่ การทำเช่นนี้ช่วยให้คุณสามารถจัดการกับ Exception ที่มีความหมายเฉพาะเจาะจงกับแอปพลิเคชันของคุณได้

    PHP
    <?php
    
      class DivideByZeroException extends Exception {
        public function errorMessage() {
          // สร้าง Error message ที่กำหนดเอง
          return $this->getMessage() . " Please use a non-zero divisor.";
        }
      }
    
      function divideCustom($dividend, $divisor) {
        if ($divisor == 0) {
          throw new DivideByZeroException("Cannot divide by zero.");
        }
        return $dividend / $divisor;
      }
    
      try {
        echo divideCustom(10, 2) . "<br>";
        echo divideCustom(5, 0) . "<br>";
      } catch (DivideByZeroException $e) {
        echo "Caught custom exception: " . $e->errorMessage() . "<br>";
      } catch (Exception $e) {
        echo "Caught generic exception: " . $e->getMessage() . "<br>";
      }
    
    ?>

    การโยน Exception อีกครั้ง (Re-throwing Exceptions)

    ในบางครั้ง คุณอาจต้องการจับ Exception เพื่อทำการ Logging หรือการจัดการเบื้องต้น แล้วโยน Exception นั้นอีกครั้งเพื่อให้ส่วนอื่นของโค้ดจัดการต่อไป

    PHP
    <?php
    
      function processFile($filename) {
        try {
          $file = fopen($filename, "r");
          if (!$file) {
            throw new Exception("Could not open file: " . $filename);
          }
          // ... ทำงานกับไฟล์ ...
          fclose($file);
        } catch (Exception $e) {
          error_log("Error processing file " . $filename . ": " . $e->getMessage());
          throw $e; // โยน Exception อีกครั้ง
        }
      }
    
      try {
        processFile("nonexistent_file.txt");
      } catch (Exception $e) {
        echo "Caught outer exception: " . $e->getMessage() . "<br>";
      }
    
    ?>

    กิจกรรมใน Module 13

    1. ทดลองตั้งค่าระดับการรายงานข้อผิดพลาดต่างๆ ใน PHP
    2. สร้างฟังก์ชัน Error Handler แบบกำหนดเองและทดลองทำให้เกิดข้อผิดพลาดประเภท Notice และ Warning
    3. เขียนโค้ดที่ใช้บล็อก try และ catch เพื่อจัดการกับ Exception ที่อาจเกิดขึ้น (เช่น การหารด้วยศูนย์)
    4. สร้างคลาส Exception แบบกำหนดเองสำหรับสถานการณ์เฉพาะในโปรแกรมของคุณ
    5. ทดลองใช้บล็อก finally เพื่อให้แน่ใจว่าโค้ดบางส่วนจะถูกดำเนินการเสมอ
    6. (Optional) ลองโยน Exception อีกครั้งภายในบล็อก catch

    ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับฟังก์ชันและไลบรารีที่สำคัญของ PHP ที่ช่วยในการทำงานต่างๆ ได้อย่างมีประสิทธิภาพมากยิ่งขึ้นครับ!

  • PHP101 – OOP ขั้นสูง (Advanced OOP)

    ใน Module นี้ เราจะมาเจาะลึกในหัวข้อที่เกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ (OOP) ใน PHP ที่มีความซับซ้อนและมีประโยชน์มากยิ่งขึ้น เพื่อให้คุณสามารถออกแบบและพัฒนาแอปพลิเคชันที่มีโครงสร้างที่ดีและยืดหยุ่น

    Namespaces

    Namespaces ช่วยในการจัดระเบียบคลาส อินเทอร์เฟซ และฟังก์ชัน เพื่อป้องกันการชนกันของชื่อ (Naming Conflicts) เมื่อมีโค้ดจากหลายแหล่งที่มา

    PHP
    <?php
    
      namespace MyProject\Database;
    
      class Connection {
        public function connect() {
          return "Connected to MyProject Database";
        }
      }
    
      namespace AnotherProject\Database;
    
      class Connection {
        public function connect() {
          return "Connected to AnotherProject Database";
        }
      }
    
      use MyProject\Database\Connection as MyConnection;
      use AnotherProject\Database\Connection as AnotherConnection;
    
      $myConn = new MyConnection();
      echo $myConn->connect() . "<br>"; // Output: Connected to MyProject Database
    
      $anotherConn = new AnotherConnection();
      echo $anotherConn->connect(); // Output: Connected to AnotherProject Database
    
    ?>

    Autoloading

    Autoloading คือกลไกที่ช่วยให้ PHP สามารถโหลดไฟล์คลาสได้โดยอัตโนมัติเมื่อมีการใช้งานคลาส โดยที่คุณไม่ต้อง require หรือ include ไฟล์คลาสนั้นๆ ทุกครั้ง

    spl_autoload_register()

    ฟังก์ชัน spl_autoload_register() ใช้เพื่อลงทะเบียนฟังก์ชัน Autoloader ซึ่งจะถูกเรียกใช้เมื่อ PHP พยายามใช้คลาสที่ยังไม่ได้ถูกโหลด

    PHP
    <?php
    
      spl_autoload_register(function ($className) {
        $path = str_replace('\\', '/', $className) . '.php';
        if (file_exists($path)) {
          require $path;
        }
      });
    
      // สมมติว่ามีคลาส MyProject\Services\UserService อยู่ในไฟล์ MyProject/Services/UserService.php
      $userService = new \MyProject\Services\UserService();
      // PHP จะพยายามโหลดไฟล์ MyProject/Services/UserService.php โดยอัตโนมัติ
    
    ?>

    Static Properties และ Methods

    Static Properties และ Methods เป็นของคลาสโดยตรง ไม่ใช่ของ Instance ของคลาส สามารถเข้าถึงได้โดยไม่ต้องสร้าง Object ของคลาสนั้น

    PHP
    <?php
    
      class Counter {
        public static $count = 0;
    
        public static function increment() {
          self::$count++;
        }
      }
    
      Counter::increment();
      Counter::increment();
      echo "Count is: " . Counter::$count; // Output: Count is: 2
    
    ?>

    Constants ของคลาส (Class Constants)

    Constants ของคลาสเป็นค่าคงที่ที่ไม่สามารถเปลี่ยนแปลงได้หลังจากถูกกำหนด มักใช้สำหรับกำหนดค่าคงที่ที่เกี่ยวข้องกับคลาส

    PHP
    <?php
    
      class MathConstants {
        const PI = 3.14159;
        const E = 2.71828;
      }
    
      echo "ค่า PI คือ: " . MathConstants::PI . "<br>";
      echo "ค่า E คือ: " . MathConstants::E;
    
    ?>

    Abstract Classes และ Methods

    Abstract Classes ไม่สามารถนำมาสร้าง Object ได้โดยตรง มีไว้เพื่อเป็นแม่แบบให้คลาสลูกสืบทอด และสามารถมี Abstract Methods ซึ่งเป็น Methods ที่ไม่มี Body และคลาสลูกจะต้อง Implement Method เหล่านั้น

    PHP
    <?php
    
      abstract class Shape {
        abstract public function area();
        public function displayArea() {
          echo "พื้นที่คือ: " . $this->area() . "<br>";
        }
      }
    
      class Circle extends Shape {
        private $radius;
    
        public function __construct($radius) {
          $this->radius = $radius;
        }
    
        public function area() {
          return pi() * $this->radius * $this->radius;
        }
      }
    
      $circle = new Circle(5);
      $circle->displayArea(); // Output: พื้นที่คือ: 78.539816339745
    
    ?>

    Interfaces

    Interfaces กำหนดสัญญาว่าคลาสที่ Implement Interface นั้นจะต้องมี Methods ตามที่กำหนดไว้ Interfaces ไม่สามารถมี Properties ได้ และ Methods ใน Interface จะต้องเป็น public

    PHP
    <?php
    
      interface LoggerInterface {
        public function log($message);
      }
    
      class FileLogger implements LoggerInterface {
        private $filename;
    
        public function __construct($filename) {
          $this->filename = $filename;
        }
    
        public function log($message) {
          file_put_contents($this->filename, $message . "\n", FILE_APPEND);
        }
      }
    
      class DatabaseLogger implements LoggerInterface {
        public function log($message) {
          // โค้ดสำหรับบันทึกลงฐานข้อมูล
          echo "Logged to database: " . $message . "<br>";
        }
      }
    
      $fileLogger = new FileLogger("app.log");
      $fileLogger->log("Application started");
    
      $dbLogger = new DatabaseLogger();
      $dbLogger->log("User logged in");
    
    ?>

    Traits

    Traits เป็นกลไกสำหรับนำโค้ดจากคลาสหนึ่งไปใช้ในคลาสอื่นๆ โดยไม่มีการสืบทอด Traits ช่วยในการหลีกเลี่ยงปัญหา Multiple Inheritance ที่ PHP ไม่รองรับ

    PHP
    <?php
    
      trait Loggable {
        public function logMessage($message) {
          echo "Logging: " . $message . "<br>";
        }
      }
    
      class User {
        use Loggable;
    
        public $name;
    
        public function __construct($name) {
          $this->name = $name;
          $this->logMessage("User " . $name . " created");
        }
      }
    
      class Product {
        use Loggable;
    
        public $title;
    
        public function __construct($title) {
          $this->title = $title;
          $this->logMessage("Product " . $title . " added");
        }
      }
    
      $user = new User("Alice");
      $product = new Product("Laptop");
    
    ?>

    Method Chaining

    Method Chaining คือการเรียกใช้ Methods หลายๆ ตัวของ Object ต่อเนื่องกัน โดยแต่ละ Method จะ Return $this (Instance ของ Object เอง)

    PHP
    <?php
    
      class StringBuilder {
        private $string = "";
    
        public function append($str) {
          $this->string .= $str;
          return $this;
        }
    
        public function toUpper() {
          $this->string = strtoupper($this->string);
          return $this;
        }
    
        public function get() {
          return $this->string;
        }
      }
    
      $builder = new StringBuilder();
      $result = $builder->append("hello")->append(" world")->toUpper()->get();
      echo $result; // Output: HELLO WORLD
    
    ?>

    กิจกรรมใน Module 12

    1. สร้าง Namespaces เพื่อจัดระเบียบคลาสของคุณ
    2. Implement ระบบ Autoloading สำหรับโหลดคลาสอัตโนมัติ
    3. ใช้ Static Properties และ Methods ในคลาส
    4. กำหนด Constants ให้กับคลาส
    5. สร้าง Abstract Class และคลาสลูกที่ Implement Abstract Methods
    6. สร้าง Interface และ Implement ในหลายๆ คลาส
    7. ใช้ Traits เพื่อนำโค้ดไปใช้ซ้ำในหลายคลาส
    8. (Optional) ลอง Implement Method Chaining ในคลาสของคุณ

    ใน Module ถัดไป เราจะเรียนรู้เกี่ยวกับการจัดการข้อผิดพลาดและ Exception Handling ใน PHP เพื่อให้แอปพลิเคชันของคุณมีความเสถียรและสามารถจัดการกับสถานการณ์ที่ไม่คาดฝันได้อย่างเหมาะสมครับ!

  • PHP101 – การเขียนโปรแกรมเชิงวัตถุเบื้องต้น (Object-Oriented Programming – OOP)

    ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับแนวคิดพื้นฐานของการเขียนโปรแกรมเชิงวัตถุ (Object-Oriented Programming – OOP) ใน PHP ซึ่งเป็นกระบวนทัศน์การเขียนโปรแกรมที่ช่วยให้โค้ดมีความเป็นระเบียบ นำกลับมาใช้ใหม่ได้ง่าย และง่ายต่อการบำรุงรักษาสำหรับโปรเจคขนาดใหญ่

    OOP คืออะไร?

    OOP เป็นกระบวนทัศน์การเขียนโปรแกรมที่เน้นการจัดระเบียบโค้ดโดยการสร้าง “วัตถุ” (Objects) ซึ่งเป็น Instance ของ “คลาส” (Classes) คลาสเปรียบเสมือนพิมพ์เขียวหรือแม่แบบสำหรับสร้างวัตถุ และวัตถุคือสิ่งมีชีวิตที่มีคุณสมบัติ (Properties หรือ Attributes) และพฤติกรรม (Methods หรือ Behaviors)

    แนวคิดหลักของ OOP

    OOP มีแนวคิดหลัก 4 ประการ:

    1. การห่อหุ้ม (Encapsulation)

    การห่อหุ้มคือการรวมข้อมูล (Properties) และฟังก์ชัน (Methods) ที่ทำงานกับข้อมูลนั้นๆ ไว้ด้วยกันภายในคลาส เพื่อซ่อนรายละเอียดภายในและควบคุมการเข้าถึงข้อมูลจากภายนอก

    PHP
    <?php
    
      class Car {
        public $model;
        private $speed;
    
        public function __construct($model) {
          $this->model = $model;
          $this->speed = 0;
        }
    
        public function accelerate($increment) {
          $this->speed += $increment;
        }
    
        public function getSpeed() {
          return $this->speed;
        }
      }
    
      $myCar = new Car("Toyota");
      $myCar->accelerate(20);
      echo "รถรุ่น " . $myCar->model . " วิ่งด้วยความเร็ว " . $myCar->getSpeed() . " กม/ชม.";
      // echo $myCar->speed; // Error: Cannot access private property
    
    ?>

    2. การสืบทอด (Inheritance)

    การสืบทอดคือกลไกที่คลาสหนึ่ง (Subclass หรือ Child Class) สามารถรับคุณสมบัติและพฤติกรรมทั้งหมดจากอีกคลาสหนึ่ง (Superclass หรือ Parent Class) ทำให้สามารถสร้างคลาสใหม่โดยต่อยอดจากคลาสที่มีอยู่ได้

    PHP
    <?php
    
      class Vehicle {
        protected $brand;
    
        public function __construct($brand) {
          $this->brand = $brand;
        }
    
        public function move() {
          echo "ยานพาหนะกำลังเคลื่อนที่<br>";
        }
      }
    
      class Bicycle extends Vehicle {
        public function __construct($brand) {
          parent::__construct($brand); // เรียก Constructor ของ Parent Class
        }
    
        public function pedal() {
          echo "จักรยานกำลังปั่น<br>";
        }
      }
    
      $myBicycle = new Bicycle("Giant");
      $myBicycle->move();  // สืบทอด Method จาก Vehicle
      $myBicycle->pedal();
    
    ?>

    3. การพ้องรูป (Polymorphism)

    การพ้องรูปหมายถึงความสามารถของวัตถุที่มีคลาสต่างกัน แต่มีการ Implement Interface หรือสืบทอดจากคลาสเดียวกัน สามารถตอบสนองต่อ Method ที่มีชื่อเดียวกันได้ในรูปแบบที่แตกต่างกัน

    PHP
    <?php
    
      interface Animal {
        public function makeSound();
      }
    
      class Dog implements Animal {
        public function makeSound() {
          echo "Woof!<br>";
        }
      }
    
      class Cat implements Animal {
        public function makeSound() {
          echo "Meow!<br>";
        }
      }
    
      function animalSound(Animal $animal) {
        $animal->makeSound();
      }
    
      $dog = new Dog();
      $cat = new Cat();
    
      animalSound($dog); // Output: Woof!
      animalSound($cat); // Output: Meow!
    
    ?>

    4. การนามธรรม (Abstraction)

    การนามธรรมคือการซ่อนรายละเอียดที่ซับซ้อนและแสดงเฉพาะข้อมูลหรือการทำงานที่จำเป็นต่อผู้ใช้ ทำให้ผู้ใช้สามารถ Focus ไปที่ “สิ่งที่” วัตถุทำได้ โดยไม่ต้องสนใจว่า “ทำอย่างไร” Abstract Classes และ Interfaces เป็นเครื่องมือสำคัญในการ实现 Abstraction

    PHP
    <?php
    
      abstract class Shape {
        abstract public function area();
      }
    
      class Circle extends Shape {
        private $radius;
    
        public function __construct($radius) {
          $this->radius = $radius;
        }
    
        public function area() {
          return pi() * $this->radius * $this->radius;
        }
      }
    
      $circle = new Circle(5);
      echo "พื้นที่วงกลม: " . $circle->area();
    
    ?>

    คลาสและวัตถุ (Classes and Objects)

    การสร้างคลาส (Defining a Class)

    ใช้ Keyword class ตามด้วยชื่อคลาส และบล็อก {} เพื่อกำหนด Properties และ Methods ของคลาส

    PHP
    <?php
    
      class Person {
        // Properties
        public $name;
        public $age;
    
        // Method (Constructor)
        public function __construct($name, $age) {
          $this->name = $name;
          $this->age = $age;
        }
    
        // Method
        public function greet() {
          echo "สวัสดีครับ ผมชื่อ " . $this->name . " อายุ " . $this->age . " ปี<br>";
        }
      }
    
    ?>

    การสร้างวัตถุ (Creating an Object)

    ใช้ Keyword new ตามด้วยชื่อคลาสและวงเล็บ () เพื่อสร้าง Instance ของคลาส (วัตถุ)

    PHP
    <?php
    
      $person1 = new Person("สมชาย", 30);
      $person2 = new Person("สมหญิง", 25);
    
      $person1->greet(); // Output: สวัสดีครับ ผมชื่อ สมชาย อายุ 30 ปี
      $person2->greet(); // Output: สวัสดีครับ ผมชื่อ สมหญิง อายุ 25 ปี
    
    ?>

    Properties และ Methods

    • Properties (คุณสมบัติ): คือตัวแปรที่อยู่ภายในคลาส ใช้เพื่อเก็บข้อมูลของวัตถุ
    • Methods (พฤติกรรม): คือฟังก์ชันที่อยู่ภายในคลาส ใช้เพื่อกำหนดการทำงานของวัตถุ

    Visibility (การเข้าถึง)

    PHP มี Keywords ที่ใช้กำหนดระดับการเข้าถึง Properties และ Methods:

    • public: สามารถเข้าถึงได้จากทุกที่ (ภายในคลาส, ภายนอกคลาส, คลาสลูก)
    • protected: สามารถเข้าถึงได้จากภายในคลาสและคลาสลูก
    • private: สามารถเข้าถึงได้เฉพาะจากภายในคลาสเท่านั้น

    Constructor และ Destructor

    • Constructor (__construct()): เป็น Method พิเศษที่จะถูกเรียกใช้โดยอัตโนมัติเมื่อมีการสร้างวัตถุใหม่ มักใช้สำหรับการกำหนดค่าเริ่มต้นให้กับ Properties ของวัตถุ
    • Destructor (__destruct()): เป็น Method พิเศษที่จะถูกเรียกใช้เมื่อไม่มี References ใดๆ ชี้มายังวัตถุนั้นๆ อีกต่อไป มักใช้สำหรับการจัดการทรัพยากรที่วัตถุใช้งานอยู่ (เช่น ปิด Connection ฐานข้อมูล)
    PHP
    <?php
    
      class MyClass {
        public function __construct() {
          echo "Object created<br>";
        }
    
        public function __destruct() {
          echo "Object destroyed<br>";
        }
      }
    
      $obj = new MyClass(); // Output: Object created
      unset($obj);         // Output: Object destroyed
    
    ?>

    กิจกรรมใน Module 11

    1. สร้างคลาสพื้นฐานที่มี Properties และ Methods
    2. สร้างวัตถุจากคลาสที่คุณสร้างและเรียกใช้งาน Properties และ Methods
    3. ทดลองใช้ Constructor ในการกำหนดค่าเริ่มต้นให้กับวัตถุ
    4. สร้างคลาสที่มีการสืบทอดจากคลาสอื่น และทดลองใช้งาน Properties และ Methods ที่สืบทอดมา
    5. (Optional) ลองสร้าง Interface และ Implement ในคลาสต่างๆ
    6. (Optional) ศึกษาเพิ่มเติมเกี่ยวกับ Abstract Classes และการใช้งาน

    ใน Module ถัดไป เราจะลงลึกในเรื่องของ OOP มากขึ้น โดยจะศึกษาเกี่ยวกับ Namespaces, Autoloading, และ Concepts ที่สำคัญอื่นๆ ครับ!

  • PHP101 – การทำงานกับฐานข้อมูล MySQL เบื้องต้น

    ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับการทำงานกับฐานข้อมูล MySQL เบื้องต้นโดยใช้ PHP ซึ่งเป็นสิ่งสำคัญสำหรับการสร้างเว็บไซต์แบบไดนามิกที่ต้องการเก็บและจัดการข้อมูลจำนวนมาก

    MySQL คืออะไร?

    MySQL คือระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System – RDBMS) ที่ได้รับความนิยมอย่างมาก ใช้ภาษา SQL (Structured Query Language) ในการจัดการข้อมูล

    การเชื่อมต่อกับฐานข้อมูล MySQL ด้วย PHP

    PHP มี Extension หลายตัวที่ใช้สำหรับการเชื่อมต่อและทำงานกับฐานข้อมูล MySQL ใน Module นี้เราจะใช้ MySQLi (MySQL Improved Extension) ซึ่งเป็น Extension ที่พัฒนาขึ้นมาใหม่และมีประสิทธิภาพดีกว่า Extension เก่าอย่าง mysql

    การสร้าง Connection

    ในการเชื่อมต่อกับฐานข้อมูล MySQL คุณต้องใช้ Class mysqli และระบุ Host, Username, Password, และชื่อฐานข้อมูล

    PHP
    <?php
    
      $servername = "localhost"; // หรือ IP Address ของ Server
      $username = "your_username";
      $password = "your_password";
      $dbname = "your_database";
    
      // สร้าง Connection
      $conn = new mysqli($servername, $username, $password, $dbname);
    
      // ตรวจสอบ Connection
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }
      echo "Connected successfully";
    
      $conn->close(); // ปิด Connection เมื่อใช้งานเสร็จ
    
    ?>

    การปิด Connection

    ควรปิด Connection กับฐานข้อมูลเมื่อไม่ใช้งานแล้ว เพื่อปลดปล่อยทรัพยากร ใช้ Method close()

    PHP
    <?php
      // ... (สร้าง Connection) ...
      $conn->close();
    ?>

    การ Query ข้อมูล (Querying Data)

    ใช้ Method query() ของ Object mysqli เพื่อส่งคำสั่ง SQL ไปยังฐานข้อมูล

    คำสั่ง SELECT

    ใช้เพื่อดึงข้อมูลจากตาราง

    PHP
    <?php
    
      $servername = "localhost";
      $username = "your_username";
      $password = "your_password";
      $dbname = "your_database";
    
      $conn = new mysqli($servername, $username, $password, $dbname);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }
    
      $sql = "SELECT id, firstname, lastname FROM users";
      $result = $conn->query($sql);
    
      if ($result->num_rows > 0) {
        // แสดงข้อมูลแต่ละ Row
        while ($row = $result->fetch_assoc()) {
          echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
        }
      } else {
        echo "0 results";
      }
      $conn->close();
    
    ?>

    คำสั่ง INSERT

    ใช้เพื่อเพิ่มข้อมูลใหม่ลงในตาราง

    PHP
    <?php
    
      $servername = "localhost";
      $username = "your_username";
      $password = "your_password";
      $dbname = "your_database";
    
      $conn = new mysqli($servername, $username, $password, $dbname);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }
    
      $sql = "INSERT INTO users (firstname, lastname, email) VALUES ('John', 'Doe', 'john.doe@example.com')";
    
      if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
      } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
      }
    
      $conn->close();
    
    ?>

    คำสั่ง UPDATE

    ใช้เพื่อแก้ไขข้อมูลที่มีอยู่ในตาราง

    PHP
    <?php
    
      $servername = "localhost";
      $username = "your_username";
      $password = "your_password";
      $dbname = "your_database";
    
      $conn = new mysqli($servername, $username, $password, $dbname);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }
    
      $sql = "UPDATE users SET lastname='Smith' WHERE id=1";
    
      if ($conn->query($sql) === TRUE) {
        echo "Record updated successfully";
      } else {
        echo "Error updating record: " . $conn->error;
      }
    
      $conn->close();
    
    ?>

    คำสั่ง DELETE

    ใช้เพื่อลบข้อมูลออกจากตาราง

    PHP
    <?php
    
      $servername = "localhost";
      $username = "your_username";
      $password = "your_password";
      $dbname = "your_database";
    
      $conn = new mysqli($servername, $username, $password, $dbname);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }
    
      $sql = "DELETE FROM users WHERE id=1";
    
      if ($conn->query($sql) === TRUE) {
        echo "Record deleted successfully";
      } else {
        echo "Error deleting record: " . $conn->error;
      }
    
      $conn->close();
    
    ?>

    การป้องกัน SQL Injection

    SQL Injection คือช่องโหว่ด้านความปลอดภัยที่ผู้ไม่หวังดีสามารถแทรกคำสั่ง SQL ที่เป็นอันตรายเข้าไปใน Query ทำให้สามารถเข้าถึงหรือแก้ไขข้อมูลในฐานข้อมูลได้

    วิธีป้องกัน SQL Injection ที่สำคัญที่สุดคือการใช้ Prepared Statements หรือ Parameterized Queries

    PHP
    <?php
    
      $servername = "localhost";
      $username = "your_username";
      $password = "your_password";
      $dbname = "your_database";
    
      $conn = new mysqli($servername, $username, $password, $dbname);
      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }
    
      // Prepared statement
      $stmt = $conn->prepare("SELECT id, firstname, lastname FROM users WHERE firstname = ? AND lastname = ?");
      $stmt->bind_param("ss", $firstname, $lastname); // "ss" หมายถึง parameter สองตัวเป็น String
    
      // กำหนดค่า parameter และ execute
      $firstname = "John";
      $lastname = "Doe";
      $stmt->execute();
      $result = $stmt->get_result();
    
      if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
          echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
        }
      } else {
        echo "0 results";
      }
    
      $stmt->close();
      $conn->close();
    
    ?>

    การใช้ Prepared Statements ช่วยให้คุณแยกส่วนของคำสั่ง SQL ออกจากข้อมูลที่ผู้ใช้ป้อน ทำให้ฐานข้อมูลสามารถแยกแยะระหว่างโค้ด SQL และข้อมูลได้

    กิจกรรมใน Module 10

    1. สร้างฐานข้อมูลและตารางอย่างง่ายใน MySQL (เช่น ตาราง users ที่มี fields id, firstname, lastname, email)
    2. เขียนโปรแกรม PHP ที่เชื่อมต่อกับฐานข้อมูลที่คุณสร้าง
    3. ใช้คำสั่ง INSERT เพื่อเพิ่มข้อมูลตัวอย่างลงในตาราง
    4. ใช้คำสั่ง SELECT เพื่อดึงข้อมูลทั้งหมดจากตารางและแสดงผล
    5. เขียนโปรแกรม PHP ที่รับข้อมูลจาก Form และใช้คำสั่ง INSERT เพื่อบันทึกลงในฐานข้อมูล
    6. (Optional) ลองใช้คำสั่ง UPDATE และ DELETE เพื่อแก้ไขและลบข้อมูล
    7. (สำคัญมาก) ปรับปรุงโค้ดของคุณโดยใช้ Prepared Statements เพื่อป้องกัน SQL Injection

    ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับ Object-Oriented Programming (OOP) ใน PHP ซึ่งเป็นแนวคิดการเขียนโปรแกรมที่ช่วยให้โค้ดของคุณมีความเป็นระเบียบและง่ายต่อการจัดการมากยิ่งขึ้นครับ!

  • PHP101 – การจัดการไฟล์

    ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับการทำงานกับไฟล์ (File Handling) ใน PHP ซึ่งเป็นสิ่งจำเป็นสำหรับการอ่าน เขียน และจัดการไฟล์บน Server ไม่ว่าจะเป็นไฟล์ข้อความ รูปภาพ หรือไฟล์ประเภทอื่นๆ

    การเปิดและปิดไฟล์ (Opening and Closing Files)

    ในการทำงานกับไฟล์ PHP มีฟังก์ชันหลักๆ ที่ใช้คือ fopen() สำหรับเปิดไฟล์ และ fclose() สำหรับปิดไฟล์

    fopen()

    ฟังก์ชัน fopen() ใช้เพื่อเปิดไฟล์หรือ URL โดยมีรูปแบบการใช้งานดังนี้:

    PHP
    resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
    • $filename: ชื่อไฟล์หรือ URL ที่ต้องการเปิด
    • $mode: โหมดการเปิดไฟล์ ซึ่งกำหนดวิธีการทำงานกับไฟล์ (เช่น อ่าน, เขียน, เพิ่ม)
    • $use_include_path (optional): กำหนดว่าจะค้นหาไฟล์ใน include path หรือไม่
    • $context (optional): ชุดของตัวเลือกสำหรับ Stream

    โหมดการเปิดไฟล์ที่สำคัญ:

    โหมดคำอธิบายตำแหน่ง Pointerสร้างถ้าไม่มี
    'r'เปิดสำหรับอ่านอย่างเดียวเริ่มต้นที่ต้นไฟล์No
    'w'เปิดสำหรับเขียนอย่างเดียว ลบเนื้อหาเดิม หรือสร้างไฟล์ใหม่เริ่มต้นที่ต้นไฟล์Yes
    'a'เปิดสำหรับเขียนอย่างเดียว เพิ่มเนื้อหาต่อท้ายไฟล์ หรือสร้างไฟล์ใหม่เริ่มต้นที่ท้ายไฟล์Yes
    'x'สร้างและเปิดสำหรับเขียนอย่างเดียว หากไฟล์มีอยู่แล้ว fopen() จะคืนค่า falseเริ่มต้นที่ต้นไฟล์Yes
    'r+'เปิดสำหรับอ่านและเขียน เริ่มต้นที่ต้นไฟล์เริ่มต้นที่ต้นไฟล์No
    'w+'เปิดสำหรับอ่านและเขียน ลบเนื้อหาเดิม หรือสร้างไฟล์ใหม่เริ่มต้นที่ต้นไฟล์Yes
    'a+'เปิดสำหรับอ่านและเขียน เพิ่มเนื้อหาต่อท้ายไฟล์ หรือสร้างไฟล์ใหม่เริ่มต้นที่ท้ายไฟล์Yes
    'x+'สร้างและเปิดสำหรับอ่านและเขียน หากไฟล์มีอยู่แล้ว fopen() จะคืนค่า falseเริ่มต้นที่ต้นไฟล์Yes

    ฟังก์ชัน fopen() จะคืนค่าเป็น File Handle (Resource) หากเปิดไฟล์สำเร็จ หรือ false หากเกิดข้อผิดพลาด

    PHP
    <?php
    
      $file = fopen("example.txt", "r");
      if ($file) {
        echo "เปิดไฟล์สำเร็จ";
      } else {
        echo "ไม่สามารถเปิดไฟล์ได้";
      }
    
    ?>

    fclose()

    ฟังก์ชัน fclose() ใช้เพื่อปิดไฟล์ที่เปิดด้วย fopen()

    PHP
    bool fclose ( resource $handle )
    • $handle: File Handle ที่ได้จากการเปิดไฟล์ด้วย fopen()

    การปิดไฟล์เป็นการปลดปล่อยทรัพยากรที่ใช้โดยไฟล์ และควรทำทุกครั้งหลังจากการทำงานกับไฟล์เสร็จสิ้น

    PHP
    <?php
    
      $file = fopen("example.txt", "r");
      // ... ทำงานกับไฟล์ ...
      fclose($file);
    
    ?>

    การอ่านไฟล์ (Reading Files)

    PHP มีหลายฟังก์ชันสำหรับการอ่านเนื้อหาจากไฟล์:

    fread()

    อ่านจำนวนไบต์ที่ระบุจาก File Handle

    PHP
    string fread ( resource $handle , int $length )
    • $handle: File Handle ที่ได้จากการเปิดไฟล์
    • $length: จำนวนไบต์ที่ต้องการอ่าน
    PHP
    <?php
    
      $file = fopen("example.txt", "r");
      if ($file) {
        $content = fread($file, filesize("example.txt"));
        fclose($file);
        echo $content;
      }
    
    ?>

    fgets()

    อ่านหนึ่งบรรทัดจาก File Handle

    PHP
    string fgets ( resource $handle [, int $length ] )
    • $handle: File Handle ที่ได้จากการเปิดไฟล์
    • $length (optional): จำนวนไบต์สูงสุดที่จะอ่าน (รวมถึงบรรทัดใหม่) หากไม่ระบุจะอ่านจนจบบรรทัด
    PHP
    <?php
    
      $file = fopen("example.txt", "r");
      if ($file) {
        while (($line = fgets($file)) !== false) {
          echo $line . "<br>";
        }
        fclose($file);
      }
    
    ?>

    file_get_contents()

    อ่านเนื้อหาทั้งหมดของไฟล์เป็น String

    PHP
    string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )
    PHP
    <?php
    
      $content = file_get_contents("example.txt");
      echo $content;
    
    ?>

    การเขียนไฟล์ (Writing to Files)

    PHP มีฟังก์ชันสำหรับการเขียนข้อมูลลงในไฟล์:

    fwrite()

    เขียน String ลงใน File Handle

    PHP
    int fwrite ( resource $handle , string $string [, int $length ] )
    • $handle: File Handle ที่ได้จากการเปิดไฟล์ในโหมดเขียน (เช่น 'w', 'a')
    • $string: String ที่ต้องการเขียน
    • $length (optional): จำนวนไบต์สูงสุดที่จะเขียน
    PHP
    <?php
    
      $file = fopen("newfile.txt", "w");
      if ($file) {
        fwrite($file, "Hello World.\n");
        fwrite($file, "This is some text.");
        fclose($file);
        echo "เขียนไฟล์สำเร็จ";
      }
    
    ?>

    file_put_contents()

    เขียน String ลงในไฟล์ (จะสร้างไฟล์ใหม่หรือลบเนื้อหาเดิม)

    PHP
    int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
    PHP
    <?php
    
      $data = "Some information\nAnother line.";
      file_put_contents("anotherfile.txt", $data);
      echo "เขียนไฟล์ด้วย file_put_contents สำเร็จ";
    
    ?>

    การจัดการไฟล์และไดเรกทอรีอื่นๆ

    PHP ยังมีฟังก์ชันอื่นๆ สำหรับการจัดการไฟล์และไดเรกทอรี เช่น:

    • file_exists(): ตรวจสอบว่าไฟล์หรือไดเรกทอรีมีอยู่หรือไม่
    • is_file(): ตรวจสอบว่าเป็นไฟล์หรือไม่
    • is_dir(): ตรวจสอบว่าเป็นไดเรกทอรีหรือไม่
    • rename(): เปลี่ยนชื่อไฟล์หรือไดเรกทอรี
    • unlink(): ลบไฟล์
    • mkdir(): สร้างไดเรกทอรี
    • rmdir(): ลบไดเรกทอรี
    • scandir(): แสดงรายการไฟล์และไดเรกทอรีภายในไดเรกทอรีที่ระบุ
    PHP
    <?php
    
      if (file_exists("example.txt")) {
        echo "ไฟล์ example.txt มีอยู่<br>";
      }
    
      if (is_file("example.txt")) {
        echo "example.txt เป็นไฟล์<br>";
      }
    
      // ... ฟังก์ชันอื่นๆ ...
    
    ?>

    การอัปโหลดไฟล์ (File Uploading)

    PHP สามารถจัดการการอัปโหลดไฟล์จากผู้ใช้ผ่าน Form ได้ โดยต้องตั้งค่า enctype="multipart/form-data" ในแท็ก <form> และใช้ Superglobal Array $_FILES ในการรับข้อมูลไฟล์ที่อัปโหลด

    PHP
    <!-- HTML Form -->
    <form action="upload.php" method="post" enctype="multipart/form-data">
      Select file to upload:
      <input type="file" name="fileToUpload" id="fileToUpload">
      <input type="submit" value="Upload File" name="submit">
    </form>
    PHP
    <?php
      if (isset($_POST["submit"])) {
        $target_dir = "uploads/";
        $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
          echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
        } else {
          echo "Sorry, there was an error uploading your file.";
        }
      }
    ?>

    การอัปโหลดไฟล์เกี่ยวข้องกับเรื่องความปลอดภัยที่ต้องให้ความสำคัญ เช่น การตรวจสอบชนิดไฟล์ ขนาดไฟล์ และการป้องกันการโจมตีต่างๆ

    กิจกรรมใน Module 9

    1. สร้างไฟล์ข้อความ (.txt) และใช้ PHP ในการเปิด อ่าน และแสดงเนื้อหา
    2. เขียนโปรแกรม PHP ที่สร้างไฟล์ใหม่และเขียนข้อความลงในไฟล์นั้น
    3. ใช้ file_get_contents() และ file_put_contents() ในการอ่านและเขียนไฟล์
    4. ตรวจสอบว่าไฟล์หรือไดเรกทอรีที่กำหนดมีอยู่หรือไม่
    5. (Optional) สร้าง Form สำหรับอัปโหลดไฟล์ และเขียนโค้ด PHP เพื่อรับและบันทึกไฟล์ที่อัปโหลด

    ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับการทำงานกับฐานข้อมูล MySQL เบื้องต้น ซึ่งเป็นส่วนสำคัญในการสร้างเว็บไซต์แบบไดนามิกที่เก็บข้อมูลครับ!

  • PHP101 – Session และ Cookie

    ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับ Session และ Cookie ซึ่งเป็นกลไกสำคัญในการจดจำผู้ใช้และคงสถานะของเว็บไซต์ระหว่างการเข้าชมหลายๆ หน้า

    Session คืออะไร?

    Session คือกลไกที่ช่วยให้เว็บไซต์สามารถจดจำผู้ใช้และข้อมูลที่เกี่ยวข้องกับการเข้าชมครั้งนั้นได้ ข้อมูล Session จะถูกเก็บไว้บน Server และเชื่อมโยงกับ Browser ของผู้ใช้ผ่าน Session ID

    การทำงานของ Session

    1. เมื่อผู้ใช้เข้าสู่เว็บไซต์ PHP จะตรวจสอบว่ามี Session ID ที่ส่งมาจาก Browser หรือไม่
    2. ถ้าไม่มี Session ID หรือ Session ID นั้นไม่ถูกต้อง PHP จะสร้าง Session ID ใหม่และส่งกลับไปยัง Browser (โดยปกติจะเก็บใน Cookie)
    3. ข้อมูลที่เกี่ยวข้องกับ Session นั้นจะถูกเก็บไว้บน Server ภายใต้ Session ID นั้นๆ
    4. ในการเข้าชมหน้าอื่นๆ ภายในเว็บไซต์ Browser จะส่ง Session ID กลับมายัง Server ทำให้ PHP สามารถดึงข้อมูล Session ของผู้ใช้รายนั้นได้
    5. Session จะสิ้นสุดลงเมื่อผู้ใช้ปิด Browser หรือ Session หมดอายุตามเวลาที่กำหนด

    การใช้งาน Session ใน PHP

    1. การเริ่มต้น Session: ใช้ฟังก์ชัน session_start() ที่จุดเริ่มต้นของทุกหน้าที่ต้องการใช้งาน Session (ก่อนแท็ก <html>)
    PHP
    <?php
      session_start();
    ?>
    <!DOCTYPE html>
    <html>
    <head>
      <title>Session Example</title>
    </head>
    <body>
      <h1>Welcome!</h1>
    </body>
    </html>
    1. การเก็บข้อมูล Session: ใช้ Superglobal Array $_SESSION เพื่อเก็บข้อมูล
    PHP
    <?php
      session_start();
    
      $_SESSION["username"] = "JohnDoe";
      $_SESSION["login_time"] = time();
    
      echo "Session variables are set.";
    ?>
    1. การดึงข้อมูล Session: เข้าถึงค่าใน $_SESSION โดยใช้ Key
    PHP
    <?php
      session_start();
    
      if (isset($_SESSION["username"])) {
        echo "Username is: " . $_SESSION["username"] . "<br>";
        echo "Last login: " . date('Y-m-d H:i:s', $_SESSION["login_time"]);
      } else {
        echo "User is not logged in.";
      }
    ?>
    1. การทำลาย Session: ใช้ฟังก์ชัน session_unset() เพื่อลบตัวแปร Session ทั้งหมด และ session_destroy() เพื่อทำลาย Session ทั้งหมด
    PHP
    <?php
      session_start();
    
      // ลบตัวแปร Session ทั้งหมด
      session_unset();
    
      // ทำลาย Session
      session_destroy();
    
      echo "Session destroyed.";
    ?>

    Cookie คืออะไร?

    Cookie คือไฟล์ขนาดเล็กที่ Server สามารถส่งไปยัง Browser ของผู้ใช้ เพื่อเก็บข้อมูลบางอย่างไว้ในเครื่องของผู้ใช้ ข้อมูล Cookie จะถูกส่งกลับไปยัง Server พร้อมกับทุกๆ Request ที่ส่งมาจาก Browser นั้นๆ

    การทำงานของ Cookie

    1. Server ส่ง HTTP Response ที่มี Header Set-Cookie ไปยัง Browser พร้อมกับข้อมูล Cookie (ชื่อ, ค่า, วันหมดอายุ, Path, Domain, etc.)
    2. Browser จะเก็บข้อมูล Cookie ไว้ในเครื่องของผู้ใช้
    3. เมื่อ Browser ส่ง Request ไปยัง Server เดิมอีกครั้ง (ภายในระยะเวลาที่ Cookie ยังไม่หมดอายุ และตรงตามเงื่อนไข Path และ Domain) Browser จะแนบข้อมูล Cookie ไปใน HTTP Request Header
    4. Server สามารถอ่านค่า Cookie จาก HTTP Request Header และใช้ข้อมูลนั้นในการจดจำผู้ใช้หรือปรับแต่งการแสดงผล
    5. Cookie มีวันหมดอายุ เมื่อถึงเวลานั้น Browser จะลบ Cookie

    การใช้งาน Cookie ใน PHP

    1. การตั้งค่า Cookie: ใช้ฟังก์ชัน setcookie() ก่อนแท็ก <html>
    PHP
    <?php
      $cookie_name = "user";
      $cookie_value = "John Doe";
      $expiry_time = time() + (86400 * 30); // 30 วัน
      setcookie($cookie_name, $cookie_value, $expiry_time, "/"); // "/" หมายถึง Cookie สามารถใช้งานได้ในทุก Path ของ Domain
    ?>
    <!DOCTYPE html>
    <html>
    <head>
      <title>Cookie Example</title>
    </head>
    <body>
      <p>Cookie is set!</p>
    </body>
    </html>
    1. การอ่านค่า Cookie: ใช้ Superglobal Array $_COOKIE เพื่อเข้าถึงค่า Cookie
    PHP
    <?php
      if (isset($_COOKIE["user"])) {
        echo "Welcome " . $_COOKIE["user"] . "!";
      } else {
        echo "Welcome guest!";
      }
    ?>
    1. การตรวจสอบว่า Cookie ถูกตั้งค่าหรือไม่: ใช้ฟังก์ชัน isset()
    PHP
    <?php
      if (isset($_COOKIE["user"])) {
        // Cookie "user" ถูกตั้งค่า
      }
    ?>
    1. การลบ Cookie: ตั้งค่า Cookie ให้มีวันหมดอายุในอดีต
    PHP
    <?php
      $cookie_name = "user";
      setcookie($cookie_name, "", time() - 3600, "/");
      echo "Cookie 'user' is deleted.";
    ?>

    ความแตกต่างระหว่าง Session และ Cookie

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

    กิจกรรมใน Module 8

    1. สร้างหน้าเว็บที่ใช้ Session ในการเก็บชื่อผู้ใช้เมื่อ Login และแสดงชื่อผู้ใช้ในหน้าอื่นๆ
    2. สร้างระบบ Login/Logout อย่างง่ายโดยใช้ Session
    3. สร้าง Cookie เพื่อจดจำธีมสีที่ผู้ใช้เลือก และนำมาใช้ในการแสดงผลหน้าเว็บ
    4. สร้าง Cookie เพื่อจดจำการตั้งค่าภาษาของผู้ใช้
    5. ทดลองตั้งค่าวันหมดอายุ Path และ Domain ของ Cookie
    6. ทดลองลบ Cookie

    ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับการทำงานกับไฟล์ (File Handling) ใน PHP ซึ่งเป็นสิ่งจำเป็นสำหรับการอ่าน เขียน และจัดการไฟล์บน Server ครับ!

  • PHP101 – การจัดการ Form และการรับข้อมูลผู้ใช้

    ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับการสร้าง Form ใน HTML และการใช้ PHP เพื่อรับและประมวลผลข้อมูลที่ผู้ใช้ป้อนเข้ามา ซึ่งเป็นส่วนสำคัญในการสร้างเว็บไซต์ที่มีการโต้ตอบกับผู้ใช้งาน

    การสร้าง Form ด้วย HTML

    Form ใน HTML ใช้แท็ก <form> และมี Element ต่างๆ สำหรับให้ผู้ใช้ป้อนข้อมูล เช่น <input>, <textarea>, <select>, และ <button>

    HTML
    <form action="process.php" method="post">
      <label for="name">ชื่อ:</label><br>
      <input type="text" id="name" name="name"><br><br>
      <label for="email">อีเมล:</label><br>
      <input type="email" id="email" name="email"><br><br>
      <input type="submit" value="ส่งข้อมูล">
    </form>
    • action attribute: ระบุ URL ของไฟล์ที่จะประมวลผลข้อมูล Form (ในตัวอย่างคือ process.php)
    • method attribute: ระบุ HTTP method ที่ใช้ในการส่งข้อมูล (get หรือ post)
    • <input type="text" name="name">: ช่องสำหรับป้อนข้อความ
    • <input type="email" name="email">: ช่องสำหรับป้อนอีเมล
    • <input type="submit" value="ส่งข้อมูล">: ปุ่มสำหรับส่ง Form
    • name attribute: สำคัญมาก เพราะ PHP จะใช้ค่านี้เพื่อเข้าถึงข้อมูลที่ผู้ใช้ป้อน

    HTTP Methods: GET และ POST

    method attribute ในแท็ก <form> สามารถมีค่าได้ 2 แบบหลักๆ:

    GET Method

    ข้อมูล Form จะถูกส่งไปพร้อมกับ URL ในรูปแบบของ Query String (เช่น process.php?name=John&email=john@example.com)

    ข้อดี: สามารถ Bookmark URL ได้ง่าย, เหมาะสำหรับข้อมูลที่ไม่ลับ

    ข้อเสีย: มีข้อจำกัดเรื่องความยาวของ URL, ข้อมูลปรากฏใน URL อาจไม่ปลอดภัยสำหรับข้อมูลสำคัญ

    HTML
    <form action="process.php" method="get">
      <label for="search">ค้นหา:</label><br>
      <input type="text" id="search" name="search"><br><br>
      <input type="submit" value="ค้นหา">
    </form>

    POST Method

    ข้อมูล Form จะถูกส่งไปในส่วนของ HTTP request body ทำให้ไม่ปรากฏใน URL

    ข้อดี: ปลอดภัยกว่าสำหรับข้อมูลสำคัญ, ไม่จำกัดความยาวของข้อมูล

    ข้อเสีย: ไม่สามารถ Bookmark URL ที่มีการส่งข้อมูลด้วย POST ได้โดยตรง

    HTML
    <form action="process.php" method="post">
      <label for="password">รหัสผ่าน:</label><br>
      <input type="password" id="password" name="password"><br><br>
      <input type="submit" value="เข้าสู่ระบบ">
    </form>

    คำแนะนำ: โดยทั่วไป ควรใช้ POST สำหรับข้อมูลที่ต้องการความปลอดภัย หรือมีปริมาณมาก

    การรับข้อมูล Form ด้วย PHP

    PHP มี Superglobal Arrays ที่ใช้สำหรับเข้าถึงข้อมูลที่ส่งมาจาก Form:

    • $_GET: ใช้สำหรับรับข้อมูลที่ส่งมาด้วย HTTP GET method (เป็น Associative Array ที่มี name attribute ของ Form Element เป็น Key และค่าที่ผู้ใช้ป้อนเป็น Value)
    • $_POST: ใช้สำหรับรับข้อมูลที่ส่งมาด้วย HTTP POST method (มีโครงสร้างเหมือน $_GET)
    • $_REQUEST: ใช้สำหรับรับข้อมูลที่ส่งมาทั้งด้วย GET และ POST method (ไม่แนะนำให้ใช้บ่อยนัก เพราะอาจทำให้สับสนว่าข้อมูลมาจากไหน)

    สมมติว่าเรามี Form ที่ส่งข้อมูลด้วย POST method ไปยังไฟล์ process.php:

    HTML
    <!-- HTML Form (อยู่ในไฟล์ form.html) -->
    <form action="process.php" method="post">
      <label for="name">ชื่อ:</label><br>
      <input type="text" id="name" name="name"><br><br>
      <label for="email">อีเมล:</label><br>
      <input type="email" id="email" name="email"><br><br>
      <input type="submit" value="ส่งข้อมูล">
    </form>

    ในไฟล์ process.php เราสามารถรับข้อมูลได้ดังนี้:

    PHP
    <?php
    
      if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $name = $_POST["name"];
        $email = $_POST["email"];
    
        echo "คุณชื่อ: " . $name . "<br>";
        echo "อีเมลของคุณคือ: " . $email;
      } else {
        echo "ไม่พบข้อมูลที่ส่งมาจาก Form ด้วย POST method";
      }
    
    ?>

    คำอธิบาย:

    • $_SERVER["REQUEST_METHOD"]: เป็น Superglobal Variable ที่เก็บ HTTP method ที่ใช้ในการ Request
    • เราตรวจสอบว่า Request method เป็น POST ก่อนที่จะเข้าถึง $_POST array
    • $_POST["name"] และ $_POST["email"] ใช้เพื่อเข้าถึงค่าที่ผู้ใช้ป้อนใน Input fields ที่มี name attribute เป็น “name” และ “email”

    ถ้า Form ถูกส่งด้วย GET method เราจะใช้ $_GET["name"] และ $_GET["email"] ใน process.php แทน

    การตรวจสอบความถูกต้องของข้อมูล (Form Validation)

    การตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้ป้อนเป็นสิ่งสำคัญ เพื่อให้แน่ใจว่าข้อมูลอยู่ในรูปแบบที่ถูกต้องและครบถ้วน คุณสามารถใช้ PHP ในการตรวจสอบข้อมูลฝั่ง Server หลังจากที่ Form ถูกส่งมาแล้ว

    ตัวอย่างการตรวจสอบว่าช่องชื่อและอีเมลไม่ว่าง:

    PHP
    <?php
    
      if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["name"])) {
          echo "กรุณากรอกชื่อ<br>";
        } else {
          $name = $_POST["name"];
          // ประมวลผลชื่อ
        }
    
        if (empty($_POST["email"])) {
          echo "กรุณากรอกอีเมล<br>";
        } else {
          $email = $_POST["email"];
          // ตรวจสอบรูปแบบอีเมล (ใช้ filter_var)
          if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            echo "รูปแบบอีเมลไม่ถูกต้อง<br>";
          } else {
            // ประมวลผลอีเมล
          }
        }
    
        // ถ้าไม่มีข้อผิดพลาด ให้ดำเนินการอื่นๆ เช่น บันทึกข้อมูลลงฐานข้อมูล
        if (!empty($_POST["name"]) && !empty($_POST["email"]) && filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
          echo "ข้อมูลถูกต้อง สามารถดำเนินการต่อได้";
        }
      }
    
    ?>

    PHP มีฟังก์ชันมากมายสำหรับการตรวจสอบข้อมูล เช่น empty(), isset(), filter_var(), และ Regular Expressions

    การป้องกันการโจมตี (Security Considerations)

    เมื่อรับข้อมูลจากผู้ใช้ สิ่งสำคัญคือต้องคำนึงถึงความปลอดภัย เพื่อป้องกันการโจมตีต่างๆ เช่น:

    • Cross-Site Scripting (XSS): ป้องกันโดยการ Escape ข้อมูลที่แสดงผลบนหน้าเว็บ (เช่น ใช้ htmlspecialchars())
    • SQL Injection: ป้องกันโดยการใช้ Prepared Statements หรือ Parameterized Queries เมื่อทำงานกับฐานข้อมูล
    • Form Hijacking: ใช้ HTTPS เพื่อเข้ารหัสการรับส่งข้อมูล

    เราจะเรียนรู้เกี่ยวกับเรื่องความปลอดภัยมากขึ้นใน Module ต่อๆ ไป

    กิจกรรมใน Module 7

    1. สร้าง Form HTML ที่มี Input fields หลากหลายประเภท (text, email, password, radio, checkbox, select, textarea)
    2. กำหนด action และ method ให้กับ Form
    3. สร้างไฟล์ PHP ที่รับข้อมูลจาก Form โดยใช้ทั้ง $_GET และ $_POST
    4. แสดงผลข้อมูลที่รับมาบนหน้าเว็บ PHP
    5. เพิ่มการตรวจสอบความถูกต้องของข้อมูลสำหรับ Input fields บางส่วน (เช่น ไม่ให้ว่าง, รูปแบบอีเมลถูกต้อง)
    6. (Optional) ลองใช้ htmlspecialchars() เพื่อป้องกัน XSS เบื้องต้น

    ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับการจัดการ Session และ Cookie ซึ่งเป็นกลไกสำคัญในการจดจำผู้ใช้และการคงสถานะของเว็บไซต์ครับ!