Sau khi biểu mẫu được gửi, làm cách nào để kiểm tra phía máy chủ nếu một trường cụ thể tồn tại? Ví dụ:Làm cách nào để kiểm tra xem trường POST đã gửi có tồn tại trong VBScript không?
If [Exists] Request("FieldName") Then
...
End If
Sau khi biểu mẫu được gửi, làm cách nào để kiểm tra phía máy chủ nếu một trường cụ thể tồn tại? Ví dụ:Làm cách nào để kiểm tra xem trường POST đã gửi có tồn tại trong VBScript không?
If [Exists] Request("FieldName") Then
...
End If
Kiểm tra xem nó có trống không. Có một vài cách khác nhau, nhưng một trong những tôi đã nhìn thấy thường xuyên hơn sử dụng nằm dọc theo dòng:
If Request("FieldName") <> "" Then
'etc.
End If
tôi thường kiểm tra một cách rõ ràng những bộ sưu tập Form
và QueryString
với một số biến thể của một trong những mã dưới đây nếu tôi có thể nhận được các biến từ một hay cách khác tùy thuộc vào bối cảnh:
Select Case True
Case Request.Form("FieldName") <> ""
'Run if the Form isn't empty
Case Request.QueryString("FieldName") <> ""
'Run if the QueryString isn't empty
Case Else
'Set a predefined default if they're both empty
End Select
hoặc một lồng nhau Nếu ... Sau đó:
If Request.Form("FieldName") <> "" Then
'Run if the Form isn't empty
ElseIf Request.QueryString("FieldName") <> "" Then
'Run if the QueryString isn't empty
Else
'Set a predefined default if they're both empty
End If
Nếu tôi biết chính xác bộ sưu tập đó đến từ đâu, tôi sẽ kiểm tra bộ sưu tập đó một cách cụ thể. Lý do là tôi muốn chắc chắn rằng nó đang kéo những gì tôi mong đợi từ nơi tôi mong đợi nó đến từ. Tôi không muốn ai đó ghi đè giá trị Form
bằng cách gửi một số nội dung trong số QueryString
khi tôi không mong đợi.
Từ MSDN:
Nếu biến nhất định không phải là một trong các trước lăm bộ sưu tập, các đối tượng yêu cầu trả EMPTY.
Tất cả các biến có thể được truy cập trực tiếp bằng cách gọi Yêu cầu (biến) mà không có tên bộ sưu tập.Trong trường hợp này, máy chủ Web tìm kiếm các bộ sưu tập theo trình tự sau:
- QueryString
- Mẫu
- Cookies
- ClientCertificate
- ServerVariables
Nếu một biến với cùng tên tồn tại trong nhiều bộ sưu tập, đối tượng Yêu cầu trả về fi Ví dụ đầu tiên là đối tượng cuộc gặp gỡ.
Chúng tôi đặc biệt khuyên rằng khi đề cập đến các thành viên của bộ sưu tập , tên đầy đủ sẽ được sử dụng. Ví dụ: thay vì Yêu cầu. ("AUTH_USER") sử dụng Request.ServerVariables ("AUTH_USER"). Điều này cho phép máy chủ định vị mục nhanh hơn.
If Request("FieldName").Count > 0 Then
...
End If
Hoặc, viết tắt là:
If Request("FieldName").Count Then
...
End If
Bối cảnh:
Request
là kỳ diệu, trong chừng mực nó không ném ra một lỗi khi bạn cố gắng truy cập một khóa không phải là một phần của yêu cầu - nhưng .Count
sẽ là 0 cho các khóa không tồn tại.foo&bar&baz
foo=value1&foo=value2
.Do đó, cách đáng tin cậy để xác định xem một khóa có được gửi bởi khách hàng hay không là để đếm số lần khách hàng đã gửi.
Trường hợp đặc biệt của thử nghiệm này là kiểm tra xem có giá trị không trống cho khóa đó hay không (If Request("FieldName") > ""
). Điều này có thể hoặc có thể không phải là những gì bạn muốn cuối cùng; chỉ cần lưu ý rằng hành vi cơ bản của chuỗi truy vấn rộng hơn điều đó.
+1. Đây là phương pháp nên được sử dụng. –
Tôi thường kiểm tra giá trị của nút SUBMIT. Nếu nó được nhấp, giá trị của nó được đăng cùng với dữ liệu biểu mẫu. Vì vậy, ngay cả khi tất cả dữ liệu biểu mẫu của bạn trống, giá trị của nút gửi sẽ không được. Và nếu giá trị của nút gửi là trống, thì nó không được nhấp.
if request("btn_Submit") <> "" Then
response.write "form was submitted"
end if
Điều này khó khăn hơn nếu bạn đang sử dụng lệnh javascript form.submit(), trong trường hợp này tôi thường chọn trường ẩn.
Để kiểm tra xem các thông số đã có mặt (mà không quan tâm đến giá trị của nó) nó cũng có thể viết:
fieldValue = Request("FieldName")
if Not IsEmpty(fieldValue) ...
Một lợi thế hơn phương pháp Đếm trên là, bạn có thể kiểm tra các biến, mà không đề cập đến tên trường một lần nữa. Lợi thế khi thử nghiệm cho "" là nếu bạn vượt qua & FieldName mà không gán giá trị, kiểm tra cho "" sẽ mang lại giá trị đúng, nhưng IsEmpty trả về false.
Chỉnh sửa: Tắt tính năng này không đáng tin cậy trong IIS.
JFTR: 'Khác nếu' (lưu ý không gian) sẽ là một điều kiện lồng nhau. 'ElseIf' thì không. –
@AnsgarWiechers yeah ... ý định ban đầu của tôi là đi với một lồng nhau thực sự nếu, nhưng tôi đã bị phân tâm bởi một đồng nghiệp. : P – AnonJr
Trường có thể tồn tại, nhưng giá trị chỉ có thể để trống. Phương pháp đúng là Tomalak bên dưới. – bvmobileapps