• 31-01-2008, 00:24:13
    #10
    Platin üye
    ErsaT adlı üyeden alıntı: mesajı görüntüle
    <?php
    echo 'Online Ziyaretçi: <strong>'.mysql_result(mysql_query("Select Count(ip) From ip_tablom"),0).'</strong>';
    ?>
    Bu kodu kullanman yeterli. Fakat sayac kontrolü için ip adresleri bir gün tabloda tutulduğu için bir günlük zamanaşımı olacak. Bir günlük onlineler görünecek.
    Cevap için teşekkürler. Ama bir günlük online rakamını vermek biraz kandırıkçılık olur sanırım
  • 31-01-2008, 09:03:55
    #11
    hayır saydayı benden başka kimse bilmeyecek ki zaten.
  • 05-03-2009, 16:10:44
    #12
    ErsaT adlı üyeden alıntı: mesajı görüntüle
    MYSQL Sorguları:


    Sayaç fonksiyonu:
    <?php
    //ErsaT
    //Mysql bağlantı
    $bagla = mysql_connect('localhost', 'user_kullanici', 'user_kullanici_password');
    mysql_select_db('veritabani_ismi');
    
    function sayac(){
        global $bagla;
        $ip = $_SERVER['REMOTE_ADDR'];
        $tarih = time();
        $zamanasimi = time()-86400;
        //1 günlük zamanaşımına uğrayan ip leri sil
        mysql_query("Delete From ip_tablom where zaman < ".$zamanasimi);
        
        $sonuc = mysql_query("Select Count(ip) From ip_tablom where ip='$ip'");
        $sayi = mysql_result($sonuc,0);
        
            if($sayi ==0){
                mysql_query("Insert Into ip_tablom (ip, zaman) Values ('$ip', '$tarih')");
                mysql_query("Update sayac_tablom Set tekil_hit=(tekil_hit+1), cogul_hit=(cogul_hit+1) where id=1");
            }else{
                mysql_query("Update sayac_tablom Set cogul_hit=(cogul_hit+1) where id=1");
            }
        
        $sonuc2 = mysql_query("Select tekil_hit, cogul_hit From sayac_tablom where id=1");
        $satir = mysql_fetch_array($sonuc2);
        echo 'Toplam Tekil Hit: <strong>'.$satir['tekil_hit'].'</strong><br>';
        echo 'Toplam Çoğul Hit: <strong>'.$satir['cogul_hit'].'</strong><br>';
    mysql_close($bagla);
    }
    ?>
    Kullanımı:
    <?php sayac(); ?>
    1 gün IP kontrol eder. 1 gün içinde olan bağlantıları IP adresinden kontrol eder, 1 IP 1 tekil. Kayıtlı IP lerin diğer gösterimleri çoğul hiti artırır. 1 gün sonra ipleri siler.


    yaa arkadaşım ben bu sayacı yaptım çalışıyor hepsi tamam sql vertabanı tablolar tamam.. ipleri alıyor ..
    fakat dediğin gibi sıfırlamıyor...

    Toplam ziyaretçi sayısını veriyor?

  • 05-03-2009, 17:39:18
    #13
    baglanılan sürelerden 24 saat geçmişse sıfırlıyor ipleri ..
  • 06-03-2009, 14:33:26
    #14
    ip leri sıfırlıyor evet ama sayac sıfırlanmıyor..
    yani ben sitiyorumkii
    bana ehr gün o günkü zayaretçileri versin..
    bugünkü ziyaretçi : 10 şeklinde
  • 06-03-2009, 17:07:21
    #15
    Üyeliği durduruldu
    Evet o şekilde lazım bize ersat yardımcı olursan seviniriz.
  • 06-03-2009, 19:17:26
    #16
    CREATE TABLE `sayac_tablom` (
      `id` int(1) NOT NULL auto_increment,
      `tekil_hit` int(15) NOT NULL,
      `cogul_hit` int(15) NOT NULL,
      `gun` int(5) NOT NULL,
      `ay` int(3) NOT NULL,
      `yil` int(3) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=30 ;
    
    
    INSERT INTO `sayac_tablom` VALUES (29, 1, 47, 6, 3, 2009);
    INSERT INTO `sayac_tablom` VALUES (28, 2, 355, 5, 3, 2009);
    INSERT INTO `sayac_tablom` VALUES (27, 2, 68, 4, 3, 2009);
    <?php
    
    
    function sayac(){
        global $db;
        $ip = $_SERVER['REMOTE_ADDR'];
        $tarih = time();
        $gun = date('d');
        $ay = date('m'); 
        $yil = date('Y');
        
        $zamanasimi = time()-86400; 
        $db->query("Delete From ip_tablom where zaman < ".$zamanasimi);
        
        $ip_sayi = $db->get_var("Select Count(ip) From ip_tablom where ip='$ip'");
        $hit = $db->get_var("select Count(tekil_hit) from sayac_tablom where gun='$gun' and ay= '$ay' and yil='$yil'");
        
            
            if($hit>0)
            {
                if($ip_sayi == 0)
                {
                    $ece->db("Insert Into ip_tablom (ip, zaman) Values ('$ip', '$tarih')");
                        
                    $ece->db("update sayac_tablom 
                        Set 
                        tekil_hit=(tekil_hit+1), cogul_hit=(cogul_hit+1)
                        where
                        gun='$db' and ay='$ay' and yil='$yil'
                        ");
                    
                
                }else
                {
                
                    $db->query("update sayac_tablom 
                        Set 
                        cogul_hit=(cogul_hit+1)
                        where
                        gun='$gun' and ay='$ay' and yil='$yil'
                        ");
                }
                
            
            }else
            {
                if($ip_sayi == 0)
                {
                    $db->query("Insert Into ip_tablom (ip, zaman) Values ('$ip', '$tarih')");
                            
                }
                
                $db->query("insert into sayac_tablom
                            (tekil_hit,cogul_hit,gun,ay,yil)
                            values
                            ('1','1','$gun','$ay','$yil')
                            ");
                
            }
    
        
    
    }
    ?>
    şöyle bir yapıda değiştirdim ayak üstü hata yoktur muhtemelen... belki uzun yoldur kısasını yapan çıkar
    gun ay yil bazında server saatine göre kaydeder ...
    kullanımı : sayac();

    dipnot:
    benim kullandığım bir veritabanı class ı olduğu için kodları bu şekilde yazmıştım ( $db->query(); gibi) .. onu normal mysql_query diye çevirmeniz lazım...
  • 06-03-2009, 23:09:56
    #17
    Günlük tekil ve çoğul bilgilerini verdirmek istiyorsan hergün gece 24 te hitleri tutan tabloyu sıfırlaman lazım. Aşağıdaki dosyayı php dosyası olarak kaydedip her gece 24:00 da çalıştırıp tabloyu sıfırlayabilirsin. (Kullandığın host, panel destekliyorsa cron ile halledebilirsin.)

    tabloyu_sifirla.php
    <?php
    //ErsaT
    //Mysql bağlantı
    $bagla = mysql_connect('localhost', 'user_kullanici', 'user_kullanici_password');
    mysql_select_db('veritabani_ismi');
    mysql_query("Update sayac_tablom  Set cogul_hit=0, tekil_hit=0");
    mysql_close($bagla);
    ?>
  • 07-03-2009, 03:10:13
    #18
    2 aydır php kursuna gidiyorum. Benim için de pratik şansı oldu biraz üzerinde uğraştım.
    Kodu biraz da ben geliştirmeye çalıştım.
    Henüz denemedim ama acemi olduğum için ve acelem olduğu için hata yapmış olabilirim. Deneyenler hata varsa söylesinler lütfen.
    Ersat hocanın kodlarını geliştirerek son 15 dakikadır online olanları gösterebilir hale getirdim hem de 24 saat sonunda ip adresleri silinirken ip adreslerinin tekil ve çoğul hitleri de siliniyor.
    Böylece başka bir koda çalıştırmaya gerek olmadan güncel tekil ve çoğul hitler görüntülenebilir.
    Database i değiştirdim tek tablo yaptım
    online kullanıcıları göstermek için online zaman kolonu ekledim.
    CREATE TABLE `sayac_tablom` (
    `id` int(15) NOT NULL auto_increment,
    `ip` int(15) NOT NULL,
    `tekil_hit` int(15) NOT NULL,
    `cogul_hit` int(15) NOT NULL,
    `zaman` int(11) NOT NULL,
    `onlinezaman` int(11) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `ip` (`ip`)
    );
    <?php
    //ErsaT
    //Mysql bağlantı
    $bagla = mysql_connect('localhost', 'user_kullanici', 'user_kullanici_password');
    mysql_select_db('veritabani_ismi');
    function sayac(){
        global $bagla;
        $ip = $_SERVER['REMOTE_ADDR'];
        $tarih = time(); 
        $zamanasimi = time()-86400; 
        $online_suresi = time()-60*15;//son 15 dakikadir giriş yapan
        //1 günlük zamanaşımına uğrayan ip leri sil 
        // ARTIK TEK TABLO OLDUĞU İÇİN İPLER İLE O SATIRDAKİ ÇOĞUL VE TEKİL HİT DEĞERLERİ DE DÜŞÜYOR
        mysql_query("DELETE FROM sayac_tablom where zaman < ".$zamanasimi);
    //sayfa talep eden ip adresin sayac da kaydı var mı diye bakiyoruz.
        $sonuc = mysql_query("Select * FROM sayac_tablom where ip='$ip'");
        $sayi = mysql_num_rows($sonuc);
            if($sayi < 1){
    		//eğer ip adresi kayitli degilse database e ekleniyor ve tekil ve çoğul hit 1 artıyor.
                mysql_query("Insert Into sayac_tablom (ip, tekil_hit, cogul_hit, zaman, online_zaman) Values ('$ip', 1, 1, '$tarih', '$tarih')");
            }else{
    		//eğer ip adresi daha önce varsa çoğul hit 1 artıyor ve online_zaman alanına son işlem yapılan an zamanı yazılıyor
                mysql_query("UPDATE sayac_tablom SET cogul_hit=(cogul_hit+1), online_zaman = '$tarih' WHERE ip = '$ip' ");
            }
        //$sonuccogul değişkenine cogul_hit sütunundaki tüm satırlardaki rakam değerlerinin toplamını istiyoruz
        $sonuccogul = mysql_query("SELECT TYPE, SUM(cogul_hit) FROM sayac_tablom");
        // $cogulhit değişkenine gelen arraydeki toplam coğul hit sayısını atıyoruz
        $cogulhit = intval($sonuccogul['SUM(cogul_hit)']);
        //çoğul sonucu bulmak için toplanan tüm satırlar aktif ip adresi sayımızı yani tekil hitimizi veriyor
        $tekilhit = mysql_num_rows($sonuccogul);
        //online_zaman bilgisi 15 dakikadan yeni olan kullanicilari listeletiyoruz.
        $onlinesorgu = mysql_query("SELECT * FROM sayac_tablom WHERE online_zaman > '$online_suresi'");
        //online kullanıcı sayısını $onlinesayisi değişkenine atıyoruz
        $onlinesayisi = mysql_num_rows($onlinesorgu);
    // HEPSİNİ YAZDIRIYORUZ.
        echo 'Toplam Tekil Hit: <strong>'.$tekilhit.'</strong><br>';
        echo 'Toplam Çoğul Hit: <strong>'.$cogulhit.'</strong><br>';
        echo 'Şu anda sitede '.$onlinesayisi.' üye online durumdadır.';
    mysql_close($bagla);
    }
    ?>
    fonksiyon değişmedi
    sayac();
    saygılar