폼에서 송신된 텍스트를 받는 방법에 대한 내용이다. 텍스트(문자열)를 폼(form)에서 송신하고 데이터를 화면에 출력하는 방법을 먼저 배운다.
텍스트 송신
웹 서버와 클라이언트 소프트웨어(웹 브라우저 등)는 HTTP 헤더를 사용해 보이지 않게 메시지를 교환하고 있다. 웹 브라우저에서 송신된 데이터는 이 헤더 정보(요청 헤더)에 할당되어 웹 서버에 전달한다. 요청 헤더는 문자열로 구성되어 있고 각 데이터를 취득하는 방법은 PHP에서 제공된다.
웹 브라우저에서 웹 서버에 데이터를 송신하는 방법은 GET 방식과 POST 방식이 있다. JavaScript와 HTML5를 공부할 때에도 배운 내용일 것이다. 문의하는 폼이나 설문 조사 폼, 게시판의 투표 폼 등과 같이 전송 버튼(submit)을 클릭하여 데이터를 송신하려면 POST를 사용한다. POST는 텍스트뿐만 아니라 이미지 등의 바이너리 파일을 송신할 수있다. GET은 검색 엔진의 검색 결과 URL처럼 링크 부분에 데이터를 추가하여 송신하는 경우 사용한다.
송신 폼(form)
데이터를 송신하기 위해 HTML 파일로 폼의 뼈대를 만들어주고, PHP 파일을 따로 만들어 데이터를 수신하고 출력하는 기능을 구현한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<html>
<head>
<title>텍스트 송신 테스트</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font size="4">텍스트 송신 테스트</font>
<form name="form1" method="post" action="view.php">
이름:<br>
<input type="text" name="name"><br>
<input type="submit" value="송신">
</form>
</body>
</html>
|
cs |
먼저 위와 같이 HTML 파일로 폼의 뼈대를 만든다. 폼 태그 안의 action 옵션에 기능을 구현할 view.php 파일을 미리 연결시켜준다.
데이터 받기
1
2
3
4
5
6
7
8
9
10
|
<html>
<head>
<title>PHP 테스트</title>
</head>
<body>
<?php
print $_POST["name"]." 님 안녕하세요!";
?>
</body>
</html>
|
cs |
위와 같이 PHP 파일을 완성하고 데이터를 송신하면 view.php 안에 작성된 코드가 실행이 된다. 코드에서 송신된 텍스트 데이터를 글로벌 변수에서 취득할 수 있다.
변수 | 의미 |
$_GET | GET 메서드로 송신된 데이터를 할당 |
$_POST | POST 메서드로 송신된 데이터를 할당 |
$_REQUEST | GET 또는 POST로 송신된 데이터를 할당 |
위에 표에 나와있는 것처럼 GET 방식은 $_GET에 POST 방식은 $_POST에 POST든 GET이든 관계없이 취급할 때는 $_REQUEST를 사용한다.
데이터를 참조하려면 입력란의 input 태그의 name 속성을 $_POST의 키로 지정해 주어야 한다. 이 경우에 위에 있는 HTML 문서의 name 속성에 맞춰서 $_POST["name"]으로 송신받은 데이터를 참조할 수 있다.
GET으로 송신
웹 브라우저에서 웹 페이지를 열람할 때에는 요청 메서드로서 GET이 송신된다. 이때 URL에 정해진 형식으로 데이터를 추가하면 POST 처럼 데이터를 웹 서버에 송신할 수 있다. POST와 같이 메서드로 지정할 필요없이 URL의 마지막에 '?'를 붙여서 키와 데이터를 '='로 연결하면 된다.
여러 개의 데이터를 송신할 때는 '&'를 사용해 키와 데이터를 추가한다. 송신할 수 있는 데이터의 양은 웹 서버의 설정에 따라 다르지만 그다지 크지 않기 때문에 용량이 큰 경우에는 POST를 사용해야 한다.
1
2
|
URL?키=데이터&키=데이터&키=데이터
http://localhost/view.php?name=HongGilDong&gender=male
|
cs |
위와 같이 ?다음에 붙는 name=HongGilDong&gender=male이 그것이다.
주의해야 하는 것은 ?다음에 URL에 허용되는 문자만 사용할 수 있다. 허용문자는 영어 대소문자, 숫자 외에 일부 특수문자들이 있다. 한글과 같이 멀티바이트 문자를 데이터로 지정하면 문자열이 깨질 수 있다. 따라서 부호화(Encode, 엔코드) 과정을 거쳐야 한다. POST에 경우 자동으로 부호화가 되기 때문에 문제가 없다.
멀티바이트 인코드 처리를 쉽게 할 수 있는 방법으로는 rawurlencode 함수를 사용하는 방법이 있다. 할당하려는 변수에 rawurlencode함수를 넣고 그 인수에 처리하고 싶은 문자열을 지정하면 부호화한 문자열을 리턴해 준다.
1
2
3
|
<?php
$name = rawurldecode("홍길동");
?>
|
cs |
여러 행 텍스트
개행을 포함한 문자열을 여러 행으로 송신하는 방법이다. 받은 데이터에는 개행이 포함되어 있기 때문에 입력한 형태 그대로 개행이 되어 출력이 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<html>
<head>
<title>텍스트 송신 테스트</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font size="4">텍스트 송신 테스트</font>
<form name="form1" method="post" action="view.php">
이름:<br>
<input type="text" name="name"><br>
소개:<br>
<textarea name="introduce" cols="30" rows="5"></textarea><br>
<input type="submit" value="송신">
</form>
</body>
</html>
|
cs |
긴 문장을 송신하려면 HTML 파일에 textarea 태그가 필요하다. 그리고 PHP 파일에는 데이터를 표시하기 위한 코드를 추가해야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<html>
<head>
<title>PHP 테스트</title>
</head>
<body>
<?php
print $_POST["name"]." 님 안녕하세요!";
print "<br><br>";
print "본문 :<br>";
print nl2br($_POST["introduce"]);
?>
</body>
</html>
|
cs |
그리고 $_POST를 이용해 할당하게 만든다, HTML 파일 안에서는 br태그가 없다면 문장이 개행이되지 않는다. 따라서 nl2br 함수를 이용해서 자동 개행이 일어날 수 있도록 작성한다.
hidden 태그
hidden 태그는 입력란과는 다르게 데이터가 보이지는 않지만 화면 안에 포함되어 표시 중인 페이지에서 다음 페이지로 데이터를 가지고 다닐 수 있게 만든다.
HTML 파일에 input 태그에 type의 속성을 hidden으로 설정하면 데이터를 페이지에 표시하지 않고 송신할 수 있다. 이 태그를 사용하면 사용자가 화면에서 데이터를 볼 수 없도록 숨기고 다음 페이지로 송신을 할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<html>
<head>
<title>텍스트 송신 테스트</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font size="4">텍스트 송신 테스트</font>
<form name="form1" method="post" action="confirm.php">
이름:<br>
<input type="text" name="name"><br>
소개:<br>
<textarea name="introduce" cols="30" rows="5"></textarea><br>
<input type="submit" value="송신">
<input type="hidden" name="user_id" value="0001">
</form>
</body>
</html>
|
cs |
위의 HTML 파일에서 송신된 데이터를 확인 화면인 confirm이라는 이름의 PHP 파일에서 받는다. 송신된 데이터는 세 가지로 모두 POST로 송신이 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<html>
<head>
<title>PHP 테스트</title>
</head>
<body>
확인 화면
<form name="form1" method="post" action="view.php">
<?php
print $_POST["name"]." 님 안녕하세요!";
print "<br><br>";
print "본문 :<br>";
print nl2br($_POST["introduce"]);
?>
<br>
<input type="submit" value="확인">
<input type="hidden" name="name" value="<?=$_POST["name"]?>">
<input type="hidden" name="introduce" value="<?=$_POST["introduce"]?>">
<input type="hidden" name="user_id" value="<?=$_POST["user_id"]?>">
</form>
</body>
</html>
|
cs |
confirm.php 파일에서는 다시 form 태그를 사용하여 action 속성을 view.php로 송신하게 만든다. 실행을 하게되면 HTML 파일에서 내용을 적고 송신을 누르면 confirm.php가 실행이 되는데 이때 소스코드 보기를 사용하면 hidden 태그에 송신된 데이터가 설정이 되어 있는 것을 알 수 있다.
'프로그래밍 공부 > PHP' 카테고리의 다른 글
PHP - 풀다운 메뉴, 리스트 박스 그리고 쿠키 (0) | 2020.01.31 |
---|---|
PHP - 송신 버튼, 체크박스 그리고 라디오 버튼 (1) | 2020.01.30 |
PHP - HTTP 헤더, 메일 송신 그리고 정규표현 (0) | 2020.01.28 |
PHP - 날짜/시간 그리고 파일 조작 (0) | 2020.01.28 |
PHP - 배열 조작 (0) | 2020.01.22 |