v2.5.2
Giriş yap

Php'de checkbox kayıt işleminde sorun

yazilimyolcusu
135 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')";
              }
ebykdrms
58 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.