PHP 5 Form Handling


PHP 수퍼전역변수(superglobals) $_GET 와 $_POST form-데이타를 수집하는데 사용된다.


PHP - A Simple HTML Form

아래의 예는 두 개의 input 필드와 submit  버튼으로 구성된 간단한 HTML form을 표시한다.:

Example

<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

Run example »

사용자가 위의 form 에 내용을 입력하고 submit  버튼을 클릭하면, 폼 데이타는 "welcome.php"라는 이름의 PHP 파일에 처리를 위해 전송된다. 폼 데이타는 HTTP POST 방법으로 전송된다. 

제출된 데이터를 표시하려면, 모든 변수를 단순히 echo 할 수 있다.  "welcome.php" 는 다음과 같다.:

<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html>

출력은 다음과 같을 수있다.:

Welcome John
Your email address is john.doe@example.com

같은 결과를 HTTP GET method 를 사용하여 수행할 수도 있다. :

Example

<html>
<body>

<form action="welcome_get.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

Run example »

그리고 "welcome_get.php" 는 다음과 같다:

<html>
<body>

Welcome <?php echo $_GET["name"]; ?><br>
Your email address is: <?php echo $_GET["email"]; ?>

</body>
</html>

위의 코드는 매우 간단하지만, 가장 중요한 것이 빠져있다. 악성 코드로부터 스크립트를 보호하기 위해서는 폼 데이터의 유효성 검사를 해야합니다. 

 PHP forms 을 처리할때 보안을 생각하시오!

 이 페이지는 어떤 유효성 검사도 갖고 있지 않고, 단지 어떻게 폼 데이타를 보내고 받는지를 보여준다.

 그러나, 다음 페이지는 보안을 염두에 두고 PHP 폼을 처리하는 방법을 보여준다. 폼 데이타의 적절한 유효성 검사는 해커와 스팸으로부터 양식을 보호하는데 중요한다 !



GET vs. POST

GET 과 POST 모두 배열(e.g. array( key => value, key2 => value2, key3 => value3, ...))을 생성합니다. 이 배열은 key/value 쌍을 보유하며, keys 는 폼 을 컨트롤하는 이름을, values 는 사용자로부터 입력된 자료를 말합니다.

GET 과 POST 모두  $_GET 과 $_POST 로 처리디며, 이들은 슈퍼전역변수로서 범위에 상관없이 항상 접근 가능하며, 특별한 작업을 수행할 필요 없이 함수, 클래스, 또는 파일을 접근할 수 있습니다. 

$_GET 는 URL 파라미터를 통해서 현재 스크립트에 전달된 변수의 배열이다. 

$_POST 는 HTTP POST 방법을 통해서 현재 스크립트에 전달된 변수의 배열이다. 


GET를 사용하는 경우?

GET 방식으로 폼에서 전달되는 정보는 모든 사람에게 보여집니다(모 든 변수 이름과 값들이 URL에 표시됩니다.).
GET 는 또한 보낼 수 있는 정보의 양에 제한이 있습니다. 그 한계는 약 2000 문자 정도이다.
그러나, 변수들이 URL에 표시됨으로, 그 페이지의 북마크가 가능하며, 어떤 경우에는 이것이 유용하다. 

GET 는 중요하지 않은 자료를 보내는데 유용할 것 이다. 

Note: GET 는 암호나 민감한 정보를 보내는 데는 사용해서는 안된다!


POST를 사용하는 경우?

POST 방식으로 폼에서 전송되는 정보는 다른 사람에게 보이지 않으며 (모든 변수와 값들은 HTTP 요청 본문에 포합된다), 보낼 수 있는 정보의 양에 제한이 없다

더군다나 POST는 서버에 파일을 업로드 하는 동안에 멀티-파트 바이너리 입력(multi-part binary input)에 대한 지원과 같은 고급 기능도 지원합니다. 

그러나, 변수가 URL에 표시되지 않으므로, 페이지 북마크가 불가능하다

 개발자들은 폼 자료를 보내는데 POST  를 선호한다.