Şimdi bir jquery tablosu oluşturdum mantık şu.
Adam sınırsız ana program ekliyor altında ise sınırsız alt program ekliyor.
Ben bunları ajax ile post ediyorum ama ne yaptıysam yukarıda ki ana programlar ile alt programları eşleştiremedim.
Örnek 1. ana programa 3 alt program ekliyorum diğer ana programa hiç eklemiyorum döngüde yinede ikisine 3 alt program ekleniyor.
Js ile bunun bir ayrımı olmalıda pek anlamıyorum
<div class="form-group row" id="ozellikler">
<button style="background: #89a212; border: none; width: 100%; margin: auto; margin-bottom: auto; margin-bottom: 10px;" type="button" id="ozellikekle" class="btn btn-warning waves-effect waves-light">Ana Program Ekle</button>
<button id="gonderButton" type="button" class="btn btn-primary">Gönder</button>
</div>


<script type="text/javascript">
$(document).ready(function(){

$('#ozellikekle').click(function(){
var bul = $('[data-ozellik]').length;
$('#ozellikler').append('\
<div class="col-md-12" data-ozellik="'+bul+'">\
<div class="row form-group">\
<div class="col-md-7"><input type="text" class="form-control" name="ozellik_adi[]" placeholder="Ana Program Adı"></div>\
<div class="col-md-3"><select name="ozellik_durumu[]" class="form-control"><option value="1">Aktif</option><option value="0">Pasif</option></select></div>\
<div class="col-md-2">\
<button type="button" data-alt-ozellik-ekle="'+bul+'" class="btn btn-success">Alt Program Ekle</button>\
<button type="button" data-ozellik-sil="'+bul+'" class="btn btn-danger">Sil</button>\
</div>\
<div class="form-group alt_ozellikler" data-alt-ozellik="'+bul+'"></div>\
</div>\
</div>\
');
});

$(document).on('click','[data-ozellik-sil]', function(){
$('[data-ozellik="'+$(this).attr('data-ozellik-sil')+'"]').remove();
$('#ekle').fadeIn(1000);
});

$(document).on('click', '[data-alt-ozellik-ekle]', function(){
var anaProgramID = $(this).closest('.col-md-12').data('ozellik'); // İlgili ana program ID'sini al
var bul = $('[data-alt-ozellik-dis]').length;
$('[data-alt-ozellik="'+$(this).attr('data-alt-ozellik-ekle')+'"]').append('\
<div class="col-md-12" style="margin-top: 10px;" data-alt-ozellik-dis="'+bul+'">\
<div class="row form-group">\
<div class="col-md-7">\
<input type="text" class="form-control" placeholder="Alt Program Adı" name="alt_ozellik_adi[]">\
</div>\
<div class="col-md-2">\
<select name="alt_ozellik_tip[]" class="form-control alt_ozellik_tip"><option value="dosya">Dosya</option><option value="metin">Metin</option></select>\
</div>\
<div class="col-md-2 alt_ozellik_file">\
<input type="file" class="form-control" name="alt_ozellik_file[]">\
</div>\
<div class="col-md-2">\
<select name="alt_ozellik_durum[]" class="form-control"><option value="1">Aktif</option><option value="0">Pasif</option></select>\
</div>\
<div class="col-md-2 alt_ozellik_textarea" style="display: none;">\
<textarea class="form-control" name="alt_ozellik_metin[]"></textarea>\
</div>\
<div class="col-md-1">\
<button type="button" data-alt-ozellik-sil="'+bul+'" class="btn btn-danger">Sil</button>\
</div>\
</div>\
</div>\
');
});

$(document).on('click','[data-alt-ozellik-sil]', function(){
$('[data-alt-ozellik-dis="'+$(this).attr('data-alt-ozellik-sil')+'"]').remove();
});

$(document).on('change', '.alt_ozellik_tip', function(){
var val = $(this).val();
if(val === 'dosya'){
$(this).closest('.row').find('.alt_ozellik_file').show();
$(this).closest('.row').find('.alt_ozellik_textarea').hide();
} else {
$(this).closest('.row').find('.alt_ozellik_file').hide();
$(this).closest('.row').find('.alt_ozellik_textarea').show();
}
});

});

$(document).on('click', '#gonderButton', function() {
var formData = new FormData();
$('[name^="ozellik_adi"]').each(function(index, element) {
formData.append($(element).attr('name'), $(element).val());
});
$('[name^="ozellik_durumu"]').each(function(index, element) {
formData.append($(element).attr('name'), $(element).val());
});
$('[name^="alt_ozellik_adi"]').each(function(index, element) {
formData.append($(element).attr('name'), $(element).val());
});
$('[name^="alt_ozellik_tip"]').each(function(index, element) {
formData.append($(element).attr('name'), $(element).val());
});
$('[name^="alt_ozellik_file"]').each(function(index, element) {
formData.append($(element).attr('name'), $(element)[0].files[0]);
});
$('[name^="alt_ozellik_durum"]').each(function(index, element) {
formData.append($(element).attr('name'), $(element).val());
});
$('[name^="alt_ozellik_metin"]').each(function(index, element) {
formData.append($(element).attr('name'), $(element).val());
});

$.ajax({
url: 'ozellikekle.php',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(response) {
console.log(response);
// Burada gelen response değerine göre bir işlem yapabilirsiniz
},
error: function(xhr, status, error) {
console.error(error);
}
});
});


</script>
$ozellik_adlari = $_POST['ozellik_adi'];
$ozellik_durumlari = $_POST['ozellik_durumu'];

foreach ($ozellik_adlari as $keyz => $ozellik_adi) {
$ozellik_durumu = isset($ozellik_durumlari[$keyz]) ? $ozellik_durumlari[$keyz] : '';
$stmt = $ozy->prepare("INSERT INTO anaozellik (adi, durum) VALUES (?, ?)");
$result2 = $stmt->execute(array($ozellik_adi, $ozellik_durumu));
$anaid = $ozy->lastInsertId();

$alt_ozellik_adi = $_POST['alt_ozellik_adi'];
$alt_ozellik_durum = $_POST['alt_ozellik_durum'];
$alt_ozellik_tip = $_POST['alt_ozellik_tip'];
$alt_ozellik_file = $_POST['alt_ozellik_file'];
$alt_ozellik_metin = $_POST['alt_ozellik_metin'];
$ana_program_id = $_POST['ana_program_id'];





foreach ($alt_ozellik_adi as $i => $alt_adi) {
$anaProgramID = $ana_program_id[$i];
if ($anaProgramID == $anaid) {
$a1 = $alt_ozellik_adi[$i];
$a2 = $alt_ozellik_durum[$i];
$a3 = $alt_ozellik_tip[$i];
$a4 = $alt_ozellik_file[$i];
$a5 = $alt_ozellik_metin[$i];

if ($a1 !== 'undefined' && $a1 !== '') {
// Veritabanına yazdırma işlemlerini burada gerçekleştirin
echo "Alt Özellik Adı: $a1\n";
echo "Alt Özellik Durum: $a2\n";
echo "Alt Özellik Tip: $a3\n";
echo "Alt Özellik File: $a4\n";
echo "Alt Özellik Metin: $a5\n\n";

$stmtz = $ozy->prepare("INSERT INTO anaozellikalt (adi, anaid, dosya, detay, durum, tip) VALUES (?, ?, ?, ?, ?, ?)");
$result2z = $stmtz->execute(array($a1, $anaid, $a4, $a5, $a2, $a3));
}
}
}
}