v2.5.2
Giriş yap

Php'de checkbox kayıt işleminde sorun

yazilimyolcusu
123 defa görüntülendi

Arkadaşlar bir yerde takıldım. Form ile veritabanına veri kaydetmek istiyorum. Form'daki input'ların tipleri
:"text", 'checkbox' vs. karışık elementler. "text" olanları kaydedebiliyorum ama checkbox'ları kaydetmek istediğimde, en son checkbox'ın "value" su kaydoluyor. Yalnız kaydetmek istediğim checkbox'ların sayısı 1'den fazla. Farz edelim ki 3 adet kayıt etmek istiyorum. Kodları kısaltarak yazıyorum aşağıya.

<form action="x.php">
    <input class="x-text" type="text" name="ad" placeholder="Ad" ><br>    
    <input class="x-checkbox" type="checkbox" name="ozellikler[]" value="Veri 1" placeholder="Veri 1" ><br>
    <input class="x-checkbox" type="checkbox" name="ozellikler[]" value="Veri 2" placeholder="Veri 2" ><br>
    <input class="x-checkbox" type="checkbox" name="ozellikler[]" value="Veri 3" placeholder="Veri 3" ><br>
</form>
    $ad = $_POST['ad'];
    $ozellikler = $_POST['ozellikler'];
    
foreach($ozellikler as $ozellik) {
    $query = "INSERT INTO ekle (ekle_ad, ekle_ozellik) 
    VALUES ('$ad', '$ozellik', '$ozellik', '$ozellik')";
              }
Cevap yaz
Cevaplar (4)
ebykdrms
42 gün önce
$ad = $_POST['ad'];
$ozellikler = $_POST['ozellikler'];

Burada $ozellikler dizisi yalnızca seçili checkbox'ların değerlerini taşır.
Mesela "Veri 1" ve "Veri 3" seçili, "Veri 2" seçili değil.
O zaman $ozellikler dizisi şunu içerir: ["Veri 1", "Veri 3"]

foreach($ozellikler as $ozellik) {
    $query = "INSERT INTO ekle (ekle_ad, ekle_ozellik) VALUES ('$ad', '$ozellik')";
    // diğer işlemler...
}

Burada ekle_ozellik alanına $ozellik değerini atıyoruz.
Yukarıdaki örneğe göre "Veri 1" ve "Veri 3" için 2 kez insert sorgusu çalışacak, yani 2 kayıt insert edilmiş olacaktır.

form tarafında input'lara php ile veri basılıyorsa, input için value özelliği kullanılır ama checkbox için checked özelliği kullanılır.
Veritabanından aldığın veriyi hangi değişkenlerle aldığını bilmediğim için uyduracağım:
Tüm kayıtları çektiysen (örneğimizde Veri 1 ve Veri 3 olm.üz. 2 kayıt var) şöyle bir değişkenin var diye varsayalım:

$datas = [
    ["ekle_ad" => "yazilimyolcusu", "ekle_ozellik" => "Veri 1"],
    ["ekle_ad" => "yazilimyolcusu", "ekle_ozellik" => "Veri 3"]
];

Bu durumda ekle_ad bölümü zaten aynı olduğu için ilk kaydı alabiliriz:

$ad = $datas[0]->ekle_ad;

ekle_ozellik verilerini de düz bir dizi içinde toplarsak html içine gömmek kolaylaşır.

foreach($datas as $data) $aktifOzellikler[] = $data->ekle_ozellik;
// $aktifOzellikler dizisi şöyle oldu: ["Veri 1", "Veri 3"]

$checkbox1_attr = array_search("Veri 1", $aktifOzellikler)===false ? '' : 'checked'; // 'checked'
$checkbox2_attr = array_search("Veri 2", $aktifOzellikler)===false ? '' : 'checked'; // ''
$checkbox3_attr = array_search("Veri 3", $aktifOzellikler)===false ? '' : 'checked'; // 'checked'
<form action="x.php" method="post">
    <input class="x-text" type="text" name="ad" placeholder="Ad" value="<?=$ad?>" ><br>    
    <input class="x-checkbox" type="checkbox" <?=$checkbox1_attr?> name="ozellikler[]" value="Veri 1" placeholder="Veri 1" ><br>
    <input class="x-checkbox" type="checkbox" <?=$checkbox2_attr?> name="ozellikler[]" value="Veri 2" placeholder="Veri 2" ><br>
    <input class="x-checkbox" type="checkbox" <?=$checkbox3_attr?> name="ozellikler[]" value="Veri 3" placeholder="Veri 3" ><br>
</form>

Kodları denemeden direkt buraya yazdığım için syntax hataları veya kurgusal hatalar olabilir.

yazilimyolcusu
43 gün önce

Arkadaşlar sorunu çözemeyince şu şekilde hallettim: input type text şeklinde yaptım, checkbox'ları. Seçilmeyen checkbox'lar "array" hatası verdi ama hataları da gizledim. Verileri güncellemek istediğimde checkbox'lar seçili gelmiyor. Verileri nasıl seçili hale getirebilirim acaba? Veya bu sorunun cevabını verebilirseniz daha iyi olur.

yazilimyolcusu
51 gün önce

Şimdi şu aşamadayım. Checkbox'ların name'lerine "ozellikler[]" şeklinde değer verdiğimde kayıt yapabiliyorum. Tek bir store'a da kayıt yapabiliyorum, birden çok store'a da yapıyorum. Diyelim ki sadece bir tek store'a kayıt yapacağım. Ve store'un içinde kayıt şu şekilde oluyor.
veri 1,veri2,veri3
şeklinde oluyor. Ben bu verileri listeletirken ilk veriyi bir div içinde, diğer veriyi başka bir div içinde listeletmem lazım. Yani form'da 100 adet checkbox verisi var. Kullanıcı hangisini işaretlediyse o veri, veritabanına kayıt olacak ve ben bu her bir veriyi ayrı satırlarda listeletmem lazım.
Eğer checkbox'ların name'lerine "ozellikler[]" şeklinde değil de "veri1", "veri2" diye farklı bir değer verdiğimde ise işaretlenmeyen veriler "insert" ün "values" alanında olduğu ve boş kaldığı için hata veriyor.

devepdogukan
51 gün önce

<?php
if(!empty($_POST['ozellikler'])) {
    foreach($_POST['ozellikler'] as $ozellik) {
            echo $ozellik; //echoes the value set in the HTML form for each checked checkbox.
                        
    }
}
?>