【发布时间】:2018-05-18 11:06:47
【问题描述】:
大家好,感谢您的宝贵时间!
虽然这是我第一次尝试 PHP,但我一直在制作 PHP 表单,到目前为止,我已经能够使其验证字段,并且如果字段是,表单不会发送任何内容空的。 现在...“名称”和“电子邮件”字段具有验证过滤器... “名称”不允许超过“字母和空格”,“电子邮件”不允许出现“无效的电子邮件格式”。
示例: 名称:Rob3rt...它有一个数字 电子邮件:任何东西...不是电子邮件地址 主题和消息没有验证过滤器...
问题是,如果我填写所有字段,表单会发送电子邮件,即使写在“姓名”和“电子邮件”上的信息不符合他们的验证过滤器...
问:我如何才能阻止表单发送电子邮件,直到所有字段都包含正确的信息?
代码如下:
// 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 = "myemail@whatever.com";
$email = "From: " . $email . "\r\n";
$subject = "" . $subject . "\r\n";
$comment = "" . $comment . "\r\n";
mail($to,$subject,$comment,$email);
echo "good";
}
else {
"bad";
}
?>
【问题讨论】:
-
代码太多。您需要自己更好地解决此问题。我们不是调试器。您需要隔离问题并从那里进行调试。如果您遇到问题,请通过Minimal, Complete, and Verifiable example 提供关于什么不工作的明确解释。我建议阅读 How to Ask 一个好问题和 the perfect question。另外,请务必使用 tour 并阅读 this。
-
当您发送邮件时,除了空白表单值外,您不会检查任何内容。这就是允许其他无效数据通过的原因。
-
我已经将代码压缩到了我认为问题所在的地步......但是我不知道我必须在发送代码中的确切位置和位置......
-
也许您应该在发送电子邮件之前检查错误变量而不是 POST 属性。
-
可怜的老 Baba O'Riley,联系不上。
标签: php forms validation email post