【问题标题】:Cannot delete and update items in my shopping cart something wrong with sessions无法删除和更新我的购物车中的项目会话有问题
【发布时间】:2013-02-11 17:51:54
【问题描述】:

我有购物车,当我将商品添加到购物车时,当我想更改数量或删除任何商品时,它给了我空的购物车。这是购物车的代码,开头:

已编辑:

<?php 
session_start();
require "C:/xampp/...../DButils.php";
require "C:/xampp/..../functions.php";
$msg = '';
if(isset($_REQUEST['command']) && isset($_REQUEST['pid'])>0)
 {
    remove_product($_REQUEST['pid']);
}
else if(isset($_REQUEST['command']) && $_REQUEST['command'] == 'clear'){
    unset($_SESSION['cart']);
}
else if(isset($_REQUEST['command']) && $_REQUEST['command'] == 'update'){
    $max=count($_SESSION['cart']);
    for($i=0;$i<$max;$i++){
        $pid=$_SESSION['cart'][$i]['productid'];
        $q=intval($_REQUEST['product'.$pid]);
        if($q>0 && $q<=999){
            $_SESSION['cart'][$i]['qty']=$q;
        }
        else{
            $msg='Some proudcts not updated!, quantity must be a number between 1 and 999';
        }
    }
}

 ?>

【问题讨论】:

  • 首先 isset($_REQUEST['command']) 永远不能等于 clear 或 update,结果是真还是假。删除isset,那么你可能会遇到其他错误。

标签: php session shopping-cart


【解决方案1】:

您没有正确使用isset() 函数。这将返回一个布尔值 true 或 false,而不是值的字符串。你可能打算做的是:

else if(isset($_REQUEST['command']) && $_REQUEST['command'] == 'clear'){

...和...

else if(isset($_REQUEST['command']) && $_REQUEST['command'] == 'update'){

如果没有这些更改,您将永远无法执行这些代码块,因为真/假永远不会等于“清除”或“更新”。

【讨论】:

  • 这只改变了更新购物车的能力,但如果我想删除一件商品,我不能。我在哪里可以解决这个问题?
【解决方案2】:
if(isset($_REQUEST['command']) && $_REQUEST['command']=='add' && $_REQUEST['productid']>0)
{
    remove_product($_REQUEST['pid']);
}

当您想要添加产品时,您似乎正在尝试删除该产品。

另外,正如@cilosis 提到的那样

else if(isset($_REQUEST['command'])=='update'){

将始终评估为假。这是因为 isset() 只返回一个布尔值 (true, false, 1, 0) 并且您正在评估条件:“如果 'true/false' 等于 'update'”并且因为 true 和 false 都不相等到字符串 'update' 测试每次都会失败。

如果您更新问题中的代码以删除指出的错误,可能会更容易回答您的问题。按照目前的书写方式,很难破译。

【讨论】:

  • 我编辑了上面的代码,但是现在更新和清除购物车不起作用。
  • 您是否在尝试访问 $_SESSION 的所有地方都调用 session_start()?您必须在每个调用 $_SESSION 超级全局的 PHP 脚本中使用 session_start()。如果您尝试访问 $_SESSION,PHP 不会发出警告、通知或错误,但只会将其显示为空变量。
【解决方案3】:

试试这个

 if($_REQUEST['command']=='delete' && $_REQUEST['id']>0){
 remove_product($_REQUEST['id']);
 }
 else if($_REQUEST['command']=='clear'){
 unset($_SESSION['cart']);
 }
 else if($_REQUEST['command']=='update'){
 $max=count($_SESSION['cart']);
 for($i=0;$i<$max;$i++){
 $id=$_SESSION['cart'][$i]['id'];
 q=intval($_REQUEST['qty'.$id]);
 if($q>0 && $q<=999){
 $_SESSION['cart'][$i]['qty']=$q;
 }
 else{
 $msg='Some proudcts not updated!, quantity must be a number between 1 and 999';
 }
 }
 }

表单中的按钮应该是这样的

 <a href="javascript:del(<?php echo $id?>)">
 <input type="button" class="button5" value="Remove" /></a>

【讨论】:

    【解决方案4】:

    据我所知,服务器语言(php)不理解给定的目录, 尝试有一个有效的目录,如 需要projectName/functions.php;,希望它也会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多