如何检查VBScript中是否存在POST提交字段?

ref*_*med 6 vbscript asp-classic

提交表单后,如果存在特定字段,如何检查服务器端?例如:

If [Exists] Request("FieldName") Then
    ...
End If
Run Code Online (Sandbox Code Playgroud)

Tom*_*lak 21

If Request("FieldName").Count > 0 Then
    ...
End If
Run Code Online (Sandbox Code Playgroud)

或者,简而言之:

If Request("FieldName").Count Then
    ...
End If
Run Code Online (Sandbox Code Playgroud)

背景:

  • Request集合是神奇的,只要它在您尝试访问不属于请求的键时不会引发错误 - 但.Count对于不存在的键,它将为0.
  • 在URL编码的查询字符串中,发送没有值的密钥是合法的 foo&bar&baz
  • 多次发送相同的密钥也是合法的,即每个密钥有多个值,例如foo=value1&foo=value2.

因此,确定客户端是否已发送密钥的可靠方法是计算客户端发送密钥的次数.

此测试的一个特例是检查该键是否存在非空值(If Request("FieldName") > "").这可能是你想要的,也可能不是你想要的; 请注意,查询字符串的基本行为比这更广泛.

  • +1.这是应该使用的方法. (6认同)

Ano*_*nJr 12

检查它是否为空.有几种不同的方式,但我经常使用的方法是:

If Request("FieldName") <> "" Then
 'etc.
End If
Run Code Online (Sandbox Code Playgroud)

如果我可能根据上下文从一个或另一个获取变量,我通常使用以下代码之一的变体显式检查FormQueryString集合:

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
Run Code Online (Sandbox Code Playgroud)

或嵌套的If ...然后:

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
Run Code Online (Sandbox Code Playgroud)

如果我确切地知道它来自哪个集合,我将专门检查该集合.原因是我想确保它从我期望它来自的地方拉出我期望的东西.我不希望有人Form通过QueryString在我不期待的时候发送一些东西来覆盖价值.

来自MSDN:

如果指定的变量不在前五个集合之一中,则Request对象返回EMPTY.

通过调用Request(变量)而不使用集合名称可以直接访问所有变量.在这种情况下,Web服务器按以下顺序搜索集合:

  • 请求参数
  • 形成
  • 饼干
  • ClientCertificate
  • ServerVariables

如果多个集合中存在具有相同名称的变量,则Request对象将返回该对象遇到的第一个实例.

强烈建议在引用集合成员时使用全名.例如,而不是Request.("AUTH_USER")使用Request.ServerVariables("AUTH_USER").这允许服务器更快地定位项目.

  • 该字段可能存在,但值可能只是空白.正确的方法是Tomalak的下面. (2认同)