Php ile Seçili 2 Tarih Arasındaki Verileri Listeleme

Çok sık karşılaştığım ve cevapladığım, 2 Tarih arasındaki verilerin nasıl listeleneceğini bu yazımda anlatmaya çalışacağım. Bu zamana kadar anlatmamış olmamın nedeni de; çok basit bir mantığının olması ve temel bilgilere sahip olan herkesin yapacağını düşünmemdi. Maalesef ki bu düşüncelerimde yanıldığımı gördüm. Genel olarak armut piş ağzıma düş durumunun bulunması, üretkenlik ve yaratıcılık konusunda eksikliğin hat safhada olması, öğrenilen ve bilinen kod dizisinden yeni uygulamalar hazırlanamamasına neden oluyor. (O kadar doldum ki bu sitemde bulunmam gerekiyordu.)

Tarih işlemleri; time(); ve date(); ile gerçekleştiğinden dolayı, bu yazımda 2 tarih türüyle nasıl işlem yapılacağını anlatacağım.

Veri Tabanına date(); Fonksiyonu İle Kayıt Edilmiş, İki Tarih Arası Verileri Listeleme

Öncelikle tarih bilgisini almak için, HTML5 ile gelen input type="date" özelliğini kullanacağız. Bu inputtan gelecek olan değer; Yıl – Ay – Gün Formatından olduğundan dolayı hazırlayacağım örnekte veri tabanında Yıl – Ay – Gün formatında verilerin kayıtlı olduğunu varsayacağım.

Eğer kendi veri tabanınızda kayıtlar, Gün – Ay – Yıl şeklinde kayıtlıysa; explode ile inputtan gelen değeri bölüp, veri tabanınızdaki kayıtlı formata getirerek bu aramayı gerçekleştirebilirsiniz.

İlk olarak HTML Form alanını oluşturalım. Sonrasında kodlamaya geçerek bu işlemin nasıl yapılacağını görelim.

<form action="" method="POST">
<div>Başlangıç Tarihi: <input type="date" name="tarih1"></div>
<div>Bitiş Tarihi: <input type="date" name="tarih2"></div>
<button>Verileri Listele</button>
</form>

Örnek öncesinde söylemiş olduğum gibi tarih alanlarını HTML5'ten yararlanarak hazırlıyoruz. Burada başlangıç ve bitiş olarak iki adet input oluşturuyoruz. Böylelikle alacağımız iki tarih ile listelenecek verilerin aralığını belirlemiş oluyoruz.

Bu işlem için gerçekleştireceğimiz veri tabanını da aşağıdaki gibi olacaktır.


Yukarıdaki veri tabanı yapısını temel alarak örnek kodlamasına geçelim.

İlk olarak; başlangıç tarihinin, bitiş tarihinden büyük olmasını istemediğimizden dolayı bununla ilgili koşulumuzu yazıyoruz.

if($_POST["tarih1"] > $_POST["tarih2"]){
echo " Başlangıç Tarihi Bitiş Tarihinden Büyük Olamaz :( ";
}else{
// Kayıtları Listeleme Alanı
}

Yukarıda yer alan kodla, Formdan gelen başlangıç ve bitiş tarihini aldık. Başlangıç değerinin bitiş değerinden büyük olmaması için bu kontrolü yaptık. Else kısmında ise, listeleme işlemini gerçekleştireceğiz.

$Veriler = $db->prepare("SELECT * FROM makale WHERE ktarih >= ? and ktarih <= ? ORDER BY id DESC");
$Veriler->execute(array( $_POST["tarih1"], $_POST["tarih2"] ));
foreach($Veriler as $Cek){
echo $Cek["baslik"]."<br>";
}

Yukarıdaki sorgumuzda yer alan ktarih >= ? and ktarih <= ? İfadesiyle, başlangıç ve bitişi tanımlamış olduk. Makalenin başında da belirtmiş olduğum gibi sadece WHERE kısmında neye ihtiyacımızın olduğunu belirtiyoruz.

Veri Tabanına time(); Fonksiyonu İle Kayıt Edilmiş, İki Tarih Arası Verileri Listeleme

Bu listeleme türü diğerine göre biraz teferruatlıdır. Buradaki teferruat, inputtan gelecek olan değeri ilk önce time(); değerine çevirmemizden kaynaklanacaktır. İlk örnekte yer alan HTML Form alnını kullanarak kodlamaya geçelim.

Bu işlem için gerçekleştireceğimiz veri tabanını da aşağıdaki gibi olacaktır.


Yukarıdaki veri tabanı yapısını temel alarak örnek kodlamasına geçelim.

