PHP PHP Form - swkim0128/PARA GitHub Wiki


type: PHP archive: false

Form 처리


Form 처리

HTML form μš”μ†Œκ°€ μ „μ†‘ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” PHP와 같은 μ„œλ²„ μ‚¬μ΄λ“œ 슀크립트 μ–Έμ–΄λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€μŒ μ˜ˆμ œλŠ” form μš”μ†Œλ₯Ό μ΄μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° 이름과 이메일을 μž…λ ₯λ°›λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

<html>
<body>
    <form action="request.php" method="post">
        이름 : <input type="text" name="name"><br>
        이메일 : <input type="text" name="email"><br>
        <input type="submit">
    </form>
</body>
</html>

μœ„μ˜ 예제처럼 form μš”μ†Œμ˜ action μ†μ„±κ°’μ—λŠ” form μš”μ†Œλ₯Ό μ²˜λ¦¬ν•  μ„œλ²„μ˜ PHP 슀크립트 파일 μ£Όμ†Œλ₯Ό λͺ…μ‹œν•©λ‹ˆλ‹€.
그리고 전솑(submit) λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ PHP 슀크립트둜 form μš”μ†Œλ₯Ό 톡해 μž…λ ₯된 이름과 이메일 μ£Όμ†Œμ˜ 데이터가 μ „μ†‘λ©λ‹ˆλ‹€.

λ‹€μŒ μ˜ˆμ œλŠ” form μš”μ†Œμ—μ„œ μ „μ†‘ν•œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” PHP 슀크립트의 μ˜ˆμ œμž…λ‹ˆλ‹€.

$name = $_POST["name"];
$email = $_POST["email"];

echo $name."λ‹˜μ˜ 이메일 μ£Όμ†ŒλŠ” ".$email."μž…λ‹ˆλ‹€.";

μœ„μ˜ 예제처럼 form μš”μ†Œμ— ν¬ν•¨λœ input μš”μ†Œμ˜ name 속성값은 PHP μŠ€ν¬λ¦½νŠΈμ—μ„œλ„ λ˜‘κ°™μ΄ μ‚¬μš©λ©λ‹ˆλ‹€.

HTTP μš”μ²­ 방식

ν΄λΌμ΄μ–ΈνŠΈμΈ λΈŒλΌμš°μ €κ°€ μ„œλ²„μ— HTTP μš”μ²­μ„ 보낼 λ•ŒλŠ” λ‹€μŒ 방식 μ€‘ ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  1. GET 방식
  2. POST 방식

두 방식 λͺ¨λ‘ form μš”μ†Œλ₯Ό 톡해 μž…λ ₯받은 데이터λ₯Ό μ—°κ΄€ 배열에 λ‹΄μ•„ μ „μ†‘ν•©λ‹ˆλ‹€.

이 μ—°κ΄€ λ°°μ—΄μ˜ 킀값은 input μš”μ†Œμ˜ name 속성값이 되며, 값은 μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 데이터가 λ©λ‹ˆλ‹€.

λ˜ν•œ, 미리 μ„ μ–Έλœ μ „μ—­ λ³€μˆ˜μΈ 슈퍼 κΈ€λ‘œλ²Œ λ°°μ—΄($_GET, $_POST)을 μ‚¬μš©ν•˜λ―€λ‘œ, μ–΄λ””μ—μ„œλ“  μ œμ•½ 없이 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Important

$_GETκ³Ό $_POST와 같은 슈퍼 κΈ€λ‘œλ²Œ 배열은 PHP 4.1.0λΆ€ν„° μ œκ³΅λ©λ‹ˆλ‹€.

Important

input μš”μ†Œμ˜ name 속성값과 μ—°κ΄€ λ°°μ—΄μ˜ 킀값은 λͺ¨λ‘ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜λ‹ˆ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

GET 방식

GET 방식은 μ£Όμ†Œμ— 데이터(data)λ₯Ό μΆ”κ°€ν•˜μ—¬ μ „λ‹¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

