본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP form + 클래스 연동 완전 정리 — HTML 입력 폼과 Member 클래스 setter/getter 실전 패턴

by 왕진 2026. 7. 12.
반응형

 

 

Web Development · PHP OOP 실습

PHP form + 클래스 연동 완전 정리

HTML 입력 폼 → POST 전송 → Member 클래스 setter 저장 → getter 출력까지의 전체 흐름
시작 오늘 분석할 코드

HTML form으로 사용자 입력을 받아 POST 방식으로 전송하고, PHP의 Member 클래스에 setter로 저장한 뒤 getter로 꺼내 출력하는 OOP 실전 패턴이다. 두 파일(form.html + view.php)로 나뉘어 동작한다.

form.html — 입력 폼
<form name="form1" method="post" action="view.php"> 사용자ID : <input type="text" name="id"> <br> 사용자PW : <input type="text" name="password"> <br> 사용자PH : <input type="number" name="number"> <br> 사용자BD : <input type="date" name="birthday"> <br> <input type="submit" value="전송"> </form>
view.php — 클래스로 데이터 처리
class Member { private $id, $password, $number, $birthday; public function getID() { return $this->id; } public function setID($id) { $this->id = $id; } // ... getPassword/setPassword, getNumber/setNumber, getBirthday/setBirthday } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $member = new Member(); $member->setID($_POST['id']); $member->setPassword($_POST['password']); $member->setNumber($_POST['number']); $member->setBirthday($_POST['birthday']); print "아이디는 : " . $member->getID() . "<br>"; print "비밀번호는 : " . $member->getPassword() . "<br>"; print "전화번호는 : " . $member->getNumber() . "<br>"; print "생년월일은 : " . $member->getBirthday() . "<br>"; }
실제 출력 미리보기 (폼 입력 후)

입력 폼

사용자ID :
사용자PW :
사용자PH :
사용자BD :

view.php 출력 결과

아이디는 : hong123
비밀번호는 : pass1234
전화번호는 : 01012345678
생년월일은 : 1990-01-01
용어 핵심 용어 정리
method="post"폼 데이터를 HTTP 요청 body에 숨겨 전송. URL에 노출되지 않아 민감한 정보 전송에 적합
$_POSTPOST로 전송된 폼 데이터를 담는 PHP 슈퍼글로벌. $_POST['키명']으로 값을 읽는다
REQUEST_METHOD현재 HTTP 요청 방식을 담은 서버 변수. 'POST'면 폼 전송, 'GET'이면 일반 접근
action폼 데이터를 전송할 대상 파일 경로. action="view.php"면 view.php가 $_POST를 받는다
setter$_POST로 받은 값을 멤버변수에 저장하는 메서드. setID($_POST['id']) 형태로 연결
getter멤버변수에 저장된 값을 꺼내 출력하는 메서드. getID()로 $id 값을 반환
캡슐화$_POST 값을 클래스 안에 담아 관리. 나중에 setter에 유효성 검사 추가 가능
new Member()Member 클래스의 객체 생성. 이 객체가 폼 데이터를 담는 그릇이 된다
htmlspecialchars()특수문자(< > " ' &)를 HTML 엔티티로 변환. XSS 공격 방어. 출력 전에 반드시 적용
empty()변수가 빈 문자열·0·null·false·빈 배열인지 확인. 폼 필수 입력 체크에 자주 쓰인다

1 HTML form → PHP $_POST 연결 원리
input의 name 속성이 $_POST 키가 된다

폼의 name="id"로 입력한 값은 제출 후 PHP에서 $_POST['id']로 읽힌다. action="view.php"로 지정한 파일이 이 데이터를 받아 처리한다. name 속성과 $_POST 키명이 정확히 일치해야 값이 전달된다.

<input name="id">
POST 전송
$_POST['id']
setID()
getID()
※ input의 name 값이 $_POST 배열의 키가 된다. name이 없는 input은 전송되지 않는다.

2 REQUEST_METHOD 체크 — 왜 반드시 확인하는가
view.php가 직접 열릴 때와 폼 전송으로 열릴 때를 구분해야 한다

view.php를 브라우저 주소창에 직접 입력하면 GET 요청으로 열린다. 이때는 $_POST 데이터가 없으므로 $_POST['id']는 undefined가 된다. $_SERVER['REQUEST_METHOD'] === 'POST' 체크로 폼 전송인 경우에만 처리 로직을 실행해야 오류를 막을 수 있다.

if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 폼 전송으로 온 경우에만 실행 — $_POST 데이터가 있는 상태 $member = new Member(); $member->setID($_POST['id']); // ... } // GET으로 직접 접근 시 이 블록은 실행되지 않아 오류 없이 빈 페이지 표시

3 $_POST를 클래스에 담는 이유
직접 출력하는 것보다 클래스를 거치는 것이 왜 나은가

가장 간단한 방법은 print $_POST['id']처럼 직접 출력하는 것이다. 그런데 클래스에 담으면 두 가지 이점이 생긴다. 첫째, setter에 입력값 검증(빈 값 체크, 길이 제한 등)을 추가할 수 있다. 둘째, 이 객체를 다른 함수나 클래스에 통째로 넘길 수 있어서 코드가 구조화된다.

// 직접 출력 (단순하지만 확장 어려움) print $_POST['id']; // 클래스 경유 (유효성 검사 추가 가능) public function setID($id) { if (empty($id)) { throw new Exception('ID는 필수 입력입니다'); } $this->id = htmlspecialchars($id); // XSS 방지도 여기서 }
※ setter를 경유하면 유효성 검사와 보안 처리를 한 곳에 모아 관리할 수 있다.

이 구조의 핵심은 setter가 단순 저장이 아니라 "입력 데이터를 검증·정제한 뒤 저장하는 창구"라는 점이다. 처음엔 단순 저장으로 시작해도, 나중에 유효성 검사를 추가할 때 호출 코드를 바꾸지 않아도 된다.


 

반응형

 

4 전체 데이터 흐름 단계별 정리
입력 → 전송 → 저장 → 출력 4단계
1
HTML form 작성input 태그에 name 속성 설정. method="post", action="view.php"
2
전송 버튼 클릭브라우저가 폼 데이터를 HTTP POST 요청으로 view.php에 전송
3
REQUEST_METHOD 체크$_SERVER['REQUEST_METHOD'] === 'POST' 확인 후 처리 블록 진입
4
Member 객체 생성new Member() — 폼 데이터를 담을 그릇 생성
5
setter로 값 저장setID($_POST['id']), setPassword($_POST['password']) 등 각 필드 저장
6
getter로 값 출력print "아이디는 : " . $member->getID() . "<br>" 형식으로 출력

5 input 타입별 $_POST 값 차이
type에 따라 전달되는 값의 형태가 달라진다
input type name $_POST 값 형태 주의사항
type="text" id 문자열 그대로 빈 문자열 "" 가능. 필수 체크 별도 필요
type="text" password 평문 문자열 실무에서는 반드시 password_hash()로 해시 처리
type="number" number 숫자 문자열 "010..." PHP에서 문자열로 수신됨. 정수 변환 필요 시 (int)$_POST['number']
type="date" birthday "YYYY-MM-DD" 형식 문자열 날짜 유효성은 checkdate() 등으로 별도 검증 권장

6 보안 처리 — htmlspecialchars()와 비밀번호 해시
$_POST 값은 신뢰할 수 없다 — 반드시 처리 후 사용

폼에서 받은 모든 입력은 사용자가 임의로 조작할 수 있다. XSS(크로스 사이트 스크립팅) 공격을 막으려면 출력 직전에 htmlspecialchars()를 적용해야 하고, 비밀번호는 평문으로 저장하면 안 된다.

// XSS 방어 — 출력 시 htmlspecialchars 적용 public function setID($id) { $this->id = htmlspecialchars($id, ENT_QUOTES, 'UTF-8'); } // 비밀번호 — 반드시 해시 처리 public function setPassword($pw) { $this->password = password_hash($pw, PASSWORD_DEFAULT); } // 필수 입력 체크 public function setID($id) { if (empty($id)) { throw new Exception('ID 필수'); } $this->id = htmlspecialchars($id, ENT_QUOTES, 'UTF-8'); }
⚠ 비밀번호를 $this->password = $_POST['password']처럼 평문으로 저장하면 DB가 유출될 때 모든 비밀번호가 그대로 노출된다. 반드시 password_hash()로 해시 처리해야 한다.

7 자주 하는 실수
실수 증상 해결
input에 name 속성을 빠뜨림 $_POST에 해당 키가 없어 Undefined index 오류 전송할 모든 input에 name 속성 반드시 추가
REQUEST_METHOD 체크 없이 $_POST 바로 사용 직접 접근 시 Undefined index 오류 if ($SERVER['REQUEST_METHOD'] === 'POST') 블록 안에서만 처리
setter 메서드명 대소문자 오타 (setId vs setID) Call to undefined method 오류 클래스 선언과 호출 코드의 메서드명 대소문자 정확히 일치
$member->setId() → 실제로는 setID()로 선언됨 Call to undefined method 오류 PHP 메서드명은 대소문자를 구분하지 않지만 관례 통일 권장
method="get"으로 전송 후 $_POST에서 읽으려 함 빈 값 출력 method와 $_GET/$_POST 읽는 방식이 일치해야 함

핵심 한 줄 요약

form → $_POST 연결input name 속성 = $_POST['키명'] — 이름이 정확히 일치해야 전달됨
REQUEST_METHOD 체크POST 전송과 직접 접근을 구분 — 체크 없으면 직접 접근 시 오류 발생
클래스에 담는 이유setter에서 유효성 검사·보안 처리 가능 — 직접 출력보다 확장 용이
전체 흐름form 입력 → POST 전송 → new Member() → setter 저장 → getter 출력
실무 주의password는 평문 저장 금지. htmlspecialchars()로 XSS 방지 필수
보안 핵심출력 시 htmlspecialchars() + 비밀번호 저장 시 password_hash() — 두 가지는 필수

Tags

#PHP form 클래스 #POST 데이터 #Member 클래스 #setter getter #$_POST #PHP OOP 실습 #HTML form PHP #폼 데이터 처리 #REQUEST_METHOD #PHP 클래스 연동 #PHP 객체지향 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP form 클래스, POST 데이터, Member 클래스, setter getter, $_POST, PHP OOP 실습, HTML form PHP, REQUEST_METHOD, PHP 클래스 연동, PHP 객체지향
반응형

댓글