Jump to content

Recommended Posts

Posted

could you help me figure why it’s not displaying the shipping and total amount. The values are always 0.

 

 

shoppingcart.php

<?php

class shoppingCart {

protected $items = array();

public function addItem($product_id)

{

if (array_key_exists($product_id , $this->items))

$this->items[$product_id] = $this->items[$product_id] +1;

else

$this->items[$product_id] = 1;

}

public function GetItemCost($product_id)

{

$cost_string = get_item_cost($product_id);

$cost_float = "$cost_string" + 0;

 

return $cost_float * $this->GetItemQuantity($product_id);

}

public function getItems()

{

return array_keys($this->items);

}

public function GetItemQuantity($product_id)

{

return intval($this->items[$product_id]);

}

public function emptyCart()

{

$this->items = array();

}

public function GetSsalesTax()

{

$salesTax = .07;

$subTotal=GetItemQuantity * $salesTax;

return $subTotal;

}

 

public function GetShippingCost($quantity)

{

if ($quantity <=2)

return 10.95;

else

return 0;

}

public function ShippingCost()

{

$total = 0;

foreach($this->items as $product_id -> $quantity)

$total = $total + $this->GetItemQuantity($product_id);

return $total;

}

/* public function GetTotal()

{

$salesTax = .07;

return $this->GetSubTotal() + $salesTax;

}*/

public function GetSubTotal()

{

$total = 0;

foreach($this->items as $product_id => $quantity)

$total = $total + $this->GetItemCost($product_id);

 

return $total;

}

public function GetSalesTax($unit_cost, $quantity)

{

$salesTax = .07;

return $unit_cost*$quantity*$salesTax;

}

public function GetTotal()

{

return $this->GetSubTotal() + $this->GetShippingCost();

}

}

 

templates.php

<?php

function render_shopping_cart_row(ShoppingCart $shopping_cart , $product_id , $line_item_counter)

{

$quantity = $shopping_cart->GetItemQuantity($product_id);

$amount = $shopping_cart->GetItemCost($product_id);

$unit_cost = get_item_cost($product_id);

 

$shipping_amount = $shopping_cart->GetShippingCost($quantity);

$salesTax = $shopping_cart->GetSalesTax($unit_cost, $quantity);

$output = "

<tr>

<td>

$product_id

<br />

Sales Tax: $salesTax

</td>

<td>

$quantity

</td>

<td>

</td>

<td>

 

$$amount

</td>

</tr>";

return $output;

}

function render_shopping_cart_shipping_row(ShoppingCart $shopping_cart)

{

return "

<tr>

<td>

</td>

<td>

Shipping:

</td>

<td>

'$.$shopping_cart->GetShippingCost().'

</td>

</tr>

";

}

function render_shopping_cart_total_row(ShoppingCart $shopping_cart)

{

return "

<tr>

<td>

</td>

<td>

Total:

</td>

<td>

'.$shopping_cart->GetTotal().'

</td>

</tr>

";

}

/*video 11

function render_paypal_checkout(ShoppingCart $shopping_cart)

{

return "

<form action='".PAYPAL_FORM_URL."' method='post'>

<input type="hidden" name="business" value=" " />

<input type="hidden" name="cmd" value="_cart" />

<input type="hidden" name="upload" value="1" />

<input type="hidden" name="currency_code" value="USD" />

<input type="hidden" name="LC" value="US" />

 

" . render_shopping_cart($shopping_cart) ."

<input type='image' name='submit' src='https://www.paypal.com/en_US/i/btn/btn_buynow_LG.gif' alt=' pay online with PayPal '>

 

</form>";

}

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_s-xclick">

<input type="hidden" name="hosted_button_id" value="M8GEXMCBNPSPC">

<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">

<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">

</form>*/

 

?>

 

checkout.php

<?php

require_once('functions.php');

require_once('templates.php');

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

<link href="doggyTreats.css" rel="stylesheet" type="text/css" />

<style type="text/css">

.shoppingCart {

width: 600px;

margin: 0;

}

</style>

</head>

 

<body>

<?php

$shopping_cart = get_shopping_cart();

if (isset($_GET["id"]))

{

$product_id = htmlspecialchars($_GET["id"]);

}

 

if (product_exist($product_id))

{

$shopping_cart->addItem($product_id);

}

?>

<table class="shoppingCart">

<tr>

<th>

Product ID

</th>

<th>

quantity

</th>

<th>

Amount

</th>

</tr>

<?php

$line_item_counter = 1;

 

foreach ($shopping_cart->getItems() as $product_id)

{

echo render_shopping_cart_row($shopping_cart, $product_id, $line_item_counter);

$line_item_counter++;

}

 

echo render_shopping_cart_shipping_row($shopping_cart);

echo render_shopping_cart_total_row($shopping_cart);

 

 

?>

</table>

<?php

set_shopping_cart($shopping_cart);

?>

 

</body>

</html>

Posted

I have a hard time sifting through this, so I'll recommend trying to use the var_dump($value) function for your variables to track when / if the totals your expecting are ever getting set.

 

Working backwards is usually where I start, so before your echoing out the variable is a good start. If its 0 there, use var_dump($value) in the function that does any work and passes it along until you've couldnt the culprit.

 

I believe its un-related but there's a weird function that doesnt get used as far as I can tell:

 

public function GetSsalesTax()
{
$salesTax = .07;
$subTotal=GetItemQuantity * $salesTax;
return $subTotal;
}

 

probably wanted that to look like:

 

public function GetSsalesTax()
{
$salesTax = .07;
$subTotal=$this->GetItemQuantity($product_id) * $salesTax;
return $subTotal;
}

 

if this function gets used. (which i doubt since theres a GetSalesTax just below that that your probably using instead.

 

You might want to follow proper function naming conventions as well to make your code a little more readable / professional.

 

some are named 'emptyCart' (lowercase start, uppercaseadditional wording) which is more widely accepted / used. Others start with captial. Again, a non-issue, but good practice.

×
×
  • Create New...