2009-09-05 2 views
0

몇 가지 체크 박스가 있는데 DB에 삽입하는 게으른 방법을 택하려고합니다.FORM 및 POST 배열의 확인란의 순서가 동일합니까?

POST 슈퍼 배열의 체크 박스 배열 (체크 박스 [])의 순서가 HTML 페이지의 순서대로 이루어지기를 원했습니다.

그렇지 않다면 나는 게으른 개발자가되는 것을 멈추게 될 것입니다!

도움 주셔서 감사합니다.

+0

내가 누락 될 수 있습니다 뭔가 될 것이다 제출의 순서 -I 종종 그렇지만 ... 게으른 게 어때? 제출 된 데이터에 어떻게 액세스하고 있습니까? 나는 $ cleanedVarName = htmlentities (trim ($ _ POST [ 'submittedVarName), ENT_NOQUOTES);)와 같은 것을 사용하는 경향이있다. 그러나 어떤 점에서는'$ variable'이'$ _POST ['variable ']', 틀림없이? –

답변

9

예, 17.13.4 Form content types of the HTML 4 specification을 참조하십시오. application/x-www-form-urlencoded의 경우 :

제어 이름/값은 문서에 표시된 순서대로 나열되어 있습니다. 이름은 =의 값과 분리되며 이름/값 쌍은 &으로 서로 구분됩니다.

그리고 multipart/form-data위한

:

부품이 대응하는 제어 문서 스트림에 나타나는 순서대로 처리 에이전트로 전송된다.

PHP의 매뉴얼에 같은 (How do I create arrays in a HTML <form>? 참조)

배열 키를 지정하면 HTML의 선택 사항입니다. 키를 지정하지 않으면 요소가 양식에 나타나는 순서대로 배열이 채워집니다.

+0

굉장합니다, 감사합니다 검보. :) – Abs

0

기술적으로 대답은 "예"이지만 액세스하는 방법, 실제로 액세스하는 방법에 따라 달라질 수 있습니다.

예를 들어 확인란에 체크 표시가 없으면 POST에 포함되지 않습니다. 브라우저에서 전송하지 않았기 때문입니다. 예, 다른 사람들은 여전히 ​​질서 정연하지만, 당신은 '게으름'속에서 그것을 설명해야합니다.

또한 'checkbox [1]', 'checkbox [2]'등과 같은 양식 필드 이름을 사용하여 작업하는 경우 이러한 순서도 예상 한 순서가 아닐 수 있습니다 PHP에 액세스하는 방법에 따라 달라집니다.

"$ checkbox [$ i]"를 (를) 보면서 "while $ i < $ number_of_known_checkboxes"를하는 것이 좋습니다. 그러나 "while $ i < count ($ checkbox)"를 사용하면 확인란이 선택되지 않은 채로 표시되고 foreach 루프를 사용하면 문제가 발생할 수 있습니다.

0

주의해야 할 것이 하나 있습니다. HTML 4 사양이 무엇이든간에 DOM에 표시된 순서대로 제출됩니다.

이 (잘못된) HTML을보십시오. 이 경우

<html> 
<head> 
    <title>Test Page</title> 
</head> 
<body> 
    <form name="f1" method="get" action="fostered.htm"> 
     <label>A <input type="checkbox" name="a" checked="checked" /></label> 
     <table> 
      <tbody> 
       <tr> 
        <td> 
         <label>B <input type="checkbox" name="b" checked="checked" /></label> 
        </td> 
       </tr> 
       <tr> 
        <label>C <input type="checkbox" name="c" checked="checked" /></label> 
       </tr> 
      </tbody> 
     </table> 
     <input type="submit" /> 
    </form> 
</body> 
</html> 

복종의 순서는 분석 중에 C의 체크 박스 "포스터 페어런트"때문에 그 테이블 셀 안에 있지 않기 때문에, A는, C, B 테이블의 시작 이전이어야한다.

물론 이것은 일반적으로 렌더링 된 페이지에 표시되지만 CSS는이를 마스크 할 수 있습니다.

HTML의 유효성을 검사하는 데 또 다른 좋은 이유가 있습니다.

C는 숨겨진 필드 된 경우 그래서, "숨겨진"입력 필드가 부모로 육성 해되지 않습니다 주목할 가치, A, B, C.