GET λ°©μ‹μ˜ HTTP μš”μ²­μ€ λΈŒλΌμš°μ €μ— μ˜ν•΄ μΊμ‹œλ˜μ–΄(cached) μ €μž₯λ©λ‹ˆλ‹€.

λ˜ν•œ, GET 방식은 λ³΄ν†΅ 쿼리 λ¬Έμžμ—΄(query string)에 ν¬ν•¨λ˜μ–΄ μ „μ†‘λ˜λ―€λ‘œ, 길이의 μ œν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ λ³΄μ•ˆμƒ 취약점이 μ‘΄μž¬ν•˜λ―€λ‘œ, μ€‘μš”ν•œ λ°μ΄ν„°λŠ” POST 방식을 μ‚¬μš©ν•˜μ—¬ μš”μ²­ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

POST 방식

POST 방식은 데이터(data)λ₯Ό λ³„λ„λ‘œ μ²¨λΆ€ν•˜μ—¬ μ „λ‹¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

POST λ°©μ‹μ˜ HTTP μš”μ²­μ€ λΈŒλΌμš°μ €μ— μ˜ν•΄ μΊμ‹œλ˜μ§€ μ•ŠμœΌλ―€λ‘œ, λΈŒλΌμš°μ € νžˆμŠ€ν† λ¦¬μ—λ„ λ‚¨μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, POST λ°©μ‹μ˜ HTTP μš”μ²­μ— μ˜ν•œ λ°μ΄ν„°λŠ” μΏΌλ¦¬ λ¬Έμžμ—΄κ³ΌλŠ” λ³„λ„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€.

λ”°λΌμ„œ λ°μ΄ν„°μ˜ 길이에 λŒ€ν•œ μ œν•œλ„ μ—†μœΌλ©°, GET 방식보닀 λ³΄μ•ˆμ„±μ΄ λ†’μŠ΅λ‹ˆλ‹€.

Form 검증


Form 검증(validation)

HTML form μš”μ†ŒλŠ” ν…μŠ€νŠΈ μž…λ ₯, μ²΄ν¬λ°•μŠ€, λΌλ””μ˜€ λ²„νŠΌ λ“± λ‹€μ–‘ν•œ input μš”μ†Œλ₯Ό 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.
μ΄λŸ¬ν•œ input μš”μ†Œλ³„λ‘œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 데이터가 μ ν•©ν•œ 데이터인지λ₯Ό κ²€μ‚¬ν•˜λŠ” 검증 κ·œμΉ™μ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ μ˜ˆμ œλŠ” μ—¬λŸ¬ μ˜ˆμ œμ—μ„œ 계속 μ‚¬μš©ν•˜κ²Œ 될 form μš”μ†Œλ₯Ό μ΄μš©ν•œ κ°„λ‹¨ν•œ νšŒμ› κ°€μž… 양식 μ˜ˆμ œμž…λ‹ˆλ‹€.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    이름 : <input type="text" name="name">
    성별 :
    <input type="radio" name="gender" value="female">μ—¬μž
    <input type="radio" name="gender" value="male">λ‚¨μž
    이메일 : <input type="text" name="email">
    ν™ˆνŽ˜μ΄μ§€ : <input type="text" name="website">
    관심 μžˆλŠ” λΆ„μ•Ό :
    <input type="checkbox" name="favtopic[]" value="movie"> μ˜ν™”
    <input type="checkbox" name="favtopic[]" value="music"> μŒμ•…
    <input type="checkbox" name="favtopic[]" value="game"> κ²Œμž„
    <input type="checkbox" name="favtopic[]" value="coding"> μ½”λ”©
    기타 : <textarea name="comment"></textarea>
    <input type="submit" value="전솑">
</form>

