我需要通过post将一个表单的克隆区域添加到PHP,然后每个添加到一个数组。
我的代码 <div class="input-main white_bg cloneneedsanalysis">
<div class="action-input clone-needs-analysis">
<div class="action-input-white-shorter">
<div class="inner-sub-title-less-padding">
<p>Audience Analysis</p>
</div>
<div class="col-md-12">
<div class="form-group">
<select class="select2 select2-multiple" multiple="multiple" data-placeholder="Choose ..." name="needs_analysis[]">
<option value="">-- Choose Audience Categories --</option>
<option value="536"> Finance - - Cash collection </option>
<option value="537"> IT - - Comms IT </option>
<option value="538"> Strategy - - Strategy team 1 </option>
</select>
</div>
</div>
</div>
<div class="action-input-plus-needs-analysis"> </div>
<div class="action-input-remove-needs-analysis"> </div>
</div>
</div>
克隆工作,但当我通过POST发送到PHP时,它将只捕获最后一个,因为它们都被称为称为needs_analysis[]
那么,在克隆时,我如何编辑名称使其不同,以及如何让PHP循环遍历每个数组?
我的JQuery;
$(document).on('click', '.clone_needs_analysis_button', function(e) {
e.preventDefault();
$(this).closest('.clone-needs-analysis').clone().insertAfter('.cloneneedsanalysis:last');
$(this).closest('.action-input-plus').hide();
$(this).closest('.action-input-remove').removeClass('hidden');
我的PHP;
$needs_analysis = array();
foreach ($_POST['needs_analysis'] as $key => $value) {
$needs_analysis[$key]['audience_id'] = $value;
$needs_analysis[$key]['created'] = $_POST['updated'];
$needs_analysis[$key]['created_by'] = $_POST['updated_by'];
$needs_analysis[$key]['solution_id'] = $_POST['solution_id'];
}
foreach ($needs_analysis as $needs_analysis_insert) {
$db->insert('design_needs_analysis', $needs_analysis_insert);
}
你的多选区名称应该是这样的:
needs_analysis[1][]
needs_analysis[2][]
您可以在服务器端生成页面时执行此操作,也可以在JavaScript
:
$('[name="needs_analysis[]"]').each(function(index) {
var currentElement = $(this)
currentElement.attr('name', 'needs_analysis['+index+'][]')
})
为了循环遍历PHP
中的值,您可以这样做:
foreach ($_POST['needs_analysis'] as $k=>$v) {
//$v represents the value array for a select element
foreach ($v as $k2=>$v2) {
//do something with each value
}
}