POST方法提交表单数据至PHP写入TXT文件内容为空问题排查
问题:POST表单数据无法写入TXT文件,仅显示"The request: "
你遇到的问题核心是数据传输格式不匹配以及PHP端数据获取方式错误,具体错误和修正方案如下:
错误原因
请求未设置Content-Type头
JS中把表单数据转成JSON字符串发送,但fetch请求没有声明Content-Type: application/json,PHP无法自动解析JSON数据到$_POST数组,导致$_POST为空。PHP获取数据的键名错误
你试图读取$_POST['value'],但实际发送的是包含name/email/phone/message的JSON对象,即使解析正确,也不存在value这个键。
修正方案(JSON格式传输)
修改JS的sendData函数
添加Content-Type头,告诉PHP接收的是JSON数据:
const sendData = async (url, data) => { const response = await fetch(url, { method: "POST", headers: { 'Content-Type': 'application/json' // 新增:声明数据格式为JSON }, body: data }) if (!response.ok) { throw new Error(`URL with error ${url}, status ${response.status}`) }; return await response; };
修改PHP代码
读取原始POST数据并解析JSON,再格式化写入文件:
<?php // 读取原始POST输入 $rawData = file_get_contents('php://input'); // 解析为关联数组 $formData = json_decode($rawData, true); if ($formData) { // 将数组转为易读的字符串 $dataContent = print_r($formData, true); $file = fopen('file.txt', 'a+'); fwrite($file, "The request: " . $dataContent . "\n\n"); fclose($file); } else { // 处理JSON解析失败的情况 $file = fopen('file.txt', 'a+'); fwrite($file, "The request: Invalid JSON data\n\n"); fclose($file); } ?>
可选方案(FormData格式传输,更贴合表单场景)
如果不想用JSON,直接用FormData对象发送,PHP可以直接通过$_POST获取字段:
修改JS的formSend函数
form.addEventListener("submit", formSend); async function formSend(e) { e.preventDefault(); // 阻止表单默认提交行为,避免页面刷新 // 直接从表单创建FormData对象,自动收集所有带name属性的字段 const formData = new FormData(form); sendData("http://localhost:3000/101_susov_newDesign/contactme.php", formData) .then(() => { form.reset(); }) .catch((err) => console.log(err)) }; const sendData = async (url, data) => { const response = await fetch(url, { method: "POST", body: data }) if (!response.ok) { throw new Error(`URL with error ${url}, status ${response.status}`) }; return await response; };
对应PHP代码
直接读取$_POST中的字段:
<?php // 用??运算符设置默认值,避免字段为空时报错 $name = $_POST['name'] ?? '未填写'; $email = $_POST['email'] ?? '未填写'; $phone = $_POST['phone'] ?? '未填写'; $message = $_POST['message'] ?? '未填写'; // 格式化内容 $dataContent = "姓名: {$name}, 邮箱: {$email}, 电话: {$phone}, 留言: {$message}"; $file = fopen('file.txt', 'a+'); fwrite($file, "The request: " . $dataContent . "\n\n"); fclose($file); ?>
内容的提问来源于stack exchange,提问作者skusov
相关产品推荐
相关产品推荐

