我有一个像这样的多个领域:
<?php echo $foo->multi_group_select_options($group_ids, $excluded_id); ?>
我设法通过此函数从数据库中获取结果并将其放在< select>中,但是我无法设法保持选定的值处于选中状态.
第一个参数应将“ selected =“ selected”添加到提交之前标记的字段中,然后再提交,第二个参数阻止显示group_id(第2个参数应能正常工作).
这是功能…
/**
* group_options
* Get group names in the dropdown list
*/
public function multi_group_select_options($default = false, $exclude_id = '')
{
global $user;
$exclude_id = (isset($this->config['default_group'])) ? $this->config['default_group'] : 5;
$sql_where = ($user->data['user_type'] == USER_FOUNDER) ? '' : 'WHERE group_founder_manage = 0';
$sql_where_and = (!empty($sql_where)) ? ", AND group_id <> $exclude_id" : "WHERE group_id <> $exclude_id";
$sql = 'SELECT group_id, group_name, group_type
FROM ' . GROUPS_TABLE . "
$sql_where
$sql_where_and
ORDER BY group_name";
$result = mysql_query($sql);
$s_group_options = '';
while ($row = mysql_fetch_assoc($result))
{
/*if (is_array($default))
{
break;
$group_id = '';
foreach ($default as $key => $group_id)
{
$group_id = $group_id;
}
}
print_r($default);*/
$selected = ($row['group_id'] == $group_id) ? ' selected="selected"' : '';
$s_group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
$s_group_options .= '' . $s_group_name . '';
}
$db->sql_freeresult($result);
return $s_group_options;
}
我作为第一个参数放入的数组是完全有效的.它只是具有键和值的普通数组,其中值是组ID.
在while内尝试使用foreach-无效,与while循环外相同.
$default数组如下所示:
Array
(
[0] => 1
[1] => 7
[2] => 2
[3] => 3
)
解决方法:
您没有设置$group_id.以下代码将使用默认值数组和单个值:
if(is_array($default)) {
$selected = in_array($row['group_id'], $default);
} else {
$selected = !strcasecmp($row['group_id'], $default);
}
$selected = $selected ? ' selected="selected"' : '';
除此之外,请查看@Barmar在his answer中编写的注释,并使用htmlspecialchars转义任何动态文本,例如$s_group_name.
此评论与您的特定问题无关,但是您仍然应该考虑它.
标签:select,default,arrays,php
来源: https://codeday.me/bug/20191031/1979063.html