2010-12-09 4 views
18

사용자가 무한 개수의 데이터 행을 입력하는 양식이 있습니다. 그들은 화면에 원하는만큼 행을 입력하여 양식에 도착합니다.POST의 입력 순서가 PHP의 배열 입력에 대해 보장됩니까?

<?php 
$numRows = $_GET['NUM_ROWS_REQUESTED']; 

?> 
<form method="post"> 
<?php 
for($i = 0; $i < $numRows ;$i++) { 
    $uuid = uniqid(); 
?> 

    <input type="text" name="MYDATA[<?php print $uuid; ?>][FIRST_NAME]" /> 
    <input type="text" name="MYDATA[<?php print $uuid; ?>][LAST_NAME]" /> 
<?php 
} 
?> 
</form> 

양식이 게시 될 때, 궁금 그리고 난 그들이 화면에 게시 된 것과 같은 순서가 정렬 될 것이라고 보장 할 수 있을지는 $_POST['MYDATA'] 배열에이 기록을받을 수 있습니다. 아니면 무작위로 생성 된 uniqid()을 통해 주문할 예정입니까?

정수 대신 고유 한 ID를 사용하는 이유는 시퀀스가 ​​쉬우므로 사용자가 행을 제거하고 해당 페이지에서 javascript를 사용하여 추가 행을 추가 할 수 있기 때문입니다. 충돌을 확인하는 것은 너무 어려울 것입니다.

+0

확실하지 않은 경우. 그것을 정렬하십시오. – DampeS8N

+0

@ DampeS8N별로 정렬 할 항목이 없습니다. 화면에 입력 할 때 입력 순서는 원하는 순서입니다. 시스템 날짜를 가져 오는 AJAX를하지 않고도 javascript가 자신의 PC 날짜를 사용하기 때문에 신뢰할 수 없습니다. 새 행을 만들 때 자바 스크립트의 기존 행을 분석하는 것을 피할 수 있기를 바랬습니다. –

+1

숨겨진 입력을 MYDATA [] [SORT_ORDER]'를 값으로 사용합니다. 또한 $ uuid로 카운터를 사용할 수도 있습니다. 여전히 UUID가 필요한 경우 서버가이를 생성하도록하거나 첫 번째 예제의 반대를 사용할 수 있습니다. 숨겨진 입력은 MYDATA [] [UUID]'와 $ uuid를 값으로 사용합니다. – ontrack

답변

9

W3 spec에는 양식의 값을 데이터 집합으로 조합해야하는 순서에 대한 규칙이 없으므로 기술적으로 확실하지 않습니다. 반면, 데이터가 소스 리스팅 순서로 제공되지 않은 사례 (수년 동안 수많은 OS의 수많은 브라우저에서)를 보지 못했습니다. 기본 (UI 생성) tabindex 값을 변경할 때 실제로 테스트하지 않았습니다.

값을받은 순서를 확인하기 위해받은 후에 배열 (asort)을 항상 정렬 할 수 있습니다.

6

HTML4.01으로 보증되며 (-urlencoded이지만/form-data와 동일하다고 가정 됨) 모든 현재 브라우저는 문서에 나열된 순서대로 양식 필드를 제출합니다.

그렇습니다. 임의의 uuid가 아닌 모양에 따라 주문됩니다.

+3

HTML5에서는 명시 적이 지 않지만 종종 " 양식 요소에 대한 "트리 순서"(DOM 구조) : http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#multipart-form-data – mario

관련 문제