웹프로그램 연구(VIII) Input.checkbox의 송신방법

[목차(도우미)]
이글은 외국인을 위해서도 한영으로 설명을 기술합니다.

How to post/get the state of input.checkbox?


<form method="POST">
<input type="checkbox" name="manofpro" value="1" checked>표시문자열
</form>
과 같은 경우에 체크박스(CheckBox)는 체크된 상태만 송신되고 미체크 상태는 송신에 가담되지 않는다. GET 송신의 경우라면 쿼리 문자열을 조작하는 자바스크립트를 이용하는 것도 방법이지만 체크박스가 많은 경우에는 그 방법도 간결하지 못하다.

여러가지 문헌 자료를 조사해 보았으나 초보적인 자료는 발견되어도 마음에 드는 자료가 발견되지 않았기 때문에 이와 같은 경우에 해결하는 방법을 연구해 보았다.

방법은 두개의 체크박스를 사용하여 각각의 상태를 부여하는 것이다. 물론 두개가 동시에 보이면 체크 조작에 의미가 없으므로 한개의 컨트롤은 비표시 설정이다. 그리고 약간의 트릭을 써서 같은 변수명을 사용하는 것이다.

How to:
1. Use two input.checkboxes, one of which is hidden style.
2. Specify same variable name, that is, array!
3. Notice the following.

<form method="POST">
<input type="checkbox" name="manofpro[]" value="1">this is to POST
<input type="hidden" name="manofpro[]" value="0" checked>
</form>
If first element is checked, two query will be sent, like below:
Ex) manofpro[0]=1&manofpro[1]=0
Otherwise, Ex) manofpro[0]=0

You can easily imagine that it is the first array element to analyze: manofpro[0].

펭귄들은 떼지어 다니는데 일가견이 있다.



만약에 첫번째 요소를 체크했다면 두개의 쿼리가 발행될 것이다.
Ex) manofpro[0]=1&manofpro[1]=0
그러면 첫번째 쿼리(manofpro[0])를 유효 문자열로 추출하면 된다.

만약에 첫번째 요소를 미체크로 두었다면 한개의 쿼리가 발행될 것이다.
Ex) manofpro[0]=0
이경우도 첫번째 쿼리(manofpro[0])를 유효 문자열로 추출하면 된다.

서버측에서 PHP를 사용한다면, 간단하게 예를 들어 다음과 같다.

$data = $_REQUEST['manofpro'];
//실제는 key를 이렇게 지정할 필요가 없다. 배열로 확인하면 된다.
if (is_array($data)) {$value = $data[0]}
else $value = $data;
value="1", "0"은 입맛에 맞게 고치면 된다.

Further Readings

추천할 만한 방법은 아니지만 두개의 input.checkbox 문제를 한개로 해결하는 방법도 있다. 그것은 소스코드를 재활용하지 못하는 것을 염두에 두고, 급한대로 발등의 불을 끄는 방식이라고 말할 수 있다. 서버측 스크립트에서 특정의 요청(REQUEST)를 받으면 1로 처리하고 받지 못하면 0으로 처리해 주는 것이다. 체크박스의 갯수만큼 처리문이 필요하다.

$data = $_REQUEST['manofpro'];
if ($data==1)) {$value = 1}
else $value = 0;

이런 방식은 개인에 따라서는 독창적이라고 할 수 있으나 재활용성은 0 이다. 재활용한다는 것은 소스 복제에 의한 활용이 아니라 참조에 의한 활용이다.
by 금메달.아빠 on 2011. 2. 16. 01:05