PHP预匹配表单验证
我的php代码在发送到我的电子邮件之前对页面上的表单本身进行验证,我遇到了一些困难 这是我的PHP,它位于doctype html之上PHP预匹配表单验证,php,forms,validation,email,Php,Forms,Validation,Email,我的php代码在发送到我的电子邮件之前对页面上的表单本身进行验证,我遇到了一些困难 这是我的PHP,它位于doctype html之上 <?php $name = $_POST['name']; $email = $_POST['email']; $subjectTitle = $_POST['subjectTitle']; $comment = $_POST['comment']; $errormsg = "Invalid Entry"; $validmsg = "Thank yo
<?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 = "";
}
}
}
?>
验证失败,当用户在文本区域键入时,仍将发送电子邮件。例如,如果用户不填写姓名、电子邮件和主题,而只填写评论,则仍会发送评论。然而,一旦我使用elseif语句,它就解决了问题
但主要问题是,赛前准备。我希望名称字段只允许空格和字母,我希望电子邮件字段只允许电子邮件。所以当我试着把这个代码放进去的时候
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天里我一直在关注这个问题,我真的不知道如何解决这个问题。请帮帮我
干杯改变
else if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['subjectTitle']) || empty($_POST['comment'])) {
$error = true;
}
else {
到
这样,只有在没有重新测试所有内容的情况下没有遇到错误时,才会发送电子邮件
或者,您可以在设置$xyzError
时设置$error=true
,并且仅在(!$error){更改时测试
else if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['subjectTitle']) || empty($_POST['comment'])) {
$error = true;
}
else {
到
这样,只有在没有重新测试所有内容的情况下没有遇到错误时,才会发送电子邮件
或者,您可以在设置$xyzError
时设置$error=true
,并且仅测试if(!$error){
您的第一个问题是,您从未检查过$nameError
或$commentError
等…如果设置$error=true;
或检查所有变量,则可能会丢失if语句
(我个人使用一个$error
,然后在执行此类操作时将消息附加到单个$message
变量,但这都是个人偏好)
这可能也是第二个问题。您从不检查$nameError
。如果将正则表达式更改为:/^[a-zA-Z]+$/
,您也不需要进行双重检查。+
而不是*
表示“1个或多个字符”。*
表示“0个或多个字符”
对于电子邮件检查,请将filter\u var()
与filter\u VALIDATE\u email
一起使用。请参阅此处的文档:您的第一个问题是,您从未检查过$nameError
或$commentError
等。如果同时设置$error=true;
或检查所有变量,则可能会丢失if语句
(我个人使用一个$error
,然后在执行此类操作时将消息附加到单个$message
变量,但这都是个人偏好)
这可能也是第二个问题。您从不检查$nameError
。如果将正则表达式更改为:/^[a-zA-Z]+$/
,您也不需要进行双重检查。+
而不是*
表示“1个或多个字符”。*
表示“0个或多个字符”
对于电子邮件检查,请将filter\u var()
与filter\u VALIDATE\u email
一起使用。请参阅此处的文档:尝试此操作
我做了以下更改:
- 在验证之前修剪值
- 在验证检查中使用从
$\u POST
分配的变量
- 使用我附加错误的单个
$error
变量
- 在正则表达式中使用
+
而不是*
,这样它将不匹配空值,并且我们不需要显式的empty()
检查。还可以使用i
修饰符使其不区分大小写,而不是A-Za-z
- 最重要的部分是:我在最后修改了
else if
逻辑。你只做了empty()
检查注释是否为空
试试这个
我做了以下更改:
- 在验证之前修剪值
- 在验证检查中使用从
$\u POST
分配的变量
- 使用我附加错误的单个
$error
变量
- 在正则表达式中使用
+
而不是*
,这样它将不匹配空值,并且我们不需要显式的empty()
检查。还可以使用i
修饰符使其不区分大小写,而不是A-Za-z
- 最重要的部分是:我在最后修改了
else if
逻辑。你只做了empty()
检查注释是否为空
保持一致。如果分配$name=$\u POST['name']
,则在代码的其余部分使用$name
——继续使用$\u POST
会让人困惑。设置$name error
没有任何作用,代码的其余部分永远不会检查它。保持一致。如果分配$name=$\u POST['name']
,然后在代码的其余部分使用$name
——继续使用$\u POST
会让人感到困惑。设置$nameError
没有任何作用,代码的其余部分从不检查它。非常感谢,我将此组合在一起,只是做了一些编辑,并将其与代码一起使用。非常感谢!非常感谢,我组合在一起了这,只是做了一些编辑,并把这个与代码,它的工作。非常感谢!
else if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['subjectTitle']) || empty($_POST['comment'])) {
$error = true;
}
else {
if (!$nameError && !$emailError && !$subjectError && !$commentError) {