μœ„μ˜ form μ˜ˆμ œμ—μ„œλŠ” method μ†μ„±κ°’μœΌλ‘œ "post"λ₯Ό μ‚¬μš©ν•˜μ—¬ POST λ°©μ‹μœΌλ‘œ HTTP μš”μ²­μ„ λ³΄λ‚΄κ²Œ λ©λ‹ˆλ‹€.
λ˜ν•œ, form μš”μ†Œμ˜ action μ†μ„±κ°’μœΌλ‘œλŠ” λ‹€μŒκ³Ό 같은 PHP μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>

μœ„μ˜ μ˜ˆμ œμ—μ„œ μ‚¬μš©λœ $_SERVERλŠ” PHPμ—μ„œ μ œκ³΅ν•˜λŠ” 슈퍼 κΈ€λ‘œλ²Œλ‘œ 인덱슀둜 "PHP_SELF"λ₯Ό μ‚¬μš©ν•˜λ©΄, ν˜„μž¬ μ‹€ν–‰ 쀑인 PHP 슀크립트의 파일 이름을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

htmlspecialchars() ν•¨μˆ˜λŠ” 인수둜 전달받은 λ¬Έμžμ—΄μ— ν¬ν•¨λœ 특수 λ¬Έμžλ“€μ„ HTML μ—”ν‹°ν‹°λ‘œ λ³€ν™˜ν•΄ μ€λ‹ˆλ‹€.
이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ μž…λ ₯ λ¬Έμžμ—΄μ— μ‚¬μš©μžκ°€ μ•ˆ 쒋은 μ˜λ„λ‘œ HTML μ½”λ“œλ₯Ό μ‚½μž…ν•˜λŠ” 것을 막을 수 μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ μœ„μ˜ PHP μ½”λ“œλ₯Ό action μ†μ„±κ°’μœΌλ‘œ μ‚¬μš©ν•˜λ©΄, ν•΄λ‹Ή form μš”μ†Œλ‘œ μž…λ ₯받은 데이터λ₯Ό λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ μ „μ†‘ν•˜μ§€ μ•Šκ³  ν˜„μž¬ νŽ˜μ΄μ§€λ‘œ λ³΄λ‚΄κ²Œ λ©λ‹ˆλ‹€.

λ‹€μŒ μ˜ˆμ œλŠ” μ‚¬μš©μžκ°€ form μš”μ†Œλ₯Ό 톡해 μž…λ ₯ν•œ 데이터λ₯Ό ν•΄λ‹Ή νŽ˜μ΄μ§€ μžμ²΄μ—μ„œ μ²˜λ¦¬ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST["name"];
    $gender = $_POST["gender"];
    $email = $_POST["email"];
    $website = $_POST["website"];
    $favtopic = $_POST["favtopic"];
    $comment = $_POST["comment"];
}

μœ„μ˜ μ˜ˆμ œμ—μ„œ μ‚¬μš©λœ $_SERVER["REQUEST_METHOD"]λŠ” νŽ˜μ΄μ§€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœ HTTP μš”μ²­ 방식을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μœ„μ˜ μ˜ˆμ œλŠ” POST λ°©μ‹μ˜ HTTP μš”μ²­μ—μ„œλ§Œ λ™μž‘ν•  κ²ƒμž…λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œ PHP 슀크립트둜 처리된 κ²°κ³Όλ₯Ό λ³΄μ—¬μ£ΌλŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

echo "<h2>μž…λ ₯된 νšŒμ› 정보</h2>";
echo "이름 : ".$name."<br>";
echo "성별 : ".$gender."<br>";
echo "이메일 : ".$email."<br>";
echo "ν™ˆνŽ˜μ΄μ§€ : ".$website."<br>";
echo "관심 μžˆλŠ” λΆ„μ•Ό : ";

if (!empty($favtopic)) {
    foreach ($favtopic as $value) {
        echo $value." ";
    }
}

echo "<br>기타 : ".$comment; ?>

