PHP中的购物车中没有显示总价格

时间:2016-08-20 10:26:25

标签: php mysql

我有一个购物车页面,总价格没有显示在产品添加的表格中(下图)。我无法弄清楚错误在哪里。我需要帮助,提前谢谢!

enter image description here

这是我的代码:

使用example.php

<?php include("dbconnection.php");?>
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Meal</title>
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <!-- jQuery library -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
    <div class="container" style="width:60%;">
        <h2 align="center">SoftAOX Tutorial | Creating an Online Shopping Cart in PHP & Mysql</h2>
        <?php
            $query = "SELECT * FROM meal ORDER BY meal_id ASC";
            $result = mysqli_query($con, $query);
            if(mysqli_num_rows($result) > 0) {
                while($row = mysqli_fetch_array($result)) {
        ?>
                    <div class="col-md-3">
                        <form method="post" action="shop.php?action=add&id=<?php echo $row["meal_id"]; ?>">
                            <div style="border: 1px solid #eaeaec; margin: -1px 19px 3px -1px; box-shadow: 0 1px 2px rgba(0,0,0,0.05); padding:10px;" align="center">
                                <img src="<?php echo $row["meal_image_Upload"]; ?>" class="img-responsive">
                                <h5 class="text-info"><?php echo $row["meal_name"]; ?></h5>
                                <h5 class="text-danger">$ <?php echo $row["meal_price"]; ?></h5>
                                <input type="text" name="quantity" class="form-control" value="1">
                                <input type="hidden" name="hidden_name" value="<?php echo $row["meal_name"]; ?>">
                                <input type="hidden" name="hidden_price" value="<?php echo $row["meal_price"]; ?>">
                                <input type="submit" name="add" style="margin-top:5px;" class="btn btn-default" value="Add to Bag">
                            </div>
                        </form>
                    </div>
        <?php
                }
            }
        ?>
        <div style="clear:both"></div>
        <h2>My Shopping Bag</h2>
        <div class="table-responsive">
            <table class="table table-bordered">
                <tr>
                    <th width="40%">Product Name</th>
                    <th width="10%">Quantity</th>
                    <th width="20%">Price Details</th>
                    <th width="15%">Order Total</th>
                    <th width="5%">Action</th>
                </tr>
                <?php
                    if(!empty($_SESSION["cart"])) {
                        $total = 0;
                        foreach($_SESSION["cart"] as $keys => $values) {
                ?>
                            <tr>
                                <td><?php echo $values["item_name"]; ?></td>
                                <td><?php echo $values["item_quantity"] ?></td>
                                <td><?php echo $values["product_price"]; ?></td>
                                <td><?php echo number_format(($values["item_quantity"] * $values["product_price"]), 2); ?></td>
                                <td><a href="shop.php?action=delete&id=<?php echo $values["product_id"]; ?>"><span class="text-danger">X</span></a></td>
                            </tr>
                <?php 
                            $total = $total + ($values["item_quantity"] * $values["product_price"]);
                        }
                ?>
                        <tr>
                            <td colspan="3" align="right">Total</td>
                            <td align="right"><?php echo number_format($total, 2); ?></td>
                            <td></td>
                        </tr>
                <?php
                    }
                ?>
            </table>
        </div>
    </div>
</body>
</html>

shop.php

<?php
       include("dbconnection.php"); 

       if(isset($_POST["add"])) {
           if(isset($_SESSION["cart"])) {
               $item_array_id = array_column($_SESSION["cart"], "product_id");
               if(!in_array($_GET["id"], $item_array_id)) {
                   $count = count($_SESSION["cart"]);
                   $item_array = array(
                       'product_id' => $_GET["id"],
                       'item_name' => $_POST["hidden_name"],
                       'product_price' => $_POST["hidden_price"],
                       'item_quantity' => $_POST["quantity"]
                   );
                   $_SESSION["cart"][$count] = $item_array;
                   echo '<script>window.location="example.php"</script>';
               } else {
                   echo '<script>alert("Products already added to cart")</script>';
                   echo '<script>window.location="example.php"</script>';
               }
           } else {
                   $item_array = array(
                       'product_id' => $_GET["id"],
                       'item_name' => $_POST["hidden_name"],
                       'product_price' => $_POST["hidden_price"],
                       'item_quantity' => $_POST["quantity"]
                   );
                   $_SESSION["cart"][0] = $item_array;
           }
       }
       if(isset($_GET["action"])) {
           if($_GET["action"] == "delete") {
               foreach($_SESSION["cart"] as $keys => $values) {
                   if($values["product_id"] == $_GET["id"]) {
                       unset($_SESSION["cart"][$keys]);
                       echo '<script>alert("Product has been removed")</script>';
                       echo '<script>window.location="example.php"</script>';
                   }
               }
           }
       }
  ?>

3 个答案:

答案 0 :(得分:2)

您的产品价格为RM6.90。只给出数字乘以。

答案 1 :(得分:1)

您的商品价格似乎在文字“RM”中作为后缀。这将导致PHP中止数字处理将值视为零。

您必须从字符串中删除非数字字符才能使其成为真正的数字。像下面这样的东西可能会有所帮助。有点难看,但很简单。

$capture_prefix = "";       #prefix for last number
function capture_number( $text )
{
    global $capture_prefix;
    $number = preg_replace( '/^[^\d]+/', "", $text );
    $capture_prefix = substr( $text, 0, strlen($text) - strlen($number) );
    return $number;
}

答案 2 :(得分:1)

如果您想从产品价格中找出浮点数,请考虑使用正则表达式。 这就是你可以做到的方式

 $productprice = "RM6.90";
 preg_match('/([0-9]+\.[0-9]+)/', $productprice, $matches);
 $floatproductprice = (float)$matches[0];// it will contain the float value

$ floatproductprice应该用于计算总数以及此值 应该存储在数据库中。还要将数据库中的价格详细信息和订单总数类型更改为Float或Double。