Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

จะป้องกันการแทรกหลายรายการเมื่อส่งแบบฟอร์มใน PHP ได้อย่างไร


สามารถใช้เซสชัน PHP เพื่อป้องกันการแทรกหลายรายการเมื่อส่งแบบฟอร์ม เซสชัน PHP ตั้งค่าตัวแปรเซสชัน (เช่น $_SESSION['posttimer']) ที่ตั้งค่าการประทับเวลาปัจจุบันบน POST ก่อนประมวลผลแบบฟอร์มใน PHP ตัวแปร $_SESSION['posttimer'] จะถูกตรวจสอบการมีอยู่ของตัวแปรนั้น และตรวจสอบความแตกต่างของการประทับเวลาเฉพาะ (เช่น 2 หรือ 3 วินาที) วิธีนี้จะช่วยให้ระบุและนำส่วนแทรกที่ซ้ำกันจริงออกได้

รูปแบบง่าย -

// form.html
<form action="my_session_file.php" method="post">
   <input type="text" name="bar" />
   <input type="submit" value="Save">
</form>

การอ้างอิงถึง 'my_session_file.php' ด้านบนจะมีโค้ดด้านล่าง -

ตัวอย่าง

if (isset($_POST) && !empty($_POST)) {
   if (isset($_SESSION['posttimer'])) {
      if ( (time() - $_SESSION['posttimer']) <= 2) {
         // less then 2 seconds since last post
      } else {
         // more than 2 seconds since last post
      }
   }
   $_SESSION['posttimer'] = time();
}

ผลลัพธ์

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

The unique form submitted data.

ตัวแปรเซสชัน posttimer ถูกตั้งค่า และเมื่อมีความแตกต่างของเวลา 2 วินาทีหรือน้อยกว่าก่อนการดำเนินการ POST ล่าสุด จะสามารถลบออกได้ มิฉะนั้นจะถูกเก็บไว้ ฟังก์ชันเวลาถูกเรียกและค่าถูกกำหนดให้กับตัวแปรเซสชันหลังจับเวลา