Php Get İle Filtre
-
selamlar bir sitede filtreleme yapmaya çalışıyorum
Şu sekilde bir filtrem var GET ile filtreyi alıp dbden sorguluyorum burada sıkıntı yok
Misal marka için ?marka=Markaid ?renk=renkidTakıldığım yer
siteadi.com/kategori/kat.php?id=4&marka=3&renk=4 bu sekilde
WildWamqire tarafından 29/Oca/16 21:13 tarihinde düzenlenmiştir
Url yapısına ekleme yapabilmek
Şu an elde ettigim yapı siteadi.com/kategori/kat.php?id=4&marka=3 veya siteadi.com/kategori/kat.php?id=4&renk=4
Urlyi alıp bir sorguyla bastırayım dedim ancak güvenli olurmu diye ikilemde kaldım.
Not: Get değerli post değil direk alınıyor. -
Cesitli filtrelemeler yapabilirsin pdo mu kullaniyorsun butun degerler sayiysa integer olarak tanimla en basiti
-
Realist bunu yazdı
Cesitli filtrelemeler yapabilirsin pdo mu kullaniyorsun butun degerler sayiysa integer olarak tanimla en basiti
filtreden geçirdim güvenlik konusunda ama sorun su parametre değeri varsa aynı parametreyi ekliyor ben var yok oludgunu anlayıp ona göre işlem yapacam
kategori/comfort?renk=11&marka=2&marka=2&renk=23&renk=5 misal bu sekilde sürekli yeni parametre ekliyor -
kodu göremediğimiz için farazi konuşuyoruz ama anladığım kadarıyla
isset ve empty ile parametrelerin set edilip dolu olduğunu kontrol ettir.
güvenlik içinde madem ki string kullanmıyorsun get leri intval() ile kısıtla oldu bitti.
Tekrar eden parametrelerde yanlış anlamadıysam get parametresini array yaparsan istediğin yeni eklemeyi yaptırabilirsin diye tahmin ediyorum
-
babayarisi bunu yazdı
kodu göremediğimiz için farazi konuşuyoruz ama anladığım kadarıyla
isset ve empty ile parametrelerin set edilip dolu olduğunu kontrol ettir.
güvenlik içinde madem ki string kullanmıyorsun get leri intval() ile kısıtla oldu bitti.
Tekrar eden parametrelerde yanlış anlamadıysam get parametresini array yaparsan istediğin yeni eklemeyi yaptırabilirsin diye tahmin ediyorum
$markax= g('marka'); $numara= g('numara'); $renk= g('renk'); $sorgu = array(); if($markax) { $sorgu[] = "urun_marka = '".$markax."'"; } if($numara) { $sorgu[] = "urun_no = '".$numara."'"; } if($renk) { $sorgu[] = "urun_renk = '".$renk."'"; } if($sorgu) { $sql_sorgu = ' AND '; $sorgu_say = count($sorgu); $i = 1; foreach($sorgu as $sorgu_satir){ $sql_sorgu .= $sorgu_satir; if($i != $sorgu_say) { $sql_sorgu .= ' and '; } $i++; } } unset($sorgu,$sorgu_satir);
Bu filtrenin sorgulandıgı kod g fonksiyonu GEt metodunu temsil ediyor.$urunler = $db->get_results("SELECT urun_id,urun_adi,urun_resim,urun_seo,urun_indirim,urun_fiyat,urun_indirim_fiyat,urun_durum FROM urunler WHERE urun_durum NOT IN(0) AND urun_kategori ='$kid' $sql_sorgu ORDER BY urun_id DESC LIMIT 24"); if($db->num_rows > 0) { foreach ($urunler as $urun ){ urun($urun,'col-md-4 col-sm-6'); } }else{ uyari('Üzgünüm','Bu kategoride herhangi bir ürün bulamadık','warning'); }
buda ürünleri listediğim kod
<div class="layered layered-Category"> <h2>Markalar</h2> <div class="content-shopby"> <ol> <?php $markalar = $db->get_results("SELECT marka_id,marka_adi FROM markalar"); foreach($markalar as $marka){ echo '<li><a href="'.$adres.$lnk.'marka='.$marka->marka_id.'">'.$marka->marka_adi.'</a></li>'; } ?> </ol> </div> </div> <div class="layered layered-Category"> <h2>Renkler</h2> <div class="content-shopby"> <ul style="width:230px;" class="list-inline"> <?php $renkler = $db->get_results("SELECT renk_id,renk_adi,renk_kodu FROM renkler"); foreach($renkler as $renk){ echo '<li data-toggle="tooltip" title="'.$renk->renk_adi.'" style="width:25px;height:25px;margin:2px;background-color:'.$renk->renk_kodu.'"> <a style="line-height:25px;font-size:25px;" href="'.$adres.$lnk.'renk='.$renk->renk_id.'"> </a></li>'; } ?> </ul> </div> </div>
buda elemanların olduğu yer
Herşey çalışıyor ancak filtrelemede eğer o elaman varsa yenisni eklemesin değiştirsin. Bunu çözemedim
-
Bir uploayım son kez hala cevap arıyorum
-
Soyle yapabilirsin
Eger urlde renk parametresi (query_string) varsa linkleri gostermeyebilirsin. Yani renk yada herhangi bir alani gizleyebilirsin if ile.
-
WildWamqire bunu yazdıbabayarisi bunu yazdı
kodu göremediğimiz için farazi konuşuyoruz ama anladığım kadarıyla
isset ve empty ile parametrelerin set edilip dolu olduğunu kontrol ettir.
güvenlik içinde madem ki string kullanmıyorsun get leri intval() ile kısıtla oldu bitti.
Tekrar eden parametrelerde yanlış anlamadıysam get parametresini array yaparsan istediğin yeni eklemeyi yaptırabilirsin diye tahmin ediyorum
$markax= g('marka'); $numara= g('numara'); $renk= g('renk'); $sorgu = array(); if($markax) { $sorgu[] = "urun_marka = '".$markax."'"; } if($numara) { $sorgu[] = "urun_no = '".$numara."'"; } if($renk) { $sorgu[] = "urun_renk = '".$renk."'"; } if($sorgu) { $sql_sorgu = ' AND '; $sorgu_say = count($sorgu); $i = 1; foreach($sorgu as $sorgu_satir){ $sql_sorgu .= $sorgu_satir; if($i != $sorgu_say) { $sql_sorgu .= ' and '; } $i++; } } unset($sorgu,$sorgu_satir);
Bu filtrenin sorgulandıgı kod g fonksiyonu GEt metodunu temsil ediyor.$urunler = $db->get_results("SELECT urun_id,urun_adi,urun_resim,urun_seo,urun_indirim,urun_fiyat,urun_indirim_fiyat,urun_durum FROM urunler WHERE urun_durum NOT IN(0) AND urun_kategori ='$kid' $sql_sorgu ORDER BY urun_id DESC LIMIT 24"); if($db->num_rows > 0) { foreach ($urunler as $urun ){ urun($urun,'col-md-4 col-sm-6'); } }else{ uyari('Üzgünüm','Bu kategoride herhangi bir ürün bulamadık','warning'); }
buda ürünleri listediğim kod
Markalar
Renkler
buda elemanların olduğu yer
Herşey çalışıyor ancak filtrelemede eğer o elaman varsa yenisni eklemesin değiştirsin. Bunu çözemedim
Hocam valla anlamadım daha net anlatma şansın varsa beklemedeyim çünkü bir sıkıntı yok gibi duruyor
-
Olay şu hocam sistem çalışıyor ama yapmak istediğim şey get ile gönderilen parametre esnek olsun
https://www.ayakkabidunyasi.com.tr/erkek/aksesuar/canta
misal bu sayfada soldaki filtreleri dene get parametrelerini bak hocam adam kaldırdıgında kaldırıyor veya başka eklemek istediğinde ekliyor.
Şorun suki ben bunun url yapısını bir türlü çözemedim 5-6 tane filtre oldugunda manuel olarak sorgu yapdıgında olasıllıkalra göre bir sürü if else sorgusu oluyor.