0

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

此处提供了表单的演示。

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

  <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

4 回答 4

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);
}
于 2015-03-23T05:15:05.617 回答
0

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

if($this->input->post('select2'. $i .'[]')){
$data2=array(
 'field1' =>$this->input->post('select2'. $i .'[]')
); 
于 2015-03-23T05:09:52.720 回答
0

主要问题是在您的表单中使用 POST 方法。您在表单中使用 GET 方法,同时使用 post 方法获取值

<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

    }

}
?>
于 2015-03-23T05:03:54.240 回答
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);

        }
     }
于 2015-03-23T05:06:45.293 回答