2011-07-24 52 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"; 
    } 
} 
?>