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
相关产品推荐
相关产品推荐