İlk olarak POST'tan gelen verileri tim(); değerine çevirelim. Sonrasında ilk örnekte yapmış olduğumuz başlangıç, bitişten büyük mü? Sorgusunu yazalım.

$tarih1 = explode('-',$_POST["tarih1"]); // POST'tan gelen başlangıç değerini parçalıyoruz.
$tarih2 = explode('-',$_POST["tarih2"]); // POST'tan gelen bitiş değerini parçalıyoruz.
$tarih1Cevir = mktime (0, 0, 0,$tarih1["1"],$tarih1["2"],$tarih1["0"]); // Başlangıç tarihini Time değerine çeviriyoruz.
$tarih2Cevir = mktime (23, 59, 59,$tarih2["1"],$tarih2["2"],$tarih2["0"]); // Bitiş tarihini Time değerine çeviriyoruz.

Burada dikkat edilmesi gerekilen en önemli nokta, başlangıç tarihi tanımlanırken mktime fonksiyonuna saat-dakika-saniye bilgisine 0, 0, 0 yazılmasıdır. Bunun nedeni, başlangıç tarihinin gece yarısı 00:00 saatinden başlamasıdır.

Diğer dikkat edilmesi gerekilen en önemli nokta da, bitiş tarihi tanımlanırken mktime fonksiyonunda saat-dakika-saniye bilgisine 23, 59, 59 yazılmasıdır. Bunun nedeni, bitiş tarihinin gece yarısı 23:59:59 saatinden son bulmasıdır.

İnputtan gelen değerleri time(); fonksiyonuna başarılı bir şekilde çevirdikten sonra ilk olarak başlangıç, bitişten büyük mü? Sorgusunu yapalım, sonrasındaysa listeleme sorgusunu yazalım.

if($tarih1Cevir > $tarih2Cevir){
echo " Başlangıç Tarihi Bitiş Tarihinden Büyük Olamaz :( ";
}else{
// Kayıtları Listeleme Alanı
}

Yukarıda hazırlamış olduğumuz kodla, inputtan gelip time değerine çevirmiş olduğumuz değişkenleri; başlangıç, bitişten büyük mü? Sorgusuna yazıyoruz. Else kısmındaysa listeleme işlemini gerçekleştireceğiz.

$Veriler = $db->prepare("SELECT * FROM makale WHERE time >= ? and time <= ? ORDER BY id DESC");
$Veriler->execute(array( $tarih1Cevir, $tarih2Cevir ));
foreach($Veriler as $Cek){
echo $Cek["baslik"]."<br>";
}

Yukarıdaki sorgumuzda yer alan time >= ? and time <= ? İfadesiyle, başlangıç ve bitişi tanımlamış olduk. Makalenin başında da belirtmiş olduğum gibi sadece WHERE kısmında neye ihtiyacımızın olduğunu belirtiyoruz.

Bu şekilde, iki türlü kayıtlı olan tarih bilgisine ait listelemeyi yaptık. İlk örnekte tarih formatını, inputtan gelen tarih biçimine göre hazırladım. Eğer sizin veri tabanınızda bu tarih formatı yerine gün-ay-yıl olarak kayıtlıysa, ikinci örnekteki gibi explode ile bölmeniz gerekmektedir. Sonrasında gelen parçalı değişkenleri gün-ay-yıl şeklinde sıralayıp listeleme işlemini gerçekleştirebilirsiniz.

Ayrıca iki tarih arasında listeleme yaparken, ayrıca belirtilen kelime bazındaki verilerin listelenmesini istiyorsanız; dersindeki bilgilerle burada yer alan bilgileri birleştirebilirsiniz. İlk paragrafta yazmış olduğum üretkenlikte bunu gerektirir.
- 02.08.2015 / 12:51:00 3

Sosyal Medya Paylaşım Alanı

Makale Destekli Kütüphane Verileri

Bunlarda İlginizi Çekebilir

Javascript

Javascript İle Sağ Tuş Yasaklama İşlemi

Kategori: Javascript | 14.09.2013
Seo(.htaccess)

Tarayıcı Önbellekleme İle Siteyi Hızlandırma

Kategori: Seo(.htaccess) | 14.09.2013
Php Dersleri
3:05 Php Dersleri
20:57 Php Dersleri

Php ile Üye Kayıt İşlemi Yapmak

Kategori: Php Dersleri | 06.05.2013

Hadi Sende Yorum Yap!

Yorum Gönderilmiştir. Onaylandıktan Sonra Mesajınız Yayınlanacaktır.