PHP-模仿;“地图网络驱动器”;下拉菜单工作
我试图模仿Windows“地图网络驱动器”下拉菜单的工作方式。我的下拉选项是字母A-Z。根据SQL SELECT语句的结果,我需要显示但禁用已在使用的字母。我可以在下拉列表中获取字母,或者在下拉列表中获取SQL结果,但两者的组合不正确 如何在下拉列表中显示字母表中的所有字母,并禁用SQSL SELECT语句中返回的字母 示例数据库PHP-模仿;“地图网络驱动器”;下拉菜单工作,php,sql,drop-down-menu,Php,Sql,Drop Down Menu,我试图模仿Windows“地图网络驱动器”下拉菜单的工作方式。我的下拉选项是字母A-Z。根据SQL SELECT语句的结果,我需要显示但禁用已在使用的字母。我可以在下拉列表中获取字母,或者在下拉列表中获取SQL结果,但两者的组合不正确 如何在下拉列表中显示字母表中的所有字母,并禁用SQSL SELECT语句中返回的字母 示例数据库 ID | Desc ----------- A | Desc A D | Desc D F | Desc F J | Desc J Z
ID | Desc
-----------
A | Desc A
D | Desc D
F | Desc F
J | Desc J
Z | Desc Z
例如,使用上面的示例DB,字母“A、D、F、J、Z”将被显示但被禁用,而字母表中的所有其他字母都是可选择的
这是我目前拥有的代码。这几乎是正确的,但不知怎么的,这是不正常的。它确实会显示字母表中的每个字母和我的数据库结果(禁用这些结果),但会为每个数据库结果显示字母表中的每个字母。再次使用上面的示例DB,下面的代码将为每个结果显示字母“A”到“Z”(5次),并且每次仅禁用该结果
<select>
<?php
// SQL select from Example DB table and connection
while ($row = odbc_fetch_array($db)) {
foreach (range('A', 'Z') as $value) {
if ($row['id'] == $value) {
$result = $value.' -- '.$row['desc'];
$dis = "disabled";
} else {
$result = $value;
$dis = "";
}
?>
<option <?php echo $dis; ?>><?php echo $result; ?></option>
<?php
}
}
?>
</select>
我尝试过移动“while”和“foreach”,但似乎没有按正确的顺序移动它们。未经测试,但您可以尝试以下操作:
<select>
<?php
$range = range('A', 'Z');
$used = array();
// Fill in used drives along with their descriptions
while ($row = odbc_fetch_array($db)) {
$used[$row['ID']] = $row['desc']);
}
foreach ($range as $value) {
$result = $value;
$dis = "";
if (in_array($value, $used) {
$result .= ' -- '.$used[$value];
$dis = 'disabled="disabled"';
}
?>
<option <?php echo $dis; ?>><?php echo $result; ?></option>
<?php
}
?>
</select>
未经测试,但您可以尝试以下方法:
<select>
<?php
$range = range('A', 'Z');
$used = array();
// Fill in used drives along with their descriptions
while ($row = odbc_fetch_array($db)) {
$used[$row['ID']] = $row['desc']);
}
foreach ($range as $value) {
$result = $value;
$dis = "";
if (in_array($value, $used) {
$result .= ' -- '.$used[$value];
$dis = 'disabled="disabled"';
}
?>
<option <?php echo $dis; ?>><?php echo $result; ?></option>
<?php
}
?>
</select>
您需要首先查询数据库中正在使用的字母,然后创建从a到Z的循环语句,并将
标记为已禁用或未禁用
<?php
$inUse = array();
$sql = "SELECT UNIQUE(`ID`) FROM `table` ORDER BY `ID` ASC";
$res = $db->query($sql);
foreach ($drive as $res->fetchObject()) {
$inUse[] = $drive['ID'];
}
// create select list
echo '<select name="drive">';
foreach (range('A', 'Z') as $letter) {
$disabled = (in_array($letter, $inUse)) ? ' disabled="disabled"' : '';
echo '<option value="' . $letter . '"' . $disabled . '>' . $letter . '</option>';
}
echo '</select>';
您需要首先查询数据库中正在使用的字母,然后创建一个从a到Z的循环语句,并将
标记为已禁用或未禁用
<?php
$inUse = array();
$sql = "SELECT UNIQUE(`ID`) FROM `table` ORDER BY `ID` ASC";
$res = $db->query($sql);
foreach ($drive as $res->fetchObject()) {
$inUse[] = $drive['ID'];
}
// create select list
echo '<select name="drive">';
foreach (range('A', 'Z') as $letter) {
$disabled = (in_array($letter, $inUse)) ? ' disabled="disabled"' : '';
echo '<option value="' . $letter . '"' . $disabled . '>' . $letter . '</option>';
}
echo '</select>';
从不在if语句中获取,因此没有数据库结果,只添加字母。获得相同的结果。当我在开发人员控制台中查看时,它会为每个结果显示“通知:未定义索引:页码/行号中的A”,但控件显示字母A-Z。但不确定为什么会显示该通知。我们能够使用@MartinBean answer使其工作。真的很感谢你的帮助!从不在if语句中获取,因此没有数据库结果,只添加字母。获得相同的结果。当我在开发人员控制台中查看时,它会为每个结果显示“通知:未定义索引:页码/行号中的A”,但控件显示字母A-Z。但不确定为什么会显示该通知。我们能够使用@MartinBean answer使其工作。真的很感谢你的帮助!谢谢@MartinBean能够让它工作,谢谢你的解释!谢谢@MartinBean能够让它工作,谢谢你的解释!