【问题标题】:CodeIgniter submit items from selectCodeIgniter 从选择中提交项目
【发布时间】:2013-10-13 20:08:22
【问题描述】:

我有一个这样的选择:

$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)

获取项目:

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;
    }

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

我该如何解决这个问题?

【问题讨论】:

  • 也发布你的模型getItems();
  • var_dump($stuff) 长什么样子?

标签: php codeigniter


【解决方案1】:

您需要将 $stuff 数组的键设置为您的值,试试这个:

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

【讨论】:

    【解决方案2】:

    我看到了两种解决方案。

    1) 您将$stuff 更改为具有与值相同的键。

    CodeIgniter 的 form_multiselect 就像 form_dropdown 一样生成选项,使得传递的选项列表的键包含相应选项文本的值。 因此,在您执行多选之前:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2013-10-14
      • 2015-07-21
      • 2014-04-15
      • 1970-01-01
      • 2017-01-30
      相关资源
      最近更新 更多