我有两个选择框一个选择框是多个选择选项,有一个添加更多按钮添加多个具有相同选择框的行,值以数组格式传递,我想打印每一行多个选择选项。
------------------------------------------------------------------
Select1 | Select2 | Textbox
------------------------------------------------------------------
Option1 Option1
Option2 Option2
Option3 Option3
Option4 Option4
我在第一个选择框中选择第一个选项,在第二个选择框中选择多个选项(选项1和选项2),在第二行中我选择第一个选择框中的第二个选项,第二个选择框选择多个选项(选项3和选项4)。 我点击我要打印的提交按钮
Option1 Option1
Option1 Option2
Option2 Option3
Option2 Option4
但现在它打印(从多个选择框中获取所有数据)
Option1 Option1
Option1 Option2
Option1 Option3
Option1 Option4
Option2 Option1
Option2 Option2
Option2 Option3
Option2 Option4
这是我的代码:
<div id="lobrows">
<div class="form-group">
<div class="col-sm-4"><label>Reson</label>
<select class="form-control selectpicker" data-live-search="true" name="reson[]" required="required">
<option>--Select--</option>
<option value="1">List 1</option>
<option value="2">List 2</option>
<option value="3">List 3</option>
<option value="4">List 4</option>
</select>
</div>
<div class="col-sm-4"><label>Service </label>
<select class="form-control selectpicker" data-live-search="true" name="service[]" id="service" multiple="multiple">
<option>--Select--</option>
<option value="1">List 1</option>
<option value="2">List 2</option>
<option value="3">List 3</option>
<option value="4">List 4</option>
</select>
</div>
<div class="col-sm-4"><label>Name </label>
<input type="text" class="form-control" name="name[]" placeholder="Name" />
</div>
</div>
</div>
<a href="#" class="pull-right" id="add"><i class="fa fa-plus"></i> add</a>
<script type="text/javascript">
$(document).ready(function() {
$('#add').click(function(e) {
e.preventDefault();
var i=$('.mrbtm').length+1;
$('#lobrows').append('<div class="mrbtm"><div class="form-group"><div class="col-sm-4"><label>Reson </label><select class="form-control selectpicker" data-live-search="true" name="reson[]"><option>--Select--</option><option value="1">List 1</option>
<option value="2">List 2</option>
<option value="3">List 3</option>
<option value="4">List 4</option></select></div><div class="col-sm-4"><label>Service </label><select class="form-control selectpicker" data-live-search="true" name="service[]" id="service'+i+'" multiple="multiple"><option>--Select--</option><option value="1">List 1</option><option value="2">List 2</option><option value="3">List 3</option><option value="4">List 4</option></select></div><div class="col-sm-4"><label>Name </label><input type="text" class="form-control" name="name[]" placeholder="Name" required="required" /></div></div><a href="#" class="pull-right remove"><i class="fa fa-minus"></i> Remove</a><br /></div>');
$('.selectpicker').selectpicker();
$('.selectpicker').selectpicker('refresh');
});
$(document).on('click', '.remove', function(e) {
e.preventDefault();
$(this).parent('div').remove();
i--;
});
});
</script>
这是我的PHP代码:
<?php
foreach ($reson as $id => $value) {
$reson = ($reson[$id]);
$namep = ($name[$id]);
foreach ($service as $ii => $valu) {
$r_service = ($service[$ii]);
echo "Option".$reson."----"."Option".$r_service ."<br>";
}
}
?>
答案 0 :(得分:1)
首先:重新分配你作为foreach来源的var是不明智的
$reson = ($reson[$id]);
其次,我无法在发布的代码中看到您的表单。我建议你打印$ _REQUEST []中的任何内容(按表格类型POST / GET),看看你会得到什么。 我很害怕,你会看到来自多个选择输入的所有使用的值。 也就是说,因为您命名所有选择(使用js生成)的名称相同。 您应该唯一地标识选择,以便了解哪些是。
现在您将拥有多个具有相同名称的选择输入。 您可以在生成新输入时应用类似于id属性的内容。
在PHP中,你可以这样做:
$i = 1;
while(true){
if(!isset($_POST['reson'.$i])){
break;
}
$selectedOptions = $_POST['reson'.$i];
//your magic
$i++;
}
请注意,当您在&#34; ID&#34;之间存在差距时,此代码将无法正常工作。选择输入名称。 (有人删除选择输入)
希望这有点帮助:)