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

向Session数组添加元素失败问题排查

问题分析与修复方案

我帮你排查出了几个导致商品ID无法添加到Session购物车数组的关键问题,咱们逐个解决:

1. 请求方式不匹配

你的表单用的是method='post'提交数据,但代码里却试图用$_GET['id']获取输入值——POST提交的内容只会出现在$_POST数组里,这肯定拿不到数据啊!

2. 每次点击都会重置购物车数组

你每次提交表单时都会重新创建一个新数组$myarray = array('0');,这直接把Session里之前保存的购物车内容覆盖了,根本没法实现累积添加商品的功能。正确的做法是先检查Session中的购物车是否存在,不存在再初始化,存在的话直接复用已有数组。

3. 输入框默认值错误

输入框写了value='id',这会导致默认显示字符串id,用户如果不修改就提交,传的是无效的字符串而非数字ID,这显然不符合需求,应该把默认值清空。

修复后的完整代码

<?php 
session_start(); 
include("#nav.php"); 
include("dbconnectie.php"); 

echo "Plaatsingen: "; 
$query = $db->prepare("SELECT * FROM shop"); 
$query->execute(); 
$result = $query->fetchALL(PDO::FETCH_ASSOC); 

echo "<table>"; 
foreach($result as &$data) { 
    echo "<tr>"; 
    $img = $data['img_url']; 
    echo "<td>" . $data["brand"] . "</td>"; 
    echo "<td>" . $data["model"] . "</td>"; 
    echo "<td> Condition: " . $data["cond"] . "/100 </td>"; 
    echo "<td> Prijs: &dollar; " . number_format($data["price"],2,",",".") . "</td>"; 
    echo "<td> <img src='$img' width='400' height='300' ></img> </td>"; 
    echo "<td> Plaatsing nummer: " . $data['id_img'] . "</td>"; 
    echo "</tr>"; 
    echo "<br>"; 
} 
echo "</table>"; 

if(isset($_POST['atc'])) { 
    if($_SESSION['on']){ 
        // 先检查Session购物车是否存在,不存在则初始化空数组
        if(!isset($_SESSION['cart']) || !is_array($_SESSION['cart'])){
            $_SESSION['cart'] = [];
        }
        // 从POST获取ID并转为整数,确保数据有效性
        $addtoarray = isset($_POST['id']) ? intval($_POST['id']) : 0;
        if($addtoarray > 0){ // 只添加有效的正整数ID
            array_push($_SESSION['cart'], $addtoarray); 
            echo "Toegevoogd aan uw winkelmandje."; 
            var_dump($_SESSION['cart']); 
        } else {
            echo "Voer een geldig plaatsing nummer in!";
        }
    }else { 
        echo "Log eerst in!"; 
    } 
} 
?> 
<html> 
<title>Just for kicks</title> 
<header> 
</header> 
<body> 
<form method='post' action=''> 
    Plaatsing nummer invoeren: <input type='number' name='id' value=''><br> 
    <button type="submit" class="submit" name="atc" value="atc">Winkelmadje</button><br><br> 
</form> 
</body> 
</html>

额外优化建议

  • 可以添加数据库验证,检查用户输入的ID是否真的存在于shop表中,避免无效ID被加入购物车。
  • 如果需要禁止重复添加同一商品,可以用in_array()先检查该ID是否已在购物车数组中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:44:23