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

PHP脚本无法接收JavaScript发送的POST数据问题求助

问题根源

你通过POST请求把数据放在了请求体里,但PHP代码却在解析URL的查询字符串(query string)——这两个完全不是同一个数据源,所以$query['param']自然返回undefined。

修复步骤

1. 修改PHP代码获取POST数据

当请求是application/x-www-form-urlencoded类型的POST时,PHP会自动把数据填充到$_POST超全局变量里,直接用这个变量就能拿到参数。另外,原代码存在严重的SQL注入漏洞,必须用预处理语句修复,否则数据库极易被攻击。

修改后的PHP代码:

<?php
// 确保OpenCon()正确返回数据库连接
$conn = OpenCon();

// 检查必要参数是否存在,避免未定义索引错误
if (!isset($_POST['name'], $_POST['contact'], $_POST['delivery'], $_POST['value'])) {
    exit("缺少必要参数");
}

// 使用预处理语句防止SQL注入
$sql = "INSERT INTO users (name, contact, delivery, value) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
// 绑定参数:s代表字符串类型,可根据字段类型调整(比如i是整数)
$stmt->bind_param("ssss", $_POST['name'], $_POST['contact'], $_POST['delivery'], $_POST['value']);

// 执行并返回结果
if ($stmt->execute()) {
    echo "数据插入成功";
} else {
    echo "插入失败: " . $stmt->error;
}

// 清理资源
$stmt->close();
$conn->close();
?>

2. 优化JavaScript代码(可选但推荐)

原JS代码直接拼接参数可能会遇到特殊字符编码问题,且没有处理请求失败的场景,推荐用URLSearchParams自动处理编码,并调整表格更新时机:

function insertNewRecord(data) {
    // 用URLSearchParams处理表单数据编码
    const formData = new URLSearchParams();
    formData.append('name', data.name);
    formData.append('contact', data.contact);
    formData.append('delivery', data.delivery);
    formData.append('value', data.value);

    fetch('/configs/database/add.php', {
        method: 'POST',
        body: formData
        // 无需手动设置Content-Type,URLSearchParams会自动处理
    })
    .then(response => {
        if (response.ok) return response.text();
        throw new Error('请求失败');
    })
    .then(message => {
        console.log(message);
        // 仅在请求成功后更新表格,避免网络失败但表格已修改的情况
        const table = document.getElementById("employeeList").querySelector('tbody');
        const newRow = table.insertRow();
        newRow.insertCell(0).textContent = data.name; // 用textContent避免XSS
        newRow.insertCell(1).textContent = data.contact;
        newRow.insertCell(2).textContent = data.delivery;
        newRow.insertCell(3).textContent = data.value;
        newRow.insertCell(4).innerHTML = `<a onClick="onEdit(this)">Edit</a>
                                           <a onClick="onDelete(this)">Delete</a>`;
    })
    .catch(error => {
        console.error(error);
        alert('数据插入失败,请重试');
    });
}
额外注意事项
  • 确认OpenCon()函数返回的是有效的数据库连接实例(如mysqli或PDO)
  • 非必要场景下用textContent代替innerHTML,避免XSS攻击
  • 所有数据库操作必须用预处理语句,这是防范SQL注入的核心手段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:10:34