μœ„μ˜ μ˜ˆμ œμ—μ„œ κ΄€μ‹¬μžˆλŠ” λΆ„μ•ΌλŠ” HTML 체크 λ°•μŠ€λ₯Ό 톡해 μ—¬λŸ¬ μž…λ ₯을 λ™μ‹œμ— μ „λ‹¬λ°›μŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ λ³€μˆ˜ $favtopic은 배열을 μ‚¬μš©ν•˜μ—¬ μž…λ ₯된 값듀을 λ³΄μ—¬μ£Όκ²Œ λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ§Œμ•½ μ‚¬μš©μžκ°€ 체크 λ°•μŠ€λ₯Ό ν•˜λ‚˜λ„ μ„ νƒν•˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ μž…λ ₯을 μ „μ†‘ν•˜κ²Œ 되면, 배열을 μ‚¬μš©ν•œ μ½”λ“œμ—μ„œλŠ” 였λ₯˜κ°€ λ°œμƒν•  κ²ƒμž…λ‹ˆλ‹€.
λ”°λΌμ„œ μœ„μ™€ 같이 λ¨Όμ € empty() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μž…λ ₯된 값이 ν•˜λ‚˜λΌλ„ μžˆλŠ”μ§€λ₯Ό κ²€μ‚¬ν•œ 후에 μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄μ•Ό μ•ˆμ „ν•©λ‹ˆλ‹€.

Form ν•„μˆ˜ μž…λ ₯ 검증


ν•„μˆ˜ μž…λ ₯ 검증

ν•„μˆ˜ μž…λ ₯ κ²€μ¦μ΄λž€ μ‚¬μš©μžκ°€ λ°˜λ“œμ‹œ μž…λ ₯ν•΄μ•Ό ν•˜λŠ” ν•„μˆ˜ input μš”μ†Œμ— 데이터가 λͺ¨λ‘ μž…λ ₯λ˜μ—ˆλŠ”μ§€λ₯Ό κ²€μ¦ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 이름에 λŒ€ν•œ ν•„μˆ˜ μž…λ ₯ 검증
    if (empty($_POST["name"])) {
        $nameMsg = "이름을 μž…λ ₯ν•΄ μ£Όμ„Έμš”!";
    } else {
        $name = $_POST["name"];
    }

    // 성별에 λŒ€ν•œ ν•„μˆ˜ μž…λ ₯ 검증
β‘   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() ν•¨μˆ˜λŠ” λ‹€μŒ ꡬ문과 μ™„μ „νžˆ 같은 λ™μž‘μ„ ν•©λ‹ˆλ‹€.

Important

empty()!isset($var) || $var==false

λ”°λΌμ„œ β‘ λ²ˆ 라인의 isset() ν•¨μˆ˜κ°€ ν¬ν•¨λœ ꡬ문은 λ‹€μŒκ³Ό 같은 empty() ν•¨μˆ˜λ‘œ λŒ€μ²΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

