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