PHP에서 POST를 통해 동일한 이름의 여러 입력


119

게시 할 동일한 이름의 여러 입력을 가져온 다음 PHP에서 액세스 할 수 있습니까? 아이디어는 이것입니다. 다른 정보와 함께 무한한 수의 물리적 주소를 입력 할 수있는 양식이 있습니다. 여러 항목에 걸쳐 각 필드에 동일한 이름을 지정하고 해당 데이터를 게시물을 통해 제출하면 PHP가 액세스 할 수 있습니까?

예를 들어 "xyz"라는 이름의 한 페이지에 5 개의 입력이 있는데 PHP를 사용하여 액세스하려고합니다. 다음과 같이 할 수 있습니까?

    $_POST['xyz'][0]

그렇다면 양식을 통해 무한한 양의 정보를 보내고 "xyz"라는 이름의 항목 배열을 반복하여 서버에서 처리 할 수 ​​있으므로 내 삶이 10 배 더 쉬워 질 것입니다.

답변:


216

입력 이름 변경 :

<input name="xyz[]" value="Lorem" />
<input name="xyz[]" value="ipsum"  />
<input name="xyz[]" value="dolor" />
<input name="xyz[]" value="sit" />
<input name="xyz[]" value="amet" />

그때:

$_POST['xyz'][0] == 'Lorem'
$_POST['xyz'][4] == 'amet'

그렇다면 양식을 통해 무한한 양의 정보를 보내고 "xyz"라는 이름의 항목 배열을 반복하여 서버에서 처리 할 수 ​​있으므로 내 삶이 10 배 더 쉬워 질 것입니다.

이것은 아마도 잘못된 해결책 일 수 있습니다. 분명히 그것은 당신이 보내는 데이터에 달려 있습니다.


도와 주셔서 감사합니다. 이것이 내 질문에 대한 가장 완전한 대답이므로 대답으로 선택합니다. 그러나 Interstellar_coder의 답변도 좋지만 잘못 사용하면 잠재적으로 함정이 될 수 있다고 설명했습니다. 최대 항목 수를 제한하고이 양식에 대해 많은 유효성 검사를 수행 할 것이므로 여기에 설명되지 않은이 접근 방식에 내재 된 문제가없는 한 보안 문제가 발생하지 않아야합니다.
아담

10
@Adam : 질문을 다시 읽은 후, 이것은 완벽하게 접근 할 수있는 접근 방식입니다. 당신은 더 한 단계를 가고,이 할 수 있습니다 address[0][street] address[0][city] address[0][zip], address[1][street] address[1][city] address[1][zip]... 당신은 이러한를 읽을 수 있습니다 $_POST['address'][0]['city']예를 들어,
에릭

그러면 HTML 내에서 어떻게 이름이 지정됩니까? 그것은 잠재적으로 난이도를 상당히 완화시킬 것입니다. 내가 취하려고했던 접근 방식에는 l1 [], l2 [], city [], state [], zip [], zip4 []와 같은 이름의 여러 필드가 있습니다. 그런 다음 첫 번째 주소에 대해 각 필드에 $ i == 0을 사용합니다. 따라서 귀하의 접근 방식을 올바르게 이해한다면 아마도 다음과 같이 내 요소의 이름을 지정할 것입니다 : 도시 필드의 경우 name = "address [] [city]". 그 맞습니까?
아담

@Adam : 아마도. 난 당신이 먼저 내부의 인덱스를 배치 할 필요가 있다고 생각 []과 같은 생각 [0]. 이로 인해 HTML을 생성하기가 더 어렵지만 데이터는 PHP 측에서 읽기가 더 어렵지 않습니다.
Eric

여기서 내 마음에 떠오르는 질문은 필드가 배열 내에서 임의의 순서로 이동할지 여부입니다. 또는 양식에 배치 된 순서대로되어 있습니까 (일부 필드가 비어있는 경우에도)?
rajeev

38

HTML에서 이름에 대한 배열을 전달할 수 있습니다.

<input type="text" name="address[]" /> 

이렇게하면 PHP는 주소 배열을받습니다.


3
좋고 정답이어서 제가 투표 한 이유입니다. 당신은 그것에 대해 많이 설명하지 않았기 때문에 내 질문에 대한 대답으로 선택하지 않았습니다. (이전 질문 중 하나에서 알 수 있듯이) 잠시 동안 이것을 알아 내려고 노력했기 때문에 이것은 저에게 많은 도움이됩니다. 이전 접근 방식은 *로 구분 된 값으로 숨겨진 필드에 모든 입력을 추가하고 입력 필드를 재설정하는 것이었지만 이전에 추가 된 주소가 발견되면 삭제를 허용 할 수 있으므로이 접근 방식은 10 배 더 좋습니다. 올바르지 않습니다.
아담

빈 배열은 '0'인덱스에 아무것도없는 POST '처리 된 1의 개수를 가지므로주의하십시오. 'empty'키워드를 사용하여 확인해야합니다 if (! empty ($ arrayName)) {// do something}
Fi Horan

10

Eric의 대답은 맞지만 문제는 필드가 그룹화되지 않았다는 것입니다. 함께 속한 여러 거리와 도시가 있다고 상상해보십시오.

<h1>First Address</h1>
<input name="street[]" value="Hauptstr" />
<input name="city[]" value="Berlin"  />

<h2>Second Address</h2>
<input name="street[]" value="Wallstreet" />
<input name="city[]" value="New York" />

결과는

$POST = [ 'street' => [ 'Hauptstr', 'Wallstreet'], 
          'city' => [ 'Berlin' , 'New York'] ];

주소별로 그룹화하려면 Eric이 댓글 섹션에서 언급 한 내용을 사용하는 것이 좋습니다.

<h1>First Address</h1>
<input name="address[1][street]" value="Hauptstr" />
<input name="address[1][city]" value="Berlin"  />

<h2>Second Address</h2>
<input name="address[2][street]" value="Wallstreet" />
<input name="address[2][city]" value="New York" />

결과는

$POST = [ 'address' => [ 
                 1 => ['street' => 'Hauptstr', 'city' => 'Berlin'],
                 2 => ['street' => 'Wallstreet', 'city' => 'New York'],
              ]
        ]

0

이것을 찾는 다른 사람들을 위해-입력 이름에 키 값을 설정할 수 있다는 점에 주목할 가치가 있습니다. 동일한 이름 속성을 가진 POSTing Form Fields 의 답변 덕분에 을 따옴표없이 문자열이나 정수를 상호 수도 있습니다.

대답은 PHP로 돌아 오는 키 값을 신경 쓰지 않는다고 가정하지만 name=[yourval]기존 레코드를 참조 할 수 있도록 설정할 수 있습니다 (문자열 또는 정수).


직접 구문 분석하는 것은 말도 안됩니다. 이것이 필요할 것이라는 시나리오는 없습니다.
Javid

0

그것은 될 수 있습니다:

echo "Welcome".$_POST['firstname'].$_POST['lastname'];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.