if (empty($_POST["gender"])) {

μœ„μ˜ μ˜ˆμ œλŠ” 전솑받은 데이터λ₯Ό μ„œλ²„ μ‚¬μ΄λ“œμ—μ„œ κ²€μ¦ν•˜μ—¬ ν•„μˆ˜ μž…λ ₯ λ°μ΄ν„°μ˜ μž…λ ₯ μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ ν•„μˆ˜ μž…λ ₯ 검증은 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œμ—μ„œλ„ HTML의 required 속성을 μ΄μš©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” ν•„μˆ˜ μž…λ ₯ 검증을 톡해 ν•„μˆ˜ μž…λ ₯에 ν•΄λ‹Ήν•˜λŠ” 데이터가 λΉ„μ–΄μžˆμœΌλ©΄, λ‹€μŒ μ½”λ“œμ— νŠΉμ • λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
    <p class="alert">* : ν•„μˆ˜ μž…λ ₯ 사항</p>
    이름 : <input type="text" name="name"><span class="alert"> * <?php echo $nameMsg ?></span>
    성별 :
    <input type="radio" name="gender" value="female">μ—¬μž
    <input type="radio" name="gender" value="male">λ‚¨μž <span class="alert"> * <?php echo $genderMsg ?></span>
    이메일 : <input type="text" name="email">
    ν™ˆνŽ˜μ΄μ§€ : <input type="text" name="website">
    관심 μžˆλŠ” λΆ„μ•Ό :
    <input type="checkbox" name="favtopic[]" value="movie"> μ˜ν™”
    <input type="checkbox" name="favtopic[]" value="music"> μŒμ•…
    <input type="checkbox" name="favtopic[]" value="game"> κ²Œμž„
    <input type="checkbox" name="favtopic[]" value="coding"> μ½”λ”©
    <span class="alert"> * <?php echo $favtopicMsg ?></span>
    기타 : <textarea name="comment"></textarea>
    <input type="submit" value="전솑">
</form>

Form μž…λ ₯ ν˜•μ‹ 검증


μž…λ ₯ ν˜•μ‹ 검증

이메일 μ£Όμ†ŒλŠ” '@'λ¬Έμžμ™€ '.'문자λ₯Ό ν¬ν•¨ν•˜λŠ” μœ νš¨ν•œ 이메일 μ£Όμ†Œμ˜ ν˜•μ‹μ΄ λ”°λ‘œ μ‘΄μž¬ν•©λ‹ˆλ‹€.

μž…λ ₯ ν˜•μ‹ κ²€μ¦μ΄λž€ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 데이터가 μ΄λŸ¬ν•œ ν˜•식에 λ§žλŠ” μœ νš¨ν•œ 데이터인가λ₯Ό κ²€μ¦ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‹€μŒ μ˜ˆμ œλŠ” μ•žμ„  μ˜ˆμ œμ— 이름, 이메일, ν™ˆνŽ˜μ΄μ§€μ— λŒ€ν•΄ μž…λ ₯ ν˜•μ‹ 검증을 μΆ”κ°€ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€.

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameMsg = "이름을 μž…λ ₯ν•΄ μ£Όμ„Έμš”!";
    } else {
        $name = $_POST["name"];

        // μ΄λ¦„μ˜ μž…λ ₯ ν˜•μ‹ 검증
β‘       if (!preg_match("/^[a-zA-Zκ°€-힣 ]*$/", $name)) {
            $nameMsg = "μ˜λ¬Έμžμ™€ ν•œκΈ€λ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€!";
        }
    }
...
    if (empty($_POST["email"])) {
        $emailMsg = "";
    } else {
        $email = $_POST["email"];

        // μ΄λ©”μΌμ˜ μž…λ ₯ ν˜•μ‹ 검증
β‘‘      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailMsg = "이메일을 μ •ν™•νžˆ μž…λ ₯ν•΄ μ£Όμ„Έμš”!";
        }
    }

    if (empty($_POST["website"])) {
        $websiteMsg = "";
    } else {
        $website = $_POST["website"];

        // ν™ˆνŽ˜μ΄μ§€ URL μ£Όμ†Œμ˜ μž…λ ₯ ν˜•μ‹ 검증
β‘’      if (!filter_var($email, FILTER_VALIDATE_URL)) {
            $websiteMsg = "ν™ˆνŽ˜μ΄μ§€μ˜ μ£Όμ†Œλ₯Ό μ •ν™•νžˆ μž…λ ₯ν•΄ μ£Όμ„Έμš”!";
        }
    }
...
}

이름 μž…λ ₯ ν˜•μ‹ 검증

μœ„μ˜ μ˜ˆμ œμ—μ„œ μ΄λ¦„μ—λŠ” μ˜λ¬Έμžμ™€ ν•œκΈ€ 그리고 λ„μ–΄μ“°κΈ°λ§ŒμœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
이름과 같은 μž…λ ₯ ν˜•μ‹ 검증은 μ •κ·œ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜μ—¬ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€.

