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

如何通过SweetAlert结合AJAX实现用户输入内容更新?请求后数据未更新

排查SweetAlert + AJAX库存更新失败的问题

嘿,我来帮你搞定这个库存更新没生效的问题!咱们先从代码里的几个关键问题入手,一步步修复:

主要问题分析

  1. SQL注入风险+语法隐患:你直接把POST参数拼进SQL语句里,不仅容易被注入攻击,要是库存号输入了非数字内容,还会导致SQL语法错误,直接更新失败。
  2. 错误处理不到位:PHP里更新失败只是跳转到首页,AJAX根本不知道哪里出问题;而且AJAX的success回调不管返回啥都认为成功,没法区分真成功还是假成功。
  3. 不必要的延迟:那个2秒的setTimeout完全没必要,反而可能让用户误以为操作没反应。
  4. 缺少AJAX错误回调:如果请求本身失败(比如网络问题、edit_stock.php路径错了),你根本看不到错误提示。

修复后的前端代码

function change_stock(item_id) {
  swal({
    title: "Edit Stock!!",
    text: "Enter the stock No: you want to change",
    type: "input",
    showCancelButton: true,
    closeOnConfirm: false,
    inputPlaceholder: "Write something"
  }, function (inputValue) {
    if (inputValue === false) return false;
    if (inputValue === "") {
      swal.showInputError("You need to write something!");
      return false;
    }

    // 去掉多余的2秒延迟,直接发起请求
    $.ajax({
      type: "POST",
      url: "edit_stock.php",
      data: {stock_no: inputValue, itemid: item_id},
      dataType: "text", // 指定返回文本类型,方便处理
      success: function (response) {
        // 验证PHP返回的成功标识,确保真的更新了
        if (response.trim() === 'updated') {
          swal({
            title: "Updated!",
            text: "Stock No: has Changed",
            type: "success"
          }, function () {
            location.reload(true);
          });
        } else {
          // 显示后端返回的错误信息,方便调试
          swal("Oops!", "Failed to update: " + response, "error");
        }
      },
      error: function(xhr, status, error) {
        // 处理请求本身失败的情况(比如网络、路径错误)
        swal("Request Failed!", "Error: " + error, "error");
      }
    });
  });
}

修复后的后端PHP代码(edit_stock.php)

<?php
if (isset($_POST['stock_no']) && isset($_POST['itemid'])) {
    include("connection.php");
    
    // 先验证输入是否为有效数字(如果库存是数字类型,可根据实际调整)
    $item_id = filter_input(INPUT_POST, 'itemid', FILTER_VALIDATE_INT);
    $stock = filter_input(INPUT_POST, 'stock_no', FILTER_VALIDATE_INT);
    
    if (!$item_id || !$stock) {
        echo "Invalid input: Item ID and Stock must be valid numbers";
        exit;
    }
    
    // 使用预处理语句彻底避免SQL注入,同时保证语法正确
    $sql = "UPDATE `item` SET `item_stock` = ? WHERE `item_id` = ?";
    $stmt = mysqli_prepare($conn, $sql);
    // 绑定参数:"ii"表示两个整数类型的参数
    mysqli_stmt_bind_param($stmt, "ii", $stock, $item_id);
    
    if (mysqli_stmt_execute($stmt)) {
        // 检查是否真的有行被更新(防止item_id不存在的情况)
        if (mysqli_stmt_affected_rows($stmt) > 0) {
            echo 'updated';
        } else {
            echo "No item found with ID: " . $item_id;
        }
    } else {
        // 返回具体的数据库错误,方便调试
        echo "Database error: " . mysqli_error($conn);
    }
    
    // 关闭语句和连接
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
} else {
    echo "Missing required parameters: stock_no or itemid";
}
?>

额外排查步骤

  1. 检查浏览器控制台:按F12打开开发者工具,切换到Network标签,找到edit_stock.php的请求,查看状态码(正常应该是200)和返回内容,就能快速定位是前端请求问题还是后端处理问题。
  2. 验证数据库连接:确认connection.php里的数据库用户名、密码、数据库名都是正确的,能正常连接到数据库。
  3. 核对表和字段:确保item表存在,item_stock和item_id字段名拼写正确,字段类型和你输入的内容匹配(比如item_stock是INT类型,就别输入字符串)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:30