Проблема со Strpos в PHP - PullRequest
3 голосов
/ 24 июня 2009

Я пишу простую функцию, и по какой-то причине (возможно, простой) она не работает для меня, и мне было интересно, если вы, ребята, могли бы помочь мне.

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";
        }
    }

Чтобы выяснить, в чем проблема, я поместил эту строку эха над оператором If, чтобы убедиться, что в переменных действительно есть что-то.

Моя проблема в том, что оператор IF никогда не печатается.

A $postID - это число 123123.

Строка $cookie обычно имеет вид 123123.23422.234234.2342342.234234

Спасибо за вашу помощь!

Ответы [ 3 ]

14 голосов
/ 24 июня 2009

Strpos не будет работать с int, поэтому вам нужно привести идентификатор в строку. Попробуйте это:

$ID = (string)$postID;
2 голосов
/ 05 июля 2009

Обратите внимание, что если ваша строка cookie выглядит как 123123.23422.234234.2342342.234234 и вы ищете идентификатор, скажем, 1231 или 23, ваша функция вернет TRUE, хотя на самом деле этого идентификатора нет в списке. Ваша текущая реализация strpos() также будет соответствовать частичным номерам.

Вот простой обходной путь, при котором идентификатор должен быть окружен точками.

$position = strpos('.'.$cookie.'.', '.'.$ID.'.');
0 голосов
/ 24 июня 2009

да, как сказал Брок, Strpos не будет работать с int, так что вам нужно разыграть id. поэтому нужно внести некоторые изменения в ваш код.

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";
        }
    }
...