PHP购物车总价格计算不正确
问题描述:
有趣的问题在这里...不知道问题出在哪里,因为我正在使用我拥有的其他网站的代码。第一个网站工作完美,没有问题...但是当我将它转换到我的新网站时,总价格数量将无法正确计算。PHP购物车总价格计算不正确
问题:当我切换代码时,是否丢失了某些内容?如果我将下面的代码放到while循环中,它只能用于一个项目,但不能用于多个项目,如果我将位置更改为此项目,它看起来不正确。
<div class="column text-lg">Subtotal: <span class="text-medium">$<?php echo $totalamount; ?></span></div>
下面是一些图片和我的代码:
OLD的工作代码:
<?php
if (! isset($totalamount)) {
$totalamount=0;
}
$totalquantity=0;
if (!session_id()) {
session_start();
}
include ('core/connectdb.php');
$sessid = session_id();
$query = "SELECT * FROM cart WHERE cart_sess = '$sessid'";
$results = mysqli_query($connect, $query) or die (mysql_query());
if(mysqli_num_rows($results)==0)
{
echo '<div id="content" class="float_r"><div align="center"><h3>Your cart is empty.</h3> You can find our items on our <a href="products.php">product page</a>.</div></div><div class="cleaner"></div>';
}
else
{
?>
<div id="content" class="float_r">
<div align="center"><h1>Shopping Cart</h1></div>
<table border="1" align="center" cellpadding="5">
<tr><td> Item Code</td><td>Quantity</td><td>Item Name</td><td>Price</
td><td>Total Price</td>
<?php
while ($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
extract($row);
echo "<tr><td>";
echo $cart_itemcode;
echo "</td>";
echo "<td><form method=\"POST\" action=\"cart.php?action=change&icode=
$cart_itemcode\"><input type=\"text\" name=\"modified_quantity\" size=\"2\"
value=\"$cart_quantity\">";
echo "</td><td>";
echo $cart_item_name;
echo "</td><td>";
echo '$' . $cart_price . '';
echo "</td><td>";
$totalquantity = $totalquantity + $cart_quantity;
$totalprice = number_format($cart_price * $cart_quantity, 2);
$totalamount=$totalamount + ($cart_price * $cart_quantity);
echo '$' . $totalprice . '';
echo "</td><td>";
echo "<input type=\"submit\" name=\"Submit\" value=\"Change quantity\">
</form></td>";
echo "<td>";
echo "<form method=\"POST\" action=\"cart.php?action=delete&icode=$cart_itemcode\">";
echo "<input type=\"submit\" name=\"Submit\" value=\"Delete Item\"></form>
</td></tr>";
}
echo "<tr><td >Total</td><td>$totalquantity</td><td></td><td></td><td>";
$totalamount = number_format($totalamount, 2);
echo '$' . $totalamount . '';
echo "</td></tr>";
echo "</table><br>";
echo "<div style=\"width:400px; margin:auto;\">You currently have " .
$totalquantity . " product(s) selected in your cart</div> ";
?>
<table border="0" style="margin:auto;">
<tr>
<td><button style="font-family:verdana; font-size:150%;" onclick="goBack()">Go Back</button></td>
<td style="padding: 10px;">
<form method="POST" action="cart.php?action=empty">
<input type="submit" name="Submit" value="Empty Cart"
style="font-family:verdana; font-size:150%;" >
</form>
</td><td>
<?php include('cart_upload.php'); ?>
</td></tr></table>
</div>
<div class="cleaner"></div>
<?php
}
?>
新的非工作代码:
<?php
if (! isset($totalamount)) {
$totalamount=0;
}
$totalquantity=0;
if (!session_id()) {
session_start();
}
include ('core/connectdb.php');
$sessid = session_id();
$query = "SELECT * FROM cart WHERE cart_sess = '$sessid'";
$results = mysqli_query($connect, $query) or die (mysql_query());
if(mysqli_num_rows($results)==0)
{
echo '<div"><div align="center"><h3>Your cart is empty.</h3> You can find our items on our <a href="products.php">product page</a>.</div></div>';
}
else
{
?>
<!-- Page Title-->
<div class="page-title">
<div class="container">
<div class="column">
<h1>Cart</h1>
</div>
<div class="column">
<ul class="breadcrumbs">
<li><a href="index.php">Home</a>
</li>
<li class="separator"> </li>
<li>Cart</li>
</ul>
</div>
</div>
</div>
<!-- Page Content-->
<div class="container padding-bottom-3x mb-1">
<!-- Shopping Cart-->
<div class="table-responsive shopping-cart">
<table class="table">
<thead>
<tr>
<th>Product Name</th>
<th class="text-center">Quantity</th>
<th class="text-center">Subtotal</th>
<th class="text-center"><a class="btn btn-sm btn-outline-danger" href="#">Clear Cart</a></th>
</tr>
</thead>
<tdbody>
<?php
while ($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
extract($row);
$cart_price = number_format($cart_price);
echo '<tr>';
echo '<td>';
echo '<div class="product-item"><a class="product-thumb" href="shop-single.php?item=' . $cart_itemcode . ' "><img src="' . $cart_imagename . '" alt="' . $cart_item_name . '"></a>';
echo '<div class="product-info">';
echo '<h4 class="product-title"><a href="shop-single.php?item=' . $cart_itemcode . ' ">' . $cart_item_name . '</a></h4>';
echo '</div>';
echo '</div>';
echo '</td>';
echo '<td class="text-center">';
echo '<div class="count-input">';
echo '$' . $cart_price . ' Each';
echo "<form method=\"POST\" action=\"cart.php?action=change&icode=
$cart_itemcode\"><input type=\"text\" name=\"modified_quantity\" size=\"2\"
value=\"$cart_quantity\"><br\><input type=\"submit\" name=\"Submit\" value=\"Update\">
</form>";
echo '</div>';
echo '</td>';
$totalquantity = $totalquantity + $cart_quantity;
$totalprice = number_format($cart_price * $cart_quantity);
$totalamount= number_format($totalamount + ($cart_price * $cart_quantity));
echo '<td class="text-center text-lg text-medium">$' . $totalprice . '</td>';
echo '<td class="text-center"><a class="remove-from-cart" href="cart.php?action=delete&icode=' . $cart_itemcode . '" data-toggle="tooltip" title="Remove item"><i class="icon-cross"></i></a></td>';
echo '</tr>';
}
}
?>
</tbody>
</table>
</div>
<div class="shopping-cart-footer">
<div class="column text-lg">Subtotal: <span class="text-medium">$<?php echo $totalamount; ?></span></div>
</div>
<div class="shopping-cart-footer">
<div class="column"><a class="btn btn-outline-secondary" onclick="goBack()"><i class="icon-arrow-left"></i> Back to Shopping</a></div>
<div class="column"><a class="btn btn-primary" href="#" data-toast data-toast-type="success" data-toast-position="topRight" data-toast-icon="icon-circle-check" data-toast-title="Your cart" data-toast-message="is updated successfully!">Update Cart</a><a class="btn btn-success" href="checkout-address.php">Checkout</a></div>
</div>
</div>
答
它看起来像你加在一起格式化的数字,这一定是麻烦。不要这样做。保持你的价值观为原料的内部可能只有格式,那么如果当你将其显示给用户:
$totalquantity = $totalquantity + $cart_quantity;
$totalprice = $cart_price * $cart_quantity;
$totalamount = $totalamount + ($cart_price * $cart_quantity);
echo '<td class="text-center text-lg text-medium">$' . number_format($totalprice) . '</td>';
记住,乱码就是错误隐藏。保持干净,就好像你在厨房工作一样。总是保持组织有序。如果你被困在一段代码中,并不确定它为什么起作用,那么你应该做的第一件事就是清理它。然后保持清洁。有时候在重新组织这个错误的过程中变得很明显。
+0
谢谢你tadman,我会清理代码,看看我能做些什么。 –
答
于是我发现了问题......在我页面的顶部我有这个代码:
if (! isset($totalamount)) {
$totalamount=0;
}
显然是出于某种原因的代码正在考虑它有2
值
$totalamount=0;
像魔术现在工作正常,即使格式化的数字:有一次,我我while循环之前加入此向底部。我想保留格式化的数字,因为我不想在我的价格中获得任何美分,只需花费全部金额。
注意:'mysqli'的面向对象的接口明显不那么冗长,使得代码更易于阅读和审计,并且不容易与陈旧的'mysql_query'接口混淆。在你过于投入程序风格之前,它是值得转换的。例如:'$ db = new mysqli(...)'和'$ db-> prepare(“...”)过程接口是PHP4时代的一个神器,当引入mysqli API时,不应该在新的代码:'mysql_error'是错误的函数在这里使用 – tadman
**警告**:当使用'mysqli'你应该使用[参数化查询](http://php.net/manual/en/mysqli.quickstart。 prepared-statements.php)和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)将用户数据添加到您的查询。**不要**使用字符串插值或连接来完成这个工作,因为你已经创建了一个严重的[SQL注入漏洞](http://bobby-tables.com/)。**从不**放置'$ _POST','$ _GET'或**任何**用户数据直接加入到查询中,如果有人试图利用您的错误,这可能会非常有害。 – tadman
许多问题可以通过[在mysqli中启用例外]来检测和解决(https:// *。com/questions/14578243/turning-query-errors-to-exceptions-in-mysqli),所以错误不容易被忽略。 – tadman