我正在尝试从数据库填充我的多选,但它只选择一个值。在数据库中,我的 mselect 列有两个值:“小,大”。 从 _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 循环吗?
使用 PHP
explode()
制作数据库数据“小、大”的数组:
将视图中的行更改为:
$m_selected = isset( $_POST[ 'multiselect' ] ) ? $_POST[ 'multiselect' ] : array_map('trim',explode(",",$row['mselect']));
explode 函数创建一个值数组,类似于
array('small', 'large');
并且
array_map('trim',$array)
函数会删除数据中的所有空格