PHP 프로그래밍

본문 바로가기
사이트 내 전체검색


Web Programming >> PHP Programming
[목차]
제2장 PHP의 기초 문법

    3. 폼을 통한 변수의 전달

1. 폼을 통해 전달된 값의 사용

C나 Perl로 CGI 프로그래밍을 해본 경험이 있다면 폼(Form)을 통해 CGI 프로그램으로 넘어온 값들을 어떻게 변수로 사용하는지 이해하고 있을 것이다. C나 Perl의 경우 사용자가 폼에 입력한 값을 CGI 프로그램으로 전송하면 해당 프로그램에서는 사용자가 입력한 값과 그 값을 담을 변수를 만들어 사용하기 위한 파싱(parsing)이라고 하는 과정을 거쳐야 한다.

 

C나 Perl에서는 파싱과정을 반드시 거쳐야만이 사용자가 입력한 값을 사용할 수 있게 되는데 반해 PHP에서는 별도의 파싱 과정이 필요 없기 때문에 폼을 통한 변수의 전달 과정이 매우 단순하게 되어 있다. 이것은 PHP가 다른 언어와 비교해 매우 뛰어난 장점으로 프로그래밍의 어려움과 개발 시간을 크게 덜어주는 중요한 이유가 되기도 한다.

이제 PHP에서 폼을 통해 넘어온 값들을 다루는 방법에 대해 알아보자.

우선 아래의 예제를 보자.

 

 

 <html>

 <body>

 

 <form method="post" action="formcgi.php3?code=test&table=board1">

 이름을 입력하세요 : <input type="text" name="username">

 <input type="submit" value="전송">

 </form>

 

 </body>

 </html>

 

[예제1.11] 폼을 통한 입력값의 전달

 

위의 코드는 [그림1.3]과 같이 사용자로부터 이름을 입력받기 위한 HTML 파일이다. 게시판이나 방명록, 회원 가입 등 대부분의 CGI 프로그램에서 보았을 것이다.

 

