znf96
znf96

Reputation: 61

Total price didn't show up in shopping cart in PHP

I have a shopping cart page which the total price didn't show up in the table the products added (picture below). I can't figure out where's the error. I need help, thanks in advance!

enter image description here

Here's my code:

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>';
                   }
               }
           }
       }
  ?>

Upvotes: 0

Views: 749

Answers (3)

Gilbert
Gilbert

Reputation: 3776

Your product price appears to have the literal "RM" in it as a suffix. This will cause PHP to abort number processing treating values as zeros.

You must remove non-numeric characters from your strings to make them true numbers. Something like the following may help. Kind of ugly, but simple use.

$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;
}

Upvotes: 1

coder
coder

Reputation: 906

If you want to find out the float no from product price, consider using regex. This is the way u could do it

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

$floatproductprice should be used to calculate the total and also this value should be stored in the database. Also change the type of price details and order total in database to Float or Double.

Upvotes: 1

premi
premi

Reputation: 93

Your product price is RM6.90. Give only numbers to multiply.

Upvotes: 2

Related Questions