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

Ajax POST请求无法传递数据,求技术帮助(编程新手)

解决Ajax POST无法传递数据及后端SQL问题

嘿,作为编程新手遇到这种问题很正常,咱们一步步来排查和解决你的问题:

前端代码的核心问题

  • postid变量未定义:你的Ajax请求里data:{'postid': postid}中的postid没有看到赋值代码!如果这个变量不存在,传递给后端的就是undefined,自然拿不到数据。你需要先给它赋值,比如从页面的输入框或其他元素获取:
    var postid = $('#your-postid-element').val(); // 替换成你实际获取ID的方式
    
  • (可选但建议)添加错误回调:原代码只有成功回调,加上错误回调能帮你快速排查请求失败的原因:
    error: function(xhr, status, error){
        alert('请求出错:' + error);
    }
    

后端代码的关键错误

这部分是你问题的核心,有几个根本性错误:

  1. 错误获取POST参数:
    $id = isset($_POST["postid"]);这行代码完全错了!isset()返回的是布尔值(true/false),而不是POST过来的实际ID值。正确的写法应该是先判断存在性再取值,同时做安全过滤:
    // 如果postid是数字类型,用这个过滤更安全
    $id = filter_input(INPUT_POST, 'postid', FILTER_SANITIZE_NUMBER_INT);
    // 如果是字符串类型,用FILTER_SANITIZE_STRING
    
  2. SQL注入漏洞 + 变量名错误:
    直接把$id拼进SQL语句会导致严重的SQL注入风险!而且你代码里用了$conn->error,但数据库连接变量是$link,这里会触发未定义变量错误。必须用预处理语句来解决这两个问题:
  3. 未处理空ID的情况:如果$id为空,执行UPDATE会无效,最好先判断ID是否有效。

修正后的完整代码

前端代码(假设从输入框获取ID)

$(document).ready(function(){
  $("button").click(function(){
    // 先获取postid的值,根据你的页面结构修改选择器
    var postid = $('#postid-input').val();
    
    // 先判断ID是否为空,避免无效请求
    if(!postid){
        alert('请选择有效的ID');
        return;
    }
    
    $.ajax({
      type: 'POST',
      url: 'processwifi.php',
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
      data: {'postid': postid},
      success: function(response){
        alert('操作成功:' + response);
      },
      error: function(xhr, status, error){
        alert('请求出错:' + error);
      }
    });
  });
});

后端processwifi.php代码

<?php
// 安全获取并过滤POST参数
$id = filter_input(INPUT_POST, 'postid', FILTER_SANITIZE_NUMBER_INT);

// 检查ID是否有效
if(empty($id)){
    echo "错误:未获取到有效的ID";
    exit;
}

// 数据库连接
$link = new mysqli("127.0.0.1","***","***","secretariaat");
if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

// 使用预处理语句执行更新,防止SQL注入
$sql = "UPDATE wifi SET gebruikt='1' WHERE id=?";
$stmt = $link->prepare($sql);
// 绑定参数:"i"表示参数是整数,若为字符串则用"s"
$stmt->bind_param("i", $id);

if ($stmt->execute() === TRUE) {
    echo "ID为 '$id' 的记录更新成功";
} else {
    echo "Error: " . $sql . "<br>" . $link->error;
}

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:35