PHP: Form 검증

dev5hjae·2024년 11월 18일

PHP

목록 보기
7/8

Form 필수 입력 검증

필수 입력 검증이란 사용자가 반드시 입력해야 하는 필수 input 요소에 데이터가 모두 입력되었는지를 검증하는 것이다.

예시 코드

if($_SERVER["REQUEST_METHOD"] == "POST"){
	// 이름에 대한 필수 입력 검증
    if (empty($_POST["name"])) {
        $nameMsg = "이름을 입력해 주세요!";
    } else {
        $name = $_POST["name"];
    }
    // 성별에 대한 필수 입력 검증
1.  if (!isset($_POST["gender"]) || $_POST["gender"]==false){
        $genderMsg = "성별을 선택해 주세요!";
    } else {
        $gender = $_POST["gender"];
    }
    $email = $_POST["email"];
    $website = $_POST["website"];
    
    // 관심 있는 분야에 대한 필수 입력 검증
    if (empty($_POST["favtopic"])) {
        $favtopicMsg = "하나 이상 골라주세요!";
    } else {
        $favtopic = $_POST["favtopic"];
    }
    $comment = $_POST["comment"];
}
  • 서버로 전달된 입력 데이터를 empty() 함수나 isset() 함수로 검사하여 필수 입력에 해당하는 데이터가 비어있다면 특정 메시지를 출력한다.
  • PHP에서 empty() 함수는 다음 구문과 완전히 같은 동작을 한다.
empty()
!isset($var) || $var == false
  • 따라서 1번 라인의 isset() 함수가 포함된 구문은 다음과 같은 empty() 함수로 대체할 수 있다.
if(empty($_POST["gender"]){

Form 입력 형식 검증

이메일 주소는 '@'문자와 '.'문자를 포함하는 유요한 이메일 주소의 형식이 따로 존재한다. 입력 형식 검증이란 사용자가 입력한 데이터가 이러한 형식에 맞는 유효한 데이터인가를 검증하는 것이다.

예시 코드

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameMsg = "이름을 입력해 주세요!";
    } else {
        $name = $_POST["name"];
        
            // 이름의 입력 형식 검증
1.     if (!preg_match("/^[a-zA-Z가-힣 ]*$/", $name)) {
            $nameMsg = "영문자와 한글만 가능합니다!";
        }
    }

...

    if (empty($_POST["email"])) {
        $emailMsg = "";
    } else {
        $email = $_POST["email"];
        // 이메일의 입력 형식 검증
2.     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailMsg = "이메일을 정확히 입력해 주세요!";
       }
	}

    if (empty($_POST["website"])) {
        $websiteMsg = "";
    } else {
        $website = $_POST["website"];
        // 홈페이지 URL 주소의 입력 형식 검증
3.     if (!filter_var($email, FILTER_VALIDATE_URL)) {
            $websiteMsg = "홈페이지의 주소를 정확히 입력해 주세요!";
       }
    }
...
}   
  • 이름에는 영문자와 한글 그리고 띄어쓰기만으로 사용할 수 있도록 하고 있다.
  • 이름과 같은 입력 형식 검증은 정규 표현식을 사용하여 검증할 수 있다.
  • PHP에서는 preg_match() 함수를 사용하여 정규 표현식을 이요한 검증을 할 수 있다. 이 함수는 전달받은 정규 표현식에 해당하는 패턴이 존재하면 true를 반환하고, 존재하지 않으면 false를 반환한다.
 if (empty($_POST["name"])) {
        $nameMsg = "이름을 입력해 주세요!";
 } else {
 		$name = $_POST["name"];
        // 이름의 입력 형식 검증
1.      if (!preg_match("/^[a-zA-Z가-힣 ]*$/", $name)) {
            $nameMsg = "영문자와 한글만 가능합니다!";
        }
   }
  • 1번 라인에서 사용된 정규표현식 "/^[a-zA-Z가-힣 ]*$/"의 의미는 영문 소문자와 영문 대문자, 한글 그리고 띄어쓰기만으로 이루어진 문자열을 의미한다.
  • 따라서 1번 라인에서는 변수 $name의 값이 이러한 정규 표현식에 해당하는 문자열인지 검사한다.
  • 만약 이외의 문자가 포함되면, 오류 메시지를 출력한다.

이메일과 URL 주소 입력 형식 검증

PHP에서는 이메일과 URL 주소에 대한 입력 형식 검증에 사용할 수 있는 filter_var() 함수를 제공하고 있다.
filter_var() 함수는 해당 변수가 전달받은 검증 필터에 맞는 유효한 값인지를 검사하는 함수이다.

if (empty($_POST["email"])) {
        $emailMsg = "";
} else {
        $email = $_POST["email"];
        // 이메일의 입력 형식 검증
2.      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailMsg = "이메일을 정확히 입력해 주세요!";
        }
  }
    if (empty($_POST["website"])) {
        $websiteMsg = "";
    } else {
        $website = $_POST["website"];
        // 홈페이지 URL 주소의 입력 형식 검증
3.      if (!filter_var($website, FILTER_VALIDATE_URL)) {
            $websiteMsg = "홈페이지의 주소를 정확히 입력해 주세요!";
        }
    }
  • 2번 라인에서는 filter_var() 함수에 인수로 FILTER_VALIDATE_EMAIL 검증 필터를 전달한다.
  • 따라서 변수 $email에 저장된 값이 유효한 이메일 주소인가를 검증하고, 유효한 이메일 주소라면 true를 반환한다.
  • 3번 라인에는 filter_var() 함수에 인수로 FILTER_VALIDATE_URL 검증 필터를 전달한다.
  • 따라서 변수 $website에 저장된 값이 유효한 URL 주소인가를 검증하고, 유효한 URL 주소라면 true를 반환한다.

0개의 댓글