• 12-10-2009, 11:24:34
    #1
    merhaba arkadaşlar

    db'de kayıtlı bir tarih alanım var
    $tarih ekran çıktısı şu şekilde : 25-09-2009

    $bugun = date("d-m-Y");
    if ($tarih>=$bugun) {
    davetleri listele
    }
    buradaki tarih karşılaştırması çalışmıyor, $tarih bugünden büyük ise listeleme yapması gerekir. $tarih bugünden küçük olmasına rağmen listeleme yapıyor.

    if kontrolü sadece tarihin "gün" kısmını karşılaştırıyor "ay" ve "yıl" kısmını pas geçiyor.
  • 12-10-2009, 11:51:47
    #2
    DB'ye kayıtlı alanın tipinden kaynaklı bir sorun olabilir belki..
  • 12-10-2009, 12:14:03
    #3
    benim bildiğim kadarıyla böyle bir tarih kontrolünü IF ile yapamazsın. IF ve > , < operatorleri ile rakamsal olarak sadece integer/double biçimleri için küçüklük-büyüklük kontrolü yapabilirsin.

    gün ay ve yılı tek tek kontrol ettirmen gerekebilir..

    $gun = date("d");
    $ay = date("m");
    $yil = date("Y");
    
    $tarih = explode('-', $tarih) //25-09-2009
    
    if ($tarih[0] > $gun && $tarih[1] > $ay && $tarih[2] > $yil) {
    listele..
    }
    tabi sen bunu böyle yazdığıma bakma. belki soruna cevap olur, çalışır. ama senin istediğin tarih kontrolleri MySQL sorgusu içinde yapılıyor.

    MySQL'in date() fonksiyonuyla 'tarih' alanını kontrol ettirip ona göre sorguna devam edebilirsin.

    denemedim sadece anlaman için örnekliyorum ;

    $sorgu = mysql_query("SELECT * FROM odemeler WHERE date() >= odemeler.tarih");
    
    if (mysql_num_rows($sorgu) > 0) {
    echo "kayitlar listeleniyor";
    }
  • 12-10-2009, 12:16:12
    #4
    bir diğer alternatif (if ile yapacaksan işe yarayan)

    strtotime() fonksiyonuyla bi tarihi unix formatına dönüştüreblirsin. yani her tarihin veya tarih+saatin karşılığı 183767825764 gibi bişeye denk geliyor.

    ozaman ;

    $bugun = strtotime(date("d-m-Y"));
    $dbtarih = strtotime(date($tarih));
    
    if ($dbtarih > $bugun) {
    echo "db deki tarih bugünden ileri";
    }
  • 12-10-2009, 13:02:40
    #5
    Üyeliği durduruldu
    cocainer adlı üyeden alıntı: mesajı görüntüle
    DB'ye kayıtlı alanın tipinden kaynaklı bir sorun olabilir belki..
    db deki alan tipiniz nedir. mktime fonksiyonu ile tarihi time değerine dönderip işlem yapmak daha pratiktir
  • 12-10-2009, 13:13:55
    #6
    db tipi : warchar
    tarihi de şu şekilde kayıt ettiriyorum
    <input type=\"text\" name=\"gun\" size=\"05\"> 
    <input type=\"text\" name=\"ay\" size=\"05\"> 
    <input type=\"text\" name=\"yil\" size=\"10\">
    $gun = $_POST["gun"];
    $ay = $_POST["ay"];
    $yil = $_POST["yil"];
    $davetiyetarihi = "$gun-$ay-$yil";
    daha sonra sorgu alanında $davetiyetarihi ni deb deki ilgili alana gönderiyorum.
    veritabanı alan tipini değiştirdiğimde formdan gelen tarih verisi kaydedilmiyor
  • 12-10-2009, 13:18:28
    #7
    Üyeliği durduruldu
    direk sqlde sorgul ile yapmak istiyorsaniz alan tipinizi date yapmalisiniz. Varchar ile tarih sorgusu yapamazsiniz. Metin ile tarih ayni veri tipi degildir
  • 12-10-2009, 13:22:06
    #8
    Gehinnom

    $sorgu = mysql_query("SELECT * FROM odemeler WHERE date() >= odemeler.tarih");

    bunu denedim fakat olmadı
  • 12-10-2009, 13:23:22
    #9
    sdemirkeser

    veritabanı alan tipini değiştirdiğimde formdan gelen tarihi db ye yazdıramıyorum
    bu konuda bir önerin varmı?
    yukarıda nasıl kayıt altına aldığımı göstermiştim.