我正在编写一个简单的函数,但由于某种原因(可能是一个简单的原因)它对我不起作用。
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
语句永远不会打印出来,尽管$cookie
值包含$ID
值中的数字序列。
A
$postID
是一个数字 123123
。
$cookie
字符串通常类似于 123123.23422.234234.2342342.234234
Strpos 不适用于 int,因此您需要将 ID 转换为字符串。 试试这个:
$ID = (string)$postID;
请注意,如果您的 cookie 字符串看起来像
123123.23422.234234.2342342.234234
并且您正在寻找 ID,例如 1231
或 23
,则您的函数将返回 TRUE
,而实际上该 ID 不在列表中。您当前的 strpos()
实现也将匹配部分数字。
这是一个简单的解决方法,要求 ID 周围有点。
$position = strpos('.'.$cookie.'.', '.'.$ID.'.');
是的,正如 Brock 所说,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";
}
}