Anasayfa > Programlama > PHP > PHP ile Sayaç Örneği
Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar

PHP ile Sayaç Örneği




Selamlar,

 

Aslında bir çok PHP sitesinde sayaç örneği mevcut. Ancak bunların bir çoğu hit sayacı, yani bir ziyaretçiyi sitenize her geldiğinde sayıyor. Bizim yapacağımız sayaç ise ziyaretçinin ip adresi değişmediği sürece yada son girişinden sonra bir gün geçmemişse sayacı değiştirmiyor. Ayrıca bulunduğumuz gün içindeki girişleri ayrı, toplam girişleri ayrı gösteriyor. Unutmadan söyleyeyim, sayacımız MySql veri tabanını kullanıyor.

 

 

İlk olarak veri tabanımızı hazırlamamız gerekiyor. Veri tabanı için gereken kodları veriyorum. Bunların nasıl kullanılacağını Ceviz.net 'de bulabilirsiniz.

 

 

<<<<---- SAYAÇ TABLOSU ---->>>>

 

CREATE TABLE `sayac` (

  `bugun` varchar(12) NOT NULL default '0',

  `toplam` varchar(15) NOT NULL default '0',

  `tarih` varchar(15) NOT NULL default '0'

) TYPE=MyISAM;

INSERT INTO `sayac` VALUES (0,0,0);

 

<<<<--------                   -------->>>>

 

 

<<<<---- SAYAÇ IP TABLOSU ---->>>>

 

CREATE TABLE `sayacip` (

  `ip` varchar(15) NOT NULL default '0',

  `tarih_in` varchar(15) NOT NULL default '0',

  `tarih_out` varchar(15) NOT NULL default '0'

) TYPE=MyISAM;

INSERT INTO `sayacip` VALUES (0,0,0);

 

<<<<--------                    -------->>>>

 

 

Veri tabanında tabloları hazırladıktan programın çalışma mantığından biraz bahsedeyim. Program şu şekilde çalışacak:

 

1) Ziyaretçi ilk kez gelmişse

  a) Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş tarihi arasında bir gün veya daha fazla fark varsa:

     -Sayaç tablosundaki 'bugun' değeri 1 olacak, 'toplam' değeri bir arttırılacak.

     -Sayaç ip tablosuna ziyaretçi ip adresi,o anki tarih ve bir gün sonrasının tarihi kaydedilecek.

  b) Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş tarihi arasında bir günden az süre varsa:

     -Sayaç tablosundaki 'bugun' ve 'toplam' değerleri birer arttırılacak.

     -Sayaç ip tablosuna ziyaretçi ip adresi,o anki tarih ve bir gün sonrasının tarihi kaydedilecek.

 

2) Ziyaretçi daha önceden gelmişse:

  a) Ziyaretçinin son gelişinden sonra bir gün geçmişse:

     i) Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş tarihi arasında bir gün veya daha fazla fark varsa:

            -Sayaç tablosundaki 'bugun' değeri 1 olacak, 'toplam' değeri bir arttırılacak.

            -Sayaç ip tablosuna ziyaretçi ip adresi,o anki tarih ve bir gün sonrasının tarihi kaydedilecek.

     ii) Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş tarihi arasında bir günden az süre varsa:

            -Sayaç tablosundaki 'bugun' ve 'toplam' değerleri birer arttırılacak.

            -Sayaç ip tablosuna ziyaretçi ip adresi,o anki tarih ve bir gün sonrasının tarihi kaydedilecek.

  b) Ziyaretçinin son gelişinden sonra bir gün geçmemişse:

     -'bugun' ve 'toplam' değerleri değiştirilmeden gösterilecek.

 

 