PHPμ—μ„œλŠ” preg_match() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •κ·œ ν‘œν˜„μ‹μ„ μ΄μš©ν•œ 검증을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이 ν•¨μˆ˜λŠ” 전달받은 μ •κ·œ ν‘œν˜„μ‹μ— ν•΄λ‹Ήν•˜λŠ” νŒ¨ν„΄μ΄ μ‘΄μž¬ν•˜λ©΄ trueλ₯Ό λ°˜ν™˜ν•˜κ³ , μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ falseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

if (empty($_POST["name"])) {
	$nameMsg = "이름을 μž…λ ₯ν•΄ μ£Όμ„Έμš”!";
} else {
	$name = $_POST["name"];

	// μ΄λ¦„μ˜ μž…λ ₯ ν˜•μ‹ 검증
β‘  if (!preg_match("/^[a-zA-Zκ°€-힣 ]*$/", $name)) {
		$nameMsg = "μ˜λ¬Έμžμ™€ ν•œκΈ€λ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€!";
	}
}

β‘ λ²ˆ λΌμΈμ—μ„œ μ‚¬μš©λœ μ •κ·œ ν‘œν˜„μ‹ "/^[a-zA-Zκ°€-힣 ]*$/"의 μ˜λ―ΈλŠ” 영문 μ†Œλ¬Έμžμ™€ 영문 λŒ€λ¬Έμž, ν•œκΈ€ 그리고 λ„μ–΄μ“°κΈ°λ§ŒμœΌλ‘œ 이루어진 λ¬Έμžμ—΄μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

λ”°λΌμ„œ β‘ λ²ˆ λΌμΈμ—μ„œλŠ” λ³€μˆ˜ $name의 값이 μ΄λŸ¬ν•œ μ •κ·œ ν‘œν˜„μ‹μ— ν•΄λ‹Ήν•˜λŠ” λ¬Έμžμ—΄μΈμ§€λ₯Ό κ²€μ‚¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이메일과 URL μ£Όμ†Œ μž…λ ₯ ν˜•μ‹ 검증

PHPμ—μ„œλŠ” μ΄λ©”일과 URL μ£Όμ†Œμ— λŒ€ν•œ μž…λ ₯ ν˜•μ‹ 검증에 μ‚¬μš©ν•  수 μžˆλŠ” filter_var() ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

filter_var() ν•¨μˆ˜λŠ” ν•΄λ‹Ή λ³€μˆ˜κ°€ 전달받은 검증 ν•„ν„°(validate filter)에 λ§žλŠ” μœ νš¨ν•œ 값인지λ₯Ό κ²€μ‚¬ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

PHPμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 검증 ν•„ν„°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

검증 ν•„ν„° μ„€λͺ…
FILTER_VALIDATE_BOOLEAN ν•΄λ‹Ή λ³€μˆ˜κ°€ "1", "true", "on", "yes"인 κ²½μš°μ—λ§Œ trueλ₯Ό λ°˜ν™˜ν•˜κ³ , λ‚˜λ¨Έμ§€λŠ” μ „λΆ€ falseλ₯Ό λ°˜ν™˜ν•¨.
FILTER_VALIDATE_EMAIL ν•΄λ‹Ή λ³€μˆ˜κ°€ μœ νš¨ν•œ 이메일 μ£Όμ†ŒμΈμ§€λ₯Ό 검증함.
FILTER_VALIDATE_FLOAT ν•΄λ‹Ή λ³€μˆ˜κ°€ float νƒ€μž…μΈμ§€λ₯Ό 검증함.
FILTER_VALIDATE_INT ν•΄λ‹Ή λ³€μˆ˜κ°€ int νƒ€μž…μΈμ§€λ₯Ό 검증함.
FILTER_VALIDATE_IP ν•΄λ‹Ή λ³€μˆ˜κ°€ μœ νš¨ν•œ IP μ£Όμ†ŒμΈμ§€λ₯Ό 검증함.
FILTER_VALIDATE_MAC ν•΄λ‹Ή λ³€μˆ˜κ°€ μœ νš¨ν•œ MAC μ£Όμ†ŒμΈμ§€λ₯Ό 검증함.
FILTER_VALIDATE_REGEXP ν•΄λ‹Ή λ³€μˆ˜λ₯Ό νŽ„ ν˜Έν™˜ μ •κ·œ ν‘œν˜„μ‹(Perl-Compatible Regular Expression, PCRE)으둜 검증함.
FILTER_VALIDATE_URL ν•΄λ‹Ή λ³€μˆ˜κ°€ μœ νš¨ν•œ URL μ£Όμ†ŒμΈμ§€λ₯Ό 검증함.

