Superglobals: $_GET
ใน PHP, Superglobals คือตัวแปรพิเศษที่สามารถเข้าถึงได้จากทุกส่วนของสคริปต์ ไม่ว่าจะเป็นภายในฟังก์ชัน, คลาส หรือไฟล์ใดๆ ก็ตาม Superglobals เหล่านี้มีประโยชน์อย่างมากในการจัดการข้อมูลที่ส่งผ่านมาจากภายนอก หรือข้อมูลที่เกี่ยวข้องกับการทำงานของ Server หนึ่งใน Superglobals ที่สำคัญและใช้งานบ่อยที่สุดคือ $_GET ในบทนี้เราจะมาทำความเข้าใจเกี่ยวกับการใช้งาน $_GET อย่างละเอียด
ความหมายของ $_GET
$_GET คือ Superglobal Array ที่ใช้ในการเก็บข้อมูลที่ถูกส่งผ่าน URL โดยข้อมูลเหล่านี้จะอยู่ในรูปแบบของ Query String ซึ่งเป็นส่วนที่ต่อท้าย URL ด้วยเครื่องหมาย ? และแต่ละ Parameter จะถูกคั่นด้วยเครื่องหมาย &
ตัวอย่าง URL ที่มีการส่งข้อมูลผ่าน $_GET:
https://www.example.com/search.php?q=PHP&sort=relevance
จาก URL ด้านบน, $_GET จะเก็บข้อมูลดังนี้:
$_GET['q']จะมีค่าเป็นPHP$_GET['sort']จะมีค่าเป็นrelevance
ดังนั้น $_GET จึงเป็นเครื่องมือที่สำคัญในการรับข้อมูลจากผู้ใช้ผ่าน URL เช่น การส่งข้อมูลจากฟอร์ม, การทำ Pagination (การแบ่งหน้า), หรือการส่งพารามิเตอร์ต่างๆ เพื่อควบคุมการทำงานของสคริปต์
การส่งข้อมูลผ่าน URL
การส่งข้อมูลผ่าน URL สามารถทำได้โดยการเพิ่ม Query String ต่อท้าย URL ซึ่ง Query String จะประกอบด้วย Parameter และ Value โดย Parameter คือชื่อของตัวแปรที่เราต้องการส่ง และ Value คือค่าของตัวแปรนั้นๆ
รูปแบบทั่วไปของ Query String คือ:
?parameter1=value1¶meter2=value2¶meter3=value3
ตัวอย่างการสร้าง Link ที่มีการส่งข้อมูลผ่าน $_GET ใน HTML:
<a href="profile.php?user_id=123&name=JohnDoe">View Profile</a>
เมื่อผู้ใช้คลิก Link นี้, จะมีการส่งข้อมูล user_id และ name ไปยัง profile.php ผ่าน $_GET
การใช้งาน $_GET ใน PHP
เราสามารถเข้าถึงข้อมูลที่ถูกส่งผ่าน $_GET ได้โดยการใช้ชื่อ Parameter เป็น Key ใน Array $_GET ตัวอย่าง:
<?php
// ตรวจสอบว่ามีค่า user_id ถูกส่งมาหรือไม่
if (isset($_GET['user_id'])) {
$user_id = $_GET['user_id'];
echo "User ID: " . $user_id . "<br>";
} else {
echo "User ID is not specified.<br>";
}
// ตรวจสอบว่ามีค่า name ถูกส่งมาหรือไม่
if (isset($_GET['name'])) {
$name = $_GET['name'];
echo "Name: " . $name . "<br>";
} else {
echo "Name is not specified.<br>";
}
?>
จาก Code ตัวอย่างด้านบน, เราใช้ฟังก์ชัน isset() เพื่อตรวจสอบว่ามี Parameter user_id และ name ถูกส่งมาหรือไม่ หากมี, เราจะนำค่าเหล่านั้นมาแสดงผล หากไม่มี, เราจะแสดงข้อความแจ้งเตือน
การตรวจสอบว่ามีข้อมูล $_GET หรือไม่
ก่อนที่จะเข้าถึงข้อมูลใน $_GET, เราควรตรวจสอบก่อนว่ามีข้อมูลนั้นอยู่จริงหรือไม่ เพื่อป้องกัน Error ที่อาจเกิดขึ้นจากการพยายามเข้าถึง Key ที่ไม่มีอยู่จริง เราสามารถใช้ฟังก์ชัน isset() หรือ empty() เพื่อตรวจสอบได้
การใช้ isset():
isset() จะคืนค่า true หากตัวแปรนั้นถูกกำหนดค่าแล้ว (ไม่เป็น NULL) และคืนค่า false หากตัวแปรนั้นยังไม่ได้ถูกกำหนดค่า
<?php
if (isset($_GET['product_id'])) {
$product_id = $_GET['product_id'];
echo "Product ID: " . $product_id;
} else {
echo "Product ID is not specified.";
}
?>
การใช้ empty():
empty() จะคืนค่า true หากตัวแปรนั้นว่างเปล่า (เช่น "", 0, "0", NULL, array(), หรือตัวแปรที่ยังไม่ได้ถูกกำหนดค่า) และคืนค่า false หากตัวแปรนั้นมีค่า
<?php
if (!empty($_GET['search_term'])) {
$search_term = $_GET['search_term'];
echo "Search Term: " . $search_term;
} else {
echo "Search Term is empty.";
}
?>
ข้อควรระวัง: การใช้ empty() อาจไม่เหมาะสมในบางกรณี เช่น หากเราต้องการตรวจสอบว่า Parameter มีค่าเป็น 0 หรือไม่ เพราะ empty(0) จะคืนค่า true ดังนั้นควรเลือกใช้ฟังก์ชันที่เหมาะสมกับสถานการณ์
ตัวอย่างการใช้งาน $_GET กับ Form
แม้ว่าโดยทั่วไป Form จะใช้ Method POST ในการส่งข้อมูล แต่ก็สามารถใช้ Method GET ได้เช่นกัน (แต่ไม่แนะนำสำหรับข้อมูลที่ sensitive หรือข้อมูลจำนวนมาก)
ตัวอย่าง Form ที่ใช้ Method GET:
<form action="search.php" method="get">
<label for="keyword">Keyword:</label>
<input type="text" id="keyword" name="keyword">
<button type="submit">Search</button>
</form>
เมื่อผู้ใช้กรอก Keyword และกดปุ่ม Search, ข้อมูลจะถูกส่งไปยัง search.php ผ่าน URL ในรูปแบบ:
search.php?keyword=สิ่งที่ผู้ใช้กรอก
จากนั้นใน search.php เราสามารถเข้าถึง Keyword ที่ผู้ใช้กรอกได้โดยใช้ $_GET['keyword']
<?php
if (isset($_GET['keyword'])) {
$keyword = $_GET['keyword'];
echo "You searched for: " . htmlspecialchars($keyword); // ป้องกัน XSS
} else {
echo "Please enter a keyword to search.";
}
?>
ข้อควรระวัง: อย่าลืมใช้ htmlspecialchars() เพื่อป้องกัน Cross-Site Scripting (XSS) เมื่อแสดงผลข้อมูลที่รับมาจาก $_GET เนื่องจากข้อมูลที่ส่งผ่าน URL สามารถถูกแก้ไขได้โดยผู้ไม่หวังดี
สรุป
$_GET เป็น Superglobal ที่สำคัญในการรับข้อมูลจาก URL การใช้งาน $_GET อย่างถูกต้องและระมัดระวังจะช่วยให้เราสามารถสร้าง Web Application ที่มีความยืดหยุ่นและตอบสนองต่อการกระทำของผู้ใช้ได้ อย่างไรก็ตาม, ควรพิจารณาถึงความเหมาะสมในการใช้งาน $_GET และระมัดระวังเรื่องความปลอดภัยเสมอ
ในบทถัดไป เราจะมาเรียนรู้เกี่ยวกับ $_POST ซึ่งเป็น Superglobal อีกตัวที่ใช้ในการรับข้อมูลจาก Form โดยเฉพาะ