폼이 PHP 스크립트로 전달될때, 그 폼안의 정보가 스크립트내에서 자동적으로 유효해진다. 이 정보에 접근할 수 있는 많은 방법이 제공된다. 예를 들면:
Example #1 단순한 HTML 폼
<form action="foo.php" method="post"> 이름: <input type="text" name="username" /><br /> 메일: <input type="text" name="email" /><br /> <input type="submit" name="submit" value="전송합니다!" /> </form>
특별한 설정과 개인적인 선호에 의해, HTML 폼으로부터 데이터를 접근할수 있는 많은 방법이 존재한다. 몇가지르 예를 들면:
Example #2 단순한 POST HTML 폼으로 부터 데이터에 접근하기
<?php // PHP 4.1.0부터 사용 가능 echo $_POST['username']; echo $_REQUEST['username']; import_request_variables('p', 'p_'); echo $p_username; // PHP 6부터 사용 불가. PHP 5.0.0부터, 이러한 긴 예약 변수는 // register_long_arrays 지시어로 비활성화 할 수 있습니다. echo $HTTP_POST_VARS['username']; // PHP 지시어 register_globals = on 일 경우에 사용할 수 있습니다. // PHP 4.2.0부터 기본값은 register_globals = off 입니다. // 이 방법을 사용하는 것은 권장되지 않습니다. echo $username; ?>
GET 폼을 사용하는 것은 적절한 GET 기선언 변수를 대신 사용할때를 제외하면 동일하다. GET은 QUERY_STRING (URL에서 '?'이후의 값)에도 적용이 된다. 따라서, 예를 들면 http://www.example.com/test.php?id=3는 $_GET['id']으로 접근할수 있는 GET 데이터를 포함한다. 또한 $_REQUEST와 import_request_variables()를 참고.
Note: $_POST 와 $_GET 같은 슈퍼전역 배열은 PHP 4.1.0 이후버전부터 사용되기 시작했다.
전에 설명한대로, PHP 4.2.0 이전에는 register_globals의 기본값이 on이였다. PHP 커뮤니티는 그 디렉티브 값이 off가 되어있다고 가정하고 적절하게 코딩하는 것을 추천하기 때문에 이 디렉티브값에 연연할 필요가 없다.
Note: magic_quotes_gpc 설정 디렉티브는 Get, Post, Cookie 값에 영향을 준다. 이 값이 켜져있으면, 그 값(It's "PHP!")은 자동적으로 (It\'s \"PHP!\")이 될것이다. 이 회피는 DB 입력을 위해 필요하다. 또한 addslashes(), stripslashes()과 magic_quotes_sybase를 참고한다.
PHP는 폼 변수가 쓰이는 환경안의 배열도 이해한다. (관련 faq를 참고) 예를 들면, 관련 변수를 함께 그룹화하거나, 다중 select 입력으로부터 값을 끄집어내기위해 이 기능을 사용할수 있다. 예로써, 자신에게 폼을 post하고 그 데이터를 출력해보자:
Example #3 좀더 복잡해진 폼 변수들
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
?>
<form action="" method="post">
이름: <input type="text" name="personal[name]" /><br />
메일: <input type="text" name="personal[email]" /><br />
맥주: <br />
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbräu</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" value="전송합니다!" />
</form>
form을 전달할때, 표준적인 submit 버튼 태그 대신 다음과 같이 image 태그를 사용할수 있다.
<input type="image" src="image.gif" name="sub" />
유저가 image의 어느곳에서 클릭하더라도 수행 폼은 두가지 추가적인 변수를 서버로 전송할것이다. sub_x와 sub_y. 이 변수는 image안에서 유저가 클릭하는 좌표를 갖는다. 실제로 브라우저에 의해 보내지는 변수명은 밑줄(_)이 아니라 마침표(.)를 포함한다. 그러나 PHP는 자동으로 마침표를 밑줄로 변환한다.
표준적으로, PHP는 스크립트내로 변수를 전달할때 변수명을 변경하지 않는다. 하지만, 점(마침표, full stop)은 PHP 변수명안에서 유효한 문자가 될수 없다는것에 주의해야 할것이다. 이에 유의하여 다음 코드를 보자:
<?php
$varname.ext; /* invalid variable name */
?>
현재, 해석기가 보게되는 것은 $varname이라는 변수와 그 뒤에 문자열 결합 연산자, 그 뒤에 벌거벗은 문자열(barestring) 'ext'이다. (즉, 따옴표로 둘러싸지 않은 문자열은 key나 예약된 단어와 일치하지 않음) 확실하게 이 결과는 원치 않은것이다.
이러한 이유로, PHP는 유입되는 변수명안의 점(.)을 밑줄(_)로 변경한다는것을 명심해야 한다.
PHP는 변수 타입을 결정하고 변수를(보통) 필요한 타입으로 변환하기 때문에, 어느 시간에 변수가 무슨 타입인지 알수가 없다. PHP는 변수가 무슨 타입인지 확인할수 있는 몇가지 함수를 제공한다. 그 함수들은 다음과 같다: gettype(), is_array(), is_float(), is_int(), is_object(), is_string(). 타입 챕터를 참고.