如果没有其他逻辑和变量,PHP的麻烦

时间:2013-06-28 05:01:01

标签: php variables if-statement

所以,我在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',对吗?

5 个答案:

答案 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)

  • 作业(=):将右侧的值指定给左侧的变量
  • Equality(==):检查左右值是否相等
  • 相同(===):检查左右值是否相等且相同(相同的变量类型)

    示例:

    $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 "
                                                       ^
  1. 修剪两个IP地址。
  2. 如果不起作用,则将其转换为其他数据类型并进行比较。(仅用于调试目的。:))

答案 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,等等),此代码将仅按预期工作