PHP/포스팅

[PHP] GET 방식 폼 양식의 데이터 처리

짜집퍼박사(짜박) 2024. 12. 26. 00:03

PHP에서 GET 방식으로 데이터를 처리하는 방법은 데이터 전송, 데이터 수신 및 검증, 결과 출력의 3단계로 나뉩니다.

 

1. GET 방식이란?

GET 방식은 데이터를 URL의 쿼리 문자열(Query String)에 포함하여 전송하는 HTTP 요청 방식입니다.

 

특징

(1) URL에 데이터가 노출됨 (보안이 중요한 데이터에는 적합하지 않음).

(2) 북마크 가능: 전송된 데이터를 URL로 저장 가능.

(3) 데이터 길이 제한: URL 길이 제한(일반적으로 2000자).

(4) 빠르고 간단함: 페이지 이동과 함께 데이터 전달에 적합.

 

2. 흐름 설명

(1) 입력 폼 생성 (HTML)

사용자로부터 데이터를 입력받아 URL을 통해 서버에 전달.

(2) 데이터 수신 (PHP)

PHP의 $_GET 배열로 데이터를 처리.

(3) 결과 출력

수신된 데이터를 검증하여 처리하고 사용자에게 출력.

 

3. 예제 소스 코드

(1) index.php - 입력 폼

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>GET 방식 데이터 입력</title>
</head>
<body>
    <h1>GET 방식 데이터 입력</h1>
    <form action="process.php" method="GET">
        <label for="username">사용자 이름:</label>
        <input type="text" id="username" name="username" required>
        <br><br>
        <label for="age">나이:</label>
        <input type="number" id="age" name="age" required>
        <br><br>
        <button type="submit">전송</button>
    </form>
</body>
</html>

 

(2) process.php - 데이터 처리

<?php
// 데이터 수신
$username = $_GET['username'] ?? ''; // 사용자 이름
$age = $_GET['age'] ?? '';           // 나이

// 입력값 검증
if (empty($username) || empty($age)) {
    die('모든 필드를 입력해야 합니다.');
}

if (!is_numeric($age) || $age < 0) {
    die('유효한 나이를 입력하세요.');
}

// HTML 엔티티 처리 (XSS 방지)
$username = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');

// 결과 출력
?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>처리 결과</title>
</head>
<body>
    <h1>처리 결과</h1>
    <p>사용자 이름: <?= $username ?></p>
    <p>나이: <?= $age ?> 세</p>
    <br>
    <a href="index.php">돌아가기</a>
</body>
</html>

 

4. 코드 설명

(1) $_GET 배열

- $_GET은 URL에 포함된 데이터를 배열 형태로 저장.

- 데이터가 없으면 기본값을 지정

$username = $_GET['username'] ?? '';

 

(2) 입력 검증

- 필수 입력값 확인

if (empty($username) || empty($age)) {
    die('모든 필드를 입력해야 합니다.');
}

- 나이 데이터 검증

-- 숫자인지 확인 (is_numeric() 사용)

-- 음수가 아닌지 확인.

 

(3) HTML 엔티티 처리

- 사용자 입력 데이터를 그대로 출력하면 XSS 공격에 노출될 수 있음.

- htmlspecialchars()로 안전하게 변환

$username = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');

 

5. 실행 결과

(1) 입력 예시 (index.php)

- 사용자 이름: 홍길동

- 나이: 25

 

(2) 전송된 URL (process.php)

http://example.com/process.php?username=홍길동&age=25

 

(3) 출력 결과 (process.php)

<h1>처리 결과</h1>
<p>사용자 이름: 홍길동</p>
<p>나이: 25 세</p>
<a href="index.php">돌아가기</a>

 

6. 보안 고려사항

(1) XSS 방지

htmlspecialchars()로 데이터를 출력할 때 처리

(2) URL 길이 제한

GET 방식은 데이터 길이에 제한이 있으므로 대량의 데이터 전송에는 적합하지 않음.

(3) 중요 데이터 금지

비밀번호, 신용카드 정보와 같은 민감한 데이터는 절대 GET 방식으로 전송하지 않음.

(4) 데이터 검증

입력값 검증을 철저히 하여 악성 입력 방지.

 

7. GET 방식의 적합한 사용 사례

(1) 검색 엔진

URL에 검색어를 포함하여 공유 가능.

(2) 페이지네이션

현재 페이지 정보를 URL에 포함.

(3) 필터링 옵션

카테고리나 정렬 방식 등을 URL로 전달.

 

8. 실무 확장

- 데이터베이스 연동: 검색어를 기반으로 DB에서 데이터를 조회.

- AJAX 사용: 비동기적으로 데이터를 GET 방식으로 요청.

- 템플릿 엔진: HTML과 PHP를 분리하여 코드 관리 효율화.

 

With ChatGPT

'PHP > 포스팅' 카테고리의 다른 글

[PHP] CSRF 공격 방지  (0) 2024.12.26
[PHP] XSS 방지  (0) 2024.12.26
[PHP] POST 방식 폼 양식의 데이터 처리  (0) 2024.12.25
[PHP] 함수의 매개변수  (0) 2024.12.01
[PHP] 재귀 함수  (0) 2024.12.01