Important

MAC μ£Όμ†Œλž€ λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€μ— ν• λ‹Ήλœ 고유 μ‹λ³„μžλ‘œ, κ°„λ‹¨νžˆ 말해 컴퓨터가 κ°€μ§€κ³  μžˆλŠ” μžμ‹ λ§Œμ˜ 고유 번호λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

Important

νŽ„ ν˜Έν™˜ μ •κ·œ ν‘œν˜„μ‹(PCRE)μ΄λž€ νŽ„ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ μ •κ·œ ν‘œν˜„μ‹ κΈ°λŠ₯에 μ°©μ•ˆν•˜μ—¬ λ§Œλ“  μ •κ·œ ν‘œν˜„μ‹μœΌλ‘œ, 기쑴의 POSIX μ •κ·œ ν‘œν˜„μ‹λ³΄λ‹€ 훨씬 더 κ°•λ ₯ν•˜κ³  μœ μ—°ν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€.

if (empty($_POST["email"])) {
	$emailMsg = "";
} else {
  $email = $_POST["email"];

  // μ΄λ©”μΌμ˜ μž…λ ₯ ν˜•μ‹ 검증
β‘‘ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailMsg = "이메일을 μ •ν™•νžˆ μž…λ ₯ν•΄ μ£Όμ„Έμš”!";
    }
  }

	if (empty($_POST["website"])) {
    $websiteMsg = "";
  } else {
    $website = $_POST["website"];

  // ν™ˆνŽ˜μ΄μ§€ URL μ£Όμ†Œμ˜ μž…λ ₯ ν˜•μ‹ 검증
β‘’ if (!filter_var($website, FILTER_VALIDATE_URL)) {
    $websiteMsg = "ν™ˆνŽ˜μ΄μ§€μ˜ μ£Όμ†Œλ₯Ό μ •ν™•νžˆ μž…λ ₯ν•΄ μ£Όμ„Έμš”!";
  }
}

β‘‘λ²ˆ λΌμΈμ—μ„œλŠ” filter_var() ν•¨μˆ˜μ— 인수둜 FILTER_VALIDATE_EMAIL 검증 ν•„ν„°λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ λ³€μˆ˜ $email에 μ €μž₯된 값이 μœ νš¨ν•œ 이메일 μ£Όμ†ŒμΈκ°€λ₯Ό κ²€μ¦ν•˜κ³ , μœ νš¨ν•œ 이메일 μ£Όμ†ŒλΌλ©΄ trueλ₯Ό λ°˜ν™˜ν•  κ²ƒμž…λ‹ˆλ‹€.

β‘’λ²ˆ λΌμΈμ—μ„œλŠ” filter_var() ν•¨μˆ˜μ— 인수둜 FILTER_VALIDATE_URL 검증 ν•„ν„°λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ λ³€μˆ˜ $website에 μ €μž₯된 값이 μœ νš¨ν•œ URL μ£Όμ†ŒμΈκ°€λ₯Ό κ²€μ¦ν•˜κ³ , μœ νš¨ν•œ URL μ£Όμ†ŒλΌλ©΄ trueλ₯Ό λ°˜ν™˜ν•  κ²ƒμž…λ‹ˆλ‹€.

⚠️ **GitHub.com Fallback** ⚠️