メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

การจัดการ Form Data ด้วย PHP

บทความนี้อธิบายวิธีการจัดการข้อมูลที่ส่งมาจาก HTML Forms ด้วย PHP โดยเน้นที่การใช้ `$_GET` และ `$_POST` เพื่อเข้าถึงข้อมูลที่ส่งผ่านเมธอด GET และ POST ตามลำดับ...

การจัดการ Form Data ด้วย PHP

ในบทที่แล้ว เราได้เรียนรู้วิธีการรวมโค้ด PHP เข้ากับ HTML เพื่อสร้างหน้าเว็บแบบไดนามิก หนึ่งในประโยชน์ที่สำคัญของการทำเช่นนี้คือความสามารถในการรับข้อมูลจากผู้ใช้ผ่าน HTML Forms และประมวลผลข้อมูลนั้นด้วย PHP ในบทนี้ เราจะมาสำรวจวิธีการจัดการ Form Data ด้วย PHP รวมถึงการใช้ $_GET และ $_POST การตรวจสอบข้อมูล และการป้องกันการโจมตีแบบ XSS (Cross-Site Scripting)

HTML Forms คืออะไร?

HTML Form คือส่วนประกอบของ HTML ที่ใช้ในการรวบรวมข้อมูลจากผู้ใช้ เช่น ชื่อ ที่อยู่อีเมล รหัสผ่าน หรือข้อความต่างๆ Form ประกอบด้วยฟิลด์อินพุตต่างๆ เช่น ช่องข้อความ (text fields), ช่องรหัสผ่าน (password fields), ปุ่มตัวเลือก (radio buttons), ช่องทำเครื่องหมาย (checkboxes), และเมนูแบบเลื่อนลง (dropdown menus) เมื่อผู้ใช้กรอกข้อมูลและส่ง Form ข้อมูลนั้นจะถูกส่งไปยังเซิร์ฟเวอร์เพื่อประมวลผล

วิธีการส่งข้อมูลจาก Form

ข้อมูลจาก HTML Form สามารถส่งไปยังเซิร์ฟเวอร์ได้สองวิธีหลักๆ คือ GET และ POST

GET

เมื่อใช้เมธอด GET ข้อมูล Form จะถูกผนวกเข้ากับ URL ของหน้าเว็บที่ถูกร้องขอ ตัวอย่างเช่น หาก Form ส่งข้อมูลไปยัง process.php ข้อมูลจะถูกเพิ่มเข้าไปใน URL ในลักษณะนี้:

process.php?name=John&email=john@example.com

ข้อดีของการใช้ GET คือข้อมูลสามารถถูกบุ๊กมาร์กและแชร์ได้ง่าย อย่างไรก็ตาม มีข้อเสียคือข้อมูลจะปรากฏใน URL ซึ่งอาจไม่ปลอดภัยสำหรับข้อมูลที่ละเอียดอ่อน เช่น รหัสผ่าน นอกจากนี้ GET ยังมีข้อจำกัดเกี่ยวกับความยาวของ URL ซึ่งอาจทำให้ไม่เหมาะสำหรับการส่งข้อมูลขนาดใหญ่

ตัวอย่าง HTML Form ที่ใช้เมธอด GET:

<form action="process.php" method="get">
  <label for="name">Name:</label><br>
  <input type="text" id="name" name="name"><br><br>

  <label for="email">Email:</label><br>
  <input type="email" id="email" name="email"><br><br>

  <input type="submit" value="Submit">
</form>

POST

เมื่อใช้เมธอด POST ข้อมูล Form จะถูกส่งในส่วน Body ของ HTTP request ซึ่งมองไม่เห็นใน URL วิธีนี้ปลอดภัยกว่าสำหรับการส่งข้อมูลที่ละเอียดอ่อนและไม่มีข้อจำกัดเกี่ยวกับความยาวของข้อมูล

ตัวอย่าง HTML Form ที่ใช้เมธอด POST:

<form action="process.php" method="post">
  <label for="name">Name:</label><br>
  <input type="text" id="name" name="name"><br><br>

  <label for="email">Email:</label><br>
  <input type="email" id="email" name="email"><br><br>

  <input type="submit" value="Submit">
</form>

สังเกตว่า attribute method ถูกตั้งค่าเป็น "post"

การเข้าถึงข้อมูล Form ด้วย PHP: $_GET และ $_POST

ใน PHP เราสามารถเข้าถึงข้อมูลที่ส่งมาจาก Form โดยใช้ superglobal arrays $_GET และ $_POST

$_GET

$_GET เป็น associative array ที่เก็บข้อมูลที่ส่งผ่านเมธอด GET ชื่อของฟิลด์ Form จะเป็น key ใน array และค่าที่ผู้ใช้ป้อนจะเป็น value

