Bir formda genellikle bir grup ilgili onay kutusuna ihtiyaç duyulan durumlar vardır. Onay kutusu grubunun avantajı, kullanıcının birden fazla seçenek seçebilmesidir. (bir gruptan yalnızca bir seçeneğin seçilebildiği bir radyo grubunun aksine daha çok öğe seçme imkanı sunar).
Bu yazıda çoklu checkbox kullanımını ve bunları veritabanına nasıl kaydedeceğimizi öğreneceğiz.
Veritabanı Oluşturma
Veritabanı kaydı için öncelikle veri tabanı aşağıdaki gibi gösterelim.
Veritabanını yukarıdaki gibi oluşturmak için aşağıdaki gibi SQL cümlemizi yazıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | CREATE TABLE `hobiler` ( `id` int(11) NOT NULL, `ad` varchar(25) NOT NULL ); INSERT INTO `hobiler` (`id`, `ad`) VALUES (1, 'Yüzme'), (2, 'Basketbol'), (3, 'Cirit'), (4, 'Domino'), (5, 'Satranç'), (6, 'Tavla'); CREATE TABLE `kisiler` ( `id` int(11) NOT NULL, `ad` varchar(50) NOT NULL, `hobileri` varchar(50) NOT NULL ); INSERT INTO `kisiler` (`id`, `ad`, `hobileri`) VALUES (1, 'Hayri KOÇ', '1,4,5'), (3, 'Hüseyin ÖZ', '2,5,6'), (2, 'Ahmet Can', ''); |
ayar.php sayfasının oluşturulması
Veritabanı bağlantısı için ayar.php dosyası oluşturup gerekli PDO bağlantısını yapıyoruz. tasarimkodlama isimli bir veritabanına bağlanan $dbh isimli bir veritabanı bağlantısı oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php /* Sürücü isteğiyle bir ODBC veritabanına bağlanalım */ $dsn = 'mysql:dbname=tasarimkodlama;host=127.0.0.1'; $kadi = 'root'; $ksifre = ''; try { $dbh = new PDO($dsn, $kadi, $ksifre); } catch (PDOException $e) { echo 'Bağlantı kurulamadı: ' . $e->getMessage(); } |
Checkboxların Veritabanından Okunması
Veri tabanından hobileri çekip listelemek için gerekli SQL sorgusu aşağıdaki gibi oluşturuyoruz.
coklu-checkbox.php adında bir sayfa oluşturup aşağıdaki bağlantıyı oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php require("ayar.php"); //hobiler tablosundan tüm hobileri çekiyoruz. $sth = $dbh->prepare("SELECT id,ad FROM hobiler"); $sth->execute(); ?> <!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>TasarımKodlama</title> </head> <body> <form action="kayit.php" method="post"> Kişi Adı: <input type="text" name="kisi"> <?php while($satir = $sth->fetch(PDO::FETCH_ASSOC)): ?> <label ><?=$satir["ad"]?> <input type="checkbox" name="hobi[]" value="<?=$satir["id"]?>"> ▴ </label> <?php endwhile; ?> <button type="submit">KAYDET</button> </form> </body> </html> |
Bu kısımda dikkat etmemiz gereken nokta 23. ve 24. satırlardaki durumdur. oSatır 23de hobi[] dizi olarak gönderilmektedir. Genellikle checkbox verileri dizi olarak gönderilmektedir. Satır 24de ise hobilerin id numaraları value içinde yazdırılmaktadır.
Ekran çıktısı aşağıdaki gibi olacaktır.

Checkboxların Veritabanına Kaydedilmesi
Seçili olan checkboxları ve kişi aldını veritabanına kaydetmek için normalizasyon dışında bir yöntem kullanacağım(Bazı durumlarda normalizasyon kullanılmaz). Seçili olan hobilerin id değerleri value olarak post edilmiş olacak.
Hobilerin gönderilip gönderilmediğini test etmek istiyorsanız. kayit.php dosyasına şimdilik aşağıdaki gibi bir kod yazıp, sayfayı coklu-checkbox.php sayfasından çalıştırıp kontrol edin.
1 2 3 4 5 6 | <?php echo "<pre>"; var_dump($_POST); ?> |
Çıktı aşağıdaki gibi görünecektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | array(2) { ["kisi"]=> string(10) "Hayri KOÇ" ["hobi"]=> array(3) { [0]=> string(1) "1" [1]=> string(1) "4" [2]=> string(1) "5" } } |
$_POST[“hobi”] öğresinin bir dizi barındırdığını görüyoruz. Öğleri PHPde kullanılan birleştirme ifadesi ile birleştirip kisiler tablosunua virgüllerle kaydedebiliriz. Bu işlemi yapan kayit.php dosyası aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php require("ayar.php"); /* Yerleştirilecek değerleri bir dizi olarak aktarmak suretiyle bir hazır deyimi çalıştıralım */ $ad=$_POST["kisi"]; $hobiler = implode($_POST["hobi"],","); $sth = $dbh->prepare('INSERT INTO kisiler(ad,hobileri) values(?,?)'); $sth->execute(array($ad, $hobiler)); ?> |
Örnek kayıt yapıldıktan sonra veritabanındaki görünüm aşağıdaki gibi olacaktır.
Checkbox Kayıtlarının Listelenmesi
Checkbox için verileri veritabanından nasıl çekeceğimizi, nasıl kaydedeceğimizi öğrendik. İsterseniz aşağıdaki örnek tabloyu kullanarak veritabanına kayıtlı olan checkbox verilerini listeleyebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php require("ayar.php"); $sth = $dbh->prepare("SELECT * FROM kisiler"); $sth->execute(); ?> <table border=1> <tr> <td>Adı</td> <td>Hobileri</td> </tr> <?php while($kisi = $sth->fetch(PDO::FETCH_ASSOC)): ?> <tr> <td><?=$kisi["ad"]?></td> <td> <?php $liste=$kisi["hobileri"]; $sth2 = $dbh->prepare("SELECT ad FROM hobiler where id in ($liste)"); $sth2->execute(); while($hobi = $sth2->fetch(PDO::FETCH_ASSOC)): echo "<strong>$hobi[ad]</strong><br>"; endwhile; ?> </td> </tr> <?php //$sth2->debugDumpParams(); endwhile; ?> </table> |
Kayıtları iki kademeli olarak çektik. İlk sorgu bloğunda kişileri, ikinci sorgu bloğunda(burada while içindeki sorgu) hobileri döndürerek td etiketi içinde listeledik. Ekran çıktısı aşağıdaki gibi oluştu.

Teşekkürler. MySQL için bu konuda çözüm ararken yazınıza rastladım. MySQL için çözüm içeren ilgili bir link var mı acaba.
Tam olarak nasıl bir çözüm?
sql cümlesini nereye yazıyor? daha öncesinde bir veritabanı olusturuluyor mu? nasıl?
eminim bu konunun bir başı vardı bi önceki sayfa veya gecen hafta işlenen konu devamı gibi gidiyordur ama herhangi bir link yok… ortasından dalmışsınız konuya ve zaten bilen kişilere anlatmışsınız sanki…
yeni başlayanlar kilingona bakar gibi bakar ancak… pek işe yarar bi paylaşım değil genel için..
Merhaba;
PHP ve MySQL’de toplu veri güncelleme işlemi için yardıma ihtiyacım var. Algoritma ise söyle;
Db alanlarım urunadi, fiyatı ve grup fiyat guncellemesi yaparken a grubu seçtiğimde a grubundaki olan ürünlerin fiyatları belirttiğim oranda artacak veya azalacak. Yardımcı olacak arkadaşlara şimdiden teşekkür ederim.