การจัดการฟอร์มในไฟล์ PHP ไฟล์เดียว
ในบทเรียนที่แล้ว ฟอร์มของเราวางอยู่บนหนึ่งหน้า แต่ถูกส่งไปยังอีกหน้า
ที่จริงแล้วนั่นไม่จำเป็น หากปล่อยให้แอตทริบิวต์ action ว่างไว้หรือเอามันออกไปเลย ฟอร์มก็จะถูกส่งมายังหน้าเดิมนี้
มันจะทำงานอย่างไร: ในการเข้าไปที่หน้าครั้งแรก เราจะกรอกข้อมูลลงในฟอร์มและกดปุ่ม หลังจากนั้นหน้าจะรีเฟรชและโค้ดของมันจะถูกดำเนินการอีกครั้ง แต่คราวนี้พร้อมกับข้อมูลจากฟอร์ม
มาดูตัวอย่างกัน สมมติว่าเรามีฟอร์มและโค้ดสำหรับจัดการมันในไฟล์เดียว:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
ในการเข้าไปที่หน้าครั้งแรก ฟังก์ชัน var_dump จะแสดงอาร์เรย์ว่าง แต่หลังจากส่งฟอร์มแล้ว มันจะแสดงข้อมูลจากฟอร์ม นั่นคือครั้งแรก $_GET จะว่าง แต่ครั้งที่สอง - จะมีข้อมูลจากฟอร์ม
นี่อาจนำไปสู่ปัญหา สมมติว่า เราจะป้อนตัวเลขลงในฟอร์มและต้องการแสดงผลรวมของตัวเลขเหล่านี้บนหน้าจอ:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
ในกรณีนี้ ในการเข้าไปที่หน้าครั้งแรก เราจะเห็นข้อผิดพลาดของ PHP ที่เกี่ยวข้องกับความจริงที่ว่าอาร์เรย์ $_GET ว่างเปล่า แต่เรากำลังอ้างอิงถึงองค์ประกอบของมัน
ตรงนี้ควรบอกว่า คุณอาจไม่เห็นข้อผิดพลาดในเบราว์เซอร์ ในกรณีนี้ ให้ตรวจสอบว่าคุณได้เปิดการแสดงข้อผิดพลาดของ PHP ไว้ และให้แน่ใจว่าคุณเป็นการเข้าไปที่หน้าครั้งแรกและไม่มีข้อมูลฟอร์มในแถบที่อยู่
มาแก้ไขปัญหากัน สำหรับสิ่งนี้ เราจะเพิ่มเงื่อนไขเพื่อตรวจสอบว่าฟอร์มถูกส่งหรือไม่
ตัวอย่างเช่น สามารถตรวจสอบ $_GET ว่ามีข้อมูลหรือไม่ หาก $_GET ไม่ว่าง - แสดงว่าฟอร์มถูกส่งแล้วและสามารถทำการบวกได้ มิฉะนั้น เรายังอยู่ในการเข้าไปที่หน้าครั้งแรกและจะไม่ทำการบวก เอาล่ะ นี่คือโค้ดที่แก้ไขแล้ว:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
ถามผู้ใช้เกี่ยวกับนามสกุล ชื่อ และชื่อกลาง หลังจากส่งฟอร์มแล้ว ให้แสดงข้อมูลที่ป้อนบนหน้าจอ