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

วิธีป้องกันการแทรกข้อมูลซ้ำเมื่อส่งฟอร์มใน PHP


เซสชันของ PHP สามารถใช้เพื่อป้องกันการแทรกข้อมูลซ้ำเมื่อส่งฟอร์ม เซสชัน PHP ตั้งค่าตัวแปรเซสชัน (เช่น $_SESSION['posttimer']) ที่เก็บ timestamp ปัจจุบันเมื่อมีการ POST ก่อนประมวลผลฟอร์มใน PHP ตัวแปร $_SESSION['posttimer'] จะถูกตรวจสอบว่ามีอยู่หรือไม่ และตรวจสอบความแตกต่างของ timestamp (เช่น 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) {          // น้อยกว่า 2 วินาทีนับจากโพสต์ล่าสุด       } else {          // มากกว่า 2 วินาทีนับจากโพสต์ล่าสุด       }    }    $_SESSION['posttimer'] = time(); }

ผลลัพธ์

จะได้ผลลัพธ์ดังนี้:

ข้อมูลฟอร์มที่ส่งมาไม่ซ้ำกัน

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