PHP 프레임워크 – CodeIgniter – 5 – 폼 처리와 검증

PHP 프레임워크 - CodeIgniter - 5 - 폼 처리와 검증
PHP 프레임워크 – CodeIgniter – 5 – 폼 처리와 검증

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는 이런 폼 처리와 유효성 검증을 정말 간단하게 해줘서
초보자도 금방 멋진 폼을 만들 수 있답니다!

이제 여러분은 회원가입, 로그인, 게시판 글쓰기 등 대부분의 기능을 구현할 수 있어요! 🎉
다음 시간에는 사용자 인증과 권한 관리를 알아볼게요.
그럼 오늘도 즐거운 개발 되세요~ 😄👨‍💻🛠️✨

답글 남기기