2011-10-24 47 views
10

Tôi cần hiển thị một số dữ liệu từ trước từ một bảng và nhưng cần phải tắt chúng để ngăn người dùng chỉnh sửa chúng. Vì vậy, tôi vô hiệu hóa chúngPhần tử biểu mẫu bị vô hiệu không được gửi

$form -> getElement("elementname") -> setAttrib("disable", true);

Khi tôi gửi biểu mẫu, tôi phát hiện ra, đó là các yếu tố hình thức không được gửi ở tất cả, chỉ vì nó đã được vô hiệu hóa. Tôi xác nhận điều này khi tôi thử nghiệm loại bỏ các tùy chọn vô hiệu hóa.

Điều gì đang xảy ra? Tôi có làm điều gì sai? Làm thế nào để giải quyết điều này?

+0

Dù sao đây không phải là cách phù hợp để đảm bảo người dùng sẽ không chỉnh sửa trường. Bạn nên thêm trình xác thực để đạt được mục tiêu này. –

+2

Nếu mục tiêu là chỉ hiển thị dữ liệu có từ trước, thì hãy làm như vậy: in ra, không sử dụng các trường biểu mẫu nào cả. –

Trả lời

21

Đây là do thiết kế, các thành phần bị vô hiệu hóa không được gửi cùng với biểu mẫu.

gì bạn đang làm thực sự là một thực tế null, không có vấn đề gì bạn làm để hình thức mà trong đặt nó sẽ được chỉnh sửa bởi người dùng cuối. Bạn chỉ đơn giản là không thể tin tưởng đầu vào của biểu mẫu - ngay cả các trường bị ẩn - không bị giả mạo.

Đặt cược tốt nhất của bạn là chỉ hiển thị thông tin cho người dùng và tải lại thông tin sau khi biểu mẫu đã được gửi; tại lưu trữ tồi tệ nhất trong một phiên.

1

Tôi xử lý các loại tình huống này bằng cách sử dụng các phần tử ẩn. Thêm phần tử bị ẩn có cùng nội dung trong phần tử bị tắt của bạn. Khi biểu mẫu được đăng, hãy sử dụng giá trị từ phần tử ẩn.

Nhưng hãy thận trọng rằng việc sử dụng có thể sửa đổi giá trị của phần tử bị ẩn bằng Firebug hoặc các công cụ khác trước khi gửi biểu mẫu. Luôn kiểm tra lại các giá trị của biểu mẫu trước khi xử lý.

+3

'Luôn kiểm tra lại giá trị của biểu mẫu trước khi xử lý' Nếu bạn sẽ phải kiểm tra giá trị là những gì bạn muốn sau khi biểu mẫu được gửi, thì không có điểm nào trong việc gửi nó ngay từ đầu. – Dunhamzzz

17

Điều này làm việc như một sự quyến rũ đối với tôi. Nó ngăn không cho phần tử được chỉnh sửa và sẽ chuyển nó qua bài đăng.

$this->username->setAttrib('readonly', 'true'); 
+3

Lưu ý: Tính năng này không hoạt động đối với các loại đầu vào được chọn –

+0

JavaScript vẫn có thể truy cập phần tử chỉ đọc và thay đổi giá trị của nó. –

Các vấn đề liên quan