You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP接收HTML表单数据写入JSON文件失败问题求助

PHP写入JSON文件失败修复方案

核心错误点

  • 路径格式错误:file_exists、file_put_contents等文件操作函数的参数中错误添加了Location: 前缀,该前缀仅用于HTTP跳转响应,不能作为本地文件路径使用
  • 逻辑遗漏:文件存在时未读取原有JSON内容并解析为数组,直接对未初始化的$bookingJson执行追加操作,会导致原有数据丢失,同时触发PHP未定义变量警告
  • 路径层级错误:index.php存放在根目录,assets为同级目录,不需要使用../返回上一级,错误的层级会导致系统找不到目标文件
  • 文件名拼写不一致:代码中引用的文件名为bookings.json,实际assets目录下的文件名为booking.json,名称不匹配会导致文件操作失败
  • 边界校验缺失:未对POST参数是否存在、JSON解析/编码结果、文件写入权限做校验,无法定位具体故障点

修复后代码

变量定义部分

// 增加参数存在校验,避免未传参时抛出PHP警告
$name = isset($_POST['name']) ? trim($_POST['name']) : '';
$surname = isset($_POST['surname']) ? trim($_POST['surname']) : '';
$email = isset($_POST['email']) ? trim($_POST['email']) : '';
$checkIn = isset($_POST['checkIn']) ? trim($_POST['checkIn']) : '';
$checkOut = isset($_POST['checkOut']) ? trim($_POST['checkOut']) : '';
$hotel = isset($_POST['hotel']) ? trim($_POST['hotel']) : '';

写入逻辑部分

// 定义统一的文件路径,避免重复写错
$jsonFile = './assets/booking.json';

if (!empty($name)) {
    $bookingJson = [];
    // 文件存在时先读取原有内容
    if (file_exists($jsonFile)) {
        $existingContent = file_get_contents($jsonFile);
        $bookingJson = json_decode($existingContent, true) ?: [];
    }
    // 追加新的预订数据
    $bookingJson[] = [
        "name" => $name,
        "surname" => $surname,
        "email" => $email,
        "checkIn" => $checkIn,
        "checkOut" => $checkOut,
        "hotel" => $hotel
    ];
    // 写入文件,加判断确认写入结果
    $writeResult = file_put_contents($jsonFile, json_encode($bookingJson, JSON_PRETTY_PRINT));
    if ($writeResult === false) {
        echo "文件写入失败,请检查assets目录权限";
    } else {
        echo "预订信息提交成功";
    }
}

额外注意事项

  • 确认assets目录拥有可读可写权限,Linux环境下可执行chmod 755 assets设置目录权限,booking.json文件权限设置为chmod 644 booking.json
  • 确认HTML表单的提交方式为method="POST",所有表单项的name属性和$_POST中读取的键名完全一致,无拼写错误

内容的提问来源于stack exchange,提问作者Brendon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:54:04