• 14-05-2023, 00:35:49
    #1
    İyi Geceler

    Şöyle bir şey yapmaya çalışıyorum kişi sayısı belirlendikten sonra diğer saydada kaç adet kişi seçildi ise o kadar input açılıyor, sorunum ise postları for yada foreach ile mysql ile insert yazdıramıyorum

    insert kodum nerde hata yapıyorum sizce
     if(isset($_POST['ads'])){
            foreach ($_POST['ads'] as $ads) {
                $islem = $db->prepare("INSERT INTO misafir SET ads = ?");
                $islem = $islem->execute(array($ads));
            }
        }
    İnput kodlarım
    <?php 
    
                                                              $say = 0;
    
                                                              $inputsay = -1;
    
                                                               for($m= 0; $m < $_SESSION['sepet']['adet'][$key]; $m++){ 
    
                                                               $say++; 
    
                                                               $inputsay++;
    
                                 ?>
                    <div class="col-md-12 pt-12 pb-12 bg3"><b><?php echo $say;?>. Yolcu Bilgileri</b></div>
    
                          <fieldset class="form-group mt-3 col-md-3">
                             <label>Adınız</label>
                             <input type="text" class="form-control" name="ads[]" required="" placeholder="Adınız" value="<?php if(isset($_SESSION['kullanici']['login'])){ echo $kullanici['ads']; } ?>">
                          </fieldset>
                          <fieldset class="form-group mt-3 col-md-3">
                             <label>Soyadınız</label>
                             <input type="text" class="form-control" name="soyads[]" required="" placeholder="Soyadınız" value="<?php if(isset($_SESSION['kullanici']['login'])){ echo $kullanici['soyad']; } ?>">
                          </fieldset>
                          <fieldset class="form-group mt-3 col-md-3">
                             <label>TC Kimlik No</label>
                             <input type="text" class="form-control" name="tc[]" required="" placeholder="Tc Kimlik No" value="<?php if(isset($_SESSION['kullanici']['login'])){ echo $kullanici['tc']; } ?>">
                          </fieldset>
                          <fieldset class="form-group mt-3 col-md-3">
                             <label>Cinsiyet</label>
                                <select name="cinsiyet[]" required=""  class="form-control" value="<?php if(isset($_SESSION['kullanici']['login'])){ echo $kullanici['cinsiyet']; } ?>" >
                                <option value="0">Seçiniz</option>
                                <option value="Erkek">Erkek</option>
                                <option value="Kadın">Kadın</option>
                                </select>                      
                            </fieldset>
                          <hr>
                      <?php } ?>
  • 14-05-2023, 00:44:55
    #2
    1. prepare() yöntemini çağırdıktan sonra, verileri bağlamak için bindParam() yöntemini kullanmanız gerekiyor.
    $islem = $db->prepare("INSERT INTO misafir SET ads = ?");
    $islem->bindParam(1, $ads);
    $islem->execute();
    Burada $ads, her bir adı içeren bir değişken olarak düşünülmelidir. Yani foreach döngüsü içinde $ads değişkeni, her döngüde farklı bir adı temsil edecek şekilde değiştirilmelidir.
    1. $inputsay değişkenini her döngüde artırıyorsunuz, ancak bu değişkeni kodunuzun geri kalanında kullanmıyorsunuz. Bu değişkeni kullanmaya niyetiniz varsa, her bir input alanına name özniteliği ekleyerek kullanabilirsiniz.
    <input type="text" class="form-control" name="ads[<?php echo $inputsay; ?>]" required="" placeholder="Adınız" value="<?php if(isset($_SESSION['kullanici']['login'])){ echo $kullanici['ads']; } ?>">
    Bu şekilde, $_POST['ads'] dizisi, her bir ad için bir anahtar indeks içerecektir.
    Son olarak, if(isset($_SESSION['kullanici']['login'])){...} kontrol yapısını her döngüde kullanıyorsunuz, ancak bu durum, oturum açılıp açılmadığını her seferinde kontrol etmenize neden olacaktır. Bu kontrolleri başka bir yerde yaparak, kodunuzu daha verimli hale getirebilirsiniz.
  • 14-05-2023, 00:57:51
    #3
    ilginiz için teşekkür ederim input da dediğiniz gibi ads[0], ... olarak değerleri tanımladım bu kodu for yada for each döngüsüne almam gerekli mi mysql kayıt işlemiini halen başaramadım neden olabilir

     if(isset($_POST['ads'])){
            foreach ($_POST['ads'] as $ads) {
            $islem = $db->prepare("INSERT INTO misafir SET ads = ?");
    $islem->bindParam(1, $ads);
    $islem->execute();
        }
    
    
                                        }

    zentamedia adlı üyeden alıntı: mesajı görüntüle
    1. prepare() yöntemini çağırdıktan sonra, verileri bağlamak için bindParam() yöntemini kullanmanız gerekiyor.
    $islem = $db->prepare("INSERT INTO misafir SET ads = ?");
    $islem->bindParam(1, $ads);
    $islem->execute();
    Burada $ads, her bir adı içeren bir değişken olarak düşünülmelidir. Yani foreach döngüsü içinde $ads değişkeni, her döngüde farklı bir adı temsil edecek şekilde değiştirilmelidir.
    1. $inputsay değişkenini her döngüde artırıyorsunuz, ancak bu değişkeni kodunuzun geri kalanında kullanmıyorsunuz. Bu değişkeni kullanmaya niyetiniz varsa, her bir input alanına name özniteliği ekleyerek kullanabilirsiniz.
    <input type="text" class="form-control" name="ads[<?php echo $inputsay; ?>]" required="" placeholder="Adınız" value="<?php if(isset($_SESSION['kullanici']['login'])){ echo $kullanici['ads']; } ?>">
    Bu şekilde, $_POST['ads'] dizisi, her bir ad için bir anahtar indeks içerecektir.
    Son olarak, if(isset($_SESSION['kullanici']['login'])){...} kontrol yapısını her döngüde kullanıyorsunuz, ancak bu durum, oturum açılıp açılmadığını her seferinde kontrol etmenize neden olacaktır. Bu kontrolleri başka bir yerde yaparak, kodunuzu daha verimli hale getirebilirsiniz.
  • 14-05-2023, 01:01:19
    #4
    tabi ki ben sadece döngünün içindeki kayıt kodlarını yazdım php olarak. ilk başta kayıt için kullandığınız döngünün içindeki kodların yerine bunu yazabilirsiniz.
  • 14-05-2023, 04:14:32
    #5
    zentamedia adlı üyeden alıntı: mesajı görüntüle
    1. prepare() yöntemini çağırdıktan sonra, verileri bağlamak için bindParam() yöntemini kullanmanız gerekiyor.
    $islem = $db->prepare("INSERT INTO misafir SET ads = ?");
    $islem->bindParam(1, $ads);
    $islem->execute();
    Burada $ads, her bir adı içeren bir değişken olarak düşünülmelidir. Yani foreach döngüsü içinde $ads değişkeni, her döngüde farklı bir adı temsil edecek şekilde değiştirilmelidir.
    1. $inputsay değişkenini her döngüde artırıyorsunuz, ancak bu değişkeni kodunuzun geri kalanında kullanmıyorsunuz. Bu değişkeni kullanmaya niyetiniz varsa, her bir input alanına name özniteliği ekleyerek kullanabilirsiniz.
    <input type="text" class="form-control" name="ads[<?php echo $inputsay; ?>]" required="" placeholder="Adınız" value="<?php if(isset($_SESSION['kullanici']['login'])){ echo $kullanici['ads']; } ?>">
    Bu şekilde, $_POST['ads'] dizisi, her bir ad için bir anahtar indeks içerecektir.
    Son olarak, if(isset($_SESSION['kullanici']['login'])){...} kontrol yapısını her döngüde kullanıyorsunuz, ancak bu durum, oturum açılıp açılmadığını her seferinde kontrol etmenize neden olacaktır. Bu kontrolleri başka bir yerde yaparak, kodunuzu daha verimli hale getirebilirsiniz.
    Bindparam zorunlu değil hocam.
  • 14-05-2023, 09:14:09
    #6
    zentamedia adlı üyeden alıntı: mesajı görüntüle
    tabi ki ben sadece döngünün içindeki kayıt kodlarını yazdım php olarak. ilk başta kayıt için kullandığınız döngünün içindeki kodların yerine bunu yazabilirsiniz.
    dediğiniz gibi yaptım fakat sorun devam ediyor
  • 14-05-2023, 14:34:40
    #7
    var_dump($_POST['ads']); deyince ne geliyor isset sorgusundan önce.
  • 15-05-2023, 16:49:17
    #8
    for döngüsüne aldım fakat boş çekiyor

    $deger = $_POST['deger'];
                                        $ads2 = $_POST['ads'];
                                        for($i = 0; $i < $deger; $i++) {
    
             $ads = $ads2[$i];
    
                    $islem = $db->prepare("INSERT INTO misafir SET ads = ?");
                    $islem->bindParam(1, $ads);
                    $islem->execute();
                                            
                                        }
  • 15-05-2023, 17:14:27
    #9
    ilgice adlı üyeden alıntı: mesajı görüntüle
    var_dump($_POST['ads']); deyince ne geliyor isset sorgusundan önce.
    array(11) { ["ads"]=> string(0) "" bu şekilde hocam