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

PHP页面间无法传递Post ID,插入数据库始终为0求助

解决PHP页面间帖子ID传递失败的问题

咱们一步步拆解你遇到的问题——你在传递和使用帖子ID的过程中犯了几个小但关键的错误,这就是为什么插入数据库的post_id始终为0的原因:

1. 列表页跳转链接的参数格式错误

你当前生成的跳转链接是:

echo $addComment = "<a href=\"addComments.php?$post_id\">AddComment</a>";

这种写法会让URL变成类似addComments.php?10的格式,没有参数名,导致$_GET['post_id']根本无法获取到帖子ID的值。你需要给参数加上明确的名称:

echo "<a href=\"addComments.php?post_id=$post_id\">AddComment</a>";

修正后URL会变成addComments.php?post_id=10,后续页面就能通过$_GET['post_id']拿到正确的ID。

2. addComments.php中隐藏域的value值错误

你当前的隐藏域代码是:

echo'<input type="hidden" name="post_id" value="postID"/>';

这里的value="postID"是字符串字面量,不是变量。首先要在addComments.php开头先获取URL中的帖子ID,再把它赋值给隐藏域:

// 先获取并校验URL中的post_id,转成整数避免非法值
$postID = isset($_GET['post_id']) ? intval($_GET['post_id']) : 0;

然后修正隐藏域代码:

echo '<input type="hidden" name="post_id" value="'.$postID.'"/>';
// 或者用双引号写法更简洁
// echo "<input type='hidden' name='post_id' value='$postID'/>";

3. 插入数据库时的参数获取方式与SQL注入风险

你的表单是通过method="post"提交的,所以插入时应该从$_POST中获取post_id,而不是$_GET。另外,直接把变量拼到SQL语句里会有严重的SQL注入风险,一定要用预处理语句:

// 假设你已经建立了合法的数据库连接$conn
if(isset($_POST['post_id']) && $_POST['post_id'] > 0){
    $postID = intval($_POST['post_id']);
    $sql = "INSERT INTO Comments (post_id) VALUES (?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $postID); // "i"表示参数为整数类型
    $stmt->execute();
    // 可以添加执行结果判断
    if($stmt->affected_rows > 0){
        echo "评论提交成功!";
    } else {
        echo "提交失败,请重试。";
    }
}

测试验证

完成以上修正后,点击帖子10的AddComment链接,URL会携带post_id=10参数;进入addComments.php页面后,隐藏域会正确填充10;提交表单后,数据库会插入正确的post_id值,而不是0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:25:23