MikeEvans Posted January 28, 2013 Share Posted January 28, 2013 (edited) Hello I am new to this forum, so I am not sure if I have done this write by starting a new topic, if I was not supposed to start a new topic apologies in advance. Basically I want to get a price from a website and update my database with that value in the correct field. So far I have managed to get the price and update the database. However the price is stored as boolean format so when I output the variable it says "0" or "1" and when the database is updated it says "0" or "1". Here is my working code so far. I have tried using intval, doubleval and data type castings but obviously they equal the boolean value. $url = 'a website goes here'; $html = file_get_contents($url); $search = '/<span class="price">(.*?)<\/span>/'; preg_match_all($search, $html, $matches); $price = array_shift($matches[0]); $price1 = str_replace("£","",$price); $price2 = str_replace(',','', $price1); $price3 = str_replace(".","",$price2); print_r($price3); MySQL query is okay as it is. It would be great if you could help me with this code, thanks in advance. Edited January 28, 2013 by MikeEvans Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/ Share on other sites More sharing options...
Jessica Posted January 28, 2013 Share Posted January 28, 2013 Um, don't try to store the price as a boolean. Boolean means true/false (0/1). If you want anything other than 0/1, you need to change your database field to a type that makes sense...like Decimal(5,2). You may need up to (10,2) or so, not sure how high your prices go. Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/#findComment-1408762 Share on other sites More sharing options...
MikeEvans Posted January 28, 2013 Author Share Posted January 28, 2013 Um, don't try to store the price as a boolean. Boolean means true/false (0/1). If you want anything other than 0/1, you need to change your database field to a type that makes sense...like Decimal(5,2). You may need up to (10,2) or so, not sure how high your prices go. My database is storing decimal values, its the array that is stored automatically as boolean because I used preg_match_all function. Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/#findComment-1408763 Share on other sites More sharing options...
Jessica Posted January 28, 2013 Share Posted January 28, 2013 I'd look into using a DOM parser. Regular expressions are terrible for HTML parsing. What you're looking for seems fairly simple, but I personally am horrible at regular expressions and all the PHP functions that go with - but I'd say if the function you're using returns a boolean instead of the value you want... it's the wrong function. Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/#findComment-1408764 Share on other sites More sharing options...
MikeEvans Posted January 28, 2013 Author Share Posted January 28, 2013 I'd look into using a DOM parser. Regular expressions are terrible for HTML parsing. What you're looking for seems fairly simple, but I personally am horrible at regular expressions and all the PHP functions that go with - but I'd say if the function you're using returns a boolean instead of the value you want... it's the wrong function. Could you maybe provide me with a template using DOM parser that is equal to the regex code I provided ? Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/#findComment-1408768 Share on other sites More sharing options...
MikeEvans Posted January 28, 2013 Author Share Posted January 28, 2013 (edited) Anyone able to offer any other suggestions for my code? Edited January 28, 2013 by MikeEvans Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/#findComment-1408803 Share on other sites More sharing options...
PFMaBiSmAd Posted January 29, 2013 Share Posted January 29, 2013 If you are actually getting the expected data from your posted code, but after that point it is turning into a 1 or a 0, you would need to debug why that is happening and at what point the value is what you expect and at what point it is not. For us to be able to help you, you would need to post the code that reproduces the problem and show an example of the data you are using. If your print_r($price3); statement shows the correct value, post that so that we can see what it is you are working with. If the value is stored in the database table correctly (have you looked directly in the table using your favorite database management tool?), but it is displayed incorrectly when you retrieve it, the problem is in the display logic and you would need to post that. Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/#findComment-1408937 Share on other sites More sharing options...
Christian F. Posted January 29, 2013 Share Posted January 29, 2013 I assume that part of the problem stems from the fact that you're using $matches[0], which (as noted by the PHP manual) is: ... $matches[0] is an array of full pattern matches This means that you're getting the HTML-content around the prices as well, which doesn't seem to be what you want. Considering that you've got a capturing sub group in there. Quote Link to comment https://forums.phpfreaks.com/topic/273741-using-php-to-get-a-price-from-a-given-url-website-and-updating-database-with-that-value/#findComment-1408949 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.