根据数据库值禁用复选框


Disable checkbox based on db value

我在表单中有一个复选框,需要根据数据库中的值禁用它。我搜索了很多,但找不到任何有效的解决方案。这是示例代码:

<?php
$server_name='localhost';
$username='root';
$password='';
$db_name='checkbox';
$con= mysqli_connect($server_name, $username, $password, $db_name);
if(mysqli_connect_errno())
{
    echo 'Failed..!!'.mysqli_connect_errno();
}    
$result= mysqli_query($con, "SELECT * FROM checkbox WHERE status=1");
$display = (mysqli_num_rows($result) == 1);
$disable = $display?'':'disabled="disabled"';
?>
<html>
<body>
    <form name="f1" method="post" action="test2.php">
        <input type="checkbox" name="A" value="" <?php echo $disable; ?> />     
    </form>
</body>
</html>

提前谢谢。

据我所知,您可能混淆了三元的顺序。

现在这条线是多余的:

$display = (mysqli_num_rows($result) == 1);

你告诉它它总是等于真。

只需将此行设置为:

$display = mysqli_num_rows($result);

然后,如果被找到,三元运算符将处理

$disable = $display ? 'disabled="disabled"': '';

如果发现,禁用它。

如果这不是你想要做的,那么把它改回:

$disable = $display ? '': 'disabled="disabled"';
$result= mysqli_query($con, "SELECT * FROM checkbox WHERE status=1");
$display = (mysqli_num_rows($result) == 1);

很可能是你的问题的原因,尽管如果不查看数据库,它不可能100%。该查询是否返回一行以外的其他内容?如果这样做,$display变量将始终计算为false,并且不会将禁用文本添加到输入字段。

在开始呈现HTML之前,将$disable变量包装在var_dump()中,看看得到了什么值。或者用您要触发的那个直接数据库查询,看看它是否不是一行。