Andy-H Posted November 27, 2009 Share Posted November 27, 2009 <?php class Tesco { private $quantity; private $productid; private $storeid; ########################################################################################################## ###ALL INTEGER DATA FILTERED USINT THE BELOW OPTIONS WILL HAVE A MIN VALUE OF 1 AND A DEFAULT VALUE OF 1## ###E.G. IF FILTER FAILS TO VALIDATE AS INTEGER OF 1+ IT WILL DEFAULT THE VALUE TO ONE (1)################# ########################################################################################################## protected static $options = array( 'options' => array( 'min_range' => 1, 'default' => 1 ) ); public function getPrice($quantity, $productid, $storeid = '1') { ##################################################################################################### ### ONLY NEED TO VALIDATE THESE AS INTEGERS, THIS IS SUFFICIENT TO PROTECT QUERY FROM SQL INJECTION## ##################################################################################################### $this->quantity = filter_var($quantity , FILTER_VALIDATE_INT, self::$options); $this->productid = filter_var($productid, FILTER_VALIDATE_INT, self::$options); $this->storeid = filter_var($storeid , FILTER_VALIDATE_INT, self::$options); ############################################################################# ###ONLY %d NEEDED DUE TO ALL VARS USED IN SPRINTF() BEING IN DECIMAL FORMAT## ############################################################################# $query = sprintf("SELECT price, price * %d as total FROM products WHERE id = %d AND store = %d", $this->quantity, $this->productid, $this->storeid); $result = mysql_query($query) or trigger_error('Query failed: ' . mysql_error(), E_USER_ERROR); $price = mysql_fetch_assoc($result); print_r($price); } } ?> Link to comment https://forums.phpfreaks.com/topic/183022-array-empty/page/2/#findComment-966203 Share on other sites More sharing options...
jamesxg1 Posted November 27, 2009 Author Share Posted November 27, 2009 <?php class Tesco { private $quantity; private $productid; private $storeid; ########################################################################################################## ###ALL INTEGER DATA FILTERED USINT THE BELOW OPTIONS WILL HAVE A MIN VALUE OF 1 AND A DEFAULT VALUE OF 1## ###E.G. IF FILTER FAILS TO VALIDATE AS INTEGER OF 1+ IT WILL DEFAULT THE VALUE TO ONE (1)################# ########################################################################################################## protected static $options = array( 'options' => array( 'min_range' => 1, 'default' => 1 ) ); public function getPrice($quantity, $productid, $storeid = '1') { ##################################################################################################### ### ONLY NEED TO VALIDATE THESE AS INTEGERS, THIS IS SUFFICIENT TO PROTECT QUERY FROM SQL INJECTION## ##################################################################################################### $this->quantity = filter_var($quantity , FILTER_VALIDATE_INT, self::$options); $this->productid = filter_var($productid, FILTER_VALIDATE_INT, self::$options); $this->storeid = filter_var($storeid , FILTER_VALIDATE_INT, self::$options); ############################################################################# ###ONLY %d NEEDED DUE TO ALL VARS USED IN SPRINTF() BEING IN DECIMAL FORMAT## ############################################################################# $query = sprintf("SELECT price, price * %d as total FROM products WHERE id = %d AND store = %d", $this->quantity, $this->productid, $this->storeid); $result = mysql_query($query) or trigger_error('Query failed: ' . mysql_error(), E_USER_ERROR); $price = mysql_fetch_assoc($result); print_r($price); } } ?> That does the job absolutely perfect. Cheers mate. on prob i got is this. <?php class Tesco { private $quantity; private $productid; private $storeid; protected static $options = array( 'options' => array( 'min_range' => 1, 'default' => 1 ) ); public function getPrice($quantity, $productid, $storeid = '1') { $this->quantity = filter_var($quantity , FILTER_VALIDATE_INT, self::$options); $this->productid = filter_var($productid, FILTER_VALIDATE_INT, self::$options); $this->storeid = filter_var($storeid , FILTER_VALIDATE_INT, self::$options); $query = sprintf("SELECT price, price * %d as total FROM products WHERE id = %d AND store = %d", $this->quantity, $this->productid, $this->storeid); $result = mysql_query($query) or trigger_error('Query failed: ' . mysql_error(), E_USER_ERROR); $price = mysql_fetch_assoc($result); $total += $price['total']; echo $total; } } ?> so if i put 2 items in the process Item 1 = 100 * 6 = 600 Item 2 = 1 * 8 = 8 returns 6008 :S lol. Many many thanks James. Link to comment https://forums.phpfreaks.com/topic/183022-array-empty/page/2/#findComment-966393 Share on other sites More sharing options...
Andy-H Posted November 27, 2009 Share Posted November 27, 2009 Thats because the class doesn't "remember" the value of $total from the last call made to an instance of itself, it simply echoes out the totals from the two calls made without whitespace/formatting. I.E echo '600'; echo '8'; //would output 6008 This should work. <?php class Tesco { private $quantity; private $productid; private $storeid; private $total; protected static $options = array( 'options' => array( 'min_range' => 1, 'default' => 1 ) ); public function getPrice($quantity, $productid, $storeid = '1') { $this->quantity = filter_var($quantity , FILTER_VALIDATE_INT, self::$options); $this->productid = filter_var($productid, FILTER_VALIDATE_INT, self::$options); $this->storeid = filter_var($storeid , FILTER_VALIDATE_INT, self::$options); $query = sprintf("SELECT price, price * %d as total FROM products WHERE id = %d AND store = %d", $this->quantity, $this->productid, $this->storeid); $result = mysql_query($query) or trigger_error('Query failed: ' . mysql_error(), E_USER_ERROR); $price = mysql_fetch_assoc($result); $this->total += $price['total']; } public function getTotal() { ########################################### ###GET TOTAL TO TWO DECIMAL PLACES IN GBP## ########################################### return "£" . number_format($this->total, 2); } } ?> Then you can use the class to get the total like so: $tesco = new Tesco; $tesco->getPrice($param1, $param2); $tesco->getPrice($param3, $param4); echo $tesco->getTotal(); Link to comment https://forums.phpfreaks.com/topic/183022-array-empty/page/2/#findComment-966580 Share on other sites More sharing options...
jamesxg1 Posted November 29, 2009 Author Share Posted November 29, 2009 Andy-H you are a star, thank you so much may I add you as a friend as when I have finished the site i am working on (the one you have just helped me with) I would like to let you know and if your interested make you mod?. Cheers mate. Just a quick question. Sorry. How do i find the lowest value from all these... echo $asda->getTotal() . '<br />'; echo $tesco->getTotal() . '<br />'; echo $morrisons->getTotal() . '<br />'; and echo the value along with the shop name ? Cheers bud Many thanks James. Link to comment https://forums.phpfreaks.com/topic/183022-array-empty/page/2/#findComment-967262 Share on other sites More sharing options...
Andy-H Posted November 29, 2009 Share Posted November 29, 2009 Of course, I think my addy is on my profile. If not I will send it to you in a PM. As for finding the lowest value; you can use the min function, although it would require making a small change to the getTotal() method. public function getTotal($sign = true) { ########################################### ###GET TOTAL TO TWO DECIMAL PLACES IN GBP## ########################################### if ($sign === true) return "£" . number_format($this->total, 2); return number_format($this->total, 2); } Then you can use: $lowest = min( $asda->getTotal(false), $tesco->getTotal(false), $morrisons->getTotal(false) ); echo $asda->getTotal() . '<br />'; echo $tesco->getTotal() . '<br />'; echo $morrisons->getTotal() . '<br />'; echo 'Lowest price: £' number_format($lowest, 2) . '<br />'; Link to comment https://forums.phpfreaks.com/topic/183022-array-empty/page/2/#findComment-967266 Share on other sites More sharing options...
jamesxg1 Posted November 29, 2009 Author Share Posted November 29, 2009 Of course, I think my addy is on my profile. If not I will send it to you in a PM. As for finding the lowest value; you can use the min function, although it would require making a small change to the getTotal() method. public function getTotal($sign = true) { ########################################### ###GET TOTAL TO TWO DECIMAL PLACES IN GBP## ########################################### if ($sign === true) return "£" . number_format($this->total, 2); return number_format($this->total, 2); } Then you can use: $lowest = min( $asda->getTotal(false), $tesco->getTotal(false), $morrisons->getTotal(false) ); echo $asda->getTotal() . '<br />'; echo $tesco->getTotal() . '<br />'; echo $morrisons->getTotal() . '<br />'; echo 'Lowest price: £' number_format($lowest, 2) . '<br />'; Worked. Thank you so much I have PM'ed you so we should be able to keep in contact. Once again thanks for this mate. Take care, all the best. James. Link to comment https://forums.phpfreaks.com/topic/183022-array-empty/page/2/#findComment-967269 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.