1

Windows の [ネットワーク ドライブのマップ] ドロップダウンがどのように機能するかを模倣しようとしています。私のドロップダウン オプションは文字 AZ です。SQL SELECT ステートメントの結果に基づいて、既に使用されている文字を表示して無効にする必要があります。ドロップダウンで文字を取得するか、ドロップダウンで SQL の結果を取得できますが、両方の正しい組み合わせはできません。

アルファベットのすべての文字をドロップダウンに表示し、SQSL SELECT ステートメントで返される文字を無効にするにはどうすればよいですか?

サンプルDB

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」を移動しようとしましたが、正しい順序で取得していないようです。

4

2 に答える 2

2

テストされていませんが、これを試すことができます:

<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>
于 2013-07-03T15:03:09.333 に答える