• 03-06-2008, 11:38:38
    #1
    Merhabalar,

    Arkadaslar ufak birsey hazirladim kendime.
    index.php?id=x
    seklinde ziyaretçi aliyorum. ve bunun sonucunda id'si x olan satıra sahip kullanıcının puanını +1 yükseltiyorum.
    kendimi geliştirmek için yaptığım bikaç haber scripti , makale scripti sırasında hit saymayı aşağıdaki gibi kullanmıştım.

    mysql_query("UPDATE yarismacilar SET puan = puan+1 WHERE id =$id");
    benim istediğim bir IP'den ziyaret alınca +1 arttırsın ama 24 saat boyunca aynı IP'den
    gelen ziyaretler puanı arttırmasın. yani millet refresh yaparak puan kassın istemiyorum.
    her IP'den 24 saatte birkez hit alınabilinsin.

    yardımcı olabilecek birisi var mi ?
  • 03-06-2008, 11:56:59
    #2
    yarismacilar tablosuna son_guncelleme adlı bir sutün eklersin .. Daha sonra UPDATE komutunun koşul kısmına son_guncelleme tarihinin şimdiki tarihe eşit olup olmama şartını da eklersin .. Tabi SET kısmına son_guncelleme=date("dmY") ya da time() gibi bir güncelleme de yapman lazım ..
  • 03-06-2008, 12:01:20
    #3
    Aykut adlı üyeden alıntı: mesajı görüntüle
    yarismacilar tablosuna son_guncelleme adlı bir sutün eklersin .. Daha sonra UPDATE komutunun koşul kısmına son_guncelleme tarihinin şimdiki tarihe eşit olup olmama şartını da eklersin .. Tabi SET kısmına son_guncelleme=date("dmY") ya da time() gibi bir güncelleme de yapman lazım ..
    hayır anlatamadım. ben her IP'den 24 saate 1 defa hit alıp guncellenmesini istiyorum.
    farklı IP'lerden istediği kadar güncellenebilir.
  • 03-06-2008, 12:26:28
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    DooMsDaY adlı üyeden alıntı: mesajı görüntüle
    hayır anlatamadım. ben her IP'den 24 saate 1 defa hit alıp guncellenmesini istiyorum.
    farklı IP'lerden istediği kadar güncellenebilir.
    Aykut Arkadaşta onu anlatmış işte yarismacilar tablosuna bir tanede zaman tablosu aç.
    Senaryo:
    Siteye bir ziyaretçi geldiğinde İp adresini al ve o anki zamanı al
    öncelikle bak bakalım ip adresi kayıtlımı
    eğer kayıtlı değilse hit'i arttırırsın ve ip adresini giriş tarihini loglarsın.
    Eğer ip kayıtlı ise zamana bakalım 24 saat'lik süre geçmişmi.
    $ip="1.1.1.1";
    $zaman=time()-60*60*24;// Şimdiki zamandan 24 saat'i çıkarıyoruz
    mysql_num_rows(mysql_query("select ip,zaman from yarismacilar where ip='$ip' AND zaman>$zaman"));
    Gibi bir sorgu çalıştır eğer sonuç 1 ise o zaman 24 saatten önce giriş yapmış demektir yine hiti 1 artttır zamanıda güncellersin.
    Fakat sonuç 0 ise hiti arttırmana gerek yok.
  • 03-06-2008, 12:57:11
    #5
    bu konuyu ceviz.net'dede konustum zaten. ordada aynı fikir verildi.

    Öneri
    Alıntı
    Fikir vermeye çalışayım. Bir alan ekleyip, ip'nin son güncellenme tarihini saklayabilirsin. Eğer 24 saati aşmış ise güncellersin zamanı ve sayacını.
    Verdiğim Cevap:
    [DooMsDaY] adlı üyeden alıntı: mesajı görüntüle
    ek tablo açayım?
    gelen IP'i yoksa buraya kaydedeyim, varsa son guncellenme tarihine gorede guncelleyeyim ve hit vereyim? if'le kontrol yapayım diyorsun yani ?
    ama bunun kolay bi yolu yok mu? db şişirmeden? 24 saatte bir boşalacak veri tutsa?
    session tarzı ?
  • 03-06-2008, 13:18:24
    #6
    tabloda colom açmak daha mantıklı başka tablo açmaktansa

    24 saatte bir boşalan bir tablo sağlıklı olmazki şöyle düşün.
    saat 23:00 da verileri boşaltıyorsun cron ile ayarlamışsın ben saat 22:00 da giriyorum sitene hiti arttırıyor sen verileri boşaltıyorsun 23:00 da ben 23:30 da girince hiti yine yükseltiyorum.
    Kısaca farklı bir tablo oluşturmak yerine direk yarisma tablosuna ip ve zaman diye 2 colom ekle ve işini gör
  • 03-06-2008, 13:24:33
    #7
    S4l1h adlı üyeden alıntı: mesajı görüntüle
    tabloda colom açmak daha mantıklı başka tablo açmaktansa

    24 saatte bir boşalan bir tablo sağlıklı olmazki şöyle düşün.
    saat 23:00 da verileri boşaltıyorsun cron ile ayarlamışsın ben saat 22:00 da giriyorum sitene hiti arttırıyor sen verileri boşaltıyorsun 23:00 da ben 23:30 da girince hiti yine yükseltiyorum.
    Kısaca farklı bir tablo oluşturmak yerine direk yarisma tablosuna ip ve zaman diye 2 colom ekle ve işini gör
    teşekkürler
    böyle deniceğim. bitmesi 4-5 günümü alicak gerçi :]
    tam baslamadim sistem'i yazmaya. taslak atiyorum henuz :]
    bitirince sistem'in kararlı çalışıp, çalışmama durumunu bildiririm.
  • 03-06-2008, 13:27:42
    #8
    hit aldığında..
    $id = mysql_escape_string($_GET['proje_id']); //güvenlik, id = oylamada proje_id, oyla.php?proje_id=31221312 ..gibi.

    $res = mysql_query("SELECT time FROM tb_puan WHERE ip='{$_SERVER['REMOTE_ADDR']}' and proje_id=$id");
    if (!mysql_num_rows($res) {
    INSERT INTO tb_puan SET proje_id=$id,skor=1,ip='{$_SERVER['REMOTE_ADDR']}'
    }
    elseif (mysql_result($res,0,0) < (time()+86400))) {
    UPDATE tb_puan SET skor=skor+1, time=UNIX_TIMESTAMP() WHERE proje_id=$id and ip='$_SERVER['REMOTE_ADRR']';
    }
    else {
    //puan verilmedi, çünkü refresh uyarısı.. istenirse konur..
    }

    //bi projenin toplam hitini alan sql..

    SELECT SUM(skor) WHERE proje_id=$id;

    ..gibi

    parse error olabilir, ama mantık böyle.

    cronjob böyle işlerde pek kullanılmaz çünkü kural gün değil (22:59 oy versin, 23:01 bidaha oy versin, küçük ama gene istenmeyecek birşey), kural bir ip'nin ancak 24 saatte bir oy yapması.
  • 03-06-2008, 14:17:24
    #9
    gokceyalcin adlı üyeden alıntı: mesajı görüntüle
    hit aldığında..
    $id = mysql_escape_string($_GET['proje_id']); //güvenlik, id = oylamada proje_id, oyla.php?proje_id=31221312 ..gibi.

    $res = mysql_query("SELECT time FROM tb_puan WHERE ip='{$_SERVER['REMOTE_ADDR']}' and proje_id=$id");
    if (!mysql_num_rows($res) {
    INSERT INTO tb_puan SET proje_id=$id,skor=1,ip='{$_SERVER['REMOTE_ADDR']}'
    }
    elseif (mysql_result($res,0,0) < (time()+86400))) {
    UPDATE tb_puan SET skor=skor+1, time=UNIX_TIMESTAMP() WHERE proje_id=$id and ip='$_SERVER['REMOTE_ADRR']';
    }
    else {
    //puan verilmedi, çünkü refresh uyarısı.. istenirse konur..
    }

    //bi projenin toplam hitini alan sql..

    SELECT SUM(skor) WHERE proje_id=$id;

    ..gibi

    parse error olabilir, ama mantık böyle.

    cronjob böyle işlerde pek kullanılmaz çünkü kural gün değil (22:59 oy versin, 23:01 bidaha oy versin, küçük ama gene istenmeyecek birşey), kural bir ip'nin ancak 24 saatte bir oy yapması.
    teşekkürler