[英]PHP Filter html select option value if it is found in the database
我有一个保存图(点/地点)的数据库(这可以是 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>
如果修改 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>
mysqli_fetch_all
返回的二维数组转换为一维数组,然后才能使用in_array
。WHERE
子句中。 我已经使用了taken=1
但如果你有一个像taken/not taken
take 这样的字符串taken/not taken
那么相应地修改它。$result->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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.