Crays
Crays

Reputation: 2508

PHP if else confusion

i'm trying to make an image appearance and disappearance based on 3 condition,

condition A = when user is logged in and it's username fits the displayname(by using the GET function) then it should echo "yes"

condition B = When user is logged in and it's username does not fits the displayname then it should echo "no"

condition C = when user is not logged in then it should echo "no" too

(i swapped the image with yes and no for easier referencing)

By logging in, the user has a cookie which is set like below

  setcookie("user", $user, $expire);
  setcookie("loggedin", 1, $expire);

First i get the cookie which i set when user logins.

  $user1 = $_COOKIE["user"];
  $loggedin = $_COOKIE['loggedin'];
  $user = strtoupper($user1);

then i get my player's name

  $playername = $_GET['player'];

Now i do the conditions

$uplayername = strtoupper($playername);

function showplusicon(){

    global $uplayername;

    if(($loggedin = "1") and ($user == $uplayername)){
        echo "yes";
    }
    else if (($loggedin = "1") and ($user != $uplayername)){
        echo "no";
    }
    else{
        echo "no";
    }
}

I don't see what's the problem but it keeps being registered as condition B.

Upvotes: 0

Views: 278

Answers (6)

Michael Berkowski
Michael Berkowski

Reputation: 270609

The variable $loggedin isn't known inside your function showplusicon(). You will need to add it as a global along with global $uplayername.

function showplusicon(){

   global $loggedin, $uplayername;

   // etc
}

Since this was accepted but not totally complete, I'll just add that as others indicated, the == equality operator needs to be used instead of the = assignment operator.

if(($loggedin == "1")
             ^^^^

Upvotes: 2

hakre
hakre

Reputation: 197659

If you've got problems to understand your own code's logic, a simple way is to assign the conditions to self speaking variables to get used to it:

$userIsLoggedIn = $loggedin == "1";
$userIsPlayer = $user == $uplayername;

The variables make it easy to debug your code at the very beginning

var_dump($userIsLoggedIn, $userIsPlayer);

so to locate the actual errors:

  1. The variable $loggedin is undefined
  2. The if clauses are setting a value (=), not comparing it (== or ===).

You can then use additionally a more readable code-flow to make your decision more visible:

if ($userIsLoggedIn) 
{ // user is logged in
    if ($userIsPlayer)
    { // user is player
       ...
    }
    else
    { // user is not player
       ...
    }
} 
else 
{ // user is not logged in
    ...
}

Depending of what you want to output, this can be simplified even:

if ($userIsLoggedIn && $userIsPlayer)
{
    echo 'yes';
} else
{
    echo 'no';
}

Hope this is helpful for you.

Upvotes: 1

Lawrence Cherone
Lawrence Cherone

Reputation: 46602

Your main problem is todo with global scope of your variables:

<?php 
//Get cookie info
$cookie['user'] = $_COOKIE["user"];
$cookie['loggedin'] = (isset($_COOKIE['loggedin'])&&$_COOKIE['loggedin']=='1')?TRUE:FALSE;

//Set user array
$user['user'] = strtoupper($cookie['user']);
$user['loggedin'] = $cookie['loggedin'];
$user['player'] = $_GET['player'];
$user['uplayername']=strtoupper($user['player']);


function showplusicon(){
    //Made $user array available within function
    global $user;

    if($user['loggedin'] === TRUE && $user['user'] == $user['uplayername']){
        echo "yes";
    }else{
        echo "no";
    }
}
?>

Upvotes: 0

karllindmark
karllindmark

Reputation: 6071

First thing's first: $loggedin = "1" is a bad idea, as you're actually giving $loggedin the value "1" instead of comparing. Use == or even === if you're sure about the datatype.

Further on, the $loggedin isn't available in the scope of showplusicon(), as you haven't declared it as a global like you did with $uplayername.

Fix the listed issues above and it should be working a bit better.

Upvotes: 1

Jim
Jim

Reputation: 22646

$loggedin = "1"

Surely this should be:

$loggedin == "1"

Otherwise I would echo $user and $uplayername to see if these differ.

Upvotes: 1

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798536

Single equal signs assign, not compare.

if(($loggedin == "1") and ($user == $uplayername)){
   ...

And since you really only have two output states, you shouldn't need 3 conditions; remove condition B.

Upvotes: 3

Related Questions