1

ショッピングを続ける、カートをクリアする、カートを更新する、注文するという 4 つのボタンがあるショッピング カートを作成しています私がそれをやっているところで、ここが私のコードです

<?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'])trueまたは のいずれかを生成しますfalse。その値を と比較すると、 は別のブール値と比較するためにブール値にキャストされるため'delete'、 と同じ値になります。isset($_REQUEST['command'])'delete'true

特に、の結果

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

常に同じです

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

したがって、2 番目の条件が成立する場合、1 番目の条件もelseif成立しますelseif。したがって、2 番目の本体はelseif実行されません (elseif代わりに 1 番目の本体が実行されます)。

于 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 を返します。(ところで-その質問からの「明確な」解決策を反映するように上記のコードを更新してください)

更新コードの残りの部分については、いくつかの改善を提案できますが、カートにデータを入力する方法を実装できない限り、すべてが少し学術的です。

一方、これが一連のスクリプトからの 1 つにすぎず、何かを実行する前にカートが別のスクリプトによって取り込まれていることが予想される場合は、明示的にテストを追加して $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 に答える