2011-07-24 53 views
0

我试图使基于3条件的图像出现和消失,PHP的if else混乱

条件A =当用户登录,它的用户名符合显示名称(通过使用GET功能),那么它应显示“yes”

条件B =当用户登录和它的用户名不适合的显示名称,那么它应该回声“否”

条件C =时用户然后未登录应该回声“没有”太

(我换的图像与是的,没有更容易引用)

通过登录,用户必须被设置像下面

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

首先,我得到我时设置的用户登录cookie的一个cookie。

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

然后让我的球员的名字

$playername = $_GET['player']; 

我现在的条件

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

我看不出有什么问题,但它一直被注册为条件B.

回答

2

变量$loggedin是不是你的函数里面showplusicon()知道。您需要将其添加为global以及global $uplayername

function showplusicon(){ 

    global $loggedin, $uplayername; 

    // etc 
} 

,因为这是公认的,但没有完全完成,我只想补充一点,正如其他所示,==平等运营商需要被用于代替=赋值运算符。

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

它的工作,多一点的调整,由于 – Crays

3

单等号分配,不比较。

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

而且因为你真的只有两个输出状态,你不应该需要3个条件;除去条件B.

+0

+1我错过了我的约'回答global' –

1
$loggedin = "1" 

当然这应该是:

$loggedin == "1" 

否则我将回声$用户和$ uplayername,看看这些不同。

1

第一件事的第一: $loggedin = "1"是一个坏主意,因为你实际上给$loggedin值“1”,而不是比较。如果您确定数据类型,请使用==或甚至===

而且时,$loggedin是不是在showplusicon()范围内可用的,因为你还没有宣布它作为一个全球性的像你一样$uplayername一样。

修复上面列出的问题,它应该会更好一点。

1

如果你有问题,了解自己的代码的逻辑,一个简单的方法是分配的条件进行自我演讲变量来习惯它:

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

的变量可以很容易地调试在开始的时候

var_dump($userIsLoggedIn, $userIsPlayer); 

代码,以便找出实际的错误:

  1. 变量$loggedin未定义
  2. if子句设置的值(=),未对其进行比较(=====)。

然后可以使用另外一个更可读的代码流,使您的决策更加明显:

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

取决于你想输出什么,这甚至可以简化为:

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

希望这对你有所帮助。

+0

谢谢,这是确实是一个非常好的提示,我有时会与我自己的代码混淆。 – Crays

+0

只是使它更可读,为您自己的舒适。如果你需要在数周后再次编辑而不坚持它,也可以提供帮助。 – hakre

0

你的主要问题是待办事项与变量的全局范围:

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