v2.5.2
Giriş yap

Foreach yapılmış listeden id ve input post etmek

gumushikmet
658 defa görüntülendi

Merhaba,
Bir form da kullanıcı isimlerini alt alta gösterip input kısmına mesajları yazıp birkerede veri tabanına kayıt etmek istiyorum. Malesef kullanıcı id lerini post edemedim. Her denememde ilk sıradaki kullanıcının id si post ediliyor.
Yardım edebilecek arkadaşlara şimdiden teşekkürler.

   <?php foreach ($query as $row): ?>
        <label><?= $row['adi']?>Adı </label>
        <input type="hiden" id="id" name="id" value="<?=$t_row['id']?>"></input>
        <input type="text" id="mesaj" name="mesaj"></input>
        
    <?php endforeach; ?>

    <li class="submit">
    <input type="hidden" name="submit" value="1">
    button type="submit">Gönder</button>
      </li>

Cevap yaz
Cevaplar (4)
gumushikmet
1311 gün önce

Hocam submit buttonuna basınca veritabanına kayıt ediyor fakat sadece bir adet id yi.
Bir yerde hata yapıyorum ama malesef göremiyorum.

makifgokce
1311 gün önce

post('id') ile gelen değer varmı önce onu kontrol et print_r() ile yazdır.
veritabanına kayıt ederkende aşağıdaki gibi yapabilirsin.

$ids = post('id');
$messages = post('mesaj');
foreach($ids AS $key => $id){
    $message = $messages[$key];
    $insert = $db->prepare();// bu kısmı kendine göre düzenlersin
    $insert->execute([
        $id,
        $message
    ]);
}
gumushikmet
1311 gün önce

Öncelikle cevabınız için teşekkürler.
Yazdığınız gibi denediğim zaman
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id' cannot be null
hatasını aldım ve Mysql e kayıt edtmedi.
id leri veritabanındaki başka bir tablodan çekiyorum

$id = post('id');
$mesaj = post('mesaj');

almaya çalışıyorum.

makifgokce
1311 gün önce

Bunun nedeni foreach ile ayni name="id" değerine sahip input yazdırıyorsun.
name="id[]" şeklinde yaparsan.
veriyi çekerkende array olarak alabilirsin.

<input type="hiden" name="id[]" value="<?=$t_row['id']?>"></input>
<input type="text" name="mesaj[]"></input>
print_r($_POST['id']); // name="id[]" olan inputların değerini array olarak verir
print_r($_POST['mesaj']);// name="mesaj[]" olan inputların değerini array olarak verir

Formdan veri alman gerekmiyorsa bu işi php kısmında yapmanı tavsiye ederim.
Ek olarak input'a id vermişsin ama bunlar tekrar ettiği için sorun yaşarsın.
id Unique (Benzersiz) olur.Yani sayfada o idye ait başka eleman olmaması gerekir.