Foreach role_id HTML-параметры выбора

Я обновляю небольшую страницу, где я могу обновить информацию о пользователях.

У меня есть этот запрос, где я присоединяюсь к двум таблицам базы данных:

SELECT * FROM users JOIN roles ON roles.id = users.`role_id` WHERE users.id=$id

Чтобы вывести имя роли в соответствии с идентификатором роли, я создал переменную $ role

$role = $result["role_name"];

Так что я могу опровергнуть это просто повторяя $role

Что я хотел бы иметь, так это иметь форму, в которой я могу выбрать роль пользователя. А также отобразить текущую роль пользователя с выбранным атрибутом.

Что-то похожее на это (мое старое решение):

<select name="role">
<?php
if ($role == 'Admin')
{
echo "<option value='Admin' Selected>";
}
else
{
echo "<option value='Admin'>";
}
echo "Admin </option>";

if ($role == 'User')
{
echo "<option value='User' Selected>";
}
else
{
echo "<option value='User'>";
}
echo "User </option>";

?>
</select>

Но, как вы можете видеть, это было не очень масштабируемым. Если бы я добавил новую роль в свою БД, мне пришлось бы вручную обновить мой код выбора с другим оператором if.

Поэтому я думал, что вместо этого можно использовать оператор foreach. Но я просто не могу понять, как пометить текущую роль пользователя атрибутом Selected.

Чтобы получить все мои роли в массиве, я сделал это:

$sql = $db->prepare ("SELECT * FROM roles");
$sql->execute ();
$roles = $sql->fetchAll ();

И массив будет выглядеть так:

Array ( [0] => Array ( [id] => 1 [role_name] => Admin ) [1] => Array ( [id] => 2 [role_name] => User ) )

1

Решение

Вы можете заполнить массив ролей из вашей базы данных в следующем формате:

$roles = array( "Admin" => 1, "User" => 2, ...);

затем создайте такие параметры между вашими тегами выбора:

foreach($roles as $k => $v)
{
$s = $role_id == $v ? "selected" : "";
echo("<option value='$v' $s>$k</option>");
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]