php - php中的表单验证——错误和成功信息同时显示
问题描述
我正在学习编码并创建了一个简单的表单,错误消息显示在每个输入字段的下方。但是,当我检查表单时,成功消息与错误消息同时出现,而不是在正确输入所有字段并验证表单时显示。你能帮忙吗?提前谢谢你。这是我的代码。
</php>
$errorMessage = "";
$successMessage = "";
$emailError = "";
$emailconfirmError = "";
$nameError = "";
$messageError = "";
$servicesError = "";
$name = $email = $emailConfirm = $services = $message = "";
$email = isset($_POST['email']) ? $_POST['email'] : '';
$emailConfirm = isset($_POST['emailConfirm']) ? $_POST['emailConfirm'] : '';
if ($_POST) {
if (!$_POST['email']) {
$emailError .="The email is required";
}
if (!$_POST['emailConfirm']) {
$emailconfirmError .="Please confirm your email <br>";
}
if ($_POST['emailConfirm'] && $email != $emailConfirm) {
$emailconfirmError .="The email addresses do not match <br>";
}
if (!$_POST['name']) {
$nameError .="The name field is required <br>";
}
if (!$_POST['services']) {
$servicesError .="Please select a service required <br>";
}
if (!$_POST['message']) {
$messageError .="The message field is required <br>";
}
if ($_POST['email'] && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
$emailError .= "The email address is invalid.<br>";
}
if ($name = $email = $emailConfirm = $services = $message != "") {
echo $emailError;
echo $emailconfirmError;
echo $name;
echo $services;
echo $message;
}else {
$emailTo = "kamala_guliyeva@hotmail.com";
$services = $_POST['services'];
$message = $_POST['message'];
$headers = "From: ".$_POST['email'];
if (mail($emailTo, $services, $message, $headers)) {
$successMessage = '<div class="alert alert-success" role="alert">Thank you for your message. We\'ll get back to you ASAP!</div>';
} else {
$errorMessage = '<div class="alert alert-danger" role="alert"><p>Your message couldn\'t be sent - please try again</div>';
}
}
}
和 HTML
<div id="quote">
<div class="container">
<h2 class="section-title">Request a Quote</h2>
<hr align="left" width="8%" class="style-one">
<br>
<div><? echo $errorMessage.$successMessage; ?></div>
<form id="quoteForm" method="post">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<input type="email" class="form-control" style="height:60px" id="email" name="email" placeholder="Your email">
<label class="error" id="emailError"><?php echo $emailError; ?></label>
</div>
<div class="form-group">
<input type="email" class="form-control" style="height:60px" id="emailConfirm" name="emailConfirm" placeholder="Re-type your email">
<label class="error" for="e-mailConfirm" id="emailconfirmError"><?php echo $emailconfirmError; ?></label>
</div>
<div class="form-group">
<input type="name" class="form-control" id="name" style="height:60px" name="name" placeholder="Your Name">
<label class="error" for="name" id="nameError"><?php echo $nameError; ?></label>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<select class="form-control" id="services" name="services" style="height:60px">
<option value="">Select Services</option>
<option value="Installation">Installation</option>
<option value="Repair">Repair</option>
<option value="Service and Maintenance">Service and Maintenance</option>
</select>
<label class="error" for="services" id="servicesError"><?php echo $servicesError; ?></label>
</div>
<div class="form-group">
<textarea class="form-control" id="message" name="message" placeholder="Message" style="height: 163px;" cols="35"></textarea>
<label class="error" for="message" id="messageError"><?php echo $messageError; ?></label>
</div>
</div>
</div>
<div class="form-row text-center">
<div class="col-12">
<button type="submit" style="width:10rem" class="btn quoteButton pt-3 pb-3 text-align-center">Get a Quote</button>
</div>
</div>
</form>
</div>
</div>
解决方案
你有几个问题...
所以首先是你如何做你的检查。
if(!$_POST) {
不是检查帖子是否发生的有效方法,您需要执行类似的操作
if(isset($_POST) && !empty($_POST)) {
会更合适,因为您正在检查 POST 数组是否实际设置,然后它不为空 && 运算符是短路运算符,因此如果不满足任一条件,则检查将失败。
同样,在您的比较中说 if(!$_POST['email']) { 无效,因为您实际上是在询问“帖子数组的电子邮件部分是否不正确”,而您需要询问“是否是不是空白,并且是有效的电子邮件地址”
您需要注意 = == 和 === 运算符之间的区别。您可以在此处找到更多信息:3 个不同的等于
还有这里的 filter_var 函数:http: //php.net/manual/en/function.filter-var.php
if($_POST['email']!=="" && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
//all good
} else {
//set your error message
}
您可以使用正则表达式来验证“名称”参见手册http://php.net/manual/en/function.preg-match.php中的 preg_match
除了所有这些,如果您想实时监控字段和错误消息等,您将不得不考虑合并 Javascript 并使用 AJAX 与您的脚本进行通信,然后将响应解析回适当的 div .
看看 Rasmus 30 秒 AJAX 教程将为您提供此http://rajshekhar.net/blog/archives/85-Rasmus-30-second-AJAX-Tutorial.html的起点
但是,最好同时进行客户端和服务器端验证,希望这会有所帮助,即使它本身并不是一个完整的答案。
推荐阅读
- r - 使用 ggplotly 将鼠标悬停在多折线图中粗体/突出显示单行
- scorm2004 - 如何使用 Scorm 1.2 制作 Angular 和 PHP 项目?
- mongodb - 如何在 mongo shell 中将 MongoDB ISODate 数组元素转换为格式化的字符串元素?
- javascript - Jquery中的复选框检查问题
- python - QApplication和主窗口连接
- amazon-web-services - 为什么未在 CloudFormation Stack 中创建此安全组?
- regex - 正则表达式在第一次出现时停止
- c# - Selenium Webdriver 单击并发送密钥等在 Google Chrome 版本 78.0.3904.87 上不起作用
- python - 有没有更快的方法来达到相同的结果?
- mongodb - MongoDB:如何获取集合中的对象名称?