AJAX提交表单后SQL的gameId字段始终为0的问题排查
问题排查与修复方案
你的问题核心是AJAX请求的参数格式错误,导致PHP无法正确获取liked参数的值,最终插入数据库时空值被转为0。下面是具体的排查和修复步骤:
1. 修正AJAX的data参数格式
你当前的AJAX代码直接传递了输入框的字符串值:
data: liked,
这种写法只会把原始字符串(比如"123")发送给服务器,PHP的$_POST无法识别这是liked字段的值。必须传递键值对格式的数据:
$(document).ready(function () { $("#likeForm").submit(function (event) { var liked = $("#likeInput").val(); $.ajax({ type: "POST", url: "like.php", // 改成键值对,键名要和PHP里$_POST的键一致 data: { liked: liked }, }).done(function (data) { console.log(data); }); event.preventDefault(); }); });
更简洁的写法:序列化整个表单
如果表单有多个字段,直接用serialize()方法序列化表单数据,避免手动获取每个字段:
$(document).ready(function () { $("#likeForm").submit(function (event) { $.ajax({ type: "POST", url: "like.php", data: $(this).serialize(), // 直接序列化表单 }).done(function (data) { console.log(data); }); event.preventDefault(); }); });
2. 优化PHP的参数绑定(可选但推荐)
如果你的user_id和gameId是数据库中的数值类型(比如INT),绑定参数时应该用"ii"而不是"ss",这样更匹配数据类型,避免类型转换问题:
$stmt->bind_param("ii", $userId, $like);
3. 添加调试代码排查问题
可以在PHP开头添加调试语句,查看服务器实际接收到的POST数据:
var_dump($_POST); // 查看POST参数是否正确 exit;
执行后在浏览器控制台查看输出,确认liked参数是否存在并正确取值。
4. 恢复原始的$_POST取值写法
修复AJAX参数后,你可以恢复最初的写法(去掉注释),因为此时$_POST['liked']已经能正确获取值:
$like = $_POST['liked'];
当然保留isset判断也没问题,能避免未传参时的报错。
内容的提问来源于stack exchange,提问作者Nellie
相关产品推荐
相关产品推荐

