Jump to content

Using PHP to get a price from a given URL website and updating database with that value.


Recommended Posts

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 by MikeEvans

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.

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.

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. 

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 ?

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.

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.

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.