mail.php无法正确发送表单数据,求助修改及跳转设置
解决方案
第一步:先修正HTML表单的两处错误
- 所有
type="test"的输入框要改成type="text",否则浏览器无法识别为文本输入控件 - 表单内部嵌套了多余的
<form action="">标签,会导致提交逻辑异常,必须删除
修正后的HTML表单代码:
<form action="mail.php" method="POST"> <p class="bodytextgrey"> Contact Name:<br /><input type="text" name="contact name" size="50" /><br /> Firm Name:<br /><input type="text" name="firm name" /><br /><br /> E-mail: (Please enter the email address you would like the document is to be sent to)<br /> <input type="text" name="email" size="50" /><br /> Job Number:<br /><input type="text" name="job number" /><br /><br /> Document you require:<br /><select name="Document you require"> <option value="Data Sheet">Data Sheet</option> </select><br/ ><br /> Discount code:<br /><input type="text" name="Discount code" size="20" /><br /><br /> <input type="submit" value="Send"><input type="reset" value="Clear"> </form>
第二步:修改mail.php代码
修改后的代码会获取所有表单字段、构建完整邮件内容,发送成功后自动跳转到thank you.html页面:
<?php // 获取所有表单字段(注意表单name带空格,$_POST的键需要完全对应) $contactName = $_POST['contact name'] ?? ''; $firmName = $_POST['firm name'] ?? ''; $email = $_POST['email'] ?? ''; $jobNumber = $_POST['job number'] ?? ''; $document = $_POST['Document you require'] ?? ''; $discountCode = $_POST['Discount code'] ?? ''; // 构建邮件内容,按字段分行显示 $formcontent = "Contact Name: $contactName\n" . "Firm Name: $firmName\n" . "Email: $email\n" . "Job Number: $jobNumber\n" . "Document Required: $document\n" . "Discount Code: $discountCode"; $recipient = "你的收件邮箱"; // 替换为实际收件邮箱地址 $subject = "网站联系表单提交"; // 完善邮件头,支持回复和UTF-8编码 $mailheader = "From: $email\r\n" . "Reply-To: $email\r\n" . "Content-Type: text/plain; charset=utf-8\r\n"; // 发送邮件并处理跳转 if(mail($recipient, $subject, $formcontent, $mailheader)){ // 发送成功,跳转感谢页面 header("Location: thank you.html"); exit; } else { // 发送失败时的提示,可根据需求改为跳转错误页 echo "邮件发送失败,请稍后重试"; } ?>
关键说明
?? ''用于避免字段未提交时出现PHP警告(需PHP 7及以上版本支持)- 邮件头添加
Reply-To可直接回复提交者邮箱,charset=utf-8确保中文内容显示正常 - 跳转必须在任何输出(如echo)之前执行,因此代码中未使用原有的文本提示
内容的提问来源于stack exchange,提问作者mark02
相关产品推荐
相关产品推荐

