【问题标题】:Creating a "Shopping cart" with saved session使用已保存的会话创建“购物车”
【发布时间】:2016-11-23 07:23:06
【问题描述】:

** 更新 ** 我让脚本可以工作,但我也希望可以选择删除产品...

这是我现在的代码:

<?php

session_start();

if (!array_key_exists('products', $_SESSION) || !is_array($_SESSION['products'])) {
    $_SESSION['products'] = [];
}

$productName = array_key_exists('productName', $_POST) ? (string) $_POST['productName'] : '';

if ($productName) {
    $_SESSION['products'][] = $productName;
}
?>
<h4>Saved Items</h4>

    <?php foreach ($_SESSION['products'] as $product): ?>
    <div class="echo-product"><i style="color:#F60;padding-right:20px;" class="fa fa-anchor" aria-hidden="true"></i><?php echo htmlspecialchars($product); ?></div>
    <?php endforeach;?>



<div class="btn-01"><p>Offerte aanvragen</p></div>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
<script>
$(function(){  // $(document).ready shorthand
     $('.btn-01').hide().fadeIn(1000);
});
</script>

好的,让我解释一下。在我的网站上,我有一个购物车之类的东西。客户选择一艘船,并假设(在本例中)船型和可选项目。

完成此操作后,将剩下几个选项。

访问者现在可以通过单击“保存此选项”来选择“保存”船只和选项。然后将此选项保存在会话中,代码如下:

<?php
    // Set session variables
    $_SESSION["boat"][] = get_the_title();
?>

并使用此代码回显:

<?php if(isset($_SESSION['boat'])){
    echo implode("<br />", array_unique($_SESSION['boat']));
} ?>

这是第一个问题:

只有当我保存第一艘船选项(有 3 个(A,B,C)),然后它说(如果我回显它)选择船 A 时,此代码才能正常工作。但是当我保存第三艘船时说“船 A、B 和 C”已保存。它不会跳过 B 船。我不知道为什么会这样。有人知道吗?以及如何解决这个问题?

好的,第二个问题。相同的代码。我怎样才能使保存的选项在div #saved-options 中可见,就像添加商品的购物车一样,如果它们也可以被删除,那就太好了。

如果我使用此代码:

<div class="col-sm-2">
    <div id="saved-boats">
    <h4>Saved boats</h4>

    <?php if(isset($_SESSION['boat'])){
        echo implode("<br />", array_unique($_SESSION['boat']));
    } ?>
</div>

那么所有的船都已经被保存了。我可以使用以下代码销毁会话:

<div class="col-sm-2">
    <div class="saved-boats">
    <h4>Saved boats</h4>
    <?php
        // remove all session variables
        session_unset();
        // destroy the session
        session_destroy();
    ?>  

    <?php if(isset($_SESSION['boat'])){
        echo implode("<br />", array_unique($_SESSION['boat']));
    } ?>
</div>

然后我就可以了,有问题 1 但没问题,但我仍然无法自动更新 div #saved-boats

有没有人可以帮助我解决这些问题?提前致谢。

【问题讨论】:

  • 你需要在会​​话中创建数组。更新时首先从会话中获取该数组,然后对其进行更新,然后将其保存回该会话。
  • 使用此代码:&lt;?php // Set session variables $_SESSION["boat"][] = get_the_title(); ?&gt; 有人告诉我我正在制作一个数组? @RonakP
  • 是的,所以按照我说的去做。获取数组,更新并重新保存
  • 你知道怎么做吗?我对这些东西有点陌生。我更喜欢 HTML、CSS 等等,然后是 PHP。 @RonakP
  • yes steggie,这是因为我们不能直接更新到会话数组,我们只能改变会话变量的值。所以我认为这最好重新保存到会话中。

标签: php jquery wordpress session


【解决方案1】:

你可以这样试试……

$stuff = array(...);

$_SESSION['boat'] = array('cart_data'=> $stuff);

$stuff = $_SESSION['boat']['cart_data'];

$stuff = // do your process like push or pop.

$_SESSION['boat'] = array('cart_data'=> $stuff);

回显您的数据。

<?php foreach($_SESSION['boat']['cart_data'] as $key=>$value){
    echo $value;
} ?>

【讨论】:

  • 感谢您的帮助。我可以在数组中放入什么。 (我想知道的一切)。但是你会用什么。您能解释一下 push 或 pop 的含义吗?
  • push 表示在购物车中添加新商品
  • pop 表示从购物车中移除
  • 你能告诉我如何使用我更新的 OP pop 一个项目吗?
猜你喜欢
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 2015-02-04
  • 2016-02-04
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多