因此,我在PHP中有几个变量,它们是从不同的地方生成的$new_ip来自以下命令:
$new_ip = file_get_contents('http://www.ipaddresscheck.comlu.com/ip.php');
$old_ip来自:
$sql = mysql_query('SELECT * FROM ip ORDER BY id DESC LIMIT 1');
$row = mysql_fetch_array( $sql );
$old_ip = $row['current_ip'];
我的问题是,我从得到了不正确的结果
if ($old = $new)
{
$different = '1';
}
else {
$different = '2';
}
echo $different;
无论IP是否相同,我总是得到2;如果我用"=="作为比较,我总是得到1。
当我运行以下代码时,我会得到以下输出:var_dump($old_ip);var_dump($new_ip);
输出
string(15)"123.123.123.123"string(167)"184.6.216.163"
变量的类型不同吗?如果是,我能让它们相同吗?这样我只比较IP而不是类型?如果IP相同,我应该得到"1",如果它们不同,我应该获得"2",对吧?
您的问题潜伏在这里:
string(15) "123.123.123.123" string(167) "184.6.216.163 "
^^^
从您的数据库中检索到的地址包含154个不需要的字符。trim()
两个字符串,然后进行比较。
哦,你真的应该缩短存储IP地址的字段。15个字符就可以了。
代码
if ($old = $new) // you are using assignment operator here
{
$different = '1';
}
应该是
if ($old == $new) //Equal to operator
{
$different = '1';
}
此外,确认变量名称为$old和$new或$0old_ip和$new_ip
- 赋值(
=
):将右边的值赋值给左边的变量 - 相等(
==
):检查左值和右值是否相等 -
相同(
===
):检查左值和右值是否相等且相同(相同变量类型)示例:
$a = 1; // Sets the value of $a as the integer 1 $b = TRUE; // Sets the value of $b to the boolean TRUE if ($a == $b){ echo 'a is equal to b.'; } if ($a === $b){ // compare VALUE and data type: if $a(integer) === $b(boolean) echo 'a is identical and equal to b.'; } if ($a = $b){ echo '$b value to variable $a'; }
在你的代码中,我注意到一个问题。第二个IP地址中有一个空格。所以
string(15) "123.123.123.123" string(167) "184.6.216.163 "
^
- 修剪两个IP地址
- 如果不起作用,则将其转换为其他数据类型并进行比较。(仅用于调试。:))
OLD:
if ($old = $new){
$different = '1';
}
新更正:
if ($old == $new){
$different = '1';
}
您正在使用(=)赋值运算来代替比较运算。
据我所见,行为是正常的,因为您使用的$old
和$new
都未设置。
$new_ip = file_get_contents('http://www.ipaddresscheck.comlu.com/ip.php');
$sql = mysql_query('SELECT * FROM ip ORDER BY id DESC LIMIT 1');
$row = mysql_fetch_array( $sql );
$old_ip = $row['current_ip'];
下一个代码总是给出2,因为$new未设置。您在这里所做的是将$new
的值分配给$old
,并且由于$new
未设置,因此$old = $new
将始终为false。
if ($old = $new)
{
$different = '1';
} else {
$different = '2';
}
echo $different;
在下一个示例中,您实际上正在比较$old
和$new
。由于两者都未设置,因此表达式$old == $new
将始终为真。
if ($old == $new)
{
$different = '1';
} else {
$different = '2';
}
echo $different;
你需要做的是使用正确的vars并修剪它们。
// get new ip and trim white spaces
$new_ip = trim(file_get_contents('http://www.ipaddresscheck.comlu.com/ip.php'));
// get the old ip
$sql = mysql_query('SELECT * FROM ip ORDER BY id DESC LIMIT 1');
$row = mysql_fetch_array( $sql );
$old_ip = $row['current_ip'];
if ($old_ip == $new_ip)
{
$different = '1';
} else {
$different = '2';
}
echo $different;
我不修剪$old_ip
上的空白,因为我猜您将使用$new_ip
来更新数据库,并且由于$new_ip
已经被修剪,我们可以确保$old_ip
没有空白。
编码时应始终启用php警告!它会给你一个警告,因为你使用了未设置的变量。
PS:请注意,只有当file_get_contents()
返回带有空格的IP时,此代码才会按预期工作,输出可能不同(错误输出、无法正确检测IP等)