0

I am trying to use an IF statement to check if a variable contains a piece of text, if so, echo yes, if not, echo no. Simple I know, but it does not seem to be working for me. I am very new to PHP, so any replies should be understandable for a monkey! :P

Here is my code. Bear in mind I am working with PHP simple html dom.

<?php
include 'simple_html_dom.php'; 
$html = file_get_html('http://www.amazon.co.uk/New-Apple-iPod-touch-Generation/dp/B0040GIZTI/ref=br_lf_m_1000333483_1_1_img?ie=UTF8&s=electronics&pf_rd_p=229345967&pf_rd_s=center-3&pf_rd_t=1401&pf_rd_i=1000333483&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_r=1ZW9HJW2KN2C2MTRJH60');
$stock_data = $html->find('span[class=availGreen]',0); 

if ( $stock_data == "In stock." ) {
  echo "Yes";
} 
echo "No";

?>

Now I have tested if the variable did contain the text, using echo $stock_data; it prints the correct text, however the if statement still comes back and echo's No.

Any help, apologies if this is something so simple.

1
  • Have you tried to copy the dumped text from your console directly to your code, overwriting "In stock."? Commented Mar 15, 2011 at 21:39

5 Answers 5

3

Use the function

var_dump($stock_data);

Maybe there are non-human readable characters in it and you're not checking against them. You can always trim those

Sign up to request clarification or add additional context in comments.

Comments

1

I tried your code, and $stock_data returns:

<span class="availGreen">In stock.</span>

and not:

In stock.

I suggest that as a new developer, you should get tools like Firebug for Firefox, or Chrome, which can help you debug the underlying errors...although in this case, since html simply outputs the text within the span tags, the only way to know what $stock_data equals to would be to view the source.

Comments

0

For contains piece of text use this strpos or stripos

And here is right if statement

            if ( $stock_data == "In stock." ) {
    echo "Yes";
} else {
    echo "No";
}

Comments

0

I'm not sure what file_get_html() is but you may want to use file_get_contents() instead (probably with DOMDocument and DOMXpath).

$html = file_get_contents('http://www.amazon.co.uk/New-Apple-iPod-touch-Generation/dp/B0040GIZTI/ref=br_lf_m_1000333483_1_1_img?ie=UTF8&s=electronics&pf_rd_p=229345967&pf_rd_s=center-3&pf_rd_t=1401&pf_rd_i=1000333483&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_r=1ZW9HJW2KN2C2MTRJH60');

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXpath($dom);

$in_stock = $xpath->query("/html/body/div[@id='divsinglecolumnminwidth']/form[@id='handleBuy']/table[3]/tbody/tr[3]/td/div/span");

if(!empty($in_stock)) {
   echo "yes";
} else {
   echo "no";
}

If the same span is occupied when the item is NOT in stock you can test the value like this:

if($in_stock->item(0)->nodeValue == "In stock.") { echo "yes"; } else { echo "no"; }

You may also want to use preg_match if the string "In stock." changes at all.

Comments

0

I don't know much about the library you are using, but if it is returning an object that implements a __toString() (used by echo), then perhaps this will work:

if ( (string) $stock_data == "In stock." ) {

Otherwise, check for member functions that return the string you are looking for.

I should add this from the manual:

It is worth noting that before PHP 5.2.0 the __toString method was only called when it was directly combined with echo() or print().

So if you are running a more recent PHP, the part of my answer regarding casting to string won't apply. (There still may be some member function you can call to get at the string data minus HTML and special chars.)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.