CodeIgniter从select中提交项目

时间:2013-10-13 20:08:23

标签: php codeigniter

我有这样的选择:

$stuff=$this->Database->getItems();
$data['mySelect']=form_multiselect('addedStuff[]', $stuff, '1', 'id="addedStuff" multiple="multiple"');

当我提交表单然后POST选择的所有值我有:

$var = $this->input->post('addedStuff');
var_dump($var);

var_dump显示:

array (size=3)
  0 => string '0' (length=1)
  1 => string '1' (length=1)
  2 => string '2' (length=1)

我的问题是我不想拥有数字字符串,我想要所选项目的文本。他们应该是这样的:

array (size=3)
  0 => string 'IMP 291B' (length=8)
  1 => string 'IMP 9891' (length=8)
  2 => string 'IMP 492' (length=7)

getItems:

function getItems()
    {
        $query = $this->db->query(sprintf (GET_PRINTERS_MODELS));

        $results=array();

        foreach ($query->result_array() as $row)
        {
          array_push ($results, $row['modelo']);
        }
        return $results;
    }

我的选择在视图中正确显示...

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您需要将$stuff数组的键设置为您的值,请尝试以下操作:

$stuff = $this->Database->getItems();
$stuff = array_combine($stuff,$stuff);
$data['mySelect']=form_multiselect('addedStuff[]', $stuff, '1', 'id="addedStuff" multiple="multiple"');

答案 1 :(得分:1)

我看到两种解决方案。

1)您更改$stuff以使密钥与值相同。

CodeIgniter的form_multiselect就像form_dropdown一样生成选项,使得传递的选项列表的键包含相应选项文本的值。 你做多重选择之前的Ergo:

$stuff = array_combine($stuff,$stuff);

2)因为方法1可能会或可能不会弄乱任何已发送的数据,所以保留索引,但是根据索引在接收控制器中进行查找。如下:

$stuff=$this->Database->getItems();
$var = $this->input->post('addedStuff');
$var = array_intersect_key($stuff,$var);

第二种方法感觉更安全..