访问具有相同名称[]的已发布html表单变量的数组

Mat*_*hew 0 html forms arrays delphi post

我正在使用delphi编写的Web应用程序,并且无法从值数组中获取值.表单看起来类似于:

<form method="post">
  <input type="hidden" name="keyword[]" value="1"/>
  <input type="hidden" name="keyword[]" value="2"/>
  <input type="hidden" name="keyword[]" value="3"/>
  <input type="submit" value="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)

如果这是一个具有唯一名称的单个输入,我可以使用以下方法提取数据:

var cKeyword : String ;
cKeyword := Request.ContentFields.Values['keyword'] ;
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样的东西:

var aKeywords : Array of String ;
aKeywords := Request.ContentFields.Values['keyword[]'] ;
Run Code Online (Sandbox Code Playgroud)

在PHP中你可以使用$aKeywords = $_POST['keyword'],我希望有一种方法可以在delphi中执行此操作.

提前感谢您提供的任何帮助.

Rob*_*edy 6

ContentFields属性只是一个普通的TStrings对象,因此它的Values属性总是返回一个string.当HTML表单具有多个具有相同名称的成功控件时,它们将全部返回,一个接一个地返回.这意味着该TStrings对象将具有多个具有相同Names值的条目.您需要遍历所有条目以查找具有匹配名称的条目.

这是一个可能有用的功能.

function GetArrayFieldValues(ContentFields: TStrings; const FieldName: string): TStringDynArray;
var
  i: Integer;
  Values: TStrings;
begin
  Values := TStringList.Create;
  try
    for i := 0 to Pred(ContentFields.Count) do
      if ContentFields.Names[i] = FieldName then
        Values.Add(ContentFields.ValueFromIndex(i));
    Result := Values.ToStringArray;
  finally
    Values.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

像这样称呼它:

aKeywords := GetArrayFieldValues(Request.ContentFields, 'keyword[]');
Run Code Online (Sandbox Code Playgroud)