Merhaba arkadaşlar, çoğumuz php arama yapar fakat önümüze gereksiz sonuçlar gelir bu yüzden arama sonuçları ile birlikte filtreleyebileceğiz veya arama yapmadan sadece filtreleri kullanabileceğiz.
Veri tabanında tablomuzun adı “mail_sayfa” dır.
arama veya filtreleme sonuçlarını GET method ile yapacağız.
Filtreleme formunu oluşturduktan SQL verileri çekiyoruz.
$query = "SELECT * FROM mail_sayfa"; // mail_sayfa veri tablomuz çekiyoruz
$select = array(); // formdan gelen filtre verilerini diziye aktarıyoruz
Gelen verilerimizin Durumunu kontrol etmek için önce GET’den gelen veriyi $select değişkenine aktarıyoruz.
/* aktif pasif durum kontrol */
if (isset($_GET['d'])) {
if($_GET['d'] != NULL) {
$select[] = " AND sayfa_durum=".$_GET['d'];
}else {
$select[] = "";
}
}
Burada 7, 92, 120, 365, 1095 gün önceki tarihleri değişkenlere atadık.
/* SQL için tarihler*/
$bugun=date('Y-m-d'); //bugün
$son7= date('Y-m-d', strtotime('-7 days')); // bugünden -7 gün sonraki tarih
$son90= date('Y-m-d', strtotime('-92 days'));
$son120= date('Y-m-d', strtotime('-120 days'));
$son365= date('Y-m-d', strtotime('-365 days'));
$son1095= date('Y-m-d', strtotime('-1095 days'));
/* SQL için tarihler*/
Burada Formdan gelen tarih verilerini if else kontrolü ile $select değişkenine SQL Between yukarıda yapmış olduğumuz tarih ile bugün ki tarih arasındaki verileri sıralama işlemini yaptık.
/* burada formdaki seçilen tarih neyse $select[] değişkenine SQL sorgusu olarak aktarılıyor */
if (isset($_GET['t'])) {
if($_GET['t'] != NULL) {
if($_GET['t'] == "1hafta") {
$select[] = " AND sayfa_tarih BETWEEN '$son7' AND '$bugun' ";
}elseif ($_GET['t'] == "3ay") {
$select[] = " AND sayfa_tarih BETWEEN '$son90' AND '$bugun' ";
}elseif ($_GET['t'] == "6ay") {
$select[] = " AND sayfa_tarih BETWEEN '$son120' AND '$bugun' ";
}elseif ($_GET['t'] == "1sene") {
$select[] = " AND sayfa_tarih BETWEEN '$son365' AND '$bugun' ";
}elseif ($_GET['t'] == "3sene") {
$select[] = " AND sayfa_tarih BETWEEN '$son1095' AND '$bugun' ";
}else {
$select[] = NULL;
}
}else {
$select[] = NULL;
}
}
Formda input text yazılan değeri if kontrolü ile $select değişkenine SQL Like “Sayfa_baslik” ve “sayfa_aciklama” kısmında eşleşen değerleri bize verir. (sadece bu kod Kullanılarak PHP’de basit arama yapılabilir.)
/* arama kutucuğuna yazılan verileri sayfa_baslik ve sayfa_aciklama sütunlarında like sorgusu olup olmadığını kontrol ediyoruz*/
if (isset($_GET['q'])) {
if($_GET['q'] != NULL) {
$select[] = " AND sayfa_baslik LIKE '%".$_GET['q']."%' OR sayfa_aciklama LIKE '%".$_GET['q']."%'";
}else {
$select[] = NULL;
}
}
Aşağıdaki kodumuz ise kategori filtrelemesi yapar. Fakat burada önemli olan nokta şudur; name=”q” input’dan gelen bir veri varsa yukarıdaki yazı ile yapılan aramdaki SQL hemen arkasında SQL Or ekleyerek devam eder. eğer yoksa SQL And ile devam eder. Burada ki dikkat edelim.
/* kategori verileri listeleme */
if(isset($_GET['k'])) {
if($_GET['q'] != NULL) {
if($_GET['k'] != NULL) {
$select[] = " OR sayfa_kategori LIKE '%".$_GET['k']."%'"; // $_GET['q'] varsa
}else {
$select[] = NULL;
}
}else {
if($_GET['k'] != NULL) {
$select[] = " AND sayfa_kategori LIKE '%".$_GET['k']."%'"; // $_GET['q'] yoksa
}else {
$select[] = NULL;
}
}
}
Aşağıdaki ise artık SQL Sorgusunu $sql değişkenine atamış olduk.
$sql = $query;
if (count($select) > 0) {
$sql .= " WHERE ".implode(' ', $select)." ORDER BY sayfa_id DESC ";
}else {
$sql .= " WHERE ORDER BY sayfa_id DESC ";
}
PHP PDO verileri çekmek
$conn değişkeni veri tabanı bağlantı değişkenidir lütfen kendinizde göre değiştirmeyi unutmayın.
$mail_liste = $conn->prepare($sql);
$mail_liste->execute();
Son olarak ise artık verilerimizi listeleyebiliriz.
if ($mail_liste->rowCount()) {
foreach ($mail_liste as $mail_listele ) {
echo $mail_liste['sayfa_baslik']."<br>";
echo $mail_liste['sayfa_aciklama']."<br>";
}
}
Php Arama görüntüleri
Durumu aktif olanlar ve kategorisi e-mail olanları listledik.
Son 3 ay içerisindeki ve sayfa başlığında veya sayfa açıklamasında “dene” kelimesi geçen veriler listeledik.
arkadaşlar yazımızda hata veya önerileriniz olursa lütfen yorum yapmayı unutmayın.
Unutmayın! Paylaşmak; kazanmanın en hızlı ve kolay yoludur. Bir sonraki blog’ta görüşmek dileğiyle esen kalın.
Link çalışmıyor hocam
link çalışmıyor. kontrol etmiyor musun?