【问题标题】:PHP Filter html select option value if it is found in the databasePHP Filter html 选择选项值,如果它在数据库中找到
【发布时间】:2021-09-24 04:50:13
【问题描述】:

我有一个保存地块(地点/地点)的数据库(可以是 5、40、91 等(不增加)) 在我的网站上,我有一个下拉选项,其中选择了可用的地块(0 - 1023)。 我希望在数据库中找到的选项从网站的下拉选择中隐藏。 因此,如果采用情节 1,它会在数据库中找到,并且它不应该在网站下拉选择中可用。我似乎无法让这个工作......

这是我想出的代码。

<label for="plotnumber">Plotnumber :</label></br>
<select name="input_plotnumber">

<?php for ($i = 0; $i <= 1023; $i++) : ?>

$query = ("SELECT plotnumber FROM plot1");
$result = $conn->query($query);
$arrayofplots = mysqli_fetch_all($result);

if (in_array($i, $arrayofplots)) {

}
else {
<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
}

<?php endfor; ?>?>
</select>

【问题讨论】:

  • 对完全相同的数据库进行一千次查询,这真的很糟糕。至少把那部分放在 before 循环之前。而mysqli_fetch_all 不会为您提供一个包含数字的“平面”数组,因此如果您希望 in_array 工作,您必须先创建它。
  • 你如何在数据库表中表示一个特定的图是taken?例如,您是否在特定列中设置了 1/0?
  • 您似乎还有一些 PHP 代码在 PHP 块之外,它只会将其作为文本输出而不是执行。此外,只是说“我似乎无法正常工作” 是一个糟糕的解释。您应该始终(详细)解释您预期会发生什么以及实际会发生什么。
  • @ProfessorAbronsius 是的,我有一个collum,可以选择采取或不采取。谢谢
  • @MagnusEriksson 我明白了!好的,会解决的!也谢谢你!

标签: php html arrays filter html-select


【解决方案1】:

如果您修改 SQL 以选择所有已拍摄的图,则可以决定仅输出值不在该记录集中的 option 元素。根据您对taken 专栏的评论,您可以尝试这样:

<label>Plotnumber :

    <br />

    <?php
        $sql='select plotnumber from plot1 where taken=1';
        $res=$conn->query($sql);
        $data=$res->fetch_all(MYSQLI_ASSOC);
    ?>


    <select name="input_plotnumber">
        <option selected disabled hidden>Select Plot
        <?php
            for( $i=0; $i < 1024; $i++ ){
                if( !in_array( $i, array_column($data,'plotnumber') ) )printf('<option>%d',$i);
            }
        ?>
    </select>

</label>

【讨论】:

    【解决方案2】:
    • 需要将mysqli_fetch_all返回的二维数组转换为一维数组,才能使用in_array
    • 由于您有一些列来指示是否绘制了该图,因此您需要将其放在WHERE 子句中。我用过taken=1,但如果你有一个像taken/not taken 这样的字符串,那么请相应地修改它。
    • 避免在循环中运行查询。相反,您应该获取顶部的数据。
    • 根据经验,请选择面向对象的样式$result-&gt;fetch_all() 或程序化的mysqi_fetch_all(),而不是混合使用两者。

    更新代码:

    <?php
    
    $query = "SELECT plotnumber FROM plot1 WHERE taken=1";
    $result = $conn->query($query);
    $arrayofplots = $result->fetch_all();
    
    // convert to a 1d array
    $arrayofplots = array_map(function($row){
      return $row[0];
    }, $arrayofplots);
    
    ?>
    
    <label for="plotnumber">Plotnumber :</label></br>
    <select name="input_plotnumber">
    
    <?php
    for ($i = 0; $i <= 1023; $i++){
      if (!in_array($i, $arrayofplots)) {
        echo '<option value="' . $i . '">' . $i . '</option>';
      }
    }
    ?>
    
    </select>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-27
      • 2023-03-08
      • 2012-01-17
      • 2019-09-30
      • 2021-10-20
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      相关资源
      最近更新 更多