2013-07-25 34 views
0
$button = $button == TRUE ? "<span class='button_join'>Join</span>" : ""; 

基本上,如果button = TRUE,那麼顯示按鈕。 但是,當我有$button == TRUE ?時,按鈕總是顯示,但我從來沒有看到它在任何地方變得真實?php變量忽略布爾值?即使不允許按鈕不斷上表

Mysql結果顯示2行「進行中」,1行「可用」。

但問題是,該按鈕顯示的每一行,生病後的照片,所以你會知道我說的是:

img http://gyazo.com/4ed23f9793c6f69812d6140f64cea2a2.png

有什麼不對?

這是代碼:

  while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
      { 
       if (!Ping::remote($row['server_ip'], $row['server_port'])) 
       { 
        $status = "Offline"; 
       } 
       else 
       { 
        $status = $row['server_status']; 
       } 

       if ($status != "In Progress" || $status != "Offline" || $status != "Full" || $status == "Available") 
       { 
        $joinButton = TRUE; 
       } 
       else 
       { 
        $joinButton = FALSE; 
       } 

       Template::drawTableRow (
        $row['server_name'], 
        $row['server_players'], 
        $row['server_map'], 
        $row['server_status'], 
        $joinButton 
       ); 

      } 

drawTableRow

public static function drawTableRow($name, $players, $map, $status, $button) 
    { 

     $button = $button == TRUE ? "<span class='button_join'>Join</span>" : ""; 

     $status = $status == "Full" || $status == "In Progress" || $status == "Offline" ? "<span class='status_error'>".$status."</span>" : "<span class='status_success'>".$status."</span>"; 

     echo 
     ' 
      <tr> 
       <td> 
        '.$name.' 
       </td> 
       <td> 
        '.$players.' 
       </td> 
       <td> 
        '.$map.' 
       </td> 
       <td> 
        '.$status.' 
       </td> 
       <td> 
        '.$button.' 
       </td>     
      </tr> 
     '; 
    } 

有什麼不對呢?

+0

我可以強烈建議你使用不同的變量,這段代碼在幾周內將成爲一場噩夢。我在想像'$ buttonHtml = $ button === TRUE? 「加入」:「」;; – Pevara

+0

是的,我只是檢查說實話,因爲我從來沒有做過(IF)?結果:其他結果陳述是如此。謝謝 –

回答

0

您需要括號:

$button = ($button == TRUE) ? "<span class='button_join'>Join</span>" : ""; 
+0

我目前遇到同樣的問題。 –

1

不是空的刺仍然是== TRUE,所以使按鈕只顯示爲真,則必須使用===使用嚴格,包括。簡單地說,只是這樣做:

$button = ($button === TRUE) ? "<span class='button_join'>Join</span>" : ""; 

是問題就在這裏,這將永遠給你TRUE:

if ($status != "In Progress" || $status != "Offline" || $status != "Full" || $status == "Available") 

你可能想做到這一點:)

if (($status != "In Progress" && $status != "Offline" && $status != "Full") || $status == "Available") 
+0

與此相同的問題。 –

+1

是的,我剛剛看到這一個,也許你更好地研究它,很容易在這裏得到TRUE:if($ status!=「In Progress」|| $ status!=「Offline」|| $ status!= 「全」|| $狀態==「可用」) –

0

PHP中的非空字符串等於布爾值true,並且您使用相同的變量來保存您的HTML片段(一個非空字符串)和一個指示是否顯示它的布爾值,因此只要條件成立評估真實一次,它會我會永遠繼續這樣做。將布爾值存儲在名稱不同的變量中,問題就不復存在。你也很好的建議使用三元運算符時,防守加上括號,這樣就可以在其價值最終會返回一眼就能看出,因爲在這個例子中:

$button = (($button_visible == TRUE) ? "<span class='button_join'>Join</span>" : ""); 

更新:嗯,如果那並不是」工作,爲什麼不試試這個?

public static function drawTableRow($name, $players, $map, $status, $showJoinButton) 
{ 

    $button = ''; 
    if ($showJoinButton) { 
     $button = "<span class='button_join'>Join</span>"; 
    }; 

    $status = $status == "Full" || $status == "In Progress" || $status == "Offline" ? "<span class='status_error'>".$status."</span>" : "<span class='status_success'>".$status."</span>"; 

    echo 
    ' 
     <tr> 
      <td> 
       '.$name.' 
      </td> 
      <td> 
       '.$players.' 
      </td> 
      <td> 
       '.$map.' 
      </td> 
      <td> 
       '.$status.' 
      </td> 
      <td> 
       '.$button.' 
      </td>     
     </tr> 
    '; 
} 

如果不表現你想要的方式,然後發生的事情是錯誤的價值觀越來越傳遞到drawTableRow(),而不是他們使用不當一旦有。

+0

真的沒有工作,嘗試所有方式,所有的答案。 –

+0

@JunatanmDegraded更新的答案反映了一種不會過於聰明地與三元運算符結合的方法。 –

+0

不,不起作用。我會嘗試將它們轉換爲整數,並嘗試如果== 1,然後... –

0

問題是:

首先,我用標誌(||),繼發性:

我在數據庫所使用的IP,是不可到達的,所以它總是結束成爲「離線」。

因此,當我將全部||更改爲&&,然後添加可達的IP時,它工作。