网站模板联系表单添加PHP处理器无法运行,求排查代码错误
问题原因排查
1. HTML表单错误
所有表单输入项缺少name属性,PHP的$_POST全局变量必须通过输入项的name属性值才能读取提交的内容,你当前的表单提交后PHP无法获取到任何用户输入的内容。
需要给对应输入项补充name属性:
- 姓名输入框加
name="name" - 邮箱输入框加
name="email" - 消息文本域加
name="message"
2. PHP代码错误
- 超全局变量大小写错误:PHP中
$_POST是大写,你写的小写$_post无法被识别,无法读取提交数据 - 变量拼写错误:
- 定义的访客邮箱变量是
$visitor_email,拼接邮件内容时写成了$vistor_email,缺失字符导致变量值为空 - 定义的发件人变量是
$email_form,构造邮件头时写成了$email_from,拼写不一致导致发件人信息错误
- 定义的访客邮箱变量是
- Header跳转语法不规范:HTTP头的Location字段首字母需要大写,跳转地址包含空格容易被浏览器识别失败,建议修改文件名为无空格格式
- 缺少终止执行逻辑:调用header跳转后没有添加
exit();,会导致后续代码可能继续执行 - 缺少基础校验:当前没有做非空校验、邮箱格式校验,直接调用mail函数不仅可能因为空值发送失败,还容易被恶意利用发送垃圾邮件
修正后HTML代码
<div class="row justify-content-center"> <div class="col-md-7"> <form method="post" data-aos="fade" action="contact-form-handler.php"> <div class="form-group row"> <div class="col-md-6 mb-3 mb-lg-0"> <input type="text" class="form-control" placeholder="First name" name="first_name" required> </div> <div class="col-md-6"> <input type="text" class="form-control" placeholder="Last name" name="last_name" required> </div> </div> <div class="form-group row"> <div class="col-md-12"> <input type="text" class="form-control" placeholder="Subject" name="subject"> </div> </div> <div class="form-group row"> <div class="col-md-12"> <input type="email" class="form-control" placeholder="Email" name="email" required> </div> </div> <div class="form-group row"> <div class="col-md-12"> <textarea class="form-control" id="" cols="30" rows="10" placeholder="Write your message here." name="message" required></textarea> </div> </div> <div class="form-group row"> <div class="col-md-6"> <input type="submit" class="btn btn-primary py-3 px-5 btn-block" value="Send Message"> </div> </div> </form> </div> </div> </div> </div>
修正后PHP代码
<?php // 先判断是否是POST请求,避免直接访问PHP文件报错 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 读取提交数据,做基础的格式处理与校验 $first_name = htmlspecialchars(trim($_POST['first_name'])); $last_name = htmlspecialchars(trim($_POST['last_name'])); $name = $first_name . ' ' . $last_name; $visitor_email = filter_var(trim($_POST['email']), FILTER_VALIDATE_EMAIL); $subject = htmlspecialchars(trim($_POST['subject'])); $message = htmlspecialchars(trim($_POST['message'])); // 校验必填项,不符合要求直接终止 if (empty($name) || !$visitor_email || empty($message)) { die('请填写完整必填信息,且保证邮箱格式正确'); } $email_from = "contact@asineedit.com"; $email_subject = "新表单提交:" . $subject; $email_body = "用户名:$name.\n". "用户邮箱:$visitor_email.\n". "用户消息:$message.\n"; $to = "mouad@asineedit.com"; $headers = "From: $email_from \r\n"; $headers .= "Reply-To: $visitor_email \r\n"; $headers .= "Content-Type: text/plain; charset=utf-8 \r\n"; // 指定编码避免乱码 // 发送邮件,发送失败给出提示 if (mail($to,$email_subject,$email_body,$headers)) { header("Location: news-updates.html"); // 请先将原跳转文件改名,去掉文件名中的空格 exit(); } else { die("邮件发送失败,请检查服务器邮件配置"); } } else { die("非法请求"); }
内容的提问来源于stack exchange,提问作者AsIneedit
相关产品推荐
相关产品推荐

