본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

การรับข้อมูลจาก Form (POST)

บทนี้อธิบายถึงวิธีการรับข้อมูลจากฟอร์มโดยใช้ HTTP Method `POST` และตัวแปร Superglobal `$_POST` ใน PHP ซึ่งเหมาะสำหรับการส่งข้อมูลจำนวนมากหรือข้อมูลที่ต้องการควา...

การรับข้อมูลจาก Form (POST)

ในบทที่แล้ว เราได้เรียนรู้วิธีการส่งข้อมูลผ่าน URL ด้วย HTTP Method GET และการเข้าถึงข้อมูลเหล่านั้นผ่าน $_GET ใน PHP แต่ยังมีอีกวิธีที่สำคัญและนิยมใช้กันมากในการรับข้อมูลจากฝั่ง Client นั่นคือ การใช้ Form และ HTTP Method POST ซึ่งเราจะมาเรียนรู้กันในบทนี้

ทำไมต้องใช้ POST?

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

รู้จักกับ $_POST

เช่นเดียวกับ $_GET, $_POST เป็นตัวแปร Superglobal ใน PHP ที่เก็บข้อมูลที่ส่งมาจาก Form ที่ใช้ HTTP Method POST โดย $_POST เป็น Array ที่เก็บ Key-Value Pair ของข้อมูลที่ส่งมา

ตัวอย่าง Form HTML

ก่อนที่เราจะไปดูโค้ด PHP เรามาสร้าง Form HTML ง่ายๆ กันก่อน:

<form action="process_form.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>

ในตัวอย่างนี้:

  • <form action="process_form.php" method="post">: กำหนดว่าเมื่อกดปุ่ม "ส่งข้อมูล" ข้อมูลจะถูกส่งไปยังไฟล์ process_form.php โดยใช้ HTTP Method POST
  • <label for="name">ชื่อ:</label> และ <input type="text" id="name" name="name">: สร้าง Input field สำหรับรับชื่อ โดย name="name" คือชื่อของ Parameter ที่จะถูกส่งไปพร้อมกับข้อมูล
  • <label for="email">อีเมล:</label> และ <input type="email" id="email" name="email">: สร้าง Input field สำหรับรับอีเมล โดย name="email" คือชื่อของ Parameter ที่จะถูกส่งไปพร้อมกับข้อมูล
  • <input type="submit" value="ส่งข้อมูล">: สร้างปุ่มสำหรับส่ง Form

การรับข้อมูลใน PHP (process_form.php)

ตอนนี้เรามาสร้างไฟล์ process_form.php เพื่อรับข้อมูลที่ส่งมาจาก Form:

<?php

// ตรวจสอบว่า Form ถูกส่งมาหรือไม่
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // รับค่าจาก Form
  $name = $_POST["name"];
  $email = $_POST["email"];

  // แสดงผลข้อมูลที่รับมา
  echo "ชื่อ: " . $name . "<br>";
  echo "อีเมล: " . $email . "<br>";
} else {
  // ถ้าไม่ได้ส่ง Form มา ให้แสดงข้อความแจ้งเตือน
  echo "กรุณาส่งข้อมูลผ่าน Form";
}

?>

ในตัวอย่างนี้:

  • if ($_SERVER["REQUEST_METHOD"] == "POST"): ตรวจสอบว่า Request ที่เข้ามาเป็น HTTP Method POST หรือไม่ เพื่อให้แน่ใจว่าข้อมูลถูกส่งมาจาก Form จริงๆ
  • $name = $_POST["name"];: รับค่าจาก Input field ที่มี name="name" มาเก็บไว้ในตัวแปร $name
  • $email = $_POST["email"];: รับค่าจาก Input field ที่มี name="email" มาเก็บไว้ในตัวแปร $email
  • echo "ชื่อ: " . $name . "<br>"; และ echo "อีเมล: " . $email . "<br>";: แสดงผลข้อมูลที่รับมา
  • else { echo "กรุณาส่งข้อมูลผ่าน Form"; }: หากไม่มีการส่งข้อมูลผ่าน Form จะแสดงข้อความแจ้งเตือน

