이중 form 태그를 사용했다면 데이터는 어떻게 보내지나?

이건 팁도 아니고 그냥 실험수준의 글이다. 한 6,7년전에 php에 한창 재미가 들렸을 때 했던 뻘 짓 중 하나.

다음과 같은 코드가 있다.

//test.php
<?
print_r($_POST);
?>
<form name=f1 method=post action=”test.php”>
<input type=”hidden” name=”aaa” value=”11″>

<form name=f2 method=post action=”test.php”>
<input type=”hidden” name=”bbb” value=”22″>
<input type=”submit” value=”Submit22″>
<input type=”hidden” name=”ddd” value=”44″>
</form>

<input type=”hidden” name=”eee” value=”55″>

<form name=f3 method=post action=”test.php”>
<input type=”hidden” name=”ccc” value=”33″>
<input type=”submit” value=”Submit33″>
</form>

<input type=”submit” value=”Submit11″>
</form>

즉, 1개의 form태그 안에 2개의 form이 들어가 있다. 이런 코딩을 할리는 없겠지만, 모든 뻘짓은 애초에 재미에 그 기반을 둔다.

사용자 삽입 이미지

미리보면 이런 이미지다. 여기에서 각 버튼 들을 눌러보면 어떤 답이 나올까?

 

 

정답

Submit22 :  Array ( [aaa] => 11 [bbb] => 22 [ddd] => 44 )

Submit33 : Array ( [ccc] => 33 )

Submit11 : Array ()

 

즉, submit 버튼을 누르면  form 태그로 둘러 쌓인 input값들을 보내지만, /form 태그로 닫힌 그 이전 값은 보내지 못한다.
설사 자신이 속한 form을 닫은게 아니더라도 말이다.
반대로 /form태그로 막히지 않은 영역의 input값은 설사 자신이 직접 속한게 아니더라도 보내버린다.

 

글쓴이 : Draco (https://draco.pe.kr)
크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 6개

  1. W3C는 nested form 의 동작에 대한 규정을 하지 않고 있습니다. 즉 어떻게 동작할지는 순전히 브라우저 벤더 맘대로라는 거죠. 대체로 inner form이 outer form의 일부로 편입되는 식으로 구현되는 것 같습니다. XHTML에서는 form내에 직접 form을 넣는 것은 문법상 불가능하고, inner form을 적당한 다른 element를 통해 넣어야 합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.