Şimdi Ara

Php Foreach ve JS Sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
5
Cevap
0
Favori
449
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar aşağıdaki kodlar ile foreach döngüsü ile veritabanından bilgileri çekiyorum. Döngü içersinde bir adet form var. Ama sadece ilk baştaki formu submit edebiliyorum. JS ile verileri sayfayı yenilemeden kayıt ediyorum. Ama dediğim gibi sadece ilk form çalışıyor.
    <form name="form1" id="form1" method="POST" action="">
    <?php foreach($stoklar as $row_stock) { ?>
    <tr>
    <td><span class="style1"><?php echo $row_stock['partno']; ?></span>
    </td>
    <td class="center style1">
    <?php echo $row_stock[ 'partname']; ?>
    </td>
    <td class="center">
    <input name="adet" type="text" id="adet" pattern="\d+" title="Sadece Sayı Giriş Yapınız" required>
    </td>
    <td class="center">
    <input name="fiyat" type="text" id="fiyat" pattern="\d+(,{1})([0-9]{2})" title="xxxx,xx Formatında Giriş Yapınız" required>
    </td>
    <td class="center">
    <input name="aciklama" type="text" id="aciklama">
    </td>
    <td class="center">
    <input name="partid" type="hidden" id="partid" value="<?php echo $row_stock['partno']; ?>">
    <input name="hareket" type="hidden" id="hareket" value="Depo Girisi">
    <input name="tarih" type="hidden" id="tarih" value="<?php $a = date(" d.m.Y ");echo $a;?>">
    <input name="yazar" type="hidden" id="yazar" value="<?php echo $row_user[" name "]; ?> <?php echo $row_user["surname "]; ?>">
    <input name="partname" type="hidden" id="partname" value="<?php echo $row_stock['partname']; ?>">
    <input name="birim" type="hidden" id="birim" value="<?php echo $row_stock['birim']; ?>">
    <input name="fis" type="hidden" id="fis" value="<?php echo $row_fisdetay['fis']; ?>">
    <input name="sirket" type="hidden" id="sirket" value="Y">
    <input name="id" type="hidden" id="id" value="<?php echo $row_stock['id']; ?>">
    <input name="sontoplam" type="hidden" id="sontoplam" value="<?php echo $row_stock['sontoplam']; ?>">
    <input type="button" value="Ekle" id="gonder" name="gonder">
    </td>

    </tr>
    <?php } ?>
    </form>


    JS Kodlarımda aşağıdaki gibi
    <script>
    $("#gonder").click(function() {
    var adet = $("input[name=adet]").val();
    var fiyat = $("input[name=fiyat]").val();
    var aciklama = $("input[name=aciklama]").val();
    var partid = $("input[name=partid]").val();
    var hareket = $("input[name=hareket]").val();
    var tarih = $("input[name=tarih]").val();
    var yazar = $("input[name=yazar]").val();
    var partname = $("input[name=partname]").val();
    var birim = $("input[name=birim]").val();
    var fis = $("input[name=fis]").val();
    var sirket = $("input[name=sirket]").val();
    var id = $("input[name=id]").val();
    var sontoplam = $("input[name=sontoplam]").val();
    $.post("gelenfatura_ekle.php", {
    adet: adet,
    fiyat: fiyat,
    aciklama: aciklama,
    partid: partid,
    hareket: hareket,
    tarih: tarih,
    yazar: yazar,
    partname: partname,
    birim: birim,
    fis: fis,
    sirket: sirket,
    id: id,
    sontoplam: sontoplam
    }, function(gonderVeri) {
    $('#sonuc').html(gonderVeri);
    });
    });
    </script>


    Php Foreach ve JS Sorunu



    < Bu mesaj bu kişi tarafından değiştirildi vurkun -- 4 Ağustos 2017; 10:32:41 >







  • Çünkü javascript aynı isimdeki form kutucuklarından dolayı ilkini değerlendirebiliyor.

     var adet = $("input[name=adet]").val();


    Bu kod ilk satırın adet bilgisini çeker.

    O yüzden her satır için diğer satırlardan ayıran bilgi eklenmeli.


    Mesela ilk satır için adet bilgisi;

    <input name="CVT001adet"...

    ikinci satır için;

    <input name="CVT002adet"...

    gibi başına stok kodunu girdim ki sanırım her satırın stok kodu farklıdır. Bu durumda o satırın "Ekle" butonuna da

    <input class="gonderbutonu" type="button" value="Ekle" id="CVT001" name="CVT001gonder">
    <input class="gonderbutonu" type="button" value="Ekle" id="CVT002" name="CVT002gonder">

    değişikliğini yapabiliriz. Tıklanınca;


     $(".gonderbutonu").click(function() {
    var stokkodu = $(this).attr('id');
    var adet = $("input[name="+stokkodu+"adet]").val();
    var fiyat = $("input[name="+stokkodu+"fiyat]").val();


    şeklinde devam eden değişlikle istenilen satırlar eklenebilir. #gonder .gonderbutonu olarak değiştirdik.

    --------

    Diğer yöntem ise her döngü sonucu için ayrı form oluşturmak olur. Yani;


         <?php foreach($stoklar as $row_stock) { ?>
    <tr>
    <td><span class="style1"><?php echo $row_stock['partno']; ?></span>
    </td>
    <td class="center style1">
    <?php echo $row_stock[ 'partname']; ?>
    </td>
    <td class="center">
    <form name="form1" id="form1" method="POST" action="">
    <input name="adet" type="text" id="adet" pattern="\d+" title="Sadece Sayı Giriş Yapınız" required>
    </td>
    <td class="center">
    <input name="fiyat" type="text" id="fiyat" pattern="\d+(,{1})([0-9]{2})" title="xxxx,xx Formatında Giriş Yapınız" required>
    </td>
    <td class="center">
    <input name="aciklama" type="text" id="aciklama">
    </td>
    <td class="center">
    <input name="partid" type="hidden" id="partid" value="<?php echo $row_stock['partno']; ?>">
    <input name="hareket" type="hidden" id="hareket" value="Depo Girisi">
    <input name="tarih" type="hidden" id="tarih" value="<?php $a = date(" d.m.Y ");echo $a;?>">
    <input name="yazar" type="hidden" id="yazar" value="<?php echo $row_user[" name "]; ?> <?php echo $row_user["surname "]; ?>">
    <input name="partname" type="hidden" id="partname" value="<?php echo $row_stock['partname']; ?>">
    <input name="birim" type="hidden" id="birim" value="<?php echo $row_stock['birim']; ?>">
    <input name="fis" type="hidden" id="fis" value="<?php echo $row_fisdetay['fis']; ?>">
    <input name="sirket" type="hidden" id="sirket" value="Y">
    <input name="id" type="hidden" id="id" value="<?php echo $row_stock['id']; ?>">
    <input name="sontoplam" type="hidden" id="sontoplam" value="<?php echo $row_stock['sontoplam']; ?>">
    <input type="button" value="Ekle" id="gonder" name="gonder">
    </form>
    </td>

    </tr>
    <?php } ?>


    Bir de sayfada aynı id sadece bir elementte olmalı. Bu döngülerle id="adet" gibi birden fazla element oluşuyor. Aynı şekilde id="gonder" butonu da birden fazla. O yüzden CVT001gonder şeklinde yine ayrım olmalı eğer jQuery kullanılacaksa.



    < Bu mesaj bu kişi tarafından değiştirildi nihattr -- 5 Ağustos 2017; 3:30:53 >
    < Bu ileti tablet sürüm kullanılarak atıldı >




  • nihattr;
    Yardımların için çok teşekkür ederim. Cevabınızda belirttiğiniz gibi değişiklikleri yaparak sorunu hallettim. Allah razı olsun.

    Son bir sıkıntım ise şu. Sayfayı yenilemeden post ettiğim için giriş yaptığım inputlar temizlenmiyor. Butona tıkladıktan sonra formu nasıl temizleyebilirim.
    Bir kaç kod kullandım ama bu seferde verileri post etmeden sadece temizleme yapıyor.

    Ayrıca form input pattern değerlerini istediğim şekilde yazdım.Ama js ile kontrol edemiyorum.
    Adet inputuna sadece rakam, (pattern="\d+")
    fiyat inputuna ise xx,xx /pattern="\d+(,{1})([0-9]{2})") yani sayi,rakamrakam x,xx formatında nasıl kontrol ettirebilirim



    < Bu mesaj bu kişi tarafından değiştirildi vurkun -- 5 Ağustos 2017; 10:41:33 >
  • vurkun V kullanıcısına yanıt
    Dediğim gibi stok kodu ile ayrım yapıldıysa;
    $('#sonuc').html(gonderVeri);


    kodu altına;
    $("input[name*='"+stokkodu+"']").val("");


    eklenir.

    Pattern olayı daha önce ihtiyacım olmamıştı. Baktım ama istenilen sonucu dolaylı olarak veriyor sayılır. Onun yerine direkt en güzel iş inputmask eklentisini kullanmak olabilir.

    Eklentiyi head üzerine aşağıdaki şekilde sayfaya dahil edip;

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.2.6/jquery.inputmask.bundle.min.js"></script>

    Sonra gerekli kodları head üstüne eklemek yeterli.

    <script type="text/javascript">
    $(document).ready(function() {
    $(".fiyat").inputmask('currency', {
    prefix: "₺ ",
    radixPoint: ',',
    rightAlign: true
    });
    });
    </script>

    Formda da fiyat kutusunda şunun gibi değişiklik yapılsın.

    <input class="fiyat" ...

    adet için sadece düzenleme olarak type="number" olarak değiştirmek yeterli.




  • Yardımlarınız için çok teşekkür ederim. Form temizleme işlemi başarılı.

    Fiyat alanının pattern olayını

    http://flaviosilveira.com/Jquery-Price-Format/ adresindeki eklenti ile çözdüm.


    Firma mutabakat sayfasını yaparken yardıma ihtiyaç duyarsam sizinle tekrardan iletişime geçeceğim.


    Teşekkürler.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.