Я обновляю небольшую страницу, где я могу обновить информацию о пользователях.
У меня есть этот запрос, где я присоединяюсь к двум таблицам базы данных:
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 ) )
Вы можете заполнить массив ролей из вашей базы данных в следующем формате:
$roles = array( "Admin" => 1, "User" => 2, ...);
затем создайте такие параметры между вашими тегами выбора:
foreach($roles as $k => $v)
{
$s = $role_id == $v ? "selected" : "";
echo("<option value='$v' $s>$k</option>");
}
Других решений пока нет …