RSS

PHP ile checkbox kullanımı

33 01 Mayıs 2012 ~ Musa Avcı — Başlangıç

Daha önce şu yazıda HTML’de checkbox ve radio button kullanımı örneğini göstermiştim. Fakat checkbox’un HTML ve PHP ile kullanımı normal form elemanlarından biraz farklı.

Checkbox olayını iki farklı şekilde kullanabiliriz, birincisi sıkca gördüğümüz tek bir checkbox ile şartları kabul etme, onay alma mevzusu. Diğeri ise listelerde birden fazla maddeyi seçip çoklu işlem yaptırma.

Checkbox ile onay işlemi

Genellikle formların sonlarında şartları kabul edilmesinde kullanılan tek bir checkbox hazırlamanın çok fazla bir espirisi yok. Bir checkbox ekliyoruz ve PHP kısmında yanlızca elemana verdiğimiz adın gönderilip gönderilmediğine bakarak seçilip seçilmediğini anlıyoruz.

form.php:

<form action="kontrol.php" method="post">
	<label><input type="checkbox" name="onay"/> Onaylıyorum</label>
	<input type="submit" value="Tamam">
</form>

Önizleme:



Checkbox elemanını başlığı ile label arasına alarak “Onaylıyorum“a tıklandığında da checkboxu tetiklemesini sağlıyoruz.

kontrol.php:

if(isset($_POST['onay'])) { // checkbox seçilmişse "on" değeri gönderiliyor
	echo 'Onayladınız!';
} else { // seçilmemişse bu değer sayfaya hiç gönderilmiyor
	echo 'Onaylamadınız.';
}

Bu tür kullanımda checkboxa value yani değer tanımlamamıza gerek yok, çünkü sadece isset fonksiyonu ile seçilip seçilmediğini kontrol etmemiz yeterli. Eğer seçilmezse sayfaya checkboxun adında bir değer gitmiyor, eğer seçilirse de “on” değeri gönderiliyor.

Checkbox ile çoklu seçim ve işlem uygulama

Listelerde birden fazla maddeyi checkbox ile seçip toplu işlemler yapmak için bir array mantığı uygulayacağız.

form.php:

<form action="kontrol.php" method="post">
	<label><input type="checkbox" name="meyveler[]" value="elma"/> Elma</label><br/>
	<label><input type="checkbox" name="meyveler[]" value="armut"/> Armut</label><br/>
	<label><input type="checkbox" name="meyveler[]" value="cilek"/> Çilek</label><br/>
	<label><input type="checkbox" name="meyveler[]" value="muz"/> Muz</label><br/>
	<input type="submit" value="Tamam">
</form>

kontrol.php:

if(isset($_POST['meyveler'])) {
	$meyveler = $_POST['meyveler'];

	echo 'Seçtiğiniz meyveler: <br/>';

	foreach($meyveler as $meyve) {
		echo ' * ' . $meyve . ' <br/>';
	}
} else {
	echo 'Hiç meyve seçmediniz.';
}

Checkboxların her birinin name yani isim değerine “meyveler[]” dedik, buradan bu olayın array mantığıyla işlediğini daha iyi anlayabilirsiniz. Böylelikle her seçilen madde “meyveler” değerine bir array elemanı olarak ekleniyor. PHP tarafına ise bu POST değişkeni array olarak gönderiliyor.

Daha iyi anlamak için kontrol.php en başına print_r($_POST) yazarak gelen sonucu net şekilde görebilirsiniz:

Array
(
    [meyveler] => Array
        (
            [0] => elma
            [1] => cilek
            [2] => muz
        )

)

Çoklu seçilen maddeleri toplu silme uygulama

Yukarıdaki örnekte nasıl çoklu seçenek yapılacağını ve PHP’de nasıl karşılandığını örnek gösterdim. Bu yönteme bir de toptan içerik silme örneği gösterebilirim.

Bunun için ekranda veritabanından listelenmiş içerik örnekleri olduğunu varsayalım.

form.php

