3.02. POST 파라미터

HTTP POST 메소드로 전달된 파라미터를 읽는 방법을 알아보자.

<form method="post">
    name : <input type="text" name="name" />
    age : <input type="text" name="age" />
    <input type="submit" />
</form>

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = $_POST['name'];
    $age = $_POST['age'];

    echo "name is $name, age is $age";
}
?>

위 코드를 post.php 파일에 저장하고 브라우저에서 결과를 확인한다. name 란에 aaa를, age 란에 222를 입력하고 제출 버튼을 클릭한다.

name is aaa, age is 222

입력한 값이 하단에 출력된다.


http 메소드는 크게 9개가 있다. 이 중 브라우저에서는 GET과 POST 2개를 주로 사용한다.

  • GET은 데이터를 읽어올 때 사용하고 POST는 데이터를 저장하고, 수정하고, 삭제하는 역할을 한다.
  • GET 요청은 주소창에 파라미터를 담아서 서버에 요청을 보낸다.
  • POST 요청은 파라미터가 http 본문(body)에 실려서 서버로 전송되기 때문에 주소창에는 변화가 없다.

1~5번 줄은 아직 <?php 구문이 나오지 않았다. 이럴 경우 php 엔진은 일반 html 로 인식하고 특별한 처리를 하지 않는다.

<form method="post">
...
</form>

<form 으로 시작하고 </form> 으로 끝나는 HTML 은 서버로 데이터 전송 요청을 하기 위한 양식(폼 - form)이다.
<form> 태그 안에 입력 태그를 설정해 둔 후 제출(submit) 버튼을 누르게 되면 서버로 <form> 태그 안의 내용을 파라미터로 전달하는 POST 요청이 실행된다.
<form> 태그에서 http 메소드를 결정하는 것은 method='POST' 속성이다.

만약 method 속성이 없다면 기본 HTTP 메소드는 GET이다.

<form>

 <form> 태그는 method 속성이 없기 때문에 HTTP GET 메소드로 서버에 데이터를 전달한다.


<input 태그는 html에서 사용자 입력을 나타내는 태그다. name 속성을 키로 value 속성을 값으로 서버에 전달한다. name 속성을 생략하면 서버에 전달되지 않는다. value 속성을 생략하면 빈 문자열("") 이 전달된다.

<input type="text" name="name" />

$_SERVER['REQUEST_METHOD'] 는 PHP에서 요청 HTTP 메소드를 읽는다.

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  // HTTP 메소드가 POST일 때 실행되는 부분
}

요청 메소드 결과가 POST 일 때 if 문이 실행되어 바로 아래 코드 블럭이 실행된다.


POST 메소드로 요청되어 form 으로 전달되는 파라미터는 $_POST 로 읽을 수 있다.

$name = $_POST['name'];
$age = $_POST['age'];

$_POST 는 연관배열 타입이다. $_POST[파라미터이름] 형식으로 HTML에서 입력한 데이터를 읽어온다.

위 예제에서 <input type="text" name="name" /> 태그에 사용자가 입력한 값은 PHP의 $_POST['name'] 으로 읽는다.
<input type="text" name="age" /> 태그의 값은 $_POST['age'] 로 읽어온다.