Foreach role_id HTML选择选项

时间:2014-11-19 23:13:04

标签: php pdo foreach selected

我正在更新一个可以更新用户信息的小页面。

我有这个查询,我加入了两个数据库表:

SELECT * FROM users JOIN roles ON roles.id = users.`role_id` WHERE users.id=$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 个答案:

答案 0 :(得分:1)

您可以使用以下格式填充数据库中的一组角色:

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

然后在您的选择标记之间创建这样的选项:

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