所以,我在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;
我总是得到2,知道IP是否相同;如果我使用'=='作为比较,我总是得到1。
当我运行以下代码时,我得到以下输出: 后续代码var_dump($ old_ip); 的var_dump($新_IP);
输出
string(15)“123.123.123.123”string(167)“184.6.216.163”
变量是不同的类型?如果是这样,我可以使它们相同,所以我只是比较IP而不是类型吗?如果IP是相同的,我应该得到'1',如果它们不同,我应该得到'2',对吗?
答案 0 :(得分:4)
你的问题潜伏在这里:
string(15) "123.123.123.123" string(167) "184.6.216.163 "
^^^
从您的数据库中检索到的地址带有154个不需要的字符。 trim()
两个字符串然后进行比较。
哦 - 你应该真正缩短存储IP地址的字段。应该有15个字符。
答案 1 :(得分:2)
代码
if ($old = $new) // you are using assignment operator here
{
$different = '1';
}
应该是
if ($old == $new) //Equal to operator
{
$different = '1';
}
确认变量名称 $ old和$ new 或 $ old_ip和$ new_ip
答案 2 :(得分:1)
=
):将右侧的值指定给左侧的变量==
):检查左右值是否相等相同(===
):检查左右值是否相等且相同(相同的变量类型)
示例:
$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 "
^
答案 3 :(得分:0)
OLD:
if ($old = $new){
$different = '1';
}
新的正确:
if ($old == $new){
$different = '1';
}
您在比较操作位置使用(=)赋值操作。
答案 4 :(得分:0)
据我所知,行为正常,因为您使用$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未设置。你在这里做的是分配$old
$new
的值,因为$new
未设置$old = $new
将始终为假。
if ($old = $new)
{
$different = '1';
} else {
$different = '2';
}
echo $different;
在下一个示例中,您实际上是在比较$old
和$new
。由于两者都未设置,因此表达式$old == $new
将始终为真。
if ($old == $new)
{
$different = '1';
} else {
$different = '2';
}
echo $different;
您需要做的是使用正确的变量并修剪它们。
// 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
已被修剪,我们可以确定{{1}没有空格。
编码时应始终启用php警告! 由于您使用了未设置的变量,它会弹出警告。
PS:请注意,如果$old_ip
返回带有空格的IP,输出可能不同(错误输出,无法正确检测IP,等等),此代码将仅按预期工作