我的第二个其他声明出了什么问题?

时间:2012-08-21 22:10:33

标签: php if-statement

<?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,我想做的就是让它以某种方式表现。

6 个答案:

答案 0 :(得分:4)

if ($intruder = 0);

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

其次,=是作业,您需要进行比较:==

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

答案 1 :(得分: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.";
}
?>  

答案 2 :(得分:1)

改变这个:

if ($intruder = 0);

对此:

if ($intruder == 0) {

答案 3 :(得分: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

答案 4 :(得分: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的'编写固体代码'中找到它),但我认为您可能养成了以另一种方式检查值的习惯:

if(0 == $ intruder)

这样一来,如果再次删除a =,它就不会创建一个你不想要的新语句,但它会成为语法错误,使其自身立即可见。

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

<?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.";
       }
?>

答案 5 :(得分:0)

简单的yaar.Just编辑:

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