• 13-02-2024, 14:35:10
    #1
    Kurumsal Üye
    Ş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));
    }
    }
    }
    }
  • 13-02-2024, 14:45:10
    #2
    Anladığım kadarıyla, her ana program için birden fazla alt program ekliyorsunuz ve bunları bir tabloya yazdırıyorsunuz. Ancak, alt programların hangi ana programa ait olduğunu belirtmek için ekstra bir adım atmıyorsunuz.
    JQuery kodunuzda, alt program eklerken bu alt programların hangi ana programa ait olduğunu belirtmek için data-alt-ozellik-ekle özniteliğini kullanıyorsunuz. Ancak, bu öznitelik sadece alt programın hangi ana program altında olduğunu belirtiyor, ana programın kendisini belirtmiyor.
    Bunun yerine, alt programı eklerken, o alt programın hangi ana programa ait olduğunu belirtecek şekilde bir öznitelik eklemeniz gerekebilir. Örneğin, alt programın data-ana-program-id şeklinde bir özniteliği olabilir ve bu öznitelik, ilgili ana programın ID'sini taşır.
    Daha sonra, bu ID'yi alarak alt programları doğru ana programa atayabilirsiniz. Örneğin, alt program eklerken data-ana-program-id özniteliğine uygun bir değeri atamalısınız. Ardından, alt programları gönderirken bu değeri kullanarak hangi ana programa ait olduklarını belirleyebilirsiniz.
  • 13-02-2024, 14:54:14
    #3
    Kurumsal Üye
    PremiumTR adlı üyeden alıntı: mesajı görüntüle
    Anladığım kadarıyla, her ana program için birden fazla alt program ekliyorsunuz ve bunları bir tabloya yazdırıyorsunuz. Ancak, alt programların hangi ana programa ait olduğunu belirtmek için ekstra bir adım atmıyorsunuz.
    JQuery kodunuzda, alt program eklerken bu alt programların hangi ana programa ait olduğunu belirtmek için data-alt-ozellik-ekle özniteliğini kullanıyorsunuz. Ancak, bu öznitelik sadece alt programın hangi ana program altında olduğunu belirtiyor, ana programın kendisini belirtmiyor.
    Bunun yerine, alt programı eklerken, o alt programın hangi ana programa ait olduğunu belirtecek şekilde bir öznitelik eklemeniz gerekebilir. Örneğin, alt programın data-ana-program-id şeklinde bir özniteliği olabilir ve bu öznitelik, ilgili ana programın ID'sini taşır.
    Daha sonra, bu ID'yi alarak alt programları doğru ana programa atayabilirsiniz. Örneğin, alt program eklerken data-ana-program-id özniteliğine uygun bir değeri atamalısınız. Ardından, alt programları gönderirken bu değeri kullanarak hangi ana programa ait olduklarını belirleyebilirsiniz.
    Ekledim ama alırken yine seçemedim bi türlü
  • 13-02-2024, 14:59:18
    #4
    1. $('#ekle').fadeIn(1000); satırında #ekle elementi bulunamadığı için hata alıyorsunuz. Kodunuzda #ekle diye bir ID'ye sahip bir element görünmüyor. Eğer bu elementi bulmak istiyorsanız, HTML kodunuza #ekle ID'sine sahip bir element eklemeniz gerekiyor. Eğer bu satırı kaldırmak istiyorsanız, kodunuzda #ekle ID'sini kullanmadığınızdan emin olun.
    2. Dosya yüklemesi yapılırken, herhangi bir dosyanın seçilip seçilmediği kontrol edilmemiş. Eğer dosya seçilmediyse, FormData'ya eklenmemeli ve dolayısıyla gönderilmemeli. Bu durumu kontrol etmek için her dosya yükleme alanı için bir kontrol eklemek gerekiyor.
    3. FormData'ya eklenen değerlerin isimlerinin benzersiz olması gerekiyor. Eğer aynı isme sahip alanlar varsa, FormData bu değerleri aynı anahtar altında tutar. Ancak bu durumun beklentinize uygun olmadığını düşünüyorsanız, alanların isimlerini benzersiz hale getirmeniz gerekebilir.
    4. alt_ozellik_tip alanının değiştiğinde ilgili dosya veya metin alanının görünürlüğünü ayarlayan bir event listener tanımlanmış. Ancak bu kod içerisinde, sayfa yüklendiğinde veya bir kullanıcı etkileşiminde bu alanlar için başlangıç durumlarının belirlenmesi gerekebilir.
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1. Alt özelliklerin kaydedilmesi sırasında ana_program_id değeri alınmıyor gibi görünüyor. Bu nedenle $ana_program_id[$i] değeri herhangi bir değer içermiyor olabilir. Bu değeri doğru şekilde almak için HTML formunda gizli bir alan olarak ana_program_id'yi göndermeniz gerekebilir.
    2. Alt özelliklerin kaydedilmesi sırasında dosya yüklemesi varsa, $_FILES dizisinden ilgili dosyayı almanız gerekiyor. Kodunuzda sadece $_POST üzerinden veri alınıyor, ancak dosya yüklemesi olduğunda $_FILES dizisi de kullanılmalıdır.
    3. HTML formunda alt özelliklerin gönderilirken isimlendirilmesi hakkında bir hatanız olabilir. Form elemanlarının isimlerinin, JavaScript tarafından dinamik olarak oluşturulan isimlerle aynı olması gerekiyor. Eğer bu isimler farklı ise, PHP kodunda bu değişikliğe uyum sağlamak gerekebilir.
    4. JavaScript tarafında alt özellik eklenirken ana_program_id'nin eklenmesi gerekiyor. Bu şekilde, her bir alt özellik için hangi ana programa ait olduğunu belirlemiş olursunuz ve bu bilgiyi PHP kodunuzda kullanabilirsiniz.
    5. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Hz.GPT Böyle Dedi