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';
        }
?>

私の2番目の他の問題は何ですか?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

友人、気分を害さないでください。「このコードには何か正しいことはありますか?」と尋ねたかったのです。

<?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 == $侵入者)

このようにすると、 = を再度ドロップしても、不要なことを行う新しいステートメントが作成されることはありませんが、構文エラーになり、すぐに表示されます。

とにかく、必要なコードは次のようになります。

<?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 に答える
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';

2 番目のエラー:

ereg の使用は非推奨です。preg_match(); に置き換えます。http://www.php.net/manual/en/function.preg-match.php

于 2012-08-21T22:14:31.887 に答える
0

シンプルな yaar.Just 編集:

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