我试图从数据库填充我的多选项,但它只选择一个值。在数据库中,我的列mselect有两个值:" small,large"。 从_POST填充值也只显示一个值。怎么了?
来自我的模特:
function get_all() {
return $this->db->get( 'settings' )->row_array(); //array
}
从我的观点来看:
$row = $this->lol_model->get_all();
$m_name = 'multiselect';
$m_options = array( 'small' => 'Small', 'medium' => 'Medium', 'large' => 'Large', 'xlarge' => 'ExtraLarge', );
$m_selected = isset( $_POST[ 'multiselect' ] ) ? $_POST[ 'multiselect' ] : $row['mselect'];
$m_extra = array( 'id' => 'multiselect', 'class' => 'w3-select', );
echo form_multiselect( $m_name, $m_options, $m_selected, $m_extra ); //name, options, selected, extra
在我的控制器中,我设置了验证,错误和加载视图。
编辑: 我已经找到了在php中使用序列化函数存储数据的方法但是有不同的方法吗? CI set_select函数会有帮助吗?
$m_selected = isset( $_POST[ 'multiselect' ] ) ? $_POST[ 'multiselect' ] : unserialize($row['mselect']);
在数据库中,我有列"设置"只有一行,但我仍然需要使用foreach循环?
答案 0 :(得分:1)
使用PHP explode()
创建数据库数据数组"小,大":
将视图中的行更改为:
$m_selected = isset( $_POST[ 'multiselect' ] ) ? $_POST[ 'multiselect' ] : array_map('trim',explode(",",$row['mselect']));
explode函数使值的数组类似于
array('small', 'large');
array_map('trim',$array)
函数删除数据中的任何空格