Ayrıca bir mysql sorgusuyla da sayaç kodu her kullanıldığında sayaç ip tablosundan, iki gün önceki verileri sildireceğiz. Böylece sayacımız kendiliğinden veri tabanındaki gereksiz bilgileri temizlemiş olacak. Peki neden iki gün önceki veriler silinecek? Eğer sayacınıza bir de yönetim sayfası hazırlayıp hangi ip adresleri hangi tarihte siteye uğramış gibi bir bilgi edinmek isterseniz en azından bir gün önceki girişler elinizde olmuş olur. Bu tip bir uygulama yapmayacaksanız '$sil' değerini 1 yapabilirsiniz. Bu sorguyu da her bölüme koyacağız.

Tabloları hazırlayıp programın nasıl çalıştığını da anladıysanız kodlamaya geçebiliriz.

 

# Ayarlar

$dbsunucu="localhost"; // veri tabanı sunucusu

$db="deneme"; // veri tabanı adı

$dbkullanici_adi="admin"; // veri tabanı kullanıcı adı

$dbsifre="123456"; // veri tabanı şifresi

$sayac_tablo="sayac"; // sayaç tablo adı

$sayacip_tablo="sayacip"; // sayaç ip tablo adı

# Ayarlar bitti

 

$baglan=mysql_connect($dbsunucu,$dbkullanici_adi,$dbsifre);

// veri tabanına bağlantı sağlıyoruz.

if (!$baglan) { die("MYSQL bağlantısı sağlanamadı!"); }

// eğer bağlanamazsak programı sonlandırıyoruz.

$veritabani_sec=mysql_select_db($db,$baglan);  // veri tabanını seçiyoruz.

if (!$veritabani_sec) { die("Veri tabanı seçilemiyor!"); }

// veri tabanı seçilemezse programı sonlandırıyoruz.

 

$gelen_ip=getenv("REMOTE_ADDR");  // ziyaretçinin ip adresini alıyoruz.

$date=time();  // tarihi saniye cinsinden alıyoruz.

$outdate=time()+(60*60*24);  // 1 gün ekleyelim.

$sil=time()-(60*60*24*2);  // 2 gün çıkartalım.

 

//-------------------------------------------------------

 

$sorgu=mysql_query("SELECT * FROM $sayacip_tablo WHERE ip='$gelen_ip'");

// ziyaretçimiz daha önce gelmiş mi?

$satir=mysql_num_rows($sorgu);

// eğer geldiyse $satir değişkeninin değeri 0 olmayacak.

$read=mysql_fetch_assoc($sorgu);

$tarih_out=$read['tarih_out'];

// eğer daha önce geldiyse,geldiği tarihe bir gün eklenmiş değeri alacağız.

 

//-------------------------------------------------------

 

$srg=mysql_query("SELECT * FROM $sayac_tablo");

$oku=mysql_fetch_assoc($srg);

$bugun=$oku['bugun'];  // sayacımızın bugünkü hitini alıyoruz.

$toplam=$oku['toplam'];  // sayacımızın toplam hitini alıyoruz.

$sayac_tarih=$oku['tarih'];  // en son hangi tarihte değiştirildiğini alıyoruz.

$tarih=$oku['tarih'];  // sayacın son aktif olduğu tarih değerini alıyoruz.

$tarih=$tarih+(60*60*24);  // bu tarihe 1 gün ekliyoruz.

 

//-------------------------------------------------------

 

if ($satir==0) { // ziyaretçi ilk kez geliyorsa

 if ($date<$tarih) {

 // Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş

 // tarihi arasında bir günden az süre varsa

 $bugun++;  // bugun değerini arttırıyoruz

 $toplam++;  // toplam değerini arttırıyoruz

 echo "Bugün: $bugun<br>Toplam: $toplam";

 // bugun ve toplam değerini gösteriyoruz

 mysql_query("DELETE FROM $sayacip_tablo WHERE tarih_out < '$sil'");

 // eski kayıtları sildiriyoruz

 mysql_query("UPDATE $sayac_tablo SET bugun='$bugun',toplam='$toplam',tarih='$sayac_tarih'");

 // bugun,toplam ve sayacın son kullanılma tarihini güncelliyoruz.

 mysql_query("INSERT INTO _eski_$sayacip_tablo VALUES ('$gelen_ip','$date','$outdate')");  // ziyaretçiyi ekliyoruz

 }

 elseif ($date>=$tarih) {

 // Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş tarihi arasında

 // bir gün veya daha fazla fark varsa

 $bugun="1";

 $toplam++;

 echo "Bugün: $bugun<br>Toplam: $stoplam";

 mysql_query("DELETE FROM $sayacip_tablo WHERE tarih_out < '$sil'");

 mysql_query("UPDATE $sayac_tablo SET bugun='$bugun',toplam='$toplam',tarih='$date'");

 mysql_query("INSERT INTO _eski_$sayacip_tablo VALUES ('$sgelen_ip','$date','$outdate')");

 }

}

