user1615434
user1615434

Reputation:

Something wrong with my second else 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';
        }
?>

What could be wrong with my second else? Dreamweaver red flags it and my server says error. All I want to do is get it to behave one way or another if $intruder is 1 or 0.

Upvotes: 1

Views: 81

Answers (6)

GautamD31
GautamD31

Reputation: 28753

Simple yaar.Just edit:

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

Upvotes: 0

LSerni
LSerni

Reputation: 57418

Friend, please do not be offended, but I'd rather have asked "is there anything right in this code?"

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

Note: it is maybe voodoo programming (I found it on Maguire's 'Writing Solid Code'), but I think you might get into the habit of checking values the other way:

if (0 == $intruder)

This way if you ever drop a = again, it will not create a new statement doing something you wouldn't want, but it will become a syntax error that makes itself immediately visible.

Anyway, the code for what you want should be:

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

Upvotes: 1

Dan Grossman
Dan Grossman

Reputation: 52372

The problem you ask about is on this line:

if ($intruder = 0);

You should be using == to compare the values, not = which is for assignment. And you should have a curly brace { after that instead of a semicolon.

Also, all of the ereg* functions are deprecated and should not be used. They will eventually be removed from the language entirely. To check if a word contains another word, just use strpos.

Your logic is also wrong for what you appear to be doing. You need to not overwrite the values of $intruder in each iteration of the loop. Set it to 0 before the loop, set it to 1 if there's a match in the loop, then after the loop is complete you'll know if there was a match during any of the comparisons and can print the appropriate message.

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

Upvotes: 2

Gianpaolo Di Nino
Gianpaolo Di Nino

Reputation: 1147

First error:

if ($intruder = 0);

fix it in this way:

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

Second error:

The use of ereg is deprecated. Replace it with preg_match(); http://www.php.net/manual/en/function.preg-match.php

Upvotes: 1

Karoly Horvath
Karoly Horvath

Reputation: 96266

if ($intruder = 0);

First, you have an extra semicolon, so the body of the if statement is empty.

Secondly, = is assignment, you need comparison: ==.

The structure is not clear, but probably the next problem is your loop, which will overwrite $intruder in each iteration, so at the end it will contain the result of the last comparison.

Upvotes: 4

Elliot B.
Elliot B.

Reputation: 17681

Change this:

if ($intruder = 0);

To this:

if ($intruder == 0) {

Upvotes: 1

Related Questions