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

如何利用Session从多表取数并实现文章详情页布局?

问题分析与解决方案

咱们先把问题拆明白:现在点击“read more”的时候,根本没告诉博客页你到底选中了哪篇文章——只靠Session里的用户ID,博客页只能查出这个用户的所有文章,自然就会全部渲染出来。所以核心是要传递选中文章的唯一ID,然后在博客页区分“选中的那篇”和“剩下的文章”。

第一步:给主页的“read more”按钮加文章ID参数

原来的表单只提交到blog.php,没带任何文章标识,咱们得加个隐藏字段把当前文章的ID传过去。修改主页里的表单部分:

<form action="blog.php" method="GET">
  <!-- 新增隐藏字段,把当前文章的ID传去博客页 -->
  <input type="hidden" name="article_id" value="<?php echo $ar['article_id']; ?>" />
  <input type="submit" class="btn btn-info" name="read" value="read more" />
</form>

⚠️ 注意:这里的article_id要替换成你文章表里实际的文章主键字段名(找那个唯一标识单篇文章的字段)。

第二步:重构博客页代码,分别渲染选中文章和其余文章

现在博客页能拿到两个关键信息:用户ID(从Session)和选中的文章ID(从GET参数)。咱们分两次查询:一次查选中的文章,一次查排除这篇之外的其他文章,然后分别渲染左侧和右侧。

修改后的博客页代码示例:

<div class="container">
<?php 
session_start();
// 拿到用户ID和选中的文章ID
$user_id = $_SESSION['id'];
$selected_article_id = $_GET['article_id'];

// 数据库连接(提醒:mysql_*函数已经废弃,建议换成mysqli或PDO!)
$con = mysql_connect("localhost","root","");
mysql_select_db("demo_db",$con);

// 查询选中的那篇文章(同时验证属于当前用户)
$sql_selected = "SELECT * FROM article_tb WHERE id = $user_id AND article_id = $selected_article_id";
$res_selected = mysql_query($sql_selected);
$selected_article = mysql_fetch_array($res_selected);

// 查询用户的其他文章(排除选中的那篇)
$sql_others = "SELECT * FROM article_tb WHERE id = $user_id AND article_id != $selected_article_id";
$res_others = mysql_query($sql_others);
?>

<!-- 左侧区域:展示选中的完整文章 -->
<div class="row">
  <div style="border:1px solid #005212;" class="col-sm-8 col-md-8 col-lg-8">
    <div class="row">
      <center><img style="margin-top:10px;" src="uploads/<?php echo $selected_article[3]; ?>" /></center>
      <div class="col-sm-12 col-md-12 col-lg-12">
        <h4><b><?php echo $selected_article[1]; ?></b></h4>
        <p><?php echo $selected_article[2]; ?></p>
      </div>
    </div>
  </div>

  <!-- 右侧区域:展示用户的其他文章 -->
  <div class="col-sm-4 col-md-4 col-lg-4">
    <h3>Other Articles by You</h3>
    <hr>
    <?php while($other_article = mysql_fetch_array($res_others)) { ?>
      <h4><b><?php echo $other_article[1]; ?></b></h4>
      <div class="row">
        <div class="col-sm-6 col-lg-6 col-md-6">
          <img src="uploads/<?php echo $other_article[3]; ?>" width="170px" height="88" />
        </div>
        <div class="col-sm-6 col-md-6 col-lg-6">
          <?php echo $other_article[5]; ?> &nbsp;
          <!-- 给其他文章也加read more按钮,同样传递文章ID -->
          <form action="blog.php" method="GET">
            <input type="hidden" name="article_id" value="<?php echo $other_article['article_id']; ?>" />
            <input type="submit" class="btn btn-info" name="read" value="read more" />
          </form>
        </div>
      </div>
      <hr>
    <?php } ?>
  </div>
</div>
</div>

几个必须提的重要提醒

  • 废弃函数警告:你现在用的mysql_*系列函数已经被PHP官方淘汰了,不仅没有维护,还存在SQL注入风险,建议尽快换成mysqli或者PDO,并且一定要用预处理语句来防注入!
  • 字段名适配:代码里的article_id是假设的文章主键,一定要替换成你自己文章表里的实际字段名(找那个唯一的文章ID字段)。
  • 安全验证:要确保Session里的id是已登录用户的合法ID,最好加个登录状态判断,防止未授权用户访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:42:25