2011-02-11 2 views
0

델파이로 작성된 웹 응용 프로그램에서 작업 중이며 값 배열에서 값을 가져 오는 데 문제가 있습니다. 양식이 비슷합니다 :이 고유 한 이름을 가진 단일 입력 된 경우동일한 이름의 게시 된 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[]'); 
관련 문제