1
<?php
    $check = array ("85.49.","85.62.");

    foreach($check as $var) {
        if (ereg($var, $_SERVER['REMOTE_ADDR'])) {
            $intruder = 0; 
        }
        else {
            $intruder = 1;
        }
        if ($intruder = 0);
            echo 'bugger off';
        }
        else{
            echo 'welcome';
        }
?>

我的第二个可能有什么问题?Dreamweaver 将其标记为红色,并且我的服务器显示错误。如果 $intruder 是 1 或 0,我想做的就是让它以一种或另一种方式表现。

4

6 回答 6

4
if ($intruder = 0);

首先,你有一个额外的分号,所以if语句的主体是空的。

其次,=是赋值,需要比较:==.

结构不清楚,但可能下一个问题是你的循环,它会$intruder在每次迭代中覆盖,所以最后它会包含最后一次比较的结果。

于 2012-08-21T22:13:08.753 回答
2

你问的问题在这一行:

if ($intruder = 0);

您应该使用==来比较值,而不是=用于分配。之后你应该有一个花括号{而不是分号。

此外,所有ereg*功能均已弃用,不应使用。它们最终将完全从语言中删除。要检查一个词是否包含另一个词,只需使用strpos.

您的逻辑对于您似乎正在做的事情也是错误的。您不需要覆盖$intruder循环的每次迭代中的值。在循环之前将其设置为 0,如果循环中存在匹配,则将其设置为 1,然后在循环完成后,您将知道在任何比较期间是否存在匹配并可以打印适当的消息。

$found = 0;
foreach ($check as $var) {
    if (strpos($_SERVER['REMOTE_ADDR'], $var) === 0) {
        $found= 1; 
    }
}

if ($found == 1) {
    echo "You are in my list.";
} else {
    echo "You are not in my list.";
}
?>  
于 2012-08-21T22:11:17.630 回答
1

改变这个:

if ($intruder = 0);

对此:

if ($intruder == 0) {
于 2012-08-21T22:12:37.307 回答
1

第一个错误:

if ($intruder = 0);

以这种方式修复它:

if ($intruder == 0)
   echo 'bugger off';
else
   echo 'welcome';

第二个错误:

不推荐使用 ereg。将其替换为 preg_match(); http://www.php.net/manual/en/function.preg-match.php

于 2012-08-21T22:14:31.887 回答
1

朋友,请不要生气,但我宁愿问“这段代码有什么正确的吗?”

<?php
$check = array ("85.49.","85.62.");

foreach($check as $var) {
    // Here you use the deprecated ereg instead of preg_match or, better, strpos
    // However, the regular expressions would be wrong - what if 192.85.49.3 comes by?
    if (ereg($var, $_SERVER['REMOTE_ADDR'])) {
        $intruder = 0; 
    }
    else {
        $intruder = 1;
    }
    // Here you do not close the foreach, so that the following code gets executed
    // repeatedly

    // Here you place a ; after the if, so the if body is empty and bugger off gets
    // triggered always.

    // Which changes little, since $intruder = 0 is an assignment (use == instead)
    // (see note)
    if ($intruder = 0);
        echo 'bugger off';
    }
    // Anyway, logically "$intruder == 0" means "NOT an intruder", so you are actually
    // telling friends to bugger off and welcome intruders :-)
    else{
        echo 'welcome';
    }
?>

注意:这可能是巫毒编程(我在 Maguire 的“Writing Solid Code”中找到它),但我认为您可能会养成以另一种方式检查值的习惯:

如果(0 == $intruder)

这样,如果您再次删除 =,它不会创建一个新的语句来做您不想要的事情,但它会变成一个语法错误,使自己立即可见。

无论如何,您想要的代码应该是:

<?php
       $check = array ("85.49.","85.62.");

       $matches = false;

       foreach($check as $var)
       {
           if (0 === strpos($_SERVER['REMOTE_ADDR'], $var))
           {
               $matches = true;
               // There is one match, no sense in checking further
               break;
           }
       }
       if ($matches)
       {
           // He is in our little list - tell him something
           print "You match.";
       }
?>
于 2012-08-21T22:45:51.770 回答
0

简单的 yaar.Just 编辑:

if ($intruder == 0);
        echo 'bugger off';
    }
    else{
        echo 'welcome';
    }
于 2012-08-22T11:34:19.767 回答