簡體   English   中英

PHP-無法在會話中更新購物車總金額

[英]PHP - Cannot update the cart total amount in Session

如標題所述,我無法更新購物車總額。 這是我的情況。

我有一個結帳頁面,其中有一個運輸金額選項,用戶必須從下拉菜單中選擇一個選項。 選擇后,購物車的總金額應更新,在我的導航鏈接所在的標題以及我希望用戶單擊按鈕進行結帳的頁面中添加運費。

這是運費HTML代碼:

<select name="selectZone" id="custDelAddZone">
    <option value="-1">----- Select -----</option>
    <?php
    $queryForZone = "SELECT * FROM shipping_zones ORDER BY ZoneName";
    $validate->Query($queryForZone);
    if ($validate->NumRows() >= 1) {
        while ($row = $validate->FetchAllDatas()) {
            echo '<option value="'.$row['ZoneId'].'">'.$row['ZoneName'].'</option>';
        }
    }
    ?>
</select>                   
<button name="CustDelAddUpdateZone" id="btnCustDelAddUpdateZone" type="submit">Continue</button>

這是單擊按鈕的AJAX部分:

$("#btnCustDelAddUpdateZone").click(function() {
    zoneId = $("#custDelAddZone").val();
    if (zoneId == '-1') {
        toastr.error("Please Select The Region", "Error");
        toastr.options.showMethod = "slideDown";
        toastr.options.hideMethod = "slideUp";
    }
    var dataStr = $("#chooseShippingZoneForm").serialize();
    $.ajax({
        url: 'http://localhost/ECommerceOnFlatastic/ActionFiles/Customers/UpdateDeliveryZone.php',
        type: 'POST',
        data: dataStr,
        success: function(msg) {
            toastr.success(msg);
            toastr.options.showMethod = "slideDown";
            toastr.options.hideMethod = "slideUp";

            $("#selectZoneForm").slideUp();
            $("#delMethod h3").removeClass("color_light active");
            $("#paytMethod").show();
            $("#paytMethod h3").removeClass("bg_light_color_1 color_dark");
            $("#paytMethod h3").addClass("color_light active");
            $("#payment").slideDown();
        }
    });
    return false;
});

這是PHP腳本(UpdateDeliveryZone.php):

<?php
session_start();

$zoneId = $custCode = "";

require_once '../../Classes/class.Validation.php';
$validate = new Validation('developi_ecommerce');

$q = "SELECT CustCode FROM customers WHERE CustEmailAdd = '".$_SESSION['Customer']['email']."'";
$validate->Query($q);
if ($validate->NumRows() >= 1) {
    while ($row = $validate->FetchAllDatas()) {
        $custCode = $row['CustCode'];
    }
} else {
    echo "No Customer Found";
}

if ( isset( $_POST['selectZone'] ) && $_POST['selectZone'] != "" ) {
    $zoneId = $validate->EscapeString( $_POST['selectZone'] );
    $query = "UPDATE customers_delivery_address SET ZoneId = '".$zoneId."' WHERE CustCode = '".$custCode."' AND CustDelAddLastInserted >= NOW() - INTERVAL 10 MINUTE";
    if ( $validate->Query( $query ) == TRUE ) {
        echo "Updated Successfully";
    } else {
        echo "Invalid Query";
    }
} else {
    echo "Value Not Set";
}
?>

這是我嘗試獲取PHP中購物車總金額的方法:

if ($validate->Query($sql) == TRUE) {
    if ($validate->NumRows() >= 1) {
        while ( $row = $validate->FetchAllDatas() ) {
            echo '<tr>';
            echo '<td style="width: 50%;" data-title="Product Image &amp; name" class="t_md_align_c"><img src="images/Products/'.$row['ProdCode'].'.jpg" alt="'.$row['ProdCode'].'" class="m_md_bottom_5 d_xs_block d_xs_centered" height="75" width="75"><a href="product.php?code='.$row['ProdCode'].'" class="d_inline_b m_left_5 color_dark">'.$row['ProdName'].'</a></td>';
            echo '<td style="width: 5%;" data-title="SKU">'.$row['ProdCode'].'</td>';
            echo '<td style="width: 5%;" data-title="Price"><p class="f_size_large color_dark">Rs. '.$row['ProdRate'].'</p></td>';
            echo '<td  style="width: 5%;" data-title="Quantity"><div class="clearfix d_inline_middle f_size_medium color_dark m_bottom_10">'.$_SESSION['cart'][$row['ProdCode']]['quantity'].'</div></td>';

            $sbTotal = $row['ProdRate'] * $_SESSION['cart'][$row['ProdCode']]['quantity'];
            $subTotal = $sbTotal;
            echo '<td style="width: 5%;" data-title="Subtotal"><p class="f_size_large fw_medium scheme_color t_align_r">'.number_format($sbTotal, 2).'</p></td>';
            $total += $subTotal;
            $_SESSION['cartTotalAmount'] = $total;
            $tax = $row['CatTaxPercent'];
            $taxAmt = (($sbTotal * $tax ) / 100);
            $taxAmount += $taxAmt;
            $amt = 0;
            $cartWeightPerProduct = ($row['weight'] * $_SESSION['cart'][$row['ProdCode']]['quantity']);
            echo '</tr>';
            $totalCartWeight += $cartWeightPerProduct;
        }
        $totalTaxAmount += $taxAmount;

        $_SESSION['cartWeight'] = $totalCartWeight; 

        $sessAmnt = ($total + $totalTaxAmount);
        $totalPayableAmnt = $sessAmnt + $_SESSION['TotalWeight']; // This is my cart total amount

        $_SESSION['sessionTotalPayable'] = number_format($totalPayableAmnt, 2);
        if ( isset( $_SESSION['sessionTotalPayable'] ) ) {
            $amt = $totalPayableAmnt;
        } else {
            $amt = "Rs. 0";
        }

        echo '<tr><td colspan="4"><p class="fw_medium f_size_large t_align_r t_xs_align_c">Cart Total:</p></td><td colspan="1"><p class="fw_medium f_size_large color_dark t_align_r">'.number_format($total, 2).'</p></td></tr>';

        echo '<tr><td colspan="4"><p class="f_size_large t_align_r t_xs_align_c">Taxes:</p></td><td colspan="1"><p class="f_size_large color_dark t_align_r">'. number_format($totalTaxAmount, 2) .'</p></td></tr>';

        echo '<tr><td colspan="4"><p class="f_size_large t_align_r t_xs_align_c">Shipping:</p></td><td colspan="1"><p id="shippingAmount" class="f_size_large color_dark t_align_r">'.number_format($_SESSION['TotalWeight'], 2).'</p></td></tr>';

        echo '<tr><td colspan="4"><p class="fw_medium f_size_large t_align_r t_xs_align_c">Total Payable Amount:</p></td><td colspan="1"><p class="fw_medium f_size_large color_dark t_align_r">'.number_format($amt, 2).'</p></td></tr>';
    }
}

對於那些想知道$_SESSION['TotalWeight']來自何處的人:

<?php
session_start();

require_once 'Classes/class.Validation.php';

function SelectZoneAmount($amt, $id) {
    $validate = new Validation('developi_ecommerce');
    $zoneCol = 0;
    if ($amt >= 1 && $amt <= 499 ) {
        $zoneCol = 'SWC_0_500';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 500 && $amt <= 999) {
        $zoneCol = 'SWC_500_1000';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 1000 && $amt <= 1499) {
        $zoneCol = 'SWC_1000_1500';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 1500 && $amt <= 1999) {
        $zoneCol = 'SWC_1500_2000';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 2000 && $amt <= 2499) {
        $zoneCol = 'SWC_2000_2500';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 2500 && $amt <= 2999) {
        $zoneCol = 'SWC_2500_3000';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 3000 && $amt <= 3499) {
        $zoneCol = 'SWC_3000_3500';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 3500 && $amt <= 3999) {
        $zoneCol = 'SWC_3500_4000';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 4000 && $amt <= 4499) {
        $zoneCol = 'SWC_4000_4500';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 4500 && $amt <= 4999) {
        $zoneCol = 'SWC_4500_5000';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    } elseif($amt >= 5000 && $amt <= 10000) {
        $zoneCol = 'SWC_5000_10000';
        $query = "SELECT $zoneCol FROM shipping_weight_charges WHERE ZoneId = '".$id."'";
        $validate->Query($query);
        while ($row = $validate->FetchAllDatas()) {
            return $row[$zoneCol];
        }
    }
}
$region = 0;
if (isset($_POST['selectZone'])) {
    $region = SelectZoneAmount($_SESSION['cartWeight'], $_POST['selectZone']);
    $_SESSION['TotalWeight'] = $region;
    echo number_format($_SESSION['TotalWeight'], 2);
}

?>

當我轉到結帳頁面並選擇送貨地區時,我無法刷新購物車總額。 我知道某處一定有邏輯錯誤。 請幫助我糾正錯誤。

先感謝您。

我認為,發現錯誤:

 $_SESSION['sessionTotalPayable'] = number_format($totalPayableAmnt, 2);  

您可以使用number_format()函數在session var設置值。 這是錯誤的方式。

您只能使用number_format()函數查看部分...

因為, number_format()返回一個字符串。 因此,它無法計算。

請根據上述條件檢查您的代碼。 那可能會解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM