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

基本的に、 の場合button = TRUE、ボタンを表示します。しかし、ボタンを$button == TRUE ?オンにすると常にボタンが表示されますが、どこにも当てはまりませんか?

Mysql の結果では、2 行が「進行中」、1 行が「使用可能」と表示されます。

しかし、問題は、ボタンがすべての行に表示されることです。写真を投稿して、私が話していることを理解できるようにします。

画像
(出典:gyazo.com

どうしたの?

これはコードです:

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

何が問題なのですか?

4

4 に答える 4

0

問題は次のとおりです。

まず、フラグ ( ||)、セカンダリを使用しました。

データベースで使用した IP に到達できなかったため、常に「オフライン」になります。

したがって、すべてを変更し||てから&&到達可能なIPを追加すると、機能しました。

于 2013-07-25T19:55:32.600 に答える
0

括弧が必要です:

$button = ($button == TRUE) ? "<span class='button_join'>Join</span>" : "";
于 2013-07-25T19:36:51.560 に答える
0

PHP の空でない文字列は真のブール値と等しく、HTML スニペット (空でない文字列) とそれを表示するかどうかを示すブール値の両方を保持するために同じ変数を使用しているため、条件が評価されるとすぐに一度 true になると、その後はずっと true になり続けます。ブール値を別の名前の変数に格納すると、問題はなくなります。また、次の例のように、最終的にどの値が返されるかが一目でわかるように、三項演算子を使用するときは保護的に括弧で囲むことをお勧めします。

$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()いるということです。

于 2013-07-25T19:43:21.370 に答える