Доступ к массиву опубликованных переменных формы HTML с тем же именем [] - PullRequest
0 голосов
/ 11 февраля 2011

Я работаю над веб-приложением, написанным на delphi, и у меня возникают проблемы с получением значений из массива значений.Форма выглядит примерно так:

<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>

Если бы это был один вход с уникальным именем, я мог бы получить данные, используя это:

var cKeyword : String ;
cKeyword := Request.ContentFields.Values['keyword'] ;

Я ищу что-токак это:

var aKeywords : Array of String ;
aKeywords := Request.ContentFields.Values['keyword[]'] ;

В PHP вы можете просто использовать $aKeywords = $_POST['keyword'], я надеюсь, что есть способ сделать это в Delphi.

Заранее спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

6 голосов
/ 11 февраля 2011

Свойство 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;

Назовите это так:

aKeywords := GetArrayFieldValues(Request.ContentFields, 'keyword[]');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...