การตรวจสอบข้อมูลจาก Form

การรับข้อมูลจาก Form โดยตรงโดยไม่ตรวจสอบ อาจนำไปสู่ปัญหาด้านความปลอดภัย หรือ Error ต่างๆ ได้ ดังนั้นเราจึงควรตรวจสอบข้อมูลก่อนนำไปใช้งานเสมอ

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

<?php

// ฟังก์ชันสำหรับตรวจสอบข้อมูล
function validateFormData($data) {
  $data = trim($data); // ลบช่องว่างหน้าหลัง
  $data = stripslashes($data); // ลบ Backslashes
  $data = htmlspecialchars($data); // แปลง Special characters เป็น HTML entities
  return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // รับค่าจาก Form และตรวจสอบข้อมูล
  $name = validateFormData($_POST["name"]);
  $email = validateFormData($_POST["email"]);

  // ตรวจสอบว่าข้อมูลว่างหรือไม่
  if (empty($name) || empty($email)) {
    echo "กรุณากรอกข้อมูลให้ครบถ้วน";
  } else {
    // แสดงผลข้อมูลที่รับมา
    echo "ชื่อ: " . $name . "<br>";
    echo "อีเมล: " . $email . "<br>";
  }
} else {
  echo "กรุณาส่งข้อมูลผ่าน Form";
}

?>

ในตัวอย่างนี้:

  • function validateFormData($data): สร้างฟังก์ชันสำหรับตรวจสอบข้อมูล โดยจะทำการลบช่องว่างหน้าหลัง ลบ Backslashes และแปลง Special characters เป็น HTML entities เพื่อป้องกัน XSS Attack
  • $name = validateFormData($_POST["name"]); และ $email = validateFormData($_POST["email"]);: เรียกใช้ฟังก์ชัน validateFormData() เพื่อตรวจสอบข้อมูลก่อนนำไปใช้งาน
  • if (empty($name) || empty($email)): ตรวจสอบว่าข้อมูลว่างหรือไม่ หากว่างจะแสดงข้อความแจ้งเตือน

การประมวลผลข้อมูลจาก Form

หลังจากที่เราตรวจสอบข้อมูลเรียบร้อยแล้ว เราสามารถนำข้อมูลไปประมวลผลต่อได้ เช่น บันทึกลงฐานข้อมูล หรือส่งอีเมล

ตัวอย่างการบันทึกข้อมูลลงไฟล์ (ไม่แนะนำสำหรับ Production):

<?php

function validateFormData($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

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

  if (empty($name) || empty($email)) {
    echo "กรุณากรอกข้อมูลให้ครบถ้วน";
  } else {
    // สร้าง String สำหรับบันทึกลงไฟล์
    $data = "ชื่อ: " . $name . ", อีเมล: " . $email . "\n";

    // บันทึกลงไฟล์ (ไม่แนะนำสำหรับ Production)
    file_put_contents("data.txt", $data, FILE_APPEND);

    echo "บันทึกข้อมูลเรียบร้อย";
  }
} else {
  echo "กรุณาส่งข้อมูลผ่าน Form";
}

?>

ในตัวอย่างนี้:

  • $data = "ชื่อ: " . $name . ", อีเมล: " . $email . "\n";: สร้าง String ที่จะบันทึกลงไฟล์
  • file_put_contents("data.txt", $data, FILE_APPEND);: บันทึกข้อมูลลงไฟล์ data.txt โดย FILE_APPEND จะเป็นการเพิ่มข้อมูลต่อท้ายไฟล์เดิม

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

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการรับข้อมูลจาก Form โดยใช้ HTTP Method POST และตัวแปร Superglobal $_POST นอกจากนี้เรายังได้เรียนรู้ถึงความสำคัญของการตรวจสอบข้อมูลก่อนนำไปใช้งาน และวิธีการประมวลผลข้อมูลเบื้องต้น ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับ JSON ซึ่งเป็น Format ที่นิยมใช้ในการรับส่งข้อมูลระหว่าง API และ Client

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기