我有一个简单的表单,其中包含一个多选框,可以通过单击按钮动态生成。
该表单的演示可用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);
}
}
这有什么办法吗?
答案 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 .'[]')
);