Steve1957 Posted February 21, 2012 Share Posted February 21, 2012 Hi Guys, I aint too hot on php (more's the pity ), so if one of you clever guys could help me out with this I'd be very grateful. Ok the script I am working with has the variables $listprice (which is the original price), $price (which is the latest price) & what I want to try to do is perform an equation using these variables, in order to produce a value that would then be assigned to $discount and displayed as a percentage. Example: $discount = ((($listprice - $price) / $listprice) * 100); $content = str_replace("{discount}", $discount, $content); Now whilst this will work perfectly if done manually using a calculator, it does not work in php ! it simply keeps returning a "0" irrespective of what the other values are. Any ideas on this would be a great help & much appreciated Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/ Share on other sites More sharing options...
requinix Posted February 21, 2012 Share Posted February 21, 2012 Do any of the values have a dollar sign? Like $25.00? Or the generic question: what are the exact values of those two variables? Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319442 Share on other sites More sharing options...
Steve1957 Posted February 21, 2012 Author Share Posted February 21, 2012 Hi requinix, the values of $listprice & $price change with each article/product & ultimately so should the $discount variable that I'm trying to create. I've been trying a few things myself since posting on here & have succeeded in getting a test.php file to produce the correct figure when opened in my browser; <?php $listprice = 495; $saving = 175; // above values are dynamically assigned by the script as each new product article is created. $discount = round (($saving / $listprice) * 100); $content = str_replace("{discount}", $discount, $content); echo $discount; ?> The above code produces the figure 35 which is correct, however as soon as I try to add the following lines of code to the script it constantly returns a zero as the value ! $discount = round (($saving / $listprice) * 100); $content = str_replace("{discount}", $discount, $content); I know I'm almost there, just can't seem to solve this last problem Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319464 Share on other sites More sharing options...
xyph Posted February 21, 2012 Share Posted February 21, 2012 Your code, copied and pasted. <?php $content = 'Today you have saved {discount}%!'; $listprice = 495; $saving = 175; // above values are dynamically assigned by the script as each new product article is created. $discount = round (($saving / $listprice) * 100); $content = str_replace("{discount}", $discount, $content); echo $content; ?> Returns Today you have saved 35%! So the issue has to be the values that aren't included in the area of code you're looking at. Bad input will give you bad output. Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319683 Share on other sites More sharing options...
requinix Posted February 21, 2012 Share Posted February 21, 2012 Thanks for the description but that wasn't what I was asking for. Do any of the values have a dollar sign? Like $25.00? Or the generic question: what are the exact values of those two variables? Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319711 Share on other sites More sharing options...
Steve1957 Posted February 22, 2012 Author Share Posted February 22, 2012 @ requinix the values of $listprice & $price change with each article/product & ultimately so should the $discount variable that I'm trying to create. Doesn't that clearly state that the values are dynamic & continually changing..? So how can I give you any value for these variables...??? Oh and yes when the article / post is finished then all values of prices are displayed in the following manner $??.?? Obviously the ? being replaced by the relevant figure! Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319817 Share on other sites More sharing options...
xyph Posted February 22, 2012 Share Posted February 22, 2012 He means exactly what that variable contains WHEN you get that error. We realize it's dynamic. Did you simply ignore my solution? Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319818 Share on other sites More sharing options...
Steve1957 Posted February 22, 2012 Author Share Posted February 22, 2012 He means exactly what that variable contains WHEN you get that error. We realize it's dynamic. Did you simply ignore my solution? No I most certainly did not ignore any offered solution or suggested code, if I don't respond immediately it means I am either busy or trying to impliment the code! Sorry but it takes me time as I don't know php like you guys do and at 55 years old my brain is not as active or quick as it once was. Hope that clarifies things..? I'm assuming the variable your talking about is $discount & the error is that it always returns a zero "0" even though the other variables of $price & $saving or $listprice, would dictate that it should be a much higher figure than just zero! Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319829 Share on other sites More sharing options...
xyph Posted February 22, 2012 Share Posted February 22, 2012 It's not so much about quickness, it's about taking the time to read and understand. You said somewhere that you created place-holders for variables otherwise defined by the database. You need to verify that these values contain what you expect. To paraphrase; garbage in, garbage out. The first thing you need to learn after basic syntax is how to debug. The first step is to make sure the data you're plugging into your code is what you expect. Add temporary echo's to see where it's messing up. Also, make sure error reporting is displayed (see signature). <?php $content = 'Today you have saved {discount}%!'; $listprice = 495; $saving = 175; // above values are dynamically assigned by the script as each new product article is created. echo "About to perform round($saving / $listprice)<br>"; $discount = round (($saving / $listprice) * 100); echo "Rounded, it's: $discount<br>"; echo "About to insert into '$content'<br>"; $content = str_replace("{discount}", $discount, $content); echo "Final<br>$content"; ?> Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319862 Share on other sites More sharing options...
Steve1957 Posted February 22, 2012 Author Share Posted February 22, 2012 It's not so much about quickness, it's about taking the time to read and understand. @ xyph, Yes understood, but this is exactly where I am having a problem, I don't yet know enough to understand & impliment the code you are offering as it is completely different to what is in the script I am using! This is the extract from the script that defines the variables being used; $content = str_replace("{price}", $price, $content); $content = str_replace("{listprice}", $listprice, $content); $savings = str_replace("$ ", "", $listprice) - str_replace("$ ", "", $price); $content = str_replace("{savings}", $savings, $content); $discount = str_replace(($savings / $listprice) * 100); $content = str_replace("{discount}", round ($discount), $content); $content = str_replace("{url}", $item->DetailPageURL, $content); $content = str_replace("{avgrating}", $item->CustomerReviews->AverageRating, $content); $content = str_replace("{reviewsnum}", $item->CustomerReviews->TotalReviews, $content); In the template I am using if I place listprice, price or savings within curly brackets, it will return the correct value for each, relevant to that particular post/article. But if I try to do the same with discount it simply returns a zero "0". Yet if I take the two indented lines of code & add to a test.php with manually inserted values for $savings & $listprice, it works perfectly when opened in my browser and returns the correct discount value. Hope that has made it clearer..? Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319875 Share on other sites More sharing options...
xyph Posted February 22, 2012 Share Posted February 22, 2012 Either you've failed at copying and pasting your code, or you have not turned error reporting on, as I suggested. That chunk of code will produce at the very least a WARNING error. Also, your two indented lines are nearly identical to two of the lines in my code posted above. If you don't know where to put the debugging echo statements in, then I'm not sure I am capable of helping. Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319883 Share on other sites More sharing options...
Steve1957 Posted February 22, 2012 Author Share Posted February 22, 2012 @xyph, Yes I do appologise, I must have copied the code from the wrong sheet, it should read; $content = str_replace("{price}", $price, $content); $content = str_replace("{listprice}", $listprice, $content); $savings = str_replace("$ ", "", $listprice) - str_replace("$ ", "", $price); $content = str_replace("{savings}", $savings, $content); $discount = round (($saving / $listprice) * 100); $content = str_replace("{discount}", $discount, $content); Now when I originally started this thread, I politely asked if anyone could offer some assistance as php is not one of my strong points & as I have already stated my age, I thought that any sensible person would be able to grasp just how difficult it is for me to learn such a language at this age! I don't know how old you are, but I doubt you were born with this inbuilt knowledge & therefore just step back for a moment and remember just how difficult it was for you when you first started..? Or perhaps a better test would be to empty an entire Landrover engine or gearbox onto a table and see how you fair at rebuilding it (something I can do blindfolded). Now nobody is forcing you to help anyone & if your own lack of understanding prevents you from doing so then so be it and I will bid you farwell & thankyou for the time you have spent on this, sorry you see it as a wasted effort! But before I go I will say that you should understand that for many people that don't know this coding language, sites like this are an absolute treasure. But it can be difficult to come on here cap in hand asking for help, when very often a person may not even know what they are talking about or may not explain themselves using correct terminology & I do understand that this can make it difficult to offer an answer to a query. Nevertheless resorting to a bad attitude, sarcasm & rudeness is not the way to teach those that have come to you for help! Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319888 Share on other sites More sharing options...
kicken Posted February 22, 2012 Share Posted February 22, 2012 Steve, The question being asked was do your variables ($price and $listprice) contain a numeric value such as 25.20 or do they contain your formatted value such as '$25.20'. PHP cannot do math on string values, it has to convert them to a number first. If your value contains non-numeric characters such as '$' or ',' then this conversion will fail and PHP will use 0, causing your math to come out incorrect. When we ask you to verify or show us what your variables contain as a value, what we want you to do is echo them out just prior to your usage of them so that you can see what value they have at that particular point in time. One of the better methods to use for this is the var_dump function. In your case, you'd modify your code to look like this: var_dump($listprice); var_dump($price); $discount = ((($listprice - $price) / $listprice) * 100); var_dump($discount); $content = str_replace("{discount}", $discount, $content); then load your page. You'd notice some extra output which would show you the exact values of those variables at that moment. Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319890 Share on other sites More sharing options...
Steve1957 Posted February 22, 2012 Author Share Posted February 22, 2012 Hi kicken, Thankyou for such a clear & concise explantation, it does make a hell of a difference! Ok I ammended the code to this, as you suggested; $content = str_replace("{price}", $price, $content); var_dump($price); $content = str_replace("{listprice}", $listprice, $content); var_dump($listprice); $savings = str_replace("$ ", "", $listprice) - str_replace("$ ", "", $price); $content = str_replace("{savings}", $savings, $content); var_dump($savings); $discount = round (($savings / $listprice) * 100); $content = str_replace("{discount}", $discount, $content); And attempted to create a fresh post, but I got the following flashed up on the screen before even looking at the post; string(0) "" string(0) "" int(0) When I checked the post no values were displayed at all & no zero "0" either, just a blank space where the value used to be. So if I understand this correctly, these values are being created as strings rather than numeric data & this is what is causing the problem..? Also explains why when I added values to these strings manually, (I only used numbers with no $ sign), it performed the calculation without any trouble at all! Is that correct..?? Assuming this is the problem, how involved would it be to change the script to use numeric data instead of strings..? I have a feeling we are talking a lot of re-written script here..?? Thanks for your help Kicken at least now I have some clue as to what is going on Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319896 Share on other sites More sharing options...
kicken Posted February 22, 2012 Share Posted February 22, 2012 string(0) "" string(0) "" int(0) string(0) "" indicates that your variable has no value. It is an empty string, which when converted to a number is zero. Your variables appear to not be getting the values you think they should. Somewhere in your code prior to this you are not assigning them correctly, or not passing them to the page correctly. You will need to start looking back through the code to find out where the error is. Move the var_dump statements around your code at different places and use them to "trace" the code by seeing what the values of certain variables are at different points in the script. Assuming this is the problem, how involved would it be to change the script to use numeric data instead of strings..? PHP does not care too much about the actual type of the variables. Having them be strings is ok, PHP will convert them to numbers when it needs to in order to do the math. You just have to ensure that the value consists of only digits and a decimal point. Any non-numeric characters such as a $ prefix or comma separator will cause PHP to fail to convert the value. Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319901 Share on other sites More sharing options...
xyph Posted February 22, 2012 Share Posted February 22, 2012 You have the solution in your last code block. Whoever wrote that code strips out '$ ' before attempting to use the values arithmetically. You're asking, cap in hand, for us to add functionality to code you haven't written, and then explain how we did it in hope that you might learn something. Age has nothing to do with your inability to figure this stuff out... it's all in your approach to learning. Learn to walk before you crawl, or you'll forever be frustrated with solutions to your problems that you don't understand. Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319904 Share on other sites More sharing options...
Steve1957 Posted February 22, 2012 Author Share Posted February 22, 2012 You have the solution in your last code block. Whoever wrote that code strips out '$ ' before attempting to use the values arithmetically. You're asking, cap in hand, for us to add functionality to code you haven't written, and then explain how we did it in hope that you might learn something. Age has nothing to do with your inability to figure this stuff out... it's all in your approach to learning. Learn to walk before you crawl, or you'll forever be frustrated with solutions to your problems that you don't understand. @ xyph 1. Ok YOU may see the solution in my last block of code, but unfortunately I do not! If I did then do you really think I would come on here asking for some assistance..? 2. At no point did I imply it was my code! And being unable to write or read and fully understand this code does not prevent me from having ideas that I think may improve the functionality of the script, or shall we all assume that once a script is written then that is as good as it will ever get..? And yes why shouldn't I try to learn or has it suddenly been made a criminal act on this forum..? Oh & thanks to Kicken I have now learnt about the use of var_dump(). 3. You know nothing of my ability/inability to learn, but as you brought this up let me just inform you that if you take the time to check, there are several different styles & methods of learning "FACT" & unfortunately I have great difficulty in learning from books, because I am unable to relate to what they are talking about! I am the type of person that learns best by hands on experience (practical as opposed to theory), so does my different method of learning make me any less of a person..? No! it simply means that throughout my entire life I have had to put up with very arrogant, self opinionated, self righteous people that could not teach if their life depended on it! Perhaps when you have a moment free you may care to read what is said here: - http://people.usd.edu/~bwjames/tut/learning-style/styleres.html about Kinesthetic Learners. Then perhaps you may have a better understanding of why I appear to try to run before I can walk! Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319933 Share on other sites More sharing options...
xyph Posted February 22, 2012 Share Posted February 22, 2012 Regardless of the 'way' you learn, you need to learn the basics first. You're jumping in attempting to swap place-holders and isolate specific values from a string. I don't see how you could properly understand a solution to that problem when you don't know how to verify what values these strings contain. Even more important, it doesn't seem you know where these variables are being populated. Why are you taking my advice as an attack? You're jumping on the defensive when I'm really trying to help you. The forum you've posted in is for people to get help with their own code. There's a 3rd Party PHP Scripts forum, where you can ask people to help you modify something beyond your current ability. I'm not calling you stupid, I'm saying you won't learn anything - especially being harder for you to learn in the first place, as a hands-on learner - if you dive in head first. There's variables, there's conditionals and loops, operators and functions as well as terminology you need to learn before trying to modify that script - even with our guiding advice. In response, 1. I expect you to understand what each line is meant to do. If not, I expect you to ask about a specific function call or line you don't understand. 2. It's neat that you're coming up with functionality you'd like to see in someone else's program. You shouldn't expect us to implement that, or hold your hand through every step. Again, the solution to your problem has been posted many, many times. We don't get paid, so you shouldn't expect much more than a helpful nudge in the right direction. 3. I brought it up? It was your initial excuse. Sorry but it takes me time as I don't know php like you guys do and at 55 years old my brain is not as active or quick as it once was. The link you posted has nothing about trying to run before you walk. Quote Link to comment https://forums.phpfreaks.com/topic/257429-finding-percentage-difference-to-assign-as-discount/#findComment-1319940 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.