Profil detayı eklendi, herkes profillerine girip bir gözatsın! Sevdiğiniz üyelerin cevaplarını takip edin! Tüm güncellemeler

Array ile post işlemi yaparken sadece 1 değer alabiliyorum


<input type="text" name="numara[]" class="form-control" id="">


Şeklinde gönderip


    if($_POST){     
        $dizi               = [];
        $numara             = $_POST["numara"];


şeklinde almayı


                    for($i = 0; $i < count($numara); $i++ ) {

                        $numara       = $numara[$i];

                        $telefonekle    = pre("insert into kisi_telefon set numara = ?");
                        $telefonkayit   = $telefonekle->execute([$numara]);
                        $dizi["ok"]     = $telefonekle->rowCount();

                    }


şeklinde kayıt etmeye çalışıyorum ama sadece 1 tane değeri kayıt edebiliyorum.neden olabilir ?



Kodun Tamamı :


    if($_POST){     
        $kayittipi          = p("kayittipi",true);                 
        $kullanicitipi      = p("kullanicitipi",true);
        $ad                 = p("ad",true);
        $soyad              = p("soyad",true);
        $dogumtarihi        = p("dogumtarihi",true);
        $cinsiyet           = p("cinsiyet",true);
        $tc                 = p("tc",true);
        $firma_unvan        = p("firma_unvan",true);
        $vd                 = p("vd",true);
        $vno                = p("vno",true);
        $aciklama           = strip_tags(p("aciklama",true),"<img><font><b><a><span>");
        $firma_id           = $_SESSION["firma_id"];
        $kk                 = $_SESSION["id"];
        $dizi               = [];
        $bilgitipi          = $_POST["bilgitipi"];
        $numara             = $_POST["numara"];
        $email              = $_POST["email"];
            
        if(!$ad || !$soyad){
            echo hata("Gerekli Alanları Doldurmanız Gerekmektedir. Yönlendiriliyorsunuz");
            header("refresh: 1; url=musteri-ekle");
        }else {
            $kisiekle = pre("insert into kisi set kayit_tipi = ?, kullanici_tipi = ?, ad = ?, soyad = ?, dogumtarihi = ?, cinsiyet = ?, tc = ?, firma_unvan = ?, vd = ?, vno = ?, firma_id = ?, kk = ?");
            $kisi =  $kisiekle->execute([$kayittipi,$kullanicitipi,$ad,$soyad,$dogumtarihi,$cinsiyet,$tc,$firma_unvan,$vd,$vno,$firma_id,$kk]);
                if($kisi){

                    $son_id = $db->lastInsertId();
                    
                    for($i = 0; $i < count($numara); $i++ ) {

                        $thisBilgitipi  = $bilgitipi[$i];
                        $thisNumara     = $numara[$i];

                        if(!$thisBilgitipi || !$thisNumara){
               
                            $dizi["hata"] =  "gerekli alanları doldurmanız gerekiyor..";
                            
                        }else {
                        
                            $telefonekle    = pre("insert into kisi_telefon set kisi_id = ?, bilgi_tipi = ?, numara = ?, kk = ?");
                            $telefonkayit   = $telefonekle->execute([$son_id, $thisBilgitipi, $thisNumara, $kk]);
                            $dizi["ok"]     = $telefonekle->rowCount();
                        }

                    }

                    if($aciklama){
                        $notekle = pre("insert into kisi_not set kisi_id = ?, bilgi_tipi = ?, aciklama = ?, kk = ?");
                        $notkayit =  $notekle->execute([$son_id,'1',$aciklama,$kk]);
                    }

                    if($kisi){
                        echo hata("Müşteri Başarıyla Oluşturulmuştur. Yönlendiriliyorsunuz.",true);
                        //header("refresh: 1; url=musteriler");              
                    }else{
                        echo hata("Müşteri Eklenirken Bir Hata Oluşmuştur. Lütfen Daha Sonra Tekrar Deneyiniz.");    
                    }


                }else{
                    echo hata("Bir Hata Oluşmuştur. Lütfen Daha Sonra Tekrar Deneyiniz.");                           
                }
            }
    }


HTML Kısmı :


            <!-- Telefon Bilgileri -->        
            <div class="col-md-6 grid-margin">
                <div class="card">
                    <div class="card-body">     
                        <h4 class="card-title">Telefon Bilgileri</h4><hr/>
                        <div class="row">

                            <div class="col-md-12">
                                <div class="grupTel">
                                    <div class="form-group multiple-form-group input-group">
                                    <label class="col-sm-3 col-form-label">Telefon</label>
                                            <div class="col-sm-3">
                                                <select name="bilgitipi[]" class="form-control">
                                                    <option value="">Seçiniz</option>
                                                    <?php          
                                                    $query = $db->query("SELECT * FROM kodlar_detay WHERE kodlar_master_id = 50", PDO::FETCH_ASSOC);
                                                    if ( $query->rowCount() ){
                                                        foreach( $query as $row ){
                                                            echo '<option value="'.$row["id"].'">'.$row["deger"].'</option>';
                                                        }
                                                    }
                                                    ?>
                                                </select>
                                            </div>
                                        <input type="text" name="numara[]" class="form-control" id="">
                                        <span class="input-group-btn">
                                            <button type="button" class="btn btn-icons btn-inverse-success ekleTel"><i class="mdi mdi-plus"></i></button>
                                        </span>
                                    </div>
                                </div>
                            </div>

                            <div class="col-md-12">
                                <div class="copyTel" style="display:none;">
                                    <div class="form-group multiple-form-group input-group">
                                    <label class="col-sm-3 col-form-label">Telefon</label>
                                            <div class="col-sm-3">
                                                <select name="bilgitipi[]" class="form-control">
                                                    <option value="">Seçiniz</option>
                                                    <?php          
                                                    $query = $db->query("SELECT * FROM kodlar_detay WHERE kodlar_master_id = 50", PDO::FETCH_ASSOC);
                                                    if ( $query->rowCount() ){
                                                        foreach( $query as $row ){
                                                            echo '<option value="'.$row["id"].'">'.$row["deger"].'</option>';
                                                        }
                                                    }
                                                    ?>
                                                </select>
                                            </div>
                                        <input type="text" name="numara[]" class="form-control" id="">
                                        <span class="input-group-btn">
                                            <button type="button" class="btn btn-icons btn-inverse-danger silTel"><i class="mdi mdi-minus"></i></button>
                                        </span>
                                    </div>
                                </div>
                            </div>                            

                            <script> 
                                $(function() {
                                    var max = 10;
                                    $(".ekleTel").click(function() {
                                            if($("body").find(".alanTel").length < max){
                                                var alanTel = '<div class="alanTel">'+$(".copyTel").html()+'</div>';
                                                $("body").find(".grupTel:last").after(alanTel);
                                            }else {
                                                alert("10 taneden fazla input giremessiniz..");
                                            } 
                                    });
                                    $("body").on("click",".silTel",function() {
                                        $(this).parents(".alanTel").remove();
                                    })
                                });
                            </script>  

                        </div>
                    </div>
                </div>
            </div>

2

Cevaplar (2)

İşlem devam ediyor, lütfen bekleyin..
Emre BÜYÜKDURMUŞ
Doğru Cevap
@ebykdrms
4 ay önce [Güncellendi]
$numara = $numara[$i];

satırında $numara değişkeninin içini boşaltıp sadece dizinin ilk elemanını değişkene atıyorsunuz. Böylece artık bir diziniz değil bir string'iniz oluyor.

Bu satırı şu şekilde değiştirmelisiniz:

$thisNumara= $numara[$i];

ve buna bağlı olarak $telefonkayit değişkeninin satırını da şu şekilde güncelleyebilirsiniz:

$telefonkayit   = $telefonekle->execute([$thisNumara]);


Böylece $_POST['numara'] ile gelen dizinin her bir elemanını veritabanına ekliyor olacaksınız. Ancak gelen değer boşsa veritabanına ekleme yapmamak isteyebilirsiniz. Bunun için for döngünüzü şu şekilde kullanmanız mümkündür:

for($i = 0; $i < count($numara); $i++ ) {
    $thisNumara    = $numara[$i];
    if(empty($thisNumara)) continue;
    $telefonekle   = pre("insert into kisi_telefon set numara = ?");
    $telefonkayit  = $telefonekle->execute([$thisNumara]);
    $dizi["ok"]    = $telefonekle->rowCount();
}

Burada kilit nokta if(empty($thisNumara)) continue; satırı.

Eğer $thisNumara değeri boşsa döngünün bu safhası atlanıp bir sonraki dönüşüne geçecek. Böylece boş gelen değerler için veritabanına kayıt komutları atlanmış olacak.

Cevapla @szrcmk4 ay önce
@ebykdrms, hocam dediğiniz işlemlerin hepsini birebir uyguladım. Önceden veritabanına 1 kayıt atarken şimdi 2 kayıt atıyor. Bu bir gelişme, fakat birinci kayıt doğru geliyor değerleri ile birlikte geliyor. 2. kayıt boş geliyor. Ayrıca 3-4 kayıt göndersem de veritabanına 2 kayıt ekliyor.
Cevapla @ebykdrms4 ay önce
@szrcmk, yanıtı güncelledim. Yalnızca yukarıdaki işlemi yaptığınızda doğru çalışıyor mu?
Cevapla @szrcmk4 ay önce
@ebykdrms, yine aynı sonucu alıyorum 2 den fazla kayıt gönderiyorum 2 kayıt ekliyor biri dolu biri boş
Cevapla @ebykdrms4 ay önce
@szrcmk, şu an for döngünüz tam olarak nasıl?
Cevapla @szrcmk4 ay önce
Hocam tüm kodumu https://www.dosyaupload.com/617p adresine yükledim daha rahat kontrol edebilirsiniz. Benim hatam belki html kısmında da olabilir çünkü html kısmında 2 tane numara[] kullanıyorum biri gizli + butonuna basılınca aktif hale getiriyorum ve oraya yazdıryorum.
Cevapla @szrcmk4 ay önce
@ebykdrms, Hocam tüm kodumu https://www.dosyaupload.com/617p adresine yükledim daha rahat kontrol edebilirsiniz. Benim hatam belki html kısmında da olabilir çünkü html kısmında 2 tane numara[] kullanıyorum biri gizli + butonuna basılınca aktif hale getiriyorum ve oraya yazdıryorum.
Cevapla @ebykdrms4 ay önce
@szrcmk, 2 tane numara[] varsa 2 değerin de post edilmesi normal. for döngüsünde ekleme yapmadan önce gelen değerin boş olup olmadığını kontrol etmeniz gerekiyor. Cevabı güncelledim.
Cevapla @szrcmk4 ay önce
@ebykdrms, dediğiniz gibi boş olup olmadığını kontrol ettim ve boş olan kaydı eklemedi buraya kadar problem yok ama asıl problem neden boş geliyor, ben 5 tane veri gönderiyorum hepsinin numarasını giriyorum post işleminde sadece 2 değer geliyor onlarında birisi dolu sadece o yüzden istediğim sonucu alamıyorum
Cevapla @szrcmk4 ay önce
@ebykdrms, soruyu güncelledim bu arada
Cevapla @ebykdrms4 ay önce
@szrcmk, kodu inceledim. Gözüme çarpan bir hata yok. Peki form'u nasıl submit ediyorsunuz? Direkt bir submit button yardımıyla mı yoksa ajax üzerinden mi? Eğer post işlemini ajax ile yapıyorsanız ajax'ın da kodlarını görmem gerekiyor olabilir. Belki sorun oradadır.
Şöyle ki, html içine js ile sonradan eklediğiniz elemanları bir sebepten fark edemiyor sistem. Eğer ajax ile post yapıyorsanız muhtemelen ajax sonradan eklenen elemanları göremiyor. Ajax kodlarınızı da görerek orada bir sorun varsa yol gösterebilirim.
Cevapla @szrcmk4 ay önce
@ebykdrms, direk submit ile post ediyorum. Valla kafayı yiyeceğim inanmazsanız belki ama nereden baksanız 1 haftadır bu işlem ile uğraşıyorum bir yerde bir yerde hatam var ama bulamıyorum bir türlü
Cevapla @ebykdrms4 ay önce
@szrcmk, html'deki form tag'ınızın nerede başlayıp nerede bittiğini kontrol edebilir misiniz? Gönderdiğiniz kodları inceledim. <form> elementi bir <div> içinde başlıyor ama bitişi aynı <div> içinde değil. <form> tag'ının başlama ve bitiş yerlerini düzenleyince verileri düzgün post edebildim. Belki böyle bir sorun vardır.
Cevapla @szrcmk4 ay önce
@ebykdrms, hocam Allah razı olsun senden sabahtan beri başka bir sayfada çalıştırıyorum bu sayfada çalıştıramıyordum senin dediğin gibi <form> taglarından kaynaklıymış nasıl böyle bir hata yaptım ve nasıl fark edemedim bilemiyorum. Sağolasın varolasın çok teşekkür ederim sabrın ve ilgin için
İşlem devam ediyor, lütfen bekleyin..
Abdulbaki Zırıh
@abdulbaki
4 ay önce [Güncellendi]
<input type="text" name="numara[0]">
<input type="text" name="numara[1]">
<input type="text" name="numara[2]">
<!-- Bu şekilde yap -->

<!-- Güncelleme -->
<button id="add">Ekle</button>
<div class="form">
    <input type="text" name="numara[0]"> // 0 dan başlattık.
</div>

<script>
var i = 1; // 1 den devam ettiriyoruz.
$("#add").click(function(){
    $(".form").append('<input type="text" name="numara['+i+']">');
    i++;
});
</script>
Cevapla @szrcmk4 ay önce
@abdulbaki, bu şekilde mantıklı olmuyor kullanıcının ne kadar ekleme yapacağını bilemem bunu otomatik hale almam gerekiyor
Cevapla @abdulbaki4 ay önce
@szrcmk, Otomatik yaparız bizde cevabı düzenledim.
İşlem devam ediyor, lütfen bekleyin..

Cevap yaz Sadece sorunun cevabını yazın