반응형
Web Development · 개인테스트
개인테스트 —
HTML 폼 + Member 클래스로 데이터 받아 출력
실전 연습 — 입력 폼과 OOP 코드를 연결
시작 오늘 분석할 코드
지금까지 배운 폼 처리와 클래스를 한 번에 적용한 종합 연습. HTML 폼에서 4가지 정보를 받아 Member 객체에 setter로 저장하고, getter로 꺼내 화면에 출력.
form.html — 입력
<form name="form1" method="post" action="view.php"> 사용자ID: <input type="text" name="id"> 사용자PW: <input type="text" name="password"> 사용자PH: <input type="number" name="number"> 사용자BD: <input type="date" name="birthday"> <input type="submit" value="전송"> </form>
view.php — 처리 + 출력
class Member{ private $id; private $password; private $number; private $birthday; // getter / setter 4쌍 } 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(); print "비밀번호는 : " . $member->getPassword(); print "전화번호는 : " . $member->getNumber(); print "생년월일은 : " . $member->getBirthday(); }
1 흐름 정리
[사용자] form.html 입력 ↓ submit [POST] view.php ├─ Member 객체 생성 ├─ setter로 $_POST 값 저장 └─ getter로 꺼내 화면 출력
2 $_SERVER['REQUEST_METHOD'] 검사
if ($_SERVER['REQUEST_METHOD'] === 'POST') { ... }
같은 view.php를 GET으로 직접 접근해도 오류 없이 동작하도록 POST일 때만 처리하는 패턴.
3 input의 다양한 type
·
·
·
·
type="text": 일반 텍스트·
type="number": 숫자만 (브라우저가 검증)·
type="date": 날짜 선택기 표시·
type="password": 글자가 *로 가려짐 (이 코드는 text로 했음)※ 이 코드는 비밀번호도
type="text"로 받아 화면에 그대로 보임. 실제로는 type="password"가 적절.
반응형
4 보안 관점에서 부족한 점
· htmlspecialchars 누락 — print 시 XSS 위험
· 비밀번호 평문 저장 — 실제로는 password_hash()로 해시화
· 입력 검증 없음 — 빈 값·길이·형식 검사 X
· CSRF 보호 없음 — 토큰 검증 X
· 비밀번호 평문 저장 — 실제로는 password_hash()로 해시화
· 입력 검증 없음 — 빈 값·길이·형식 검사 X
· CSRF 보호 없음 — 토큰 검증 X
학습용 코드라 의도적으로 단순화한 부분. 실무에선 위 모두 추가해야 안전.
5 한 단계 발전 — 더 좋은 방법
// 1) 안전한 출력 print "아이디는 : " . htmlspecialchars($member->getId(), ENT_QUOTES, 'UTF-8'); // 2) 비밀번호 해시 $member->setPassword(password_hash($_POST['password'], PASSWORD_DEFAULT)); // 3) 입력 검증 if (empty($_POST['id'])) die("ID 필수"); if (strlen($_POST['password']) < 8) die("비밀번호는 8자 이상"); // 4) PHP 8.0 Constructor Property Promotion으로 Member 짧게 class Member { public function __construct( private string $id, private string $password, private string $number, private string $birthday, ) {} }
핵심 한 줄 요약
통합 연습form + POST + 클래스 + getter/setter
REQUEST_METHODGET/POST 분기 검사
setter 4번$_POST 값을 객체에 담기
getter 4번객체에서 값을 꺼내 출력
type="date/number"브라우저가 형식 검증
보안 부족XSS·해싱·검증·CSRF 모두 미구현
발전PHP 8 Property Promotion + 검증 추가
반응형
'php' 카테고리의 다른 글
| PHP IteratorAggregate — implements와 컬렉션 클래스 완전 정리 (0) | 2026.06.18 |
|---|---|
| PHP __construct — 생성자와 미구현 메서드 완전 정리 (0) | 2026.06.18 |
| PHP runtime — 런타임 상태와 메서드 오버라이딩 완전 정리 (0) | 2026.06.18 |
| PHP trait — 수평 상속(다중 코드 재사용) 완전 정리 (0) | 2026.06.18 |
| PHP extends — 클래스 상속과 메서드 오버라이딩 완전 정리 (0) | 2026.06.18 |
왕진 블로그

댓글