Jump to content

PHP ile Sayaç Örneği


Recommended Posts

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 _eski_`sayac` VALUES (0,0,0);

<<<<-------- -------->>>>[/CODE]

[CODE]<<<<---- 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 _eski_`sayacip` VALUES (0,0,0);

<<<<-------- -------->>>>[/CODE]

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.

:) 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.

:) 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.

[CODE]# 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'';

}

}[/CODE]

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

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...