사용자가 이름란에 자신의 이름을 입력하고 [전송] 버튼을 누르면 사용자가 입력한 값들이 [예제1.11]의 3행에서 action으로 정해진 formcgi.php3라는 스크립트로 전달된다. 그러면 formcgi.php3에서는 4행의 사용자가 입력한 폼의 이름, 즉 4행의 username이라는 이름을 갖는 변수($username)가 생기고 이 변수에 사용자가 입력한 값(그림 1.3에서의 "이승혁"이라는 값이 할당되는 것이다.

 

무척 간단하지요!!

 

그러면 [그림1.3]에서 사용자가 입력한 값을 알아내기 위해 다음과 같은 formcgi.php3 파일을 만들어 결과를 확인해 보자.

 

 <?

 echo("당신의 이름은 <b>$username</b> 입니다.<p>");

 ?>

폼으로부터 전달된 값을 출력하려면 echo() 함수를 이용하여 변수 $username을 출력하면 된다. 브라우저에서는 [그림1.4]와 같이 출력된다.

 

위와 같이 사용자가 입력한 값을 전달받을 때에는 폼을 통해 직접 입력을 받는 POST 방식과 예제 3행의 action="formcgi.php3?code=test&table=board1"과 같이 물음표(?) 뒤에 변수와 그 변수의 값을 = 로 구분하여 직접 url에 붙여 전달하는 GET 방식이 있다.

GET 방식의 경우 변수를 여러 개 전달해야 할 경우 &로 구분하여 계속 적어주면 된다. 그 결과 formcgi.php3에는 변수 $username뿐 아니라 변수 $code가 정의되고 그 변수에는 test가 저장되며 $table이라는 변수에는 board1이라는 값이 저장된다. 이러한 CGI 구동 방식은 C나 Perl에서와 같다.

 

2. POST와 GET 방식을 통한 값의 전달

한편 PHP에서는 POST방식이나 GET 방식을 통해 전달된 값을 각각 $HTTP_POST_VARS 변수와 $HTTP_GET_VARS 변수에 자동적으로 저장한다.

이 경우는 PHP를 아파치 웹서버의 모듈로 컴파일 하여 설치할 때의 환경 설정 부분에서 Enable variable tracking by default?(yes/no) 라는 물음에 Yes를 선택해야 변수의 사용이 가능하다. 이 $HTTP_POST_VARS와 $HTTP_GET_VAR 변수는 참조키와 값을 함께 갖는 연관 배열이다. 이제 아래와 같은 코드를 formcgi.php3에 추가하여 이 배열들에 어떠한 값들이 저장되어 있는지, 즉 어떤 값들이 GET 방식과 POST 방식을 통해 전달되었는지를 확인할 수 있다.

 

 

 <?

 echo("당신의 이름은 <b>$username</b> 입니다.<p>");

 

 echo("POST Method로 넘어온 변수명과 변수값은 아래와 같습니다.<br>");

 while(list($key, $value) = each($HTTP_POST_VARS)) {

    echo("변수명은 : $key - 변수의 값은 : $value<br>");

 }

 

 echo("<p>GET Method로 넘어온 변수명과 변수값은 아래와 같습니다.<br>");

  while(list($key, $value) = each($HTTP_GET_VARS)) {

     echo("변수명은 : $key - 변수의 값은 : $value<br>");

  }

 ?>

 

[예제1.12] 내장 변수 $HTTP_POST_VARS과 $HTTP_GET_VARS를 통한 값의 전달

 

※ GET 방식과 POST 방식에 대해

사용자가 텍스트박스와 같은 사용자 입력 양식에 입력한 값은 다음과 같이 <FORM>태그내의 "METHOD" 속성에서 지정한 방식으로 해당 파일에 전송된다.

 

<FORM METHOD="GET(or POST)" ACTION="http://www.kunsan.ac.kr/test.cgi">

 

이때 METHOD의 속성을 "GET" 혹은 "POST"로 지정하느냐에 따라 GET 방식 혹은 POST 방식이라고 한다.

위에서 METHOD의 속성을 "GET"으로 지정하면 사용자가 전송 버튼을 클릭했을 때 ACTION 속성의 값으로 지정한 파일로 사용자가 입력한 값들이 전송되는데, 이때 이입력값들은 환경변수(QUERY_STRING)

에 저장되어 전송된다. 즉, "list.html?code=board"의 예처럼 "파일명?변수=값"의 형태로 URL을 통해 입력 값들이 전달된다. 이런 GET 방식은 보통 게시판에서 페이지 수를 전달하거나 많지 않은 양의 값을 전달할 때 사용한다.

한편 METHOD 속성의 값을 "POST"로 지정하면 사용자가 입력한 값은 표준 입력(standard input : stdin)을 통해 전달된다. 따라서 POST 방식을 이용하는 경우에는 GET 방식과 달리 전송되는 데이터의 크기에 제한이 없다.

GET 이나 POST 방식 모두 데이터를 전송할 때 인 코딩을 거치게 되므로 다시 전송 받은 데이터를 해독하려면 디코딩 과정을 거쳐야 한다. 그러나 PHP에서는 별도의 디코딩 과정이 필요 없다.

 

[예제1.12]의 5-7행, 10-12행의 코드를 보면 이 책에서 아직 다루지 않은 함수가 나오는데 간단히 설명하기로 한다. each() 함수는 연관 배열의 참조키와 값을 분리하여 리턴하고 배열 원소의 현재 위치를 다음 원소의 인덱스로 이동한다.

 

list() 함수는 each() 함수가 분리하여 넘긴 참조키와 값을 각각의 변수 $key와 $value에 담에 출력한다. 여기서 whileans이 쓰인 것은 해당 배열이 가진 모든 원소에 대하여 위와 같은 과정을 반복하라는 의미가 되어 결국 배열에 담긴 모든 값들이 변수 이름과 값의 형태로 출력이 된다. 함수에 대한 내용은 다음장 에서도 자세히 다루게 될 것이다.

2. 폼입력 화면과 PHP 프로그램이 분리된 경우
파일명 : form.html

 <html>
 <body>
 <form method="post" action="formcgi.html?code=test&table=board1">
 이름을 입력하세요 : <input type="text" name="$username">
 <input type="submit" value="전송">
 </form>
 </body>
 </html>

파일명 : formcgi.html <? echo("입력한 수는 <b>$username</b> 입니다.<p>"); ?>
3. 폼입력 화면과 PHP 프로그램이 하나인 경우
파일명 : form1.html
<?
if($code != "test") {
?>
 <html>
 <body>
 <form method="post" action="form1.html?code=test&table=board1">
 이름을 입력하세요 : <input type="text" name="$username">
 <input type="submit" value="전송">
 </form>
 </body>
 </html>

<?
}
else {

 echo("입력한 수는 <b>$username</b> 입니다.<p>");
} 
?>

문제 1 : 한 수를 입력받고 양수,음수,0을 판단하는 프로그램을 작성하시오
파일명 : form.html

 <html>
 <body>
 <form method="post" action="formcgi.html?code=test&table=board1">
 이름을 입력하세요 : <input type="text" name="su">
 <input type="submit" value="전송">
 </form>
 </body>
 </html>



파일명 : formcgi.html

<?
 echo("입력한 수는 <b>$su</b> 입니다.<p>");
 
 $su = intval($su);   //정수형으로 변환

 if($su > 0) echo("<b>양수</b>입니다.");
  else if($su < 0) echo("<b>음수</b>입니다.");
  else echo("<b>0</b>입니다.">
?>

문제 2 : 두수를 입력받고 입력받은 두수의 덧셈, 뺄셈, 곱셈, 나눗셈을 하는 프로그램을 작성하시오

문제 3 : 점수를 입력받고 수,우,미,양,가를 평가하는 프로그램을 작성하시오

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.