1

我正在创建一个购物车,其中有四个按钮继续购物、清除购物车、更新购物车和下订单我,我在哪里做,这是我的代码

<?php
    include("includes/db.php");
    include("includes/functions.php");

    if(isset($_REQUEST['command'])=='delete' && $_REQUEST['pid']>0){
        remove_product($_REQUEST['pid']);
    }
    elseif(isset($_REQUEST['command'])=='clear'){
        $_SESSION["cart"] = array();
    }
    elseif($_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';
            }
        }
    }

?>

这是我的 javascript

function update_cart(){
    document.form1.command.value='update';
    document.form1.submit();
}

这是我的代码

<?php
            if(is_array($_SESSION['cart'])){
                echo '<tr bgcolor="#FFFFFF" style="font-weight:bold"><td>Serial</td><td>Name</td><td>Price</td><td>Qty</td><td>Amount</td><td>Options</td></tr>';
                $max=count($_SESSION['cart']);
                for($i=0;$i<$max;$i++){
                    $pid=$_SESSION['cart'][$i]['productid'];
                    $q=$_SESSION['cart'][$i]['qty'];
                    $pname=get_product_name($pid);
                    if($q==0) continue;
            ?>
                    <tr bgcolor="#FFFFFF"><td><?php echo $i+1?></td><td><?php echo $pname?></td>
                    <td>$ <?php echo get_price($pid)?></td>
                    <td><input type="text" name="product<?php echo $pid?>" value="<?php echo $q?>" maxlength="3" size="2" /></td>                    
                    <td>$ <?php echo get_price($pid)*$q?></td>
                    <td><a href="javascript:del(<?php echo $pid?>)">Remove</a></td></tr>
            <?php                   
                }
            ?>
                <tr><td><b>Order Total: $<?php echo get_order_total()?></b></td><td colspan="5" align="right"><input type="button" value="Clear Cart" onclick="clear_cart()"><input type="button" value="Update Cart" onclick="update_cart()"><input type="button" value="Place Order" onclick="window.location='billing.php'"></td></tr>
            <?php
            }
            else{
                echo "<tr bgColor='#FFFFFF'><td>There are no items in your shopping cart!</td>";
            }
        ?>
4

2 回答 2

1

isset($_REQUEST['command'])产生truefalse。将该值与 比较'delete'产生与 相同的值isset($_REQUEST['command']),因为'delete'被强制转换为布尔值true以与另一个布尔值进行比较。

特别是,结果

isset($_REQUEST['command'])=='clear'

总是一样

isset($_REQUEST['command'])=='update'

所以如果第二个的条件elseif成立,那么第一个的条件也成立elseif。因此,第二个的主体elseif永远不会被执行(elseif而是第一个的主体被执行)。

于 2013-03-23T08:42:35.787 回答
0

几点。首先,我在代码中看不到您将任何产品添加到会话数组中的任何地方。这意味着您永远不会有任何产品要更新。还有 for 循环

    $max=count($_SESSION['cart']);
    for($i=0;$i<$max;$i++){

永远不会开始,因为在初始条件 $max 设置为 0 并且循环的边界条件是 $max < 0 即 0<0 ..

如果您尝试仅更新数量,那么您最初的前提是根本错误的,因为会话购物车永远不会有任何产品要更新,并且从您提出的第一个问题的解决方案中,$_SESSION['cart'] 的设置为array() 将始终保证一个空的 _SESSION 购物车。

这些行:

elseif(isset($_REQUEST['command'])=='clear'){
    unset($_SESSION['cart']);
}

如果购物车最初未定义,则会在 unset() 行出现未定义错误而失败。请参阅第一个问题的答案以详细说明。

在您的页面顶部显示代码中,您有

        if(is_array($_SESSION['cart'])){

如果您实现了“明确”问题的解决方案,这将始终返回 true,因为您将购物车初始化为一个空数组。(顺便说一句 - 请更新上面的代码以反映该问题的“明确”解决方案)

至于更新代码的其余部分,我可以提出一些改进建议,但除非您可以实现一种填充购物车的方法,否则这一切都有些学术性。

另一方面,如果这只是一组脚本中的一个,并且如果它希望购物车在它执行任何操作之前已经被另一个填充,那么您将需要显式添加一个测试以确保 $max 是不为零,如果是,则什么也不做。

    $max=count($_SESSION['cart']);
    if ($max > 0) {
      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';
        }
      }
    } else {
      // handle the error your way
    }
于 2013-03-23T08:44:04.863 回答