ตัวอย่าง process.php สำหรับ Form ที่ใช้ GET:

<?php
if ($_SERVER["REQUEST_METHOD"] == "GET") {
  $name = $_GET["name"];
  $email = $_GET["email"];

  echo "<p>Name: " . htmlspecialchars($name) . "</p>";
  echo "<p>Email: " . htmlspecialchars($email) . "</p>";
}
?>

ในตัวอย่างนี้ เราตรวจสอบก่อนว่า request method คือ GET โดยใช้ $_SERVER["REQUEST_METHOD"] จากนั้นเราดึงค่าของฟิลด์ name และ email จาก $_GET array และแสดงผล

$_POST

$_POST เป็น associative array ที่เก็บข้อมูลที่ส่งผ่านเมธอด POST การใช้งานคล้ายกับ $_GET แต่ใช้สำหรับข้อมูลที่ส่งผ่าน POST method

ตัวอย่าง process.php สำหรับ Form ที่ใช้ POST:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = $_POST["name"];
  $email = $_POST["email"];

  echo "<p>Name: " . htmlspecialchars($name) . "</p>";
  echo "<p>Email: " . htmlspecialchars($email) . "</p>";
}
?>

เช่นเดียวกับ GET เราตรวจสอบ request method และดึงค่าจาก $_POST array

การตรวจสอบข้อมูล (Data Validation)

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

  • การตรวจสอบฝั่ง Client-side: ใช้ JavaScript เพื่อตรวจสอบข้อมูลก่อนที่จะส่งไปยังเซิร์ฟเวอร์ วิธีนี้ช่วยลดภาระของเซิร์ฟเวอร์และให้ feedback ที่รวดเร็วแก่ผู้ใช้
  • การตรวจสอบฝั่ง Server-side: ใช้ PHP เพื่อตรวจสอบข้อมูลหลังจากที่ได้รับจาก Form วิธีนี้มีความปลอดภัยมากกว่าเนื่องจากผู้ใช้ไม่สามารถ bypass การตรวจสอบได้ง่าย

ตัวอย่างการตรวจสอบข้อมูลฝั่ง Server-side:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = $_POST["name"];
  $email = $_POST["email"];

  // ตรวจสอบว่า name ไม่ว่าง
  if (empty($name)) {
    echo "<p style='color:red;'>Name is required</p>";
  }

  // ตรวจสอบว่า email เป็นรูปแบบที่ถูกต้อง
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "<p style='color:red;'>Invalid email format</p>";
  }

  // ถ้าผ่านการตรวจสอบทั้งหมด
  if (!empty($name) && filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "<p>Name: " . htmlspecialchars($name) . "</p>";
    echo "<p>Email: " . htmlspecialchars($email) . "</p>";
  }
}
?>

ในตัวอย่างนี้ เราใช้ฟังก์ชัน empty() เพื่อตรวจสอบว่า name ไม่ว่าง และใช้ฟังก์ชัน filter_var() กับ filter FILTER_VALIDATE_EMAIL เพื่อตรวจสอบว่า email เป็นรูปแบบที่ถูกต้อง

การป้องกัน XSS (Cross-Site Scripting)

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

ฟังก์ชัน htmlspecialchars() ใน PHP ใช้สำหรับแปลงอักขระพิเศษ (เช่น <, >, &, ", ') เป็น HTML entities ซึ่งจะทำให้สคริปต์ที่เป็นอันตรายไม่สามารถทำงานได้

ตัวอย่างการใช้ htmlspecialchars():

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = $_POST["name"];
  $email = $_POST["email"];

  $escapedName = htmlspecialchars($name);
  $escapedEmail = htmlspecialchars($email);

  echo "<p>Name: " . $escapedName . "</p>";
  echo "<p>Email: " . $escapedEmail . "</p>";
}
?>

เราใช้ htmlspecialchars() เพื่อ escape ค่าของ name และ email ก่อนที่จะแสดงผล

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการจัดการ Form Data ด้วย PHP รวมถึงการใช้ $_GET และ $_POST เพื่อเข้าถึงข้อมูล การตรวจสอบข้อมูลเพื่อความถูกต้องและความปลอดภัย และการป้องกัน XSS โดยใช้ฟังก์ชัน htmlspecialchars() การเข้าใจหลักการเหล่านี้เป็นสิ่งสำคัญสำหรับการสร้างเว็บแอปพลิเคชันที่ปลอดภัยและใช้งานได้จริง ในบทต่อไป เราจะเรียนรู้เกี่ยวกับการจัดการ Cookies และ Sessions ใน PHP

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る