Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php变量忽略布尔值?巴顿一直在桌子上,即使它';这是不允许的_Php - Fatal编程技术网

php变量忽略布尔值?巴顿一直在桌子上,即使它';这是不允许的

php变量忽略布尔值?巴顿一直在桌子上,即使它';这是不允许的,php,Php,drawTableRow: while ($row = $query->fetch(PDO::FETCH_ASSOC)) { if (!Ping::remote($row['server_ip'], $row['server_port'])) { $status = "Offline"; }

drawTableRow

            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($name、$players、$map、$status、$button)
{
$button=$button==TRUE?“加入”:“”;
$status=$status==“已满”| |$status==“正在进行”| |$status==“脱机”?“.$status.”:“.$status.”;
回声
'
“.$name。”
“.$players。”
“.$map。”
“.$status。”
“.$button。”
';
}
有什么问题吗?

您需要括号:

    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>
        ';
    }
$button=($button==TRUE)?“加入”:“加入”;

非空sting仍然==TRUE,所以要使按钮仅显示为TRUE,您必须使用===来使用strict。简单地说,只需执行以下操作:

$button = ($button == TRUE) ? "<span class='button_join'>Join</span>" : "";
您可能想这样做:)


PHP中的非空字符串等于布尔值true,并且您使用同一个变量来保存HTML代码段(非空字符串)和指示是否显示它的布尔值,因此只要条件计算true一次,它就会一直这样做。将布尔值存储在另一个命名的变量中,问题就不再存在了。在使用三元运算符时,建议您使用括号进行防御性插入,以便您可以一眼看出最终将返回哪个值,如本例所示:

if (($status != "In Progress" && $status != "Offline" && $status != "Full") || $status == "Available")
$button=($button\u visible==TRUE)?“Join”:“);
更新:如果这不起作用,为什么不试试这个呢

$button = (($button_visible == TRUE) ? "<span class='button_join'>Join</span>" : "");
公共静态函数drawTableRow($name、$players、$map、$status、$showJoinButton)
{
$button='';
如果($showJoinButton){
$button=“Join”;
};
$status=$status==“已满”| |$status==“正在进行”| |$status==“脱机”?“.$status.”:“.$status.”;
回声
'
“.$name。”
“.$players。”
“.$map。”
“.$status。”
“.$button。”
';
}
如果这不符合您的要求,那么发生的是错误的值被传递到
drawTableRow()
,而不是它们在那里被错误处理。

问题是:

首先,我使用了标志(
|
),其次:

我在数据库中使用的IP无法访问,因此它总是以“脱机”结束


因此,当我将所有
|
更改为
&&
,然后添加一个可访问的IP时,它成功了。

我现在也遇到了同样的问题。我强烈建议您使用不同的变量,这段代码在几周后将是一场噩梦。我在想类似于
$buttonHtml=$button==TRUE的东西?“加入”:“加入”是的,当然,老实说,我只是检查一下,因为我从来没有做过(如果)?结果:其他的结果陈述是的。谢谢你这个问题。是的,我刚刚看到了这个问题,也许你应该仔细研究一下,在这里很容易找到答案:如果($status!=“In Progress”| | |$status!=“Offline”| |$status!=“Full”| |$status=“Available”)@junatanmegraded更新的答案反映了一种使用三元运算符不会太聪明的方法。不,不起作用。我将尝试将它们转换为int,并尝试像if==1一样,然后…@junatanmdasted,如果您愿意,但我首先要检查传递给
drawTableRow()
的内容。无论如何,祝你好运。
if ($status != "In Progress" || $status != "Offline" || $status != "Full" || $status == "Available")
if (($status != "In Progress" && $status != "Offline" && $status != "Full") || $status == "Available")
$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>
    ';
}