v2.5.2
Giriş yap

Checkbox ile php veri filtreleme hakkında

deadmonster
883 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.

emrettin
1058 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.