Asp-Classic

如何檢查 VBScript 中是否存在 POST 送出的欄位?

  • June 14, 2017

送出表單後,如何檢查伺服器端是否存在特定欄位?例如:

If [Exists] Request("FieldName") Then
   ...
End If

檢查它是否為空。有幾種不同的方法,但我見過更常用的一種是:

If Request("FieldName") <> "" Then
'etc.
End If

如果我可能會根據上下文從一個或另一個中獲取變數,我通常會使用以下程式碼之一的一些變體顯式檢查Formand集合:QueryString

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

或嵌套的 If … Then:

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

如果我確切地知道它來自哪個集合,我會專門檢查那個集合。原因是我想確保它從我期望它來自的地方拉出我期望的東西。我不希望有人在我沒想到Form的時候發送一些東西來覆蓋一個值。QueryString

來自MSDN

如果指定的變數不在上述五個集合之一中,則 Request 對象返回 EMPTY。

所有變數都可以通過呼叫 Request(variable) 直接訪問,無需集合名稱。在這種情況下,Web 伺服器按以下順序搜尋集合:

  • 請求參數
  • 形式
  • 餅乾
  • 客戶證書
  • 伺服器變數

如果同名變數存在於多個集合中,則 Request 對象返回該對象遇到的第一個實例。

強烈建議在引用集合成員時使用全名。例如,使用 Request.ServerVariables(“AUTH_USER”) 而不是 Request.(“AUTH_USER”)。這允許伺服器更快地定位項目。

If Request("FieldName").Count > 0 Then
   ...
End If

或者,簡而言之:

If Request("FieldName").Count Then
   ...
End If

背景:

  • Request集合很神奇,因為當您嘗試訪問不屬於請求的密鑰時它不會引發錯誤 - 但.Count對於不存在的密鑰,它將為 0。
  • 在 URL 編碼的查詢字元串中,發送沒有值的鍵是合法的,例如foo&bar&baz
  • 多次發送同一個鍵也是合法的,即每個鍵有多個值,例如foo=value1&foo=value2.

因此,確定密鑰是否已被客戶端發送的可靠方法是計算客戶端發送了多少次。

If Request("FieldName") > ""此測試的一個特殊情況是檢查該鍵 ( )是否存在非空值。這最終可能是也可能不是您想要的;請注意,查詢字元串的基本行為比這更廣泛。

引用自:https://stackoverflow.com/questions/18110633