【发布时间】:2018-06-05 07:19:30
【问题描述】:
嵌套的 foreach 循环毁了我的一天。数据被插入多次(根据检查的嵌套菜单的数量插入相同的值)并且嵌套值存储在每一行中,尽管它们不是父行。
我认为问题是由嵌套的 foreach 循环引起的
<?php
if(!empty($_POST['heading']) && !empty($_POST['content']) && !empty($_POST['keytag']) && !empty($_POST['date'])){
$heading=$_POST['heading'];
$content=$_POST['content'];
$keytag=$_POST['keytag'];
$date=$_POST['date'];
$query = '';
$msg = '';
$data = explode("," ,$_POST["navid"]);
$subdata = explode("," ,$_POST["subnavid"]);
foreach ($data AS $key => $menu){
foreach($subdata AS $k => $submenu){
//If Image is browsed
if(!empty($_FILES['file']['name'])){
move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
$query = $con->prepare('INSERT into news(heading, cat_id, subcat_id, content, keytag, date, img) VALUES(:heading, :cat_id, :subcat_id, :content, :keytag, :date, :new_img)');
$query->bindParam(':new_img',$new_img);
}
//If Image isnot browsed
if(empty($_FILES['file']['name'])){
$query = $con->prepare('INSERT into news(heading, cat_id, subcat_id, content, keytag, date) VALUES(:heading, :cat_id, :subcat_id, :content, :keytag, :date)');
}
if(empty($submenu)){
$submenu = null;
}
$query->bindParam(':heading', $heading);
$query->bindParam(':subcat_id', $submenu);
$query->bindParam(':cat_id', $menu);
$query->bindParam(':content', $content);
$query->bindParam(':keytag', $keytag);
$query->bindParam(':date', $date);
if($query->execute()){
$msg="Successfully Inserted";
};
}
}
echo $msg;
}
} ?>
问题来了
让我简单解释一下。网站有三个菜单:News、Views、Art。其中只有新闻菜单有子菜单。如果新闻的submenu 和Views/Art同时勾选,默认情况下Views/Art 列也会存储submenu 的值,但在实际视图/艺术中没有子菜单,它正在存储新闻子菜单值。
应该是
<li>
<input type="checkbox" name="menu[]" value="2">News
<ul>
<li>
<input type="checkbox" name="menu[][menusub]" value="2">Politics
</li>
<li>
<input type="checkbox" name="menu[][menusub]" value="3">Social
</li>
<li>
<input type="checkbox" name="menu[][menusub]" value="4">Economy
</li>
</ul>
</li>
<li>
<input type="checkbox" name="menu[]" value="12">Views
</li>
<li>
<input type="checkbox" name="menu[]" value="13">ART
</li>
数据通过ajax传递如下
$(document).on('submit', '#form', function(e){
e.preventDefault();
var navid = [];
$("input[name='menu[]']:checked").each(function(){
navid.push(this.value);
});
var subnavid = [];
$("input[name='menu[][menusub][]']:checked").each(function(){
subnavid.push(this.value);
});
if (navid.length === 0){ //tell you if the array is empty
alert("Please Select atleast one checkbox");
return false;
}
else {
var formData = new FormData(this);
formData.append('navid', navid);
formData.append('subnavid', subnavid);
$.ajax({
type: 'POST',
url: 'upload.php',
data: formData,
contentType: false,
cache: false,
processData:false,
success: function(data){
alert(data);
}
});
}
});
【问题讨论】:
标签: php ajax foreach nested-loops