PHP新手求助:网站表单提交失败,无返回错误信息
表单提交失败排查与修复
问题现象
点击表单「Send Message」按钮时,出现错误提示:Error: Form submission failed and no error message returned from: contact.php
相关代码
HTML表单
<form id="contact-form" action="contact.php" method="post" data-toggle="validator" role="form" class="php-email-form"> <div class="row"> <div class="col-md-6 form-group"> <input type="text" name="name" class="form-control" id="name" placeholder="Your Name" required> </div> <div class="col-md-6 form-group mt-3 mt-md-0"> <input type="email" class="form-control" name="email" id="email" placeholder="Your Email" required> </div> </div> <div class="form-group mt-3"> <input type="text" class="form-control" name="subject" id="subject" placeholder="Subject" required> </div> <div class="form-group mt-3"> <textarea class="form-control" name="message" rows="5" placeholder="Message" required></textarea> </div> <div class="my-3"> <div class="loading">Loading</div> <div class="error-message"></div> <div class="sent-message">Your message has been sent. Thank you!</div> </div> <div class="text-center"> <button id="submit" type="submit">Send Message</button> </div> </form>
contact.php
<?php $receiving_email_address = 'myemail@blabla.com'; $to = 'myemail@blabla.com'; $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS); $from = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL); $subject = filter_input(INPUT_POST, 'subject', FILTER_SANITIZE_SPECIAL_CHARS); $message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_SPECIAL_CHARS); if (filter_var($from, FILTER_VALIDATE_EMAIL)) { $headers = ['From' => ($name?"<$name> ":'').$from, 'X-Mailer' => 'PHP/' . phpversion() ]; mail($to, $subject, $message." from: ".$_SERVER['REMOTE_ADDR'], $headers); die('OK'); } else { die('Invalid address'); } echo $contact->send(); ?>
contact.js
(function () { "use strict"; let forms = document.querySelectorAll('.php-email-form'); forms.forEach( function(e) { e.addEventListener('submit', function(event) { event.preventDefault(); let thisForm = this; let action = thisForm.getAttribute('action'); let recaptcha = thisForm.getAttribute('data-recaptcha-site-key'); if( ! action ) { displayError(thisForm, 'The form action property is not set!') return; } thisForm.querySelector('.loading').classList.add('d-block'); thisForm.querySelector('.error-message').classList.remove('d-block'); thisForm.querySelector('.sent-message').classList.remove('d-block'); let formData = new FormData( thisForm ); if ( recaptcha ) { if(typeof grecaptcha !== "undefined" ) { grecaptcha.ready(function() { try { grecaptcha.execute(recaptcha, {action: 'php_email_form_submit'}) .then(token => { formData.set('recaptcha-response', token); php_email_form_submit(thisForm, action, formData); }) } catch(error) { displayError(thisForm, error) } }); } else { displayError(thisForm, 'The reCaptcha javascript API url is not loaded!') } } else { php_email_form_submit(thisForm, action, formData); } }); }); function php_email_form_submit(thisForm, action, formData) { fetch(action, { method: 'POST', body: formData, headers: {'X-Requested-With': 'XMLHttpRequest'} }) .then(response => { return response.text(); }) .then(data => { thisForm.querySelector('.loading').classList.remove('d-block'); if (data.trim() == 'OK') { thisForm.querySelector('.sent-message').classList.add('d-block'); thisForm.reset(); } else { throw new Error(data ? data : 'Form submission failed and no error message returned from: ' + action); } }) .catch((error) => { displayError(thisForm, error); }); } function displayError(thisForm, error) { thisForm.querySelector('.loading').classList.remove('d-block'); thisForm.querySelector('.error-message').innerHTML = error; thisForm.querySelector('.error-message').classList.add('d-block'); } })();
问题排查与修复方案
1. 修复PHP代码冗余与逻辑漏洞
- 移除无效代码:contact.php末尾的
echo $contact->send();永远不会被执行,直接删除即可。 - 增加输入合法性检查:前端
required验证可被绕过,需在后端补充字段非空判断:if(empty($name) || empty($from) || empty($subject) || empty($message)) { die('All fields are required'); } - 限制请求方法:确保仅处理POST请求,避免直接访问contact.php返回错误:
if($_SERVER['REQUEST_METHOD'] !== 'POST') { die('Invalid request method'); }
2. 排查邮件发送功能
很多服务器默认禁用或未配置mail()函数,可先测试该函数是否有效:
// 在contact.php开头添加测试代码 $testResult = mail('your-test-email@example.com', 'Test Mail', 'This is a test message'); var_dump($testResult); // 输出false说明mail函数无法使用
若mail()失效,建议改用PHPMailer等第三方邮件库,或联系服务器管理员配置SMTP服务。
3. 优化JavaScript错误捕获
当前JS未处理服务器返回的500等错误状态,修改fetch响应逻辑:
.then(response => { if (!response.ok) { throw new Error(`Server error: ${response.status}`); } return response.text(); })
4. 服务器环境检查
- 确认服务器支持PHP 5.6及以上版本;
- 检查contact.php文件权限设置为644;
- 查看服务器错误日志(如Apache的error.log、Nginx的error.log),获取更详细的错误信息。
内容的提问来源于stack exchange,提问作者Sain Ahab
相关产品推荐
相关产品推荐

