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

PHP使用Session变量实现收藏夹功能跨页面无法展示收藏内容问题

问题原因
  • 提交逻辑错位:菜单页的表单action直接设置为favourites.php,点击添加按钮后请求直接发送到收藏页,但添加收藏的业务逻辑写在菜单页代码里,全程没有执行,$_SESSION['favourites']自然不会被写入数据。
  • 判断条件错误:菜单页里添加逻辑的判断条件isset($_POST["favourites"])无效,表单中不存在name="favourites"的元素,这个条件永远不成立,就算提交到菜单页也不会触发写入逻辑。
  • 收藏页HTML语法错误:你把</table>标签写在了foreach循环内部,遍历第一条数据就会闭合表格,就算有收藏数据也只会显示第一条,后续内容排版完全错乱。
  • 额外语法问题:菜单页的重复收藏提示alert缺少左引号,执行时会报JS语法错误。
修复方案

1. 修改菜单页表单提交目标

把表单的action改成提交给菜单页自身,写入session完成后再跳转去收藏页:

<!-- 替换原来的form标签 -->
<form method="post" action="menudetails.php?action=add&id=<?php echo $row["id"]; ?>">

在菜单页两处写入session的逻辑后新增跳转代码:

// 第一个写入位置
$_SESSION["favourites"][$count] = $item_array;
// 新增跳转
header("Location: favourites.php");
exit();

// 第二个写入位置
$_SESSION["favourites"][0] = $food_array;
// 新增跳转
header("Location: favourites.php");
exit();

2. 修复菜单页的判断条件

把if(isset($_POST["favourites"]))改成判断session里的收藏数组是否存在:

if(isset($_SESSION["favourites"])) 

3. 修复重复收藏提示的语法错误

// 替换原来的alert代码
echo '<script>alert("You have already added this item to Favourites")</script>';

4. 修复收藏页的HTML语法

把</table>移到foreach循环外面,同时修正td的width属性写法:

<?php 
if(!empty($_SESSION["favourites"]))
{
    foreach($_SESSION["favourites"] as $key => $value)
    {
?>
        <tr>
            <!-- 把错误的width: 20%改成正确的width="20%" -->
            <td width="20%"><?php echo $value["item_name"] ?></td>
            <td style="text-align: left"><?php echo $value["item_desc"]?></td>
            <td><?php echo '€'.$value["item_price"]?></td>
            <td><a href="favourites.php?action=delete&id=<?php echo $value["item_id"]; ?>"><span class="fav-btn">Remove</span></a></td>
        </tr>
<?php
    }
}
?>
<!-- 闭合表格标签移到循环外 -->
</table>

5. 确认session引入规则

两个页面的最开头第一行都要先引入session.php,不能有任何输出(包括空格、UTF-8 BOM头)在session_start()之前,否则session会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 16:06:03