PHP ngăn gửi biểu mẫu trùng lặp

Ở nhiều trang web gửi dữ liệu biểu mẫu, rất dễ gặp phải tình huống người dùng quay lại trang trước khi biểu mẫu được gửi qua nút quay lại của trình duyệt và sau đó gửi biểu mẫu nhiều lần

Để tránh gửi dữ liệu trùng lặp, bạn có thể sử dụng JavaScript để thêm một đoạn mã đơn giản bên trong thẻ đầu của trang web để vô hiệu hóa trình duyệt ghi lại lịch sử

JavaScript:window.history.forward(1);

Sau đó, trình duyệt có thể bị vô hiệu hóa việc ghi lại lịch sử của trang trước để ngăn người dùng gửi dữ liệu trùng lặp

Phiên PHP có thể được sử dụng để ngăn nhiều lần chèn khi gửi biểu mẫu. Phiên PHP đặt biến phiên (giả sử $_SESSION['posttimer']) đặt dấu thời gian hiện tại trên POST. Trước khi xử lý biểu mẫu trong PHP, biến $_SESSION['posttimer'] được kiểm tra sự tồn tại của nó và kiểm tra sự khác biệt về dấu thời gian cụ thể (giả sử 2 hoặc 3 giây). Bằng cách này, những phần chèn thực sự trùng lặp có thể được xác định và loại bỏ

hình thức đơn giản -

// form.html

   
   

Tham chiếu đến 'my_session_file. php' ở trên sẽ có các dòng mã bên dưới -

Thí dụ

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();
}

đầu ra

Điều này sẽ tạo ra đầu ra sau -

The unique form submitted data.

Biến phiên posttimer được đặt và khi có chênh lệch thời gian từ 2 giây trở xuống trước thao tác POST cuối cùng, nó có thể bị xóa. Nếu không thì nó được lưu trữ. Hàm thời gian được gọi và giá trị được gán cho biến phiên posttimer

Khi gửi biểu mẫu HTML, có thể mất vài giây trước khi biểu mẫu được gửi thành công và trang phản hồi hiển thị. Mọi người có thể nhập viện và nhấp vào nút Gửi nhiều lần, điều này có thể dẫn đến việc gửi biểu mẫu trùng lặp. Thông thường, đó không thực sự là vấn đề, nhưng trong một số trường hợp, bạn có thể muốn ngăn điều này xảy ra

Dưới đây, bạn sẽ tìm thấy hai thủ thuật đơn giản để ngăn chặn việc gửi trùng lặp, bạn có thể sử dụng một trong hai thủ thuật này hoặc kết hợp cả hai

» ngăn gửi nhiều biểu mẫu bằng Javascript

Sử dụng Javascript để chặn các lần gửi trùng lặp có lẽ là cách dễ nhất. Khi ai đó gửi biểu mẫu, chúng tôi chỉ cần tắt nút Gửi và có thể thay đổi giá trị của nó thành một giá trị mang tính mô tả hơn, chẳng hạn như "Đang gửi, vui lòng đợi. "

Hãy thử nhấp vào nút này chẳng hạn. Nó sẽ vẫn bị vô hiệu hóa cho đến khi bạn tải lại trang này

Bước đầu tiên là cung cấp cho nút gửi của bạn một id duy nhất, ví dụ: id="myButton"

Bước thứ hai (và cuối cùng) là cung cấp hai lệnh Javascript cho

nhãn. Cái đầu tiên sẽ yêu cầu trình duyệt tắt nút gửi sau khi biểu mẫu đã được gửi và cái thứ hai sẽ thay đổi văn bản nút để cung cấp cho người dùng một số ý tưởng về những gì đang xảy ra. Đây là mã để thêm vào thẻ biểu mẫu của bạn.
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"

Thẻ biểu mẫu của bạn sau đó sẽ trông giống như

Đó là nó. Thủ thuật này sẽ hoạt động trong hầu hết các trình duyệt hiện đại (IE 5+, FireFox, Opera,. )

» ngăn gửi nhiều biểu mẫu bằng cookie

Nếu bạn muốn tránh gửi trùng lặp trong toàn bộ phiên trình duyệt (hoặc lâu hơn), bạn có thể cân nhắc sử dụng cookie. Ví dụ: chỉnh sửa tập lệnh xử lý biểu mẫu của bạn để gửi cookie tới trình duyệt sau khi biểu mẫu đã được xử lý nhưng trước khi bất kỳ tiêu đề chuyển hướng hoặc HTML nào được in. Đặt mã này sau lệnh mail() sẽ hoạt động trong hầu hết các trường hợp

setcookie('FormSubmitted', '1');

Sau đó kiểm tra cookie trước khi xử lý. Nếu có thì khách truy cập này đã gửi biểu mẫu trong phiên trình duyệt đang hoạt động. Thêm mã này vào đầu tập lệnh xử lý biểu mẫu của bạn

