Php 如何询问数据库是否存在值,以便显示其他值

Php 如何询问数据库是否存在值,以便显示其他值,php,mysql,forms,Php,Mysql,Forms,例如,我需要使用值a、b、c来选择选项 但如果db中存在值a,则仅显示c和b 我已经试过了,但是如果db表是空的,那么我想显示所有选项 但是,如果表是空的,它对我来说不起作用。当数据库中有值时,它不显示任何它的工作 while ($row = mysqli_fetch_array($result)) { $curr = $row['time']; if($curr === 'a') { echo "<select class='form-control' n

例如,我需要使用值a、b、c来选择选项

但如果db中存在值a,则仅显示c和b

我已经试过了,但是如果db表是空的,那么我想显示所有选项

但是,如果表是空的,它对我来说不起作用。当数据库中有值时,它不显示任何它的工作

while ($row = mysqli_fetch_array($result)) {
    $curr = $row['time'];
    if($curr === 'a') {
        echo "<select class='form-control' name='time'>";
        echo "<option value='b'>b</option>";
        echo "<option value='c'>c</option>";
        echo "</select>";
    }
    if($curr === 'b') {
        echo "<select class='form-control' name='time'>";
        echo "<option value='a'>a</option>";
        echo "<option value='c'>c</option>";
        echo "</select>";
    }
    if($curr === 'c') {
        echo "<select class='form-control' name='time'>";
        echo "<option value='a'>a</option>";
        echo "<option value='b'>b</option>";
        echo "</select>";
    }
    if ($curr === '') {
        echo "<select class='form-control' name='time'>";
        echo "<option value='a'>a</option>";
        echo "<option value='b'>b</option>";
        echo "<option value='c'>c</option>";
        echo "</select>";
    }
}
while($row=mysqli\u fetch\u数组($result)){
$curr=$row['time'];
如果($curr=='a'){
回声“;
回声“b”;
回声“c”;
回声“;
}
如果($curr=='b'){
回声“;
呼应“a”;
回声“c”;
回声“;
}
如果($curr=='c'){
回声“;
呼应“a”;
回声“b”;
回声“;
}
如果($curr==''){
回声“;
呼应“a”;
回声“b”;
回声“c”;
回声“;
}
}

您是否尝试过使用else,这样输入就可以
Null

else{
    echo "<select class='form-control' name='time'>";
    echo "<option value='a'>a</option>";
    echo "<option value='b'>b</option>";
    echo "<option value='c'>c</option>";
    echo "</select>";
}
else{
回声“;
呼应“a”;
回声“b”;
回声“c”;
回声“;
}

您是否可以尝试将
if($curr==“”)
替换为
if(empty($curr))

您可以设置所有值选项,然后删除相关选项:

$arrOptions = [
    'a' => "<option value='a'>a</option>",
    'b' => "<option value='b'>b</option>",
    'c' => "<option value='c'>c</option>";
];

while ($row = mysqli_fetch_array($result)) {
    $curr = $row['time'];

    if(isset($arrOptions[$curr])) {
        unset($arrOptions[$curr]);
    }

    echo "<select class='form-control' name='time'>" . implode($arrOptions) . "</select>";
 }
$aroptions=[
“a”=>“a”,
“b”=>“b”,
‘c’=>‘c’;
];
while($row=mysqli\u fetch\u数组($result)){
$curr=$row['time'];
if(isset($aroptions[$curr])){
未设置($aroptions[$curr]);
}
echo“”。内爆($aroptions)。“”;
}

您的问题是$curr可能不是一个空字符串,可能是
NULL
,这将不匹配,因为您有
=
,这意味着它们必须完全匹配。您可以通过简单地检查它是否为空来解决它,以覆盖所有情况,如
if(empty($curr)){//show all options

通过在如下数组中分配选项,可以简化问题并减少代码库:

$allOptions = [
    'a' => "<option value='a'>a</option>",
    'b' => "<option value='b'>b</option>",
    'c' => "<option value='c'>c</option>";
];
$hasOneRow = false;
while ($row = mysqli_fetch_array($result)) {
    $hasOneRow = true;
    $options = clone($allOptions);
    $curr = $row['time'];

    if(isset($options[$curr])) {
        unset($options[$curr]);
    } 

    echo "<select class='form-control' name='time'>";
    echo implode(PHP_EOL, $options);
    echo "</select>";
}
if(!$hasOneRow) {
    echo "<select class='form-control' name='time'>";
    echo implode(PHP_EOL, $allOptions);
    echo "</select>";
}
$allOptions=[
“a”=>“a”,
“b”=>“b”,
‘c’=>‘c’;
];
$hasOneRow=假;
while($row=mysqli\u fetch\u数组($result)){
$hasOneRow=真;
$options=克隆($allOptions);
$curr=$row['time'];
if(isset($options[$curr])){
未结算($options[$curr]);
} 
回声“;
echo内爆(PHP_EOL,$options);
回声“;
}
如果(!$hasOneRow){
回声“;
回声内爆(PHP_EOL,$allOptions);
回声“;
}
这假设每一行都是独立的,如果数据库中有多条记录,则不希望同时删除多个选项(即:对于每一行,应该有一个select选项,而选项中包含的数据库中没有该选项,并且如果没有选择任何选项,则会根据请求显示所有选项)

如果您的目标是减少数据库中已使用的每一行的选项数,则可以使用下面的代码,该代码仅显示所有行中剩余的选项,如果未选择任何选项,则显示所有选项

$options = [
    'a' => "<option value='a'>a</option>",
    'b' => "<option value='b'>b</option>",
    'c' => "<option value='c'>c</option>";
];
while ($row = mysqli_fetch_array($result)) {
    $curr = $row['time'];

    if(isset($options[$curr])) {
        unset($options[$curr]);
    } 

}
if(!empty($options)) {
    echo "<select class='form-control' name='time'>";
    echo implode(PHP_EOL, $options);
    echo "</select>";
}
$options=[
“a”=>“a”,
“b”=>“b”,
‘c’=>‘c’;
];
while($row=mysqli\u fetch\u数组($result)){
$curr=$row['time'];
if(isset($options[$curr])){
未结算($options[$curr]);
} 
}
如果(!空($options)){
回声“;
echo内爆(PHP_EOL,$options);
回声“;
}

这一点非常重要,要知道,
$row['time']
的可能值如果您尝试了下面给出的所有示例,而不是共享您的查询或完整的代码,我们需要查看数据库的架构和值。如果默认值为
NULL
,则
NULL
不被视为“空”,它仍然是一个值。我们也不知道你的查询是什么。看到你在“答案”下留下的评论,大家都在猜测。投票结果不清楚。你能告诉我它显示了什么或没有显示什么吗?你尝试了哪一个建议-使用empty()或者使用简化脚本?啊,好的-如果表中没有行,而不是列中没有值。我也会编辑代码来处理这个问题。我用两个更改更新了我的答案-第一个显示表中每行的选择选项,并将显示,如果没有行,则显示一个包含所有选项的选择框-第二个仅显示其余选项基于数据库中的内容(即:如果没有行,则显示所有选项,如果A和B在数据库中跨两行,则仅显示C,如果A、B和C在表中,则不显示任何内容)谢谢@YosefDadya-您能将其标记为您要查找的答案吗?