2011-02-11 6 views
0

私はdelphiで書かれたWebアプリケーションで作業しており、値の配列から値を取得するのに問題があります。フォームは次のようになります。同じ名前の投稿されたhtmlフォーム変数の配列へのアクセス[]

<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']を使用できます。デルファイでこれを行う方法があると思います。

お手数ですがお寄せいただきありがとうございます。

+1

角括弧表記は、PHPに固有のものであり、HTMLまたは私が知っ任意の他の言語とは何の関係もありません。 – Matthew

答えて

6

プロパティーはオブジェクトです。そのため、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[]'); 
関連する問題