Sitemize gelen ziyaretçilerin sitemizi nereden bulduğunu varsa bize ziyaretçimizi gönderen siteyi hepimiz merak ederiz. Bu makalede, bu merakımızı giderecek basit bir sistem yapacağız. Sitemize gelen ziyaretçiyi hangi site bize yollamış, kaç kere yollamış ? Bu soruların cevabını bulacağız.
Not: Burada kullanacağımız bazı fonksiyon ve kodların ne işe yaradıklarını önceki makalelerde açıkladığımdan çok fazla üzerinde durulmayacaktır. Anlamadığınız yerleri sitemiz üzerinde araştırınız.
Php'de bazı öntanımlı değişkenler mevcuttur. Öntanımlı değişkenler bizim işlem yapmamızı gerektirmeden bazı verileri taşırlar. Biz php'nin iki öntanımlı değişkenini kullanacağız.
PHP:<?php
$_SERVER['HTTP_HOST'];
$_SERVER['HTTP_REFERER'];
?>
$_SERVER['HTTP_HOST'] öntanımlı değişkeni php kodunun çalıştığı site adresini, $_SERVER['HTTP_REFERER'] öntanımlı değişkeni de sitemize ziyaretçi gönderin adres değerini taşırlar. Öntanımlı değişkenler hakkında daha fazla bilgi ve tam listesi için http://tr2.php.net/reserved.variables resmi php sayfasını ziyaret edebilirsiniz. Kodlarımıza geçmeden önce ihtiyacımız olan veritabanını oluşturmalıyız. Veritabanınızı oluşturduktan sonra tablolarımız için aşağıdaki sql sorgusunu kullanabilirsiniz:
KOD:CREATE TABLE IF NOT EXISTS `ziyaret` (
`zygno` smallint(11) NOT NULL auto_increment,
`zygtarih` datetime NOT NULL,
`zygsite` varchar(100) NOT NULL,
`zygsayi` smallint(6) NOT NULL default '1',
PRIMARY KEY (`zygno`)
) ENGINE=MyISAM ;
Tablomuzun adı ziyaret, sütunların açıklamaları ise:
zygno = kayıt numaralarının tutulduğu sütun
zygtarih = ziyaretçinin geldiği tarih ve saat
zygsite = ziyaretçiyi gönderen site
zygsayi = sitenin bize kaç kere ziyaretçi gönderdiği
Artık kod yazmaya geçebiliriz.
PHP:<?php
@mysql_connect("localhost", "root", "12345678") or die("Veritabanına bağlanılamadı");
@mysql_select_db("deneme") or die("Veritabanı seçilemiyor");
$sitemiz = $_SERVER['HTTP_HOST']; //kendi sitemizin adresi
$gelinen_site = $_SERVER['HTTP_REFERER']; // sitemize ziyaretçi gönderen site
?>
İlk olarak mysql bağlantısını yapıyor ve ardından veritabanımızı seçiyoruz. ( Mysql bağlantısı hakkında bilgi sahibi değilseniz okuyun: http://www.dersler.org/php-php-ile-mysql'e-baglanmak-makale3.html ). Veritabanı seçme işleminin ardından $sitemiz değişkenine kendi sitemizi $gelinen_site değişkenine ziyaretçi gönderen siteyi atıyoruz. Kendi sitemizin adres bilgisini tutmamızın sebebi sitemiz içerisinde gezinirken oluşacak kayıtları elemektir. Eğer böyle bir işlem yapmazsak kendi sitemiz içerisinde bir linke tıklayıp diğer sayfaya geçtiğimizde linke tıkladığımız kendi sayfamız da veritabanına kaydedilecektir. Kodlarımıza devam edelim ve aşağıdaki kodları sayfamıza dahil edelim.
PHP:<?php
if (!eregi("$sitemiz",$gelinen_site) && $gelinen_site != "") {
$sitevarmi = mysql_result(mysql_query("select count(zygno) from ziyaret where zygsite='$gelinen_site'"),0);
if($sitevarmi == 0) {
$kaydet = mysql_query("insert into ziyaret(zygtarih,zygsite) values (now(),'$gelinen_site')");
} else {
$arttir = mysql_query("update ziyaret set zygsayi = (zygsayi + 1) where zygsite='$gelinen_site'");
} // if($sayivarmi) bitişi
} //if(!eregi) kontrolü bitişi
?>
Gelelim kodlarımızın açıklamalarına. İlk olarak eregi fonksiyonunu kullanarak ziyaretçi gönderen sitenin adresinde bizim sitemizin adresi varmı ve birisi sitemize başka bir site aracılığı ile mi gelmiş diye kontrol ediyoruz. eregi() bir düzenli ifade fonksiyonudur. Belirtilen karakter dizisinde yine belirtilen karakter dizisi'nin bulunup bulunmadığını kontrol eder. ( daha fazla bilgi için php kılavuzuna bakabilirsiniz http://tr2.php.net/manual/en/function.eregi.php ) Eğer ziyaretçi gönderen adres bizim sitemiz değilse ve ziyaretçi bir linke tıklayıp sitemize geldiyse insert ile mysql'e kayıt yapıyoruz, eğer kayıtlı ise yani bize daha önceden ziyaretçi gönderen bir site ise ziyaretçi gönderme sayısını update ile güncelliyoruz. Ziyaretçi gönderen sitenin veritabanımızda kayıtlı olup olmadığını öğrenmek için:
PHP:$sitevarmi = mysql_result(mysql_query("select count(zygno) from ziyaret where zygsite='$gelinen_site'"),0);
kodunu kullandık. mysql_result() kullanarak mysql_query() ile yaptığımız sorgu sonucunu eleyerek alıyoruz. ( daha fazlası için http://tr2.php.net/function.mysql-result ). Mysql sorgumuzda count() fonksiyonunu kullanarak toplam satır sayısını alıyoruz. Satır sayısı 0 ise kaydet değilse güncelleme yap mantığıyla işlemimizi gerçekleştiriyoruz. Sayfamızın tam kodu:
PHP:<?php
@mysql_connect("localhost", "root", "12345678") or die("Veritabanına bağlanılamadı");
@mysql_select_db("deneme") or die("Veritabanı seçilemiyor");
$sitemiz = $_SERVER['HTTP_HOST']; //kendi sitemizin adresi
$gelinen_site = $_SERVER['HTTP_REFERER']; // sitemize ziyaretçi gönderen site
if (!eregi("$sitemiz",$gelinen_site) && $gelinen_site != "") {
$sitevarmi = mysql_result(mysql_query("select count(zygno) from ziyaret where zygsite='$gelinen_site'"),0);
if($sitevarmi == 0) {
$kaydet = mysql_query("insert into ziyaret(zygtarih,zygsite) values (now(),'$gelinen_site')");
} else {
$arttir = mysql_query("update ziyaret set zygsayi = (zygsayi + 1) where zygsite='$gelinen_site'");
} // if($sayivarmi) bitişi
} //if(!eregi) kontrolü bitişi
?>
Yukarıdaki kodları php sayfası olarak kaydedip kullandığınız diğer sayfalara include ile dahil edebilirsiniz. Böylelikle tüm sayfalarınızın ziyaretçi gönderen site bilgisini alabilirsiniz.
Şimdi gelelim veritabanımızda bulunan ziyaretçi gönderen site kayıtlarını listelemeye. Aşağıdaki sayfayı goster.php adıyla kaydedebilirsiniz.
PHP:<table border="1">
<tr>
<td>Ziyaretçi gönderen site</td>
<td>Ziyaret tarihi</td>
<td>Ziyaret sayısı</td>
</tr>
<?php
@mysql_connect("localhost", "root", "12345678") or die("Veritabanına bağlanılamadı");
@mysql_select_db("deneme") or die("Veritabanı seçilemiyor");
$zygsql = mysql_query("select zygtarih, zygsite, zygsayi from ziyaret");
while($zygveri = mysql_fetch_assoc($zygsql)) {
?>
<tr>
<td><?=$zygveri['zygsite']?></td>
<td><?=$zygveri['zygtarih']?></td>
<td><?=$zygveri['zygsayi']?></td>
</tr>
<?php
}
?>
</table>
Daha önceki makalelerde bir çok kez anlattığımdan yukarıdaki kodları açıklama gereği duymuyorum. Diğer makaleleri okuyarak gerekli bilgileri edinebilir ve forumlarımızdan yardım alabilirsiniz. Herkese kolay gelsin.