상세 컨텐츠

본문 제목

PHP에서 Form값 전달받기

Web Development/Others

by thankee 2008. 7. 26. 06:51

본문

Get, Post에 대한 간략한 설명

웹에서 Form에 입력된 데이터를 전송하는 방법에는 두가지가 있습니다. Get과 Post방법인데요, 이 둘다 각 자 특징과 장단점이 존재하기에 상황에 따라 선택적으로 사용되어집니다.

  1. Get : 이 방법은 웹 주소 뒤에 데이터를 붙여서 전송하는 방법입니다. Get은 Post보다 빠르지만, 보통 데이터의 전송량이 Post방식보다 작고, 웹 주소에 데이터가 노출되기에 누구나 전송되는 데이터를 볼 수 있습니다. 따라서 아이디나 패스워드를 Get방식으로 전송하는 것은 옳바르지 못합니다.
    하지만 Get방식은 주소에 데이터가 포함되어 있기때문에, 해당 페이지를 그대로 북마크할 수 있으며, 주소만 저장해둬도 해당 페이지를 그대로 재방문할 수 있다는 점입니다.
  2. Post : Post방식은 HTTP 헤더에 전송데이터를 포함시켜 전송하는 방법입니다. 주소가 노출되지 않기 때문에 아이디, 패스워드 또는 노출되지 말아야할 정보를 전송하는데 적합한 방식입니다.
  3. 위의 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값 전달하기

전송된 데이터를 전송받는 방법은 두가지로 나뉩니다.

  1. 이전 버전의 PHP에서는 Post나 Get으로 전송된 데이터를 자동으로 변수화하기 때문에, 바로 일반 변수처럼 사용할 수 있었습니다. 하지만, 이로인한 보안 문제가 발생하면서 이 방법이 기본적으로 Disabled되었고 'register_globals=Off'라는 옵션이 php.ini파일에 추가되었습니다.  이 옵션의 값을 Off에서 On으로 변경하였을 시, 예전처럼 PHP가 전송되어져 온 값을 자동으로 변수화 합니다.
        echo $name; //전송된 name값을 바로 사용할 수 있다.
  2. 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>";
?>

관련글 더보기