Php 从mysql中调用下拉菜单需要独特的选择
我正在学习PHP和MySQL,在学习的过程中,我试图创建一个数据库驱动的网站。我正在修补数据库驱动的下拉表单列表,到目前为止,我可以在数据输入表单上显示它们,可以捕获结果并将其插入数据库,现在我尝试调用所选项目,将其显示在更新/编辑表单上。到目前为止,通过下面的代码,我可以在下拉列表中将数据召回到更新/编辑表单中,但是我希望将可选项缩小到仅限于唯一的角色 我的代码是:Php 从mysql中调用下拉菜单需要独特的选择,php,mysql,drop-down-menu,Php,Mysql,Drop Down Menu,我正在学习PHP和MySQL,在学习的过程中,我试图创建一个数据库驱动的网站。我正在修补数据库驱动的下拉表单列表,到目前为止,我可以在数据输入表单上显示它们,可以捕获结果并将其插入数据库,现在我尝试调用所选项目,将其显示在更新/编辑表单上。到目前为止,通过下面的代码,我可以在下拉列表中将数据召回到更新/编辑表单中,但是我希望将可选项缩小到仅限于唯一的角色 我的代码是: <?php include $_SERVER['DOCUMENT_ROOT']."/connections/connec
<?php
include $_SERVER['DOCUMENT_ROOT']."/connections/connectdb.php";
$role_query = "SELECT fer_users.id fer_roles_id, fer_roles.description\n"
. "FROM fer_users\n"
. "JOIN fer_roles\n"
. "WHERE fer_users.fer_roles_id=fer_roles.id";
$role_result = mysqli_query($connection, $role_query);
?>
<select name="update_role">
<?php
while ($role_row = mysqli_fetch_assoc($role_result)) {
$role_id=$role_row["fer_roles_id"];
$role_description=$role_row["description"];
$selected = ($role_row['fer_roles_id'] == $id);
echo "<option value=\"$role_id\" ".($selected ? " selected=\"selected\"":"").">$role_description</option>";
}
?>
</select>
我的下拉列表显示如下:
如上所述,我需要图片中的列表来显示管理员和用户 添加
按角色分组。说明
直到查询结束。这将根据角色描述将结果分组在一起
要包含每个角色的所有ID,还需要更改
选择feru users.id feru roles\u id,feru roles.description
到
选择组连接(fer\u users.id fer\u roles\u id SEPARATOR',),fer\u roles.description
这将导致id
字段返回每个id的逗号分隔列表
有关您希望返回的ID是用户ID还是角色ID 如果是前者,那么您将得到重复的角色,因为可能有多个用户具有这些角色 如果是后者,那么您不想修改select以只查看角色表吗?只需运行两个查询
<?php
include $_SERVER['DOCUMENT_ROOT']."/connections/connectdb.php";
$role_query = "SELECT fer_roles.id, fer_roles.description\n"
. "FROM fer_roles\n"
. "WHERE 1";
$role_result = mysqli_query($connection, $role_query);
$role_query2 = "SELECT fer_users.id, fer_users.fer_roles_id \n"
. "FROM fer_users\n"
. "WHERE id = '".mysql_real_escape_string($_GET['id'])."'"; //this assumes you're passing the user as a GET variable
$role_result2 = mysqli_query($connection, $role_query2);
$role_row2 = mysqli_fetch_assoc($role_result2);
?>
<select name="update_role">
<?php
while ($role_row = mysqli_fetch_assoc($role_result)) { ?>
<option value="<?php echo $role_row['id'];?>" <?php if($role_row['id'] == $role_row2['fer_roles_id']){ echo 'selected="selected"';}?>><?php echo $role_row['description'];?></option>";
}
?>
</select>
谢谢,不幸的是,这将SQL响应仅隔离到ID的8和9,这意味着当我回忆起ID的14和15时,他们预选的下拉菜单项是“管理员”而不是“用户”。我相信这是显而易见的,但我正在尝试从两个表中提取数据,如果这有帮助的话?再次感谢,鉴于结果,似乎越来越接近了。上面的确切语法生成了一个错误,但如果我在feru users.id和feru roles\u id之间加一个逗号,它会将id连接在一起,但不会生成错误。。。例如:当管理员ID=1,用户ID=2时,ID被分组为81161,然后是92142152。fer_users表包含所有用户详细信息,包括一个名为fer_roles_ID的列。此列对应于另一个名为fer_roles的表的ID列。但您只需要角色ID和说明,而不是用户,对吗?不,我还需要用户id。这种情况下,我从数据库中调用数据以更新记录。因此,如果一条记录在feru roles\u id列下有1(Administrator),那么当我调用该记录时,我希望下拉框被预选为Administrator。在原始帖子的图片中,你可以看到我可以得到整个列表,我只需要对响应进行分组。我听到了,但问题不在于查询,而是php代码,我要更新我的答案,检查一下。嗯,在foreach循环之前尝试一个var_dump($roles)。您应该会看到一个具有唯一角色的数组从我收集到的信息中,我需要用户ID来明确标识用户。我需要角色ID来识别关联的角色,我需要角色描述来将下拉菜单上的数字转换为一个单词作为一个个人项目不需要优雅,这100%有效,我可以拼凑并理解正在发生的事情。。。这才是最重要的@马特:注意第一段代码——它有一个SQL注入漏洞。缺乏优雅是可以的,但在生产过程中出现安全缺陷(显然)是不行的。抄送:托比-你能修好吗?
<?php
$roles = array();
while ($role_row = mysqli_fetch_assoc($role_result)) {
$roles[$role_row["fer_roles_id"]]=$role_row["description"];
?>
<select name="update_role">
<?php
foreach($roles as $role_id => $role){
$selected = ($role_id == $id);
echo '<option value="'.$role_id.'" '.($selected ? ' selected ' : '').'>'.$role.'</option>';
}
?>
</select>
<?php
include $_SERVER['DOCUMENT_ROOT']."/connections/connectdb.php";
$role_query = "SELECT fer_roles.id, fer_roles.description\n"
. "FROM fer_roles\n"
. "WHERE 1";
$role_result = mysqli_query($connection, $role_query);
$role_query2 = "SELECT fer_users.id, fer_users.fer_roles_id \n"
. "FROM fer_users\n"
. "WHERE id = '".mysql_real_escape_string($_GET['id'])."'"; //this assumes you're passing the user as a GET variable
$role_result2 = mysqli_query($connection, $role_query2);
$role_row2 = mysqli_fetch_assoc($role_result2);
?>
<select name="update_role">
<?php
while ($role_row = mysqli_fetch_assoc($role_result)) { ?>
<option value="<?php echo $role_row['id'];?>" <?php if($role_row['id'] == $role_row2['fer_roles_id']){ echo 'selected="selected"';}?>><?php echo $role_row['description'];?></option>";
}
?>
</select>
<?php
include $_SERVER['DOCUMENT_ROOT']."/connections/connectdb.php";
$role_query = "SELECT fer_roles.id, fer_roles.description\n"
. "FROM fer_roles\n"
. "WHERE 1";
$role_result = mysqli_query($connection, $role_query);
$role_query2 = "SELECT fer_users.id, fer_users.fer_roles_id \n"
. "FROM fer_users\n"
. "WHERE 1"; //this assumes you're looking up a specific user
$role_result2 = mysqli_query($connection, $role_query2);
while($role_row2 = mysqli_fetch_assoc($role_result2)){
?>
<select name="update_role">
<?php
while ($role_row = mysqli_fetch_assoc($role_result)) { ?>
<option value="<?php echo $role_row['id'];?>" <?php if($role_row['id'] == $role_row2['fer_roles_id']){ echo 'selected="selected"';}?>><?php echo $role_row['description'];?></option>";
}
?>
</select>
<?php
} ?>