Paul Sheldrake
Paul Sheldrake

Reputation: 7831

strpos() unexpectedly returns false when I try to search for an integer-type value

I'm writing a simple function and for some reason(probably a simple one) it's not working for me.

function check_value($postID) 
{
    $ID = $postID;
    $cookie = $_COOKIE['list_of_IDS'];
    $position = strpos($cookie,$ID);
    echo 'ID:'.$ID.'-Cookie:'.$cookie;
    if ($position !== false)
    {
        echo "ID is in the cookie";
    }
}

In trying to figure out what the problem was I put that echo line above the if statement there to make sure there actually is stuff in the variables.

My problem is that the if statement never prints out, despite the $cookie value containing the sequence of digits in the $ID value.

A $postID is a number 123123.

The $cookie string is usually something like 123123.23422.234234.2342342.234234

Upvotes: 4

Views: 6928

Answers (2)

Geert
Geert

Reputation: 1804

Note that if your cookie string looks like 123123.23422.234234.2342342.234234 and you are looking for an ID, say, 1231 or 23, your function would return TRUE while actually that ID is not in the list. Your current implementation of strpos() will also match partial numbers.

Here is a simple workaround that will require the ID to be surrounded by dots.

$position = strpos('.'.$cookie.'.', '.'.$ID.'.');

Upvotes: 2

Brock Boland
Brock Boland

Reputation: 16730

Strpos won't work with an int, so you need to cast the ID to a string. Try this:

$ID = (string)$postID;

Upvotes: 15

Related Questions