if (isset($_COOKIE['FormSubmitted']))
{
    die('You may only submit this form once per session!');
}

Đó là nó

Đây là cách tập lệnh cuối cùng từ hướng dẫn biểu mẫu php của chúng tôi sẽ trông như thế nào nếu được sửa đổi để chặn các lần gửi trùng lặp bằng cookie. Lưu ý rằng một số mã đã được thêm vào đầu tập lệnh và mã in cookie sau khi gọi hàm mail()

________số 8_______

» Thông báo bản quyền

© 2008-2023 myPHPform. com. Đã đăng ký Bản quyền. Sao chép hoặc phân phối lại bất kỳ phần nào của trang web này mà không có sự cho phép bằng văn bản của chúng tôi đều bị nghiêm cấm

Đôi khi, người dùng có thể nhấn nút gửi hai lần hoặc người dùng có thể tải lại trang (với dữ liệu bài đăng), cả hai hoạt động đều khiến biểu mẫu phải xử lý nhiều lần với cùng một dữ liệu, dẫn đến bản ghi trùng lặp trong DB hoặc Email trùng lặp trong Hộp thư đến

Để tránh hành vi này trong PHP, chúng tôi sẽ bao gồm một mã thông báo duy nhất trên mỗi yêu cầu bài đăng, phương pháp này cũng hữu ích để ngăn chặn các cuộc tấn công CSRF và phát lại. chúng tôi sẽ bao gồm khóa duy nhất được tạo trong biểu mẫu, trường ẩn và biến phiên. Sau khi biểu mẫu được gửi, chúng tôi sẽ so sánh giá trị trường ẩn với giá trị mã thông báo phiên, nếu cả hai giá trị khớp với biểu mẫu, việc gửi biểu mẫu là hợp lệ, nếu mã thông báo không khớp với mã thông báo trong phiên của bạn, biểu mẫu đã được gửi lại

Cách tạo mã thông báo

Trong ví dụ này, hàm PHP uniqid() được sử dụng để tạo giá trị mã thông báo biểu mẫu

Cho tôi xem logic

chỉ cần sao chép đoạn mã trên và dán nó vào trang biểu mẫu. sau đó tạo một trường ẩn bên trong biểu mẫu như hình bên dưới

Trong trang xử lý biểu mẫu, chúng tôi sẽ so sánh mã thông báo như hình bên dưới

if($_POST['form_token'] != $_SESSION['form_token']) {
   echo 'form resubmitted!'; exit;
} else {
 do ...
}

Hoàn thành ví dụ

Dưới đây là tập lệnh mẫu đã hoàn thành để ngăn gửi nhiều biểu mẫu trong PHP



    
        My Form
    

    

Tạo tệp process.php và đặt mã bên dưới vào đó

Tôi hy vọng nó sẽ giúp các bạn ngăn chặn việc gửi nhiều biểu mẫu

Hãy chia sẻ nó và cho bạn bè của bạn biết về nó

Tôi hy vọng bạn thích bài đăng này, vui lòng bình luận bên dưới, đề xuất của bạn và các vấn đề nếu bạn gặp phải - chúng tôi ở đây để giải quyết vấn đề của bạn

Làm cách nào để ngăn việc gửi hai lần trong PHP?

Phiên PHP có thể được sử dụng để ngăn nhiều lần chèn khi gửi biểu mẫu . Phiên PHP đặt biến phiên (giả sử $_SESSION['posttimer']) đặt dấu thời gian hiện tại trên POST.

Làm cách nào để tắt nút gửi và nhiều lần gửi trong PHP?

Làm cách nào để tắt nút "Gửi" và gửi nhiều lần? .
Tạo một bản sao lưu của chỉ mục hiện tại của bạn. tập tin php
Mở chỉ mục tệp. php trong trình soạn thảo văn bản đơn giản, chẳng hạn như Notepad
chỉ mục bên trong. php tìm hai lần xuất hiện đầu tiên của mã này.
Sau mã này thêm. .
Lưu thay đổi, tải lên chỉ mục

Làm cách nào để ngăn biểu mẫu gửi PHP?

Bạn có thể sử dụng exit() để dừng thực thi PHP nếu bạn cần. Mặt khác, bạn sẽ cần xác thực biểu mẫu phía máy khách bằng JavaScript (thứ mà bạn có thể tìm thấy nhiều thông tin về đây hoặc thông qua Google). Lưu câu trả lời này.

Làm cách nào để ngăn email trùng lặp trong PHP?

hàm php createUser($email) { $sql = "CHỌN * TỪ vols2012 WHERE email='$email'" ; . " ) ; }//end if function check_input($data, $problem='') { $data = trim($data); $data = dải($data); $data