无法从PHP中动态生成的多选框中获取值

时间:2015-03-23 04:54:17

标签: php arrays multiple-select dynamic-values

我有一个简单的表单,其中包含一个多选框,可以通过单击按钮动态生成。

该表单的演示可用here

由于它是一个多选框,用户可以从选择框中选择任意数量的值。它应该保存到数据库中。所以,我将选择框声明为数组。就像这样。

  <select name="select2[]" size="3" multiple="multiple">
         <option value="11">eleven</option>
        <option value="12">twelve</option>
        <option value="13">thirette</option>
        <option value="14">fourteen</option>
        <option value="15">fifteen</option>
        <option value="16">sixteen</option>
        <option value="17">seventeen</option>
        <option value="18">eighteen</option>
        <option value="19">nineteen</option>
        <option value="20">twenty</option>     
  </select>

但正如我之前所说,根据用户的选择,多次选择框将被多次生成,所有输入的数据都应该保存。所以我使用jquery更改了选择框的名称。

选择框的名称将类似于select2 [] 1,select2 [] 2,select2 [] 3等等(这是无效的;不是数组)但它应该像select21 [],select22 [] ,select23 []等等,这是一种声明数组的有效方法。 我无法使用PHP获取服务器端的数组,如下所示

if  ($total_count>0)
        {  //echo $total_count;
            for($i=0;$i<=$total_count;$i++)
            {
                // generated as select2[]1,select2[]2,select2[]3 ,... which is not valid.
                // thus invalid argument to foreach
                if($this->input->post('select2[]'.$i)){
                $data2=array(
                'field1' =>$this->input->post('select2[]'.$i)
                );      
            $this->db->insert('table1',$data2);

            }
         }

这有什么办法吗?

4 个答案:

答案 0 :(得分:1)

此处,您将选择框命名为name="select2[]1",而不是name="select21[]" , name="select22[]"。这将成为一个数组,可以通过php文件访问 $_POST['select21']

命名是在你的javascript中完成的

`$(this).attr("name",$(this).attr("name") + i);`

我建议将其更改为

$(this).attr("name",i+$(this).attr("name"));

更简单的例子就像

<script>
var elem,i=0;
            $("#add_company").click(function () {
                elem = '<select name="select'+i+'[]" size="10" multiple="multiple">' +
                    '<option value="11">eleven</option>' +
                    '<option value="12">twelve</option>' +
                    '<option value="13">thirette</option>' +
                    '<option value="14">fourteen</option>' +
                    '<option value="15">fifteen</option>' +
                    '<option value="16">sixteen</option>' +
                    '<option value="17">seventeen</option>' +
                    '<option value="18">eighteen</option>' +
                    '<option value="19">nineteen</option>' +
                    '<option value="20">twenty</option>' +
                    '</select>';
                $("#frmHolder").append(elem);
                i++;
            });
</script>

<form id="form1" name="form2" action="get_test.php" method="post">
    <div id="frmHolder"></div>
    <input type="submit" id="submit" class="btn btn-primary" name="submit" value="Submit the Form" />
</form>

并在get_test.php中转储$_POST并查看输出。

例如

foreach($_POST as $key=>$val){
    var_dump($val);
}

答案 1 :(得分:0)

主要问题是在您的表单中使用表单中的POST方法。您在使用post方法

获取值时使用表单中的GET方法
<form id="form1" name="form2" action="" method="post">
<div id="add_company_div" class="addcomp" style='display: none;'>
  <div class="col-sm-6 col-xs-12 own_pad">
  <select name="select2[]" size="3" multiple="multiple">
         <option value="11">eleven</option>
        <option value="12">twelve</option>
        <option value="13">thirette</option>
        <option value="14">fourteen</option>
        <option value="15">fifteen</option>
        <option value="16">sixteen</option>
        <option value="17">seventeen</option>
        <option value="18">eighteen</option>
        <option value="19">nineteen</option>
        <option value="20">twenty</option>     
  </select>
  </div>

  <div id="hide_company" class="col-sm-6 col-xs-12 own_pad minus">
    Click this DIV to Close
  </div>
</div>
<input type="hidden" id="start_count_value"  name="start_count_value" value="" />   
<input type="hidden" name="class_count" class="class_count" value="" />
<div class="box-footer clearfix no-border no_pad comp-foot">
  <div id="add_company" class="btn btn-success btn-sm pull-left">Generate Multiple Select Boxes</div>
</div>
   <input type="submit" id="submit" class="btn btn-primary"  name="submit" value="Submit the Form" />
</form>

尝试使用这个PHP代码

<?
if(isset($_POST['submit'])) 
{
    $select=$_POST['select2'];
    foreach($select as $key=>$selects)
    {
        echo $selects; // will echo 11 12..................20

    }

}
?>

答案 2 :(得分:0)

试试这个

if  ($total_count>0)
        {  //echo $total_count;
            for($i=0;$i<=$total_count;$i++)
            {
                // generated as select2[]1,select2[]2,select2[]3 ,... which is not valid.

   // thus invalid argument to foreach
            if(isset($_POST['select2'][$i])){
            $data2=array(
            'field1' =>$_POST['select2'][$i]
            );      
        $this->db->insert('table1',$data2);

        }
     }

答案 3 :(得分:0)

您也可以尝试相同的代码,但就像这样:

if($this->input->post('select2'. $i .'[]')){
$data2=array(
 'field1' =>$this->input->post('select2'. $i .'[]')
);