如何用PHP实现联系表单正常功能及表单验证?
问题修复与表单验证实现
一、修复表单无法获取输入信息的问题
表单无法获取数据的核心原因是所有输入字段都缺少name属性——PHP通过$_POST['字段名']接收数据时,完全依赖字段的name属性,而非placeholder或视觉标签。同时PHP代码中存在未定义的$type变量,需要删除。
修改后的HTML代码
<div class="form-container"> <section class="contact-wrap"> <form method="post" name="myemailform" action="mail.php"> <div class="col1"> <p><label>Name</label><br /> <input type="text" name="name" placeholder="name" required></p> </div> <div class="col1"> <p><label>Email</label><br /> <input type="email" name="email" placeholder="email" required></p> </div> <div class="col1"> <p><label>Business Name</label><br /> <input type="text" name="business" placeholder="business" required></p> </div> <div class="col1"> <p><label>Website</label><br /> <input type="url" name="website" placeholder="website"></p> </div> <p><label>How can I help you?</label><br /> <textarea name="message" placeholder="message" required></textarea></p> <p><input type="submit" value="Send"></p> </form> </section> </div>
- 给每个输入字段添加对应
name属性,与PHP中$_POST的键名匹配 - 邮箱字段改为
type="email"、网站字段改为type="url",利用HTML5原生格式验证 - 必填字段添加
required属性,触发原生必填校验
修改后的PHP代码
<?php // 初始化变量,避免未定义报错 $name = $_POST['name'] ?? ''; $email = $_POST['email'] ?? ''; $business = $_POST['business'] ?? ''; $website = $_POST['website'] ?? ''; $message = $_POST['message'] ?? ''; // 移除不存在的$type变量 $formcontent = " Name: $name Email: $email Business Name: $business Website: $website Message: $message"; $recipient = "hi@helloarchie.co"; $subject = "Contact Form"; $mailheader = "From: $email\r\n"; // 处理邮件发送结果 if(mail($recipient, $subject, $formcontent, $mailheader)){ header('Location: thankyou.php'); exit; } else { echo "邮件发送失败,请稍后重试"; } ?>
- 使用
??运算符避免未定义变量报错 - 优化邮件头格式(用
\r\n替代换行,符合邮件标准) - 增加发送结果判断,替换生硬的
die提示
二、实现仅字段正确时提交(完整验证方案)
前端验证提升用户体验,后端验证保障数据安全(必须做,前端验证可被绕过)
1. 前端JavaScript增强验证
在HTML表单末尾添加脚本,实现自定义验证逻辑:
<script> document.querySelector('form').addEventListener('submit', function(e) { let isValid = true; const emailField = document.querySelector('input[name="email"]'); const websiteField = document.querySelector('input[name="website"]'); // 自定义邮箱格式验证 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if(!emailRegex.test(emailField.value)){ alert('请输入有效的邮箱地址'); isValid = false; emailField.focus(); } // 网站字段非空时验证格式 if(websiteField.value && !/^https?:\/\/.+/i.test(websiteField.value)){ alert('请输入有效的网站地址(需包含http/https)'); isValid = false; websiteField.focus(); } if(!isValid){ e.preventDefault(); // 阻止表单提交 } }); </script>
2. 后端PHP严格验证
在PHP代码最开头添加验证逻辑,确保接收的数据符合要求:
<?php // 检查请求是否为POST if($_SERVER['REQUEST_METHOD'] !== 'POST'){ header('Location: 你的表单页面URL'); exit; } // 验证必填字段 $requiredFields = ['name', 'email', 'business', 'message']; foreach($requiredFields as $field){ if(empty($_POST[$field])){ echo "请填写所有必填字段"; exit; } } // 验证邮箱格式 $email = $_POST['email']; if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ echo "请输入有效的邮箱地址"; exit; } // 验证网站格式(非必填) $website = $_POST['website'] ?? ''; if(!empty($website) && !filter_var($website, FILTER_VALIDATE_URL)){ echo "请输入有效的网站地址"; exit; } // 后续邮件发送代码... ?>
内容的提问来源于stack exchange,提问作者Kaye Huett
相关产品推荐
相关产品推荐

