【发布时间】:2014-01-20 14:38:49
【问题描述】:
我的 php 代码在发送到我的电子邮件之前验证页面本身的表单时遇到问题。
这是我的 PHP,它位于 html 文档类型之上
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$subjectTitle = $_POST['subjectTitle'];
$comment = $_POST['comment'];
$errormsg = "Invalid Entry";
$validmsg = "Thank you for your message";
if($_POST['submit']) {
if(empty($_POST['name'])) {
$nameError = true;
}
if(empty($_POST['email'])) {
$emailError = true;
}
if(empty($_POST['subjectTitle'])) {
$subjectError = true;
}
if(empty($_POST['comment'])) {
$commentError = true;
}
else if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['subjectTitle']) || empty($_POST['comment'])) {
$error = true;
}
else {
$to = "EMAIL_ADD_GOES_HERE";
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$subjectTitle = trim($_POST['subjectTitle']);
$comment = trim($_POST['comment']);
$subject = "Contact Form Enquiry";
$messages = "\r\n Name: $name \r\n Email: $email \r\n Subject: $subjectTitle \r\n Comments: $comment";
$headers = "From:" . $name;
$mailsent = mail($to, $subject, $messages, $headers);
if($mailsent) {
$sent = true;
$name = "";
$email = "";
$subjectTitle = "";
$comment = "";
}
}
}
?>
而对于我的 HTML ,为了方便查看,我将只放入表单部分。
<html>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
Name: <input type="text" name="name" id="name" value="<?php echo $name; ?>">
<?php if($nameError == true) {echo $errormsg;} ?>
Email: <input type="text" name="email" id="email" value="<?php echo $email; ?>">
<?php if($emailError == true) {echo $errormsg;} ?>
Subject: <input type="text" name="subjectTitle" id="subjectTitle" value="<?php echo $subjectTitle; ?>">
<?php if($subjectError == true) {echo $errormsg;} ?>
Comments: <textarea name="comment" id="comment"><?php echo $comment; ?></textarea>
<?php if($commentError == true) {echo $errormsg;} ?>
</form>
</html>
我的 html 中除了上面提到的,没有其他的 php 代码。
此验证仅在任何字段为空时有效。它会在页面本身内提示错误消息,并且不会在电子邮件中发送,这就是它应该如何工作的......
但是,我面临一个奇怪的问题,我似乎无法找出其背后的原因/理论/逻辑。如果你看 php 代码,如果我没有那个 else if 语句
else if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['subjectTitle']) || empty($_POST['comment'])) {
$error = true;
}
验证失败,当用户在 textarea 中键入时仍会发送一封电子邮件。例如,如果用户没有填写姓名、电子邮件和主题,而只填写了评论,它仍然会被发送。但是,一旦我放了 else if 语句,它就解决了问题。
但主要问题是 preg_match。我希望名称字段只允许空格和字母,我希望电子邮件字段只允许电子邮件。所以当我试图把这段代码放进去时,
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameError = true;
}
或将其与名称空字段检查结合起来
if (empty($_POST['name']) || (!preg_match("/^[a-zA-Z ]*$/",$name))) {
$nameError = true;
}
它没有正确验证。它的作用是,当用户在名称字段中输入一个数字并填写其他所有内容时,它会显示错误消息以及感谢消息并将其发送到电子邮件,这不是它应该如何工作的。
那么我可以就如何纠正问题获得指导吗?我的编码是否做错了,我也想知道为什么我在 php 中的 else if 语句没有意义,但我需要它来获得正确的验证。
非常感谢您的阅读,在过去的 6 天里一直卡在这个问题上,我真的不知道如何解决这个问题。请帮我。
干杯
【问题讨论】:
-
保持一致。如果您分配
$name = $_POST['name'],则在其余代码中使用$name——继续使用$_POST会令人困惑。 -
设置
$nameError不做任何事情,其余代码从不检查它。
标签: php forms validation email