我是这个php主题的新手,问题是我不知道如何添加会话中的数据而不是数据库中的数据。
我已经尝试了几种组合来制作阵列路径并添加总数据但是我无法(不能乘以单价),它们总是单独呈现而不是总和(总和)价格)。
<div class="fresh-table">
<?php
/*
* This is the console to get all the products in the database.
*/
$products = $con->query("select * from product");
if(isset($_SESSION["cart"]) && !empty($_SESSION["cart"])):
?>
<table id="fresh-table" class="table table-responsive">
<thead>
<th data-field="cant" data-sortable="true">Quantity</th>
<th data-field="prod" data-sortable="true">Product</th>
<th data-field="total" data-sortable="true">Total</th>
<th data-field="actions"></th>
</thead>
<?php
/*
* From here we take the route of the products obtained and reflect them in a table.
*/
foreach($_SESSION["cart"] as $c):
$products = $con->query("select * from product where id=$c[product_id]");
$r = $products->fetch_object();
?>
<tr>
<td><?php echo $c["q"];?></td>
<td><?php echo $r->name;?></td>
<td>$ <?php echo $c["q"]*$r->price; ?></td>
<td style="width:auto;">
<?php
$found = false;
foreach ($_SESSION["cart"] as $c) {
if($c["product_id"]==$r->id){
$found = true;
break;
}
}
?>
<a rel="tooltip" title="Remove" class="table-action remove" href="cart/delfromfloat.php?id=<?php echo $c["product_id"];?> ">
<i class="fa fa-trash-o fa-lg"></i>
</a>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
</br>
<span>
<h3>
<bold>Total: $
<?php
foreach($_SESSION["cart"] as $pr):
$products = $con->query("select * from product where id=$pr[product_id]");
$r = $products->fetch_object();
$subtotal = $pr["q"]*$r->price;
$sumArr[] = $subtotal;
echo array_sum($sumArr);
?>
<?php endforeach; ?>
</bold>
</h3>
</span>
</br></br>
<a href="carrito.php" class="btn btn-danger"><i title="Go to cart" class="fa fa-cart"></i> Go to cart</a>
<?php else:?>
<p class="alert alert-warning">The cart is empty.</p>
<?php endif;?>
</div>
答案 0 :(得分:0)
正如我评论的那样,您需要存储小计并在总计中使用array_sum()
:
<?php
function getCart($con)
{
if(empty($_SESSION["cart"]))
return array();
# Store the ids for the sql query
# Store the qty values for later
foreach($_SESSION["cart"] as $c) {
$ids[] = $c['product_id'];
$qty[$c['product_id']] = $c['q'];
}
# Default array
$row = array();
# Creating one query is more efficient then a whole bunch
$sql = "select * from product where id IN (".implode(', ',$ids).")";
$con->query($sql);
# Fetch assoc so all values are arrays, not a mix of
# arrays and objects (for consistency and ease)
while($result = $con->fetch_assoc()) {
# Create the quantity value from stored
$result['qty'] = $qty[$result['id']];
# Create the subtotal value from stored and db
$result['subtotal'] = $result['price'] * $qty[$result['id']];
# Assign the row
$row[] = $result;
}
# Return cart array
return $row;
}
?>
<div class="fresh-table">
<?php
if(!empty($_SESSION["cart"])){
?>
<table id="fresh-table" class="table table-responsive">
<thead>
<th data-field="cant" data-sortable="true">Quantity</th>
<th data-field="prod" data-sortable="true">Product</th>
<th data-field="total" data-sortable="true">Total</th>
<th data-field="actions"></th>
</thead>
<?php
$grandtotal = array();
/*
* From here we take the route of the products obtained and reflect them in a table.
*/
foreach(getCart($con) as $item) {
$grandtotal[] = $c["subtotal"];
?>
<tr>
<td><?php echo $item["qty"] ?></td>
<td><?php echo $item['name'] ?></td>
<td>$ <?php echo $c["subtotal"] ?></td>
<td style="width:auto;">
<?php
$found = false;
foreach ($_SESSION["cart"] as $c) {
if($c["product_id"]==$item['id']){
$found = true;
break;
}
}
?>
<a rel="tooltip" title="Remove" class="table-action remove" href="cart/delfromfloat.php?id=<?php echo $item["product_id"] ?> ">
<i class="fa fa-trash-o fa-lg"></i>
</a>
</td>
</tr>
<?php } ?>
</table>
</div>
</br>
<!-- Just echo the stored subtotals here, don't loop again -->
<span><h3><bold>Total: $<?php echo array_sum($grandtotal) ?></bold></h3></span>
</br></br>
<a href="carrito.php" class="btn btn-danger"><i title="Go to cart" class="fa fa-cart"></i> Go to cart</a>
<?php
}
else { ?>
<p class="alert alert-warning">The cart is empty.</p>
<?php
} ?>
</div>