<form action="kontrol.php" method="post">
	<label><input type="checkbox" name="sil[]" value="1"/> Birinci yazının başlığı</label><br/>
	<label><input type="checkbox" name="sil[]" value="2"/> Bir diğer yazı başlığı</label><br/>
	<label><input type="checkbox" name="sil[]" value="3"/> Başka yazı</label><br/>
	<label><input type="checkbox" name="sil[]" value="4"/> Sonuncu yazı</label><br/>
	<input type="submit" value="Seçilileri sil">
</form>

Bu sefer checkboxlara “sil[]” ismini tanımladık ve değerlerine her yazının NO’sunu yazdık. Şimdi bu form ile birden fazla yazı seçildiğinde kontrol.php sayfasına silinecek yazılarının NO’sunu içeren “sil” adında bir array gönderilmiş olucak.

kontrol.php:

if(isset($_POST['sil'])) {
	$silinecekler = implode(', ', $_POST['sil']);
	mysql_query('DELETE FROM yazilar WHERE NO IN ( ' . $silinecekler . ' )');
	echo count($_POST['sil']) . ' adet yazı silindi.';
}

Bu sefer gelen arrayı implode ile birleştirdik, yani eğer 1. ve 4. yazıyı seçip formu gönderirsem $silinecekler değişkeni “1, 4” şeklinde bir değer almış olacak. Sonuç olarakta içerikleri silecek MySQL sorgumuz ise şöyle olacak “DELETE FROM yazilar WHERE NO IN ( 1, 4 )” ve bu iki seçilmiş yazıyı silmiş olacağız.

Bir sonraki PHP serüveninde görüşmek üzere!

Etiketler:

Yazılanlar ilgini çektiyse, yenilerinden haberdar olmak için e-mail bültenine abone olabilirsin.

"PHP ile checkbox kullanımı" yazısı için 33 yorum yapılmış.

  1. obaynetmedya.com dedi ki:

    Hocam ellerinize sağlık çok açıklayıcı olmuş uzun zaman oldu ihtiyacım oldu, araştırdım hatırlattığınız için teşekkür ederim.

  2. yunus dedi ki:

    peki db den gelen checkboxları nasıl yazdırırız

    • ByDoqT0R dedi ki:

      Database Musa Hoca Anlatımı Hayır Anlatmadığı İçin Birşey Yapma Database Yani Mysql Öğren Ondan Sonra Tek Başına Bile Yaparsın Kardeş.

  3. mehmet demir dedi ki:

    sa kolay gelsin ben bir emlak sitesi yapmaya çalışıyorum checkboxlarla seçtiğim verileri kaydedebiliyorum hatta çekip yazdırıyorum lakin yazdırdığım checkboxların güncellemesini yapamıyorum yardım edebilir misiniz

  4. güney kasper dedi ki:

    no in nedir acaba?
    yada not in olmasın?

  5. Hakan dedi ki:

    Merhaba;

    Checkbox’u seçili halde nasıl getirebiliriz ? Yani index.php de seçili olarak gelsin. Dilenirse seçimi kaldırayım ben…

  6. Yeni Kullanıcı dedi ki:

    Submit butonuna tıklanınca nereye gideleceği nasıl ayarlanır çoook acil!

  7. kayahan dedi ki:

    checkboxı nasıl eklicez :S ben sadece verdiginiz kodları yazıyorum hata veriyo . yardım edermisiniz

  8. Bedriye dedi ki:

    Meraba
    Benim liste adında bi tablom var(phpmyadmin sayfamda) ben bu tablodan erkek kadın diye iki radio button yaptım ve secime göre listlettim ama ben istiyorum ki listelettiğim örngin kadınları listelettim bu listedekiler checkboxlı gelsin ve checkboxtan bidaha secimle filtleyebiliyim
    yardımcı olursanız sevinirim şimdiden teşekürler.

  9. Bedriye dedi ki:

    <?php

    $baglanti = @mysql_connect('localhost', 'root', '');
    $veritabani = @mysql_select_db('deneme');

    if($baglanti && $veritabani) {
    echo '';
    } else {
    echo '';
    }
    $sorgu= mysql_query("Select * from liste where Cinsiyet='K'") or die ("calistirilamadi");
    echo "”;
    while($veri=mysql_fetch_array($sorgu)) {
    echo $veri[‘ID’].’&nbsp’;
    {
    echo $veri[‘Name’].’&nbsp’;
    {
    echo $veri[‘Soyad’].””;
    }
    }
    }
    ?>
    işte böle bi sorgum var ama ben bu sorguda ekrana yazdırılacakları checkbox’ın yanında yazdırsın istiyorum
    Lütfen yardımcı olursanız sevinirim.

  10. Atakan YILDIRIM dedi ki:

    Merhaba gerçtekten anlatımlarnız cok başarılı tesekkurler

  11. Ogün dedi ki:

    Merhabalar,seçmiş oldugumuz checkboxları submit gibi bir butona bastıktan sonra gelen sayfada seçili vaziyette nasıl gösterebiliriz ?Teşekkürler.

    • Musa Avcı dedi ki:

      seçili olmasını istediğin checkboxa “checked” parametresi eklemen yeterli, örnek;

      &lt;input type=&quot;checkbox&quot; value=&quot;İngilizce&quot; checked=&quot;true&quot; /&gt;
  12. Mazlum Ağar dedi ki:

    Anlatımınız çok güzel. Emeğinize ve yüreğinize sağlık.

  13. Fatih DEMİREL dedi ki:

    Ayrıntılı anlatımınız çok güzel. Teşekkürler.

  14. ByDoqT0R dedi ki:

    Hocam Yaptığınız Kodlamada No Yerine Not Olmuyacakmı ..

    Saygılarımla Hocam

    • Musa Avcı dedi ki:

      Bu örnekte NO olarak geçen silineceklerin nosu oluyor, yani ID olarak da düşünebilirsiniz fakat ben NO demişim. SQL’e bakıldığında sanki NOT IN yazılacakmış gibi gözüküyor ama şöyle bakarsanız daha iyi anlarsınız;

      DELETE FROM `yazilar` WHERE `NO` IN ( 1, 4 )

  15. Rehacan dedi ki:

    Merhaba, anlatım çok ama çok iyi. çok işimi görecek yanlız bir noktada tıkandım açıkçası.

    Yapmış olduğum tablo http://resim.rehacan.com/?v=asd.png adresinde mevcut.

    yapmak istediğim de az çok anlaşılmıştır. 🙂

    soldaki checkbox lar secim[] name i ile value değerlerine de sorunun sıra numarası verilecek şekilde gelmekte. zorlandığım nokta ise, form action kısmına silme butonunda ayrı, düzeltme butonunda ayrı yönlendirme nasıl yapabilirim?

    yani seçililerin hangisi olduğunu görecek, düzelte bastıysam duzelt.php?id=* şeklinde, sil dediysem sil.php ye yönlenecek.

    yardımcı olursanız sevinirim.

  16. ÇETİN EKİNCİ dedi ki:

    hocam yeni yaptığım siteme checkbox ekledim yalnız coklu checkboxlarda sorun yaşıyorum örneğin kişi birden fazla dil biliyorsa ingilizce türkçe almanca ozaman bunu veritabanına nasıl set edecem ve güncelle dediğimde değerlerin boş gelmemesi için ne yapcam checkboxların name bölümü aynımı olacak veritabanında aynı sütün için birden fazla checkbox ekleyebilirmiyim lütfen yardım edn bu sorunun cevabı acil lazım ?

  17. Umut ÇELİK dedi ki:

    benim performans ödevim vardıda.ondada 4 adet textbox 4 adet checkbox olucak. sırasıyla hangi checkbox a tıklarsak o textbox aktif olucak diğerleri pasif kalıcak. bunu nasıl yapabilirim yardım edebilecek olan varmı ?

  18. yuksel dedi ki:

    iyi günler ben amatör olarak php ile ilgilniyorum ve checkbox ile ilgili bir problemim var yardımcı olursanız sevinirim kolay gelsin.

    <input type="hidden" name="cid[]" value="”>
    <tr class="”>
    <input name="urunadi[]" type="text" value="” size=”40″>
    <input name="admin[]" type="text" value="” size=”20″>
    <input type="checkbox" name="delete[]" value="”>

    burada bir satırdaki checkbox ı seçtiğimde verileri post ettiriyorum yanlız id yi sayfada alıyorum ama urunadı malesef gelmiyor.
    if (count($_POST[‘delete’])>0) {
    echo $delete[0];
    echo $urunadi[0];
    exit();

  19. Bahadır dedi ki:

    Hocam elleriize sağlık. Aramalarda sitenize denk geliyorum ve bukadar öğretinize rağmen bir teşekkür etmeden gitmek terbiyesizlik oludu (: Teşekkürler.

  20. Remzi ÖNEL dedi ki:

    Merhabalar. Hocam üstteki mesajda kodlar görünmediği için textarea ile yazıyorum mesajı. WordPress portalım için nöbetçi eczane botu yazıyorum. PHP bilgim çok az. Örneklerle vs bi düzene soktum. Ancak tam olarak istediğimi yapamıyorum. Şu anki hali ile bot, mysql tablosuna veri yazdırmaya ve veri çekmeye yarıyor. Ben bu işleve ek olarak, botun yönetim panelinde checkbox ile işaretleyeceğim eczaneleri sidebar içinde bir sayfaya çekmek istiyorum. Yardımcı olur musunuz? Kodlar şu şekilde:

    Eczane Adı:

    Eczane Telefonu:

    Eczane Adresi:

    Nöbetçi Eczane Ekle

    Seç
    Eczane Adı
    Eczane Telefonu
    Eczane Adresi
    Kaldır

    <input type="checkbox" name="listeguncelle[]" value="” />

    <a href="./?i=sil&id=”>

  21. Meriç dedi ki:

    Çok basit bir konuda çözümünü bulamadığım bir sorun yaşıyorum.
    Başlangıçta html 5 ile yazdığım bir dosyayı farklı kaydedip .php hâline getirdiğimde “Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0” uyarısı alıyorum. Dosyanın bulunduğu klasörü bile F5’le yeniliyorum, ona rağmen aynı hata uyarısını veriyor. Nedir bu sorunun kaynağı? .php dosyasını html’le biçimlendirememek pek mantıklı gelmedi. xampp kullanıyorum ve mysql de açık durumda.

    • Meriç dedi ki:

      Sorunu anladım galiba; ulaşmak istediğim .php dosyası adında Türkçe karakter geçen bir klasörün içinde bulunduğundan böyle sorun çıkarıyor. PHP’nin Türkçe’yle olan bu sorununa herhangi bir çözüm bulabilir miyiz?

      • Musa Avcı dedi ki:

        Türkçe karakterli klasör isimleri kullanmamanı öneririm. Eğer özellikle Türkçe karakter içermek zorunda ise windows yerine linux bir sunucuda çalışıp çalışmadığını dene, bu sorun windows ile de alakalı olabilir.

  22. Yasin dedi ki:

    Güzel anlatım emeğine sağlık.

  23. Setcan Baykal dedi ki:

    Merhabalar hocam,
    Yalnız bir sorun bulunuyor. MSSQL de Where IN (2,3,4) gibi bir method kullanılmıyor ne öneriyorsunuz.

    • Musa Avcı dedi ki:

      MySQL’e geçmeni öneriyorum 🙂 İmkansızsa WHERE id = 1 OR id = 2 … şeklinde kullanabilirsin.

      • Sercan Baykal dedi ki:

        Hocam bir sorgu ile örnek gösterebilir misiniz ?
        $silinecekler = implode(‘, ‘, $_POST[‘sil’]);
        , yerine or koymam yeterli olmuyor çünkü tek hücrede algılıyor ‘ ‘ içindeymiş gibi sorgu örneğiniz var mı hiç eliniz de ?

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir