안녕하십니까, 시간 내 주셔서 감사합니다!PHP 양식은 이메일과 이름이 유효하지 않은 경우에도 이메일을 보냅니다.
PHP를 처음 사용했지만 필자는 PHP 폼을 작성해 왔으며 지금까지 필드의 유효성을 검사 할 수 있었으며 폼이 필드를 검증 할 수있게 만들었습니다. 비어 있습니다. ... "이름"및 "전자 메일"필드에 유효성 검사 필터가 있습니다 ... "이름"은 "문자 및 공백"을 초과 할 수 없으며 "전자 메일"은 "잘못된 전자 메일 형식"을 허용하지 않습니다. .
예 : 이름 :하지 ... 주제 및 메시지 유효성 검사 필터가없는 이메일 주소 ... 문제는
, 그 무엇이든된다 Rob3rt ... 그것은 숫자 이메일을 가지고 "이름"과 "이메일"에 쓰여진 정보가 유효성 필터와 일치하지 않는 경우에도 양식이 전자 메일을 보냅니다 ...
Q : 양식을 보관할 수있는 방법은 무엇입니까? 모든 필드가 정확한 정보를 가질 때까지 전자 메일을 보냅니 까? 에러가 발생하면 당신이 결코 확인하지 않기 때문에 당신이 메일을 보내기 전에 필드가 비어 있지 않은 경우에만 확인되어,
// This is the validation code //
<?php
// define variables and set to empty values
$nameErr = $emailErr = $commentErr = $subjectErr = "";
$name = $email = $comment = $subject = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "<h5>Name is required</h5>";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "<h5>Only letters and white space allowed</h5>";
}
}
if (empty($_POST["email"])) {
$emailErr = "<h5>Email is required</h5>";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "<h5>Invalid email format</h5>";
}
}
if (empty($_POST["comment"])) {
$commentErr = "<h5>Message is required</h5>";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["subject"])) {
$subjectErr = "<h5>Subject is required</h5>";
} else {
$subject = test_input($_POST["subject"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form>
Form comes here
</form>
// This is the sending code... I think the problem is here... //
<?php
if($_POST['name']!="" && $_POST['email']!="" && $_POST['comment']!="" && $_POST['subject']!="") {
$to = "[email protected]";
$email = "From: " . $email . "\r\n";
$subject = "" . $subject . "\r\n";
$comment = "" . $comment . "\r\n";
mail($to,$subject,$comment,$email);
echo "good";
}
else {
"bad";
}
?>
** 코드가 너무 많습니다 **. 이 문제를 직접 해결하는 것이 좋습니다. 우리는 디버거가 아닙니다. ** 문제를 격리하고 거기에서 디버그해야합니다. 걸린 경우 [** 최소, 완료 및 확인 가능한 예제 **] (http://stackoverflow.com/help/mcve)로 ** 작동하지 않는 사항에 대한 명확한 설명 **을 제공하십시오.나는 ** [ask] ** 좋은 질문과 ** [완벽한 질문] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) **을 읽어 보시기 바랍니다. 또한 ** [둘러보기] **를 읽고 ** [this] (// meta.stackoverflow.com/questions/347937/)**을 읽으십시오. –
메일을 보낼 때 빈 양식 값 외에는 아무것도 확인하지 않습니다. 그래서 다른 잘못된 데이터가 허용됩니다. –
나는 이미 문제가 있다고 생각하는 지점으로 코드를 압축했다 ... 그러나 나는 무엇을 그리고 어디에서 코드를 써야하는지 정확히 알지 못한다 ... – Manuel