7. 폼 처리 및 사용자 입력 (Form Handling and User Input)
폼 처리 기초 (Basics of Form Handling)
HTML 폼을 통해 사용자의 입력을 받아 PHP로 처리할 수 있습니다. 폼 데이터를 전송하기 위해 <form>
태그를 사용합니다.
<!DOCTYPE html> <html> <body> <form method="post" action="process.php"> Name: <input type="text" name="name"><br> Email: <input type="text" name="email"><br> <input type="submit"> </form> </body> </html>
이 예제에서, 사용자가 폼을 제출하면 process.php
파일이 실행됩니다.
GET과 POST 메서드 (GET and POST Methods)
GET과 POST는 두 가지 주요 HTTP 요청 방법입니다. 둘 다 폼 데이터를 서버로 전송하는 데 사용됩니다.
GET 메서드
GET 메서드는 URL에 데이터가 포함되어 전송됩니다. URL에 데이터가 노출되므로 보안이 필요한 데이터 전송에는 적합하지 않습니다.
<form method="get" action="process.php"> Name: <input type="text" name="name"><br> <input type="submit"> </form>
POST 메서드
POST 메서드는 데이터를 HTTP 요청 본문에 포함하여 전송합니다. 데이터가 URL에 노출되지 않으므로 보안이 더 높은 방법입니다.
<form method="post" action="process.php"> Name: <input type="text" name="name"><br> <input type="submit"> </form>
PHP에서 GET과 POST 데이터 처리
$_GET
과 $_POST
슈퍼 글로벌 배열을 사용하여 각각 GET과 POST 메서드로 전송된 데이터를 접근할 수 있습니다.
<?php // process.php if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST['name']; $email = $_POST['email']; echo "Name: " . $name . "<br>"; echo "Email: " . $email; } ?>
폼 데이터 검증 (Form Data Validation)
폼 데이터 검증은 사용자가 입력한 데이터를 처리하기 전에 유효성을 검사하는 과정입니다.
예제
<?php $nameErr = $emailErr = ""; $name = $email = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "Name is required"; } else { $name = test_input($_POST["name"]); if (!preg_match("/^[a-zA-Z-' ]*$/",$name)) { $nameErr = "Only letters and white space allowed"; } } if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Invalid email format"; } } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <!DOCTYPE html> <html> <body> <h2>PHP Form Validation Example</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Name: <input type="text" name="name"> <span><?php echo $nameErr;?></span> <br><br> E-mail: <input type="text" name="email"> <span><?php echo $emailErr;?></span> <br><br> <input type="submit"> </form> </body> </html>
파일 업로드 (File Uploads)
사용자가 파일을 업로드할 수 있도록 하려면 HTML 폼과 PHP 스크립트를 사용합니다.
HTML 폼
<!DOCTYPE html> <html> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> Select file to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form> </body> </html>
PHP 파일 업로드 처리
<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); // 파일이 실제 이미지인지 확인 if (isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if ($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // 파일이 이미 존재하는지 확인 if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // 파일 크기 제한 (예: 500KB) if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // 특정 파일 형식 허용 (예: JPG, JPEG, PNG, GIF) if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // 업로드가 가능한지 확인 if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>
이 예제에서는 사용자가 선택한 파일을 서버의 uploads
디렉터리에 저장합니다. 다양한 검사를 통해 파일의 유효성을 확인하고, 업로드가 성공하면 메시지를 출력합니다.