v2.5.2
Giriş yap

Checkbox ile php veri filtreleme hakkında

deadmonster
984 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Bir sayfada php ile Blogları çekiyorum. Birden fazla kategori olduğu için kategorize etmek istiyorum. Checkbox ile Ajax kullanarak bunu yaptım sorunsuz çalışıyor. Ancak bu kategorize işlemini nasıl iptal edeceğimi anlayamadım Html :

<form class="form" onsubmit="return false">
    <div class="mb-3 form-check">
        <input type="checkbox" class="form-check-input" name="Kategori[Oyun]" id="exampleCheck1">
        <label class="form-check-label" for="exampleCheck1">Oyun</label>
    </div>
    <div class="mb-3 form-check">
        <input type="checkbox" class="form-check-input" name="Kategori[Genel]" id="exampleCheck2">
        <label class="form-check-label" for="exampleCheck2">Genel</label>
    </div>
    <div class="mb-3 form-check">
        <input type="checkbox" class="form-check-input" name="Kategori[Kültür]" id="exampleCheck3">
        <label class="form-check-label" for="exampleCheck3">Kültür</label>
    </div>
    <button class="btn btn-success filter-select"> Kategorize et </button>
</form>

Ajax :

$(".filter-select").on('click', function() {
    var data = $(".form").serialize();
    $.ajax({
        url: "ajax/blog.php",
        type: "post",
        data: data,
        dataType:"json",
        success: function(cevap) {
            if(cevap.ok){
                $(".item-list").html(cevap.ok);
            }else{
                alert("Hata var.");
            }
        }
    })
})

ajax/blog.php :



<?php
$data = [];
require '../ayar/ayar.php';

$where = array(); 

if(isset($_POST['Kategori'])){ 
    $cins = $_POST['Kategori']; 
    $cinsSQL = array(); 
    foreach($cins AS $k=>$v){ 
        $cinsSQL[] = "blog_kategori = '". $k ."'"; // ayakkabicinsi dediğim ayakkabılar tablonda bir kolon ;) 
    } 
    
    $cins = implode(" OR ", $cinsSQL); 
    $where[] = $cins; 

}
$countWhere = count($where); 
if($countWhere >= 1){ 
    $where = implode(' AND ',$where); 
    $where = "WHERE $where"; 
}else{ 
    $where = ""; 
} 

$SQL = "SELECT * FROM blog $where"; 
/* Buradaki sorguya göre eğer kategori
adında bir post yoksa $SQL değişkeni şu 
şekilde oluyor. 
$SQL = "SELECT * FROM blog" */

if ($_POST) {
    $data["ok"] = "";
    $blogcek = pre($SQL);
    $blogcek->execute();
    $yenibloglar = all($blogcek);
    foreach ($yenibloglar as $blog) {
        $data["ok"] = $data["ok"] .  '
        /*bu kısımda verileri html olarak çekiyoruz*/
        ';
    }
} else {
    $data["hata"] = "hata var";
}
echo json_encode($data);
?>

[DÜZENLEME]

Checkbox ları boş bırakıp butona bastığımda post olmadığı için "hata var" olarak geri dönüyor. Ama ben type="reset" olarak bir buton koyup "Kategori seçimini kaldır" 'a basıldığı zaman hem checkboxları temizleyip hemde kategorilerin hepsini göstersin istiyorum.

Cevap yaz
Cevaplar (2)
deadmonster
1275 gün önce

@emrettin knk implode ların amacı şu : eğer aynı kıyaslama türünde post varsa bunları birleştirmek örn : blog_kategori=Oyun OR blog_kategori=Genel.
and ın amacı ise farklı türleri birleştirmek için örn (yazar olabilir, daha eklemedim) blog_kategori=Oyun AND blog_yazar=DeadMonster gibi.
bu kısımda hiçbir sorun olmadan çalışıyor zaten.
benim amacım bu filtreleme işlemimi iptal etmek.
Bunu nasıl yapabilirim?

emrettin
1275 gün önce

yanlış anlamadıysam diye yazıyorum öncelikle where değişkenine or ile implode ediyorsun sonra and implode ediyorsun orda bir hatan olabilir 1. olarak bu. 2. olarak checkboxların true yada false göndermelerini kontrol edip seçili kategorileri bulabilir ve where dizisine atabilirsen isteğin kategoriler almış olursun senin konunda bütün kategoriler checkbox durumu gözetmeksizin çekiliyor hatan orda.