
PHP 프레임워크 – CodeIgniter – 폼 처리와 검증
안녕하세요 여러분~ 😊
이번 시간에는 웹 개발에서 정말 많이 사용되는 **폼 처리(Form Handling)**와 **입력값 검증(Validation)**에 대해 자세히 알아보겠습니다!
사용자에게 정보를 입력받고, 그 입력값이 올바른지 확인하는 건 아주 기본적이면서도 중요한 일이에요.
예를 들어 로그인, 회원가입, 댓글 작성 등 다양한 기능에서 필수적으로 사용하는 기능이죠.
그럼 지금부터 실전 예제와 함께 폼 처리와 검증을 차근차근 살펴볼게요!
1. 폼 처리란 무엇인가요?
폼 처리는 사용자가 작성한 데이터를 서버로 전송받고, 그 데이터를 바탕으로 원하는 작업(저장, 인증, 출력 등)을 수행하는 것을 의미해요.
그리고 **검증(Validation)**은 입력값이 유효한지, 규칙에 맞는지를 체크하는 단계랍니다.
2. 기본적인 폼 작성 방법 (뷰에서)
<!-- app/Views/register_form.php -->
<form action="/register/submit" method="post">
<label>이름</label>
<input type="text" name="name">
<label>이메일</label>
<input type="email" name="email">
<label>비밀번호</label>
<input type="password" name="password">
<button type="submit">회원가입</button>
</form>
CodeIgniter에서는 POST 방식으로 폼을 전송한 후, 컨트롤러에서 해당 데이터를 처리합니다.
3. 컨트롤러에서 폼 데이터 받기
// app/Controllers/Register.php
namespace App\Controllers;
class Register extends BaseController
{
public function submit()
{
$name = $this->request->getPost('name');
$email = $this->request->getPost('email');
$password = $this->request->getPost('password');
// 나중에 DB 저장 또는 검증
return "입력된 이름: $name, 이메일: $email";
}
}
$this->request->getPost()
를 사용해서 폼 데이터를 받아옵니다.getGet()
→ GET 방식일 때 사용
4. 검증 라이브러리 활용하기 (Validation)
CodeIgniter에서는 매우 강력한 입력 검증 라이브러리를 기본 제공해요!
컨트롤러에서 아래와 같이 사용하면 됩니다.
public function submit()
{
$validation = \Config\Services::validation();
$rules = [
'name' => 'required|min_length[2]|max_length[20]',
'email' => 'required|valid_email',
'password' => 'required|min_length[6]',
];
if (!$this->validate($rules)) {
return view('register_form', [
'validation' => $this->validator
]);
}
// 유효성 검증 통과 시
$data = $this->request->getPost();
return "회원가입 성공! 환영합니다, " . esc($data['name']) . "님!";
}
5. 검증 실패 시 오류 출력하기 (뷰에서)
<!-- app/Views/register_form.php -->
<?php if (isset($validation)): ?>
<div style="color:red">
<?= $validation->listErrors() ?>
</div>
<?php endif; ?>
$validation->listErrors()
는 모든 오류 메시지를 HTML로 출력해줘요.
6. 커스텀 오류 메시지 지정하기
기본 메시지 대신 친절한 안내 문구로 바꾸고 싶을 때는 다음과 같이 작성할 수 있어요.
$rules = [
'name' => [
'label' => '이름',
'rules' => 'required|min_length[2]',
'errors' => [
'required' => '이름은 반드시 입력하셔야 해요!',
'min_length' => '이름은 최소 2자 이상이어야 해요!'
]
],
];
7. 이메일 중복 검사 예시 (모델과 연계)
$rules = [
'email' => [
'rules' => 'required|valid_email|is_unique[users.email]',
'errors' => [
'is_unique' => '이미 등록된 이메일입니다.'
]
],
];
is_unique[테이블.컬럼]
을 사용하면 DB에 이미 있는 값인지 자동으로 검사해줘요!
8. 세션을 이용한 폼 리다이렉션
검증 실패 후 이전 입력값을 다시 보여줄 수 있어요.
return redirect()->back()->withInput()->with('validation', $this->validator);
뷰에서 입력값을 유지하려면 old()
함수를 사용합니다:
<input type="text" name="name" value="<?= old('name') ?>">
9. CSRF 보호하기 (보안 필수)
폼에 CSRF 토큰을 추가해서 보안을 강화할 수 있어요.
.env 파일에서 아래 항목을 확인하세요:
csrf_protection = true
뷰에서 폼 안에 CSRF 필드를 넣기:
<form method="post" action="/register/submit">
<?= csrf_field() ?>
</form>
csrf_field()
는 숨겨진 CSRF 토큰을 자동으로 생성해줘요!
10. 유용한 검증 규칙 요약표
규칙 | 설명 |
---|---|
required | 필수 입력 |
min_length[n] | 최소 n자 이상 |
max_length[n] | 최대 n자 이하 |
valid_email | 올바른 이메일 형식 |
alpha_numeric | 알파벳 + 숫자만 허용 |
is_unique[table.field] | 테이블에서 중복 여부 검사 |
matches[field_name] | 다른 필드와 값이 동일한지 |
11. 검증 실패 시 자동 422 응답 보내기
API 개발 시엔 아래처럼 처리할 수 있어요.
if (!$this->validate($rules)) {
return $this->response->setStatusCode(422)
->setJSON(['errors' => $this->validator->getErrors()]);
}
주의사항 및 체크리스트 ✅
항목 | 주의할 점 |
---|---|
XSS 보안 | 뷰에서 esc() 또는 htmlspecialchars() 사용하기 |
비밀번호 | 반드시 password_hash() 로 암호화 후 저장 |
입력값 검증 | 서버 단에서도 꼭 검증 (자바스크립트 검증만 믿지 말기!) |
is_unique 사용 시 | DB 테이블 이름과 컬럼 정확히 입력해야 함 |
CSRF 설정 | .env 에서 csrf_protection = true 확인하기 |
마무리하며 😊
폼 처리와 입력 검증은 웹 애플리케이션에서 가장 자주 사용되면서도 보안, 편의성 측면에서 굉장히 중요한 기능이에요.
CodeIgniter는 이런 폼 처리와 유효성 검증을 정말 간단하게 해줘서
초보자도 금방 멋진 폼을 만들 수 있답니다!
이제 여러분은 회원가입, 로그인, 게시판 글쓰기 등 대부분의 기능을 구현할 수 있어요! 🎉
다음 시간에는 사용자 인증과 권한 관리를 알아볼게요.
그럼 오늘도 즐거운 개발 되세요~ 😄👨💻🛠️✨