Get, Post에 대한 간략한 설명
웹에서 Form에 입력된 데이터를 전송하는 방법에는 두가지가 있습니다. Get과 Post방법인데요, 이 둘다 각 자 특징과 장단점이 존재하기에 상황에 따라 선택적으로 사용되어집니다.
- Get : 이 방법은 웹 주소 뒤에 데이터를 붙여서 전송하는 방법입니다. Get은 Post보다 빠르지만, 보통 데이터의 전송량이 Post방식보다 작고, 웹 주소에 데이터가 노출되기에 누구나 전송되는 데이터를 볼 수 있습니다. 따라서 아이디나 패스워드를 Get방식으로 전송하는 것은 옳바르지 못합니다.
하지만 Get방식은 주소에 데이터가 포함되어 있기때문에, 해당 페이지를 그대로 북마크할 수 있으며, 주소만 저장해둬도 해당 페이지를 그대로 재방문할 수 있다는 점입니다. - Post : Post방식은 HTTP 헤더에 전송데이터를 포함시켜 전송하는 방법입니다. 주소가 노출되지 않기 때문에 아이디, 패스워드 또는 노출되지 말아야할 정보를 전송하는데 적합한 방식입니다.
- 위의 Get과 Post방식을 정하는 방법은 다음과 같습니다. 예를 들어 Post를 사용한다고 하면 아래와 같습니다. Get을 사용하고 싶다면, Post를 Get으로 변경하면됩니다.
<form method="post" action="receive.php">
Name : <input type="text" name="name">
<input type="submit" value="Send">
</form>
PHP에서 Form값 전달하기
전송된 데이터를 전송받는 방법은 두가지로 나뉩니다.
- 이전 버전의 PHP에서는 Post나 Get으로 전송된 데이터를 자동으로 변수화하기 때문에, 바로 일반 변수처럼 사용할 수 있었습니다. 하지만, 이로인한 보안 문제가 발생하면서 이 방법이 기본적으로 Disabled되었고 'register_globals=Off'라는 옵션이 php.ini파일에 추가되었습니다. 이 옵션의 값을 Off에서 On으로 변경하였을 시, 예전처럼 PHP가 전송되어져 온 값을 자동으로 변수화 합니다.
echo $name; //전송된 name값을 바로 사용할 수 있다. - PHP 4.X 버전 부터는 'register_globals=Off' 옵션이 추가되고, 옵션값이 off인 상태에서는 전송된 값을 바로 변수처럼 쓸 수 없습니다. (이 방법이 더 권장되고있습니다.)
대신 다음과 같이 전송된 데이터를 읽어들일 수 있습니다.
$HTTP_GET_VARS['name']; 또는 $_GET['name'];
$HTTP_POST_VARS['name']; 또는 $_POST['name'];
체크박스와 같이 배열로 데이터가 전송되어야 하는 경우 다음의 경우를 조심합니다.
- checkbox나 select문의 name 속성 값을 줄 때 마지막에 '[]'를 붙여주어야합니다. 그렇지 않은 경우 모든 데이터가 배열로서 전송되지 않습니다.
- 받을 때는, $_GET[이름][첨자]로 참조합니다.
소스는 다음과 같습니다.
send.html
<form method="get" action="receive.php">
Favorites : <br>
<select name="favorites[]" multiple>
<option>Internet Surfing
<option>Playing Games
<option>Reading books
</select>
<input type="submit">
</form>
receive.php
<?
$size = count($_GET[favorites]);
for($i =0; $i < $size; $i++)
echo $_GET[favorites][$i] . "<br>";
?>