【问题标题】:PHP Session problem. When item is added it adds 1 to all of the itemsPHP 会话问题。添加项目时,它会将 1 添加到所有项目
【发布时间】:2020-09-25 10:16:23
【问题描述】:

我正在制作一个购物车,当您点击两辆车中的任何一辆时,您就会将该商品添加到购物车中。问题是当我点击宝马图片时,宝马和丰田的计数都会增加。我已经为此苦苦挣扎了 2 多天了,我无法弄清楚!

这是我的第一页。当我点击任何一张图片时,我希望它把它添加到购物车中。我想使用 session 来解决这个问题。

    <?php session_start(); ?>
    <?php include('navbar.php');?>

    <h1>OstosKoriTori</h1>
    <h3>Click the picture to add the car to your shopping cart!</h3>
    <p>Toyota Chaser JZX 100</p>
    <p>BMW E92</p>
    <div class="autot">

    <a href="add-basket.php?id=chaser"><img src="chaser.jpg" alt="Chaseri"></a>
    <a href="add-basket.php?id=bmw"><img src="bmw.jpg" alt="Bemari"></a>
    <br>
    </div>

这是第二页,这个代码在你选择图片时运行。 我相信问题就在这里。

    <?php session_start(); ?>
    <?php
    if(!isset($_SESSION['chaser'])){
    $_SESSION['chaser'] = 0;
    }
    if(isset($_SESSION['chaser'])){
    $_SESSION['chaser'] += 1;
    }
    if(!isset($_SESSION['bmw'])){
    $_SESSION['bmw'] = 0;
    }
    if(isset($_SESSION['bmw'])){
    $_SESSION['bmw'] += 1;
    }
    ?>
    <?php
    header("Location: http://" . $_SERVER['HTTP_HOST']
    . dirname($_SERVER['PHP_SELF']) . '/'
    . "basket-session.php"); 
    ?>

这是最后一页,您可以根据点击图片的次数查看您拥有的汽车数量。

    <?php session_start(); ?>
    <?php include('navbar.php')?>
    <h1>OstosKoriTori</h1>
    <h3>Ostoskorin sisältö</h3>
    <p>Toyota Chaser JZX 100</p>
    <p>BMW E92</p>
    <div class="kuvat">
    <img src="chaser.jpg" alt="Chaseri">
    <img src="bmw.jpg" alt="Bemari">
    </div>
    <div class="kpl">
    <p><?php echo "Korissa on: <strong>" . $_SESSION['chaser'] . "</strong> kpl"; ?></p>
    <p><?php echo "Korissa on: <strong>" . $_SESSION['bmw'] . "</strong> kpl"; ?></p>
    </div>
    <div class="clearBasket">
    <a href="clear-basket.php">Tyhjennä ostoskori</a>
    </div>

【问题讨论】:

  • 好的,问题马上就清楚了。第一次加载页面时,会话为空,因此 chaserbmw 的值被初始化为 0。下次运行代码时,isset() 将为 chaser 和 @987654328 返回 true @,因为虽然值为0,但它已设置,因此两个值都增加了1
  • 我该如何解决这个问题?对不起,我不太明白。我不应该使用 isset() 吗?
  • 给我几分钟,我会发布答案。

标签: php session shopping-cart


【解决方案1】:

根据您发布的代码,这样的事情应该可以工作。我添加了一些 cmets 来解释代码。

<?php 

session_start();

// Initialise session to existing value or zero
$_SESSION['chaser'] = $_SESSION['chaser'] ?? 0;
$_SESSION['bmw'] = $_SESSION['bmw'] ?? 0;

// Determine selected car
$car = $_GET['id'] ?? null;

// Increment selected car
if ($car) {
    $_SESSION[$car] += 1;
}

header('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/basket-session.php'); 

【讨论】:

  • 哦,哇,好用!太感谢了!我对 $_GET['id'] 部分有疑问。点击对应图片时会自动选择正确的id吗?我不知道你能做到这一点。再次感谢您!
  • 当您单击该链接时,您会注意到浏览器 URL 发生了变化并包含了 id 参数。这称为查询字符串参数,可以通过超全局变量$_GET 访问其值。所以是的,无论你点击哪个链接,参数都会包含相应的值。
  • 好吧,这解释了很多!谢谢!
猜你喜欢
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多