【问题标题】:PHP - Cannot update the cart total amount in SessionPHP - 无法更新会话中的购物车总金额
【发布时间】:2015-01-08 08:41:11
【问题描述】:

正如标题所说,我无法更新购物车总金额。这是我的情况。

我有一个结帐页面,其中有一个运费选项,用户必须从下拉菜单中选择一个选项。选择后,购物车总金额应该会更新,在我的导航链接所在的标题以及我希望用户单击按钮进行结帐的页面中添加运费。

这是运费 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);
}

?>

当我转到结帐页面并选择送货区域时,我无法刷新购物车总金额。我知道某处一定有逻辑错误。请帮助我纠正错误。

提前谢谢你。

【问题讨论】:

  • 谁能帮帮我?

标签: php jquery ajax


【解决方案1】:

我认为,发现错误:

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

您使用number_format() 函数在session var 中设置值。这是错误的方式。

你可以使用number_format()函数只查看部分...

因为,number_format() 返回一个字符串。所以,它无法计算。

请根据上述条件检查您的代码。 那么这可能会解决。

【讨论】:

  • 不。 $_SESSION['TotalWeight']; 是我根据产品重量从数据库中获取运费的金额。
  • 这里,$sbTotal = $row['ProdRate'] * $_SESSION['cart'][$row['ProdCode']]['quantity']; $subTotal = $sbTotal; echo '&lt;td style="width: 5%;" data-title="Subtotal"&gt;&lt;p class="f_size_large fw_medium scheme_color t_align_r"&gt;'.number_format($sbTotal, 2).'&lt;/p&gt;&lt;/td&gt;'; $total += $subTotal; $total 可能没有定义..
  • 在哪一部分? $_SESSION['TotalWeight']; 来自代码的最后一部分。
  • 第四部分。您可以将$totalwhile 循环之前定义为$total=0; 并且代码很大。所以我无法检测到仅读取或查看的错误。
  • 不..还是一样..我必须再次刷新整个页面,我不想要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多