การจัดการฟอร์มในไฟล์ PHP ไฟล์เดียว

ในบทเรียนที่แล้ว ฟอร์มของเราวางอยู่บนหนึ่งหน้า แต่ถูกส่งไปยังอีกหน้า ที่จริงแล้วนั่นไม่จำเป็น หากปล่อยให้แอตทริบิวต์ action ว่างไว้หรือเอามันออกไปเลย ฟอร์มก็จะถูกส่งมายังหน้าเดิมนี้

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

มาดูตัวอย่างกัน สมมติว่าเรามีฟอร์มและโค้ดสำหรับจัดการมันในไฟล์เดียว:

form.php<form action="" method="GET">
  <input name="test1">
  <input name="test2">
  <input type="submit">
</form>

<?php
  var_dump($_GET);
?>

ในการเข้าไปที่หน้าครั้งแรก ฟังก์ชัน var_dump จะแสดงอาร์เรย์ว่าง แต่หลังจากส่งฟอร์มแล้ว มันจะแสดงข้อมูลจากฟอร์ม นั่นคือครั้งแรก $_GET จะว่าง แต่ครั้งที่สอง - จะมีข้อมูลจากฟอร์ม

นี่อาจนำไปสู่ปัญหา สมมติว่า เราจะป้อนตัวเลขลงในฟอร์มและต้องการแสดงผลรวมของตัวเลขเหล่านี้บนหน้าจอ:

html<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 ไม่ว่าง - แสดงว่าฟอร์มถูกส่งแล้วและสามารถทำการบวกได้ มิฉะนั้น เรายังอยู่ในการเข้าไปที่หน้าครั้งแรกและจะไม่ทำการบวก เอาล่ะ นี่คือโค้ดที่แก้ไขแล้ว:

html<form action="" method="GET">
  <input name="test1">
  <input name="test2">
  <input type="submit">
</form>

<?php
  if (!empty($_GET)) {
    echo $_GET['test1'] + $_GET['test2'];
  }
?>
Задание 1

ถามผู้ใช้เกี่ยวกับนามสกุล ชื่อ และชื่อกลาง หลังจากส่งฟอร์มแล้ว ให้แสดงข้อมูลที่ป้อนบนหน้าจอ