Hiện tại, khi tôi thiết kế biểu mẫu của mình, tôi muốn giữ tên của nút gửi bằng với id của biểu mẫu. Sau đó, trong php của tôi, tôi chỉ làm if(isset($_POST['submitName']))
để kiểm tra xem biểu mẫu đã được gửi chưa và biểu mẫu nào đã được gửi.Cách tốt nhất để xác định biểu mẫu nào đã được gửi?
Thứ nhất, có bất kỳ vấn đề bảo mật hoặc lỗi thiết kế nào với phương pháp này không?
Một vấn đề tôi gặp phải là khi tôi muốn chồng lên biểu mẫu của mình bằng javascript để cung cấp xác thực nhanh hơn cho người dùng. Ví dụ, trong khi tôi rõ ràng cần phải giữ lại xác nhận phía máy chủ, nó là thuận tiện hơn cho người dùng nếu một thông báo lỗi được hiển thị nội tuyến, khi làm mờ đầu vào. Ngoài ra, nó sẽ là tốt để cung cấp toàn bộ xác nhận biểu mẫu, sau khi nhấp vào nút gửi.
Do đó, khi người dùng nhấp vào nút gửi của biểu mẫu, tôi sẽ dừng hành động mặc định, thực hiện xác thực của mình và sau đó thử đổi chức năng gửi truyền thống, nếu xác thực vượt qua. Để làm điều này, tôi đang sử dụng phương pháp form.submit()
nhưng, thật không may, điều này không gửi biến nút gửi (vì nó phải là form.submit() có thể được gọi mà không cần bất kỳ nút nào được bấm). Điều này có nghĩa là tập lệnh PHP của tôi không phát hiện được rằng biểu mẫu đã được gửi.
Cách chính xác để giải quyết vấn đề này là gì? Có vẻ như giải pháp chuẩn là thêm một trường ẩn vào biểu mẫu, khi đi qua xác thực, có tên của id của biểu mẫu. Sau đó, khi form.submit() được gọi, điều này được truyền theo vị trí của nút gửi. Tuy nhiên, giải pháp này có vẻ rất không đúng với tôi và vì vậy tôi tự hỏi liệu tôi có nên:
a) Sử dụng phương pháp thay thế để phát hiện biểu mẫu nào đã được gửi mà không phụ thuộc vào việc gửi nút gửi. Nếu có gì thay thế? Rõ ràng, chỉ cần có thêm một lĩnh vực ẩn từ đầu là không tốt hơn.
b) Sử dụng giải pháp Javascript thay thế cho phép tôi giữ lại thiết kế không phải Javascript của mình. Ví dụ, có một thay thế cho form.submit() cho phép tôi chuyển vào dữ liệu bổ sung?
c) Nhét nó lên và chỉ cần chèn một trường ẩn bằng Javascript.
CẬP NHẬT: Tôi đã chấp nhận câu trả lời đúng nhưng tôi chỉ muốn làm rõ lỗi của mình ở đây để nó hữu ích hơn cho người khác. Tôi sử dụng Mootools và tôi rất ngây thơ tin rằng khi tôi sử dụng addEvent ('submit' ...), tôi cần gọi ngay event.stop() để ngăn chặn việc gửi đi. Trên thực tế đây không phải là trường hợp và tôi chỉ có thể gọi event.stop() chỉ khi xác thực không thành công. Nếu không, trình gửi mặc định sẽ được kích hoạt, như thường lệ và việc sử dụng form.submit() trở nên hoàn toàn không cần thiết.
Nhóm của tôi hiện thực hiện theo cách này. Tôi không thích nó vì các hình thức của chúng tôi bây giờ được yêu cầu phải có một nút gửi. Những kẻ thực hiện điều này đã chuyển sang một đội khác; tôi và một đồng đội khác đã có một thời gian khó khăn để tìm ra lý do tại sao các biểu mẫu của chúng tôi không gửi, sau đó chúng tôi nhận ra nó cần một nút gửi để xác nhận. – b01