PHP - 폼 검증

안녕하세요, PHP 개발자 지망생 여러분! 오늘 우리는 폼 검증의 흥미로운 세상으로 뛰어들어 볼 거예요. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 웹 개발의 이 중요한 부분을 안내해드리기 위해 여기 있습니다. 믿으세요, 폼 검증을 마스터하면 자전거 타는 것처럼, 한 번 배우면 절대 잊지 않게 될 거예요!

PHP - Form Validation

폼 검증의 중요성

코드로 들어가기 전에, 폼 검증이 왜 그렇게 중요한지 이야기해볼게요. 온라인 피자 배달 서비스를 운영하고 있다고 상상해보세요. 누군가가 'ABC' 피자를 주문하거나 전화번호로 '-5'를 입력한다면, 당신은 큰 고민에 휩싸일 거예요! 이때 폼 검증이 구원자로서 나타나, 받는 데이터가 정확하고 사용 가능한지 확인해줍니다.

클라이언트 측 vs 서버 측 검증

폼 검증의 세계에서 우리는 두 가지 주요 플레이어를 가지고 있습니다: 클라이언트 측과 서버 측 검증. 오늘 우리는 PHP를 사용한 서버 측 검증에 집중하겠지만, 간단히 두 가지를 다 훑쳐보겠습니다.

클라이언트 측 검증

클라이언트 측 검증은 사용자의 브라우저에서 데이터가 서버로 보내기 전에 일어납니다. 빠르고 즉시 피드백을 제공하지만, 숙련된 사용자에 의해 우회될 수 있습니다.

서버 측 검증

서버 측 검증은 폼이 제출된 후 서버에서 일어납니다. 보다 안전하고 신뢰할 수 있으며, 사용자가 조작할 수 없습니다. 오늘 우리는 이 부분을 깊이 탐구해볼 거예요.

PHP 폼 검증 시작하기

간단한 폼을 만들어 검증을 단계별로 구축해보겠습니다. 여기 우리의 기본 HTML 폼이 있습니다:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
이름: <input type="text" name="name"><br>
나이: <input type="text" name="age"><br>
<input type="submit" name="submit" value="제출">
</form>

이제 이 폼에 PHP 마법을 더해 폼을 검증해보겠습니다!

검증 함수

구체적인 검증을 들어가기 전에, 몇 가지 보조 함수를 만들어보겠습니다:

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

test_input() 함수는 세 가지 중요한 일을 합니다:

  1. trim()은 문자열의 양쪽 공백을 제거합니다.
  2. stripslashes()는 백슬래시를 제거합니다.
  3. htmlspecialchars()는 특수 문자를 HTML 엔티티로 변환합니다.

이 단계들은 악의적인 코드 주입을 방지하고 데이터가 깨끗하게 유지되도록 도와줍니다.

폼이 비어 있는지 확인

먼저 기본적인 확인을 해보겠습니다: 폼이 비어 있는지 확인하는 방법입니다:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "이름이 필요합니다";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["age"])) {
$ageErr = "나이가 필요합니다";
} else {
$age = test_input($_POST["age"]);
}
}
?>

이 코드에서:

  • 우리는 폼 데이터와 오류 메시지를 저장할 변수를 초기화합니다.
  • 폼이 POST 방식으로 제출되었는지 확인합니다.
  • 각 필드가 비어 있는지 확인합니다. 비어 있다면 오류 메시지를 설정하고, 비어 있지 않다면 데이터를 정리합니다.

나이 필드가 숫자가 아닌 경우

이제 나이 필드가 숫자인지 확인하는 특정 검증을 추가해보겠습니다:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
// ... 이전 확인들 ...

if (empty($_POST["age"])) {
$ageErr = "나이가 필요합니다";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "나이는 숫자여야 합니다";
}
}
}

여기서 우리는 is_numeric()을 사용하여 나이가 실제로 숫자인지 확인합니다. 숫자가 아니라면 적절한 오류 메시지를 설정합니다.

모든 것을 합쳐서

이제 우리의 완전한 폼 검증 스크립트를 확인해보겠습니다:

<?php
$name = $age = "";
$nameErr = $ageErr = "";

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "이름이 필요합니다";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["age"])) {
$ageErr = "나이가 필요합니다";
} else {
$age = test_input($_POST["age"]);
if (!is_numeric($age)) {
$ageErr = "나이는 숫자여야 합니다";
}
}
}
?>

<h2>PHP 폼 검증 예제</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
이름: <input type="text" name="name">
<span class="error"><?php echo $nameErr;?></span>
<br><br>
나이: <input type="text" name="age">
<span class="error"><?php echo $ageErr;?></span>
<br><br>
<input type="submit" name="submit" value="제출">
</form>

<?php
echo "<h2>입력하신 내용:</h2>";
echo $name;
echo "<br>";
echo $age;
?>

이 스크립트는 다음을 수행합니다:

  1. 변수와 함수를 정의합니다.
  2. 폼이 제출되었을 때 검증을 수행합니다.
  3. 오류 메시지가 있는 경우 폼을 표시합니다.
  4. 검증된 입력을 표시합니다.

검증 방법 표

여기 몇 가지 일반적인 PHP 검증 방법의 표가 있습니다:

방법 설명 예제
empty() 변수가 비어 있는지 확인합니다 if (empty($var))
isset() 변수가 설정되어 있고 NULL이 아닌지 확인합니다 if (isset($var))
is_numeric() 변수가 숫자 또는 숫자 문자열인지 확인합니다 if (is_numeric($var))
strlen() 문자열의 길이를 가져옵니다 if (strlen($var) > 5)
preg_match() 정규 표현식을 사용하여 일치 여부를 확인합니다 if (preg_match("/pattern/", $var))
filter_var() 변수를 지정된 필터로 필터링합니다 if (filter_var($var, FILTER_VALIDATE_EMAIL))

기억하세요, 폼 검증은 데이터 무결성을 보장하고 사용자 경험을 향상시키는 것입니다. 클럽의 경비원처럼, 좋은 데이터를 들이고 나쁜 데이터를 밖으로 쫓아내는 것입니다!

이 글을 마치며, 이 튜토리얼이 PHP 폼 검증의 견고한 기반을 제공해드렸기를 바랍니다. 연습이 완벽을 만들어라, 그러니 다양한 폼과 검증 기법을 실험해보지 마세요. 언제든지 폼을 검증하는 프로가 될 거예요!

행복한 코딩을 기원하며, 폼이 항상 유효하길 바랍니다!

Credits: Image by storyset