Вложенный цикл 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
.Из них только меню новостей имеет подменю .Если для News 'submenu
и Views/Art
установлено сразу , по умолчанию в столбце Views/Art
также хранится значение submenu
, но в реальном представлении / искусстве не имеет подменю , хранит значение подменю News .
Это должно быть
Здесь HTML
<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);
}
});
}
});