1

ユーザーのテーブルがあります。各ユーザーには、1 または 0 の有効フラグがあります。

有効なすべてのユーザーを含む選択ボックスが必要だとします。これは簡単に実行できます。ユーザーがフォームを編集しているときに、現在有効なユーザーが表示されますが、現在選択されているユーザーは有効なユーザーではありません

通常、私のクエリは次のようになります

SELECT first_name, last_name from users WHERE enabled = 1

ただし、これが編集フォームであり、現在選択されているユーザーが有効になっておらず、ユーザーがフォームを送信すると、現在選択されているユーザーが失われます。

これを処理する最良の方法は何ですか?私が考えることができる唯一の方法は、現在有効になっているユーザーも取得するクエリで結合を作成することですが、より良い方法があるかどうか疑問に思っています。主な理由は、一部のフォームにはこのユーザー フィールドがページの 5 か 6 か所にあり、現在のユーザーを取得するためだけに 5 か 6 の異なるクエリを作成する必要があるためです。

4

3 に答える 3

4

ドロップダウン リストを生成する前に、選択したユーザーの ID を取得できる場合はOR、クエリに句を追加するだけです。

ユーザーから first_name, last_name を選択 WHERE enabled = 1 OR user_id = ?

これにより、以前に選択したユーザーがリストに表示されることが保証されます。ORすべての場合 (選択したユーザーが有効になっているかどうかに関係なく) に句を追加しても安全です。

于 2012-09-21T18:49:35.593 に答える
0

ようやく問題が理解できたと思います。これにアプローチする最も簡単な方法は、すべてのユーザーをロードすることですが、ドロップダウンを作成しているときにのみフィルタリングします。

ドロップダウン条件は次のようになります。

if ($user['enabled'] || $user['id'] == $lead['admin']) { ... }

SQLの条件で同じことを行うことができますがJOIN、フォームに複数のロールが存在する場合は、より多くの作業が必要になります。

すべてのユーザーをロードすることが問題であるかどうかはわかりません:)

于 2012-09-26T14:53:33.193 に答える
0

現在のユーザーが有効になっていない場合にのみ呼び出される関数を作成できます。

$result=your_database_version('select username from users where enabled=1');
$found = false;
user_options = '';
while($row=your_db_fetch_array($result)){
    $selected = '';
    if($current_user == $row['user']) {
        $found = true;
        $selected = 'selected';
    }
    $user_options.="<option value='{$row['user']}' $selected>{$row['user']}</option>";
}
if(!$found) {
    $user_options .= add_current_user($current_user);
}

function add_current_user($current_user) {
    //Get info from database for $current_user
    $row=your_db_fetch_array($result)
    return "<option value='{$row['user']}' selected>{$row['user']}</option>";
}
于 2012-09-21T18:49:49.780 に答える