elseif  ($satir!==0) {  // ziyaretçi daha önce geldiyse

 if ($date>$tarih_out){ // Ziyaretçinin son gelişinden sonra bir gün geçmişse

  if ($date<$tarih) {

  // Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş tarihi arasında

  // bir günden az süre varsa

  $bugun++;

  $toplam++;

  echo "Bugün: $bugun<br>Toplam: $toplam";

  mysql_query("DELETE FROM $sayacip_tablo WHERE tarih_out < '$sil'");

  mysql_query("UPDATE $sayac_tablo SET bugun='$bugun',toplam='$toplam',tarih='$sayac_tarih'");

  mysql_query("UPDATE $sayacip_tablo SET  tarih_in='$date',tarih_out='$outdate' WHERE ip='$gelen_ip'");  // ziyaretçimizin geliş tarihini güncelliyoruz.         

  }

  elseif ($date>=$tarih) {

  // Sayaç tablosundaki 'tarih' değeri ile ziyaretçinin geliş tarihi arasında

  // bir gün veya daha fazla fark varsa

  $bugun="1";

  $toplam++;

  echo "Bugün: $bugun<br>Toplam: $toplam";

  mysql_query("DELETE FROM $sayacip_tablo WHERE tarih_out<'$sil'");

  mysql_query("UPDATE $sayac_tablo SET bugun='$bugun',toplam='$toplam',tarih='$date'");

  mysql_query("UPDATE $sayacip_tablo SET tarih_in='$date',tarih_out='$outdate' WHERE ip='$gelen_ip'");

  }

 }

 elseif (($tarih_out>=$date)) {

 // Ziyaretçinin son gelişinden sonra bir gün geçmemişse

 mysql_query("DELETE FROM $sayacip_tablo WHERE tarih_out<'$sil'");

 echo "Bugün: $bugun<br>Toplam: $toplam";

 }

}

 

Ufak değişikliklerle sitenizdeki her sayfayının ziyaret sayısını tutabilen bir sayaç yapabilirsiniz.

 

Kolay gelsin.


Bu makale hakkında ek bilgi eklemek için buraya tıklayınız

Bu makalenin yazar yada kaynağını bildirmek için tıklayınız.

Digg this Post! Add Post to del.icio.us Bookmark Post in Technorati Furl this Post!
Eklenme tarihi: 7-9-2006  Okunma: 2380

Bu Makaleye Verilen Puan:    Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar
Bu Makaleye Puan Ver  

Bölüm Başlık Kullanıcı Yorumları


akif akif

Çalışmıyor:(  Tarih: 13-11-2006 11:31am

gün ve toplam ziyaretci sayızı her tıkladıgımda artıyor..
hatayı duzeltırsenız sevınırımmm...

Reklam Netinternet
Bazı hakları saklıdır: İçeriğin editör ve yazarlarımız tarafından oluşturulan kısımları ve site tasarımının hakkı saklıdır.  Bu sayfa en iyi 1280x1024 ve 1024x768 çözünürlükte izlenir.
Powered by BilgiPortal v2.2
Resim Emlak Canlı TV Firma Rehberi Firma Ekle Estetik çiçek Makale izafet ADSL Teknik Servis Yorumlar Müzik estetik evden eve nakliyat evden eve nakliyat