
MySQL'e giriş yapalım bakalım neymiş...PC Donanım & Yazılım Dökümanları içinde MySQL'e giriş yapalım bakalım neymiş... konusu , MySQL’e Giriş
PHP, MySQL dışında birçok veritabanı yazılımı (PostgreSQL, MsSQL, Oracle, dBase...) ile birlikte sorunsuz çalışabilmesine rağmen en yüksek performans PHP+...
MySQL'e giriş yapalım bakalım neymiş...
27-05-06, 12:44
|
#1 (permalink)
|
|
Üye
|
MySQL'e giriş yapalım bakalım neymiş...
MySQL’e Giriş
PHP, MySQL dışında birçok veritabanı yazılımı (PostgreSQL, MsSQL, Oracle, dBase...) ile birlikte sorunsuz çalışabilmesine rağmen en yüksek performans PHP+MySQL+Apache üçlüsünden elde edilmiştir (Bu belgeyi hazırladığım sırada Slackware Linux’un son sürümü olan 8.0 sürümünde PHP ile MySQL desteği gelmektedir, 7.1 sürümünde MySQL yerine PostgreSQL bulunmaktaydı!). Zaten Internet üzerinde bulabileceğiniz hazır PHP betikleri ya da yardım belgelerinin çoğu PHP’yi MySQL ile birlikte ele almaktadır. Benim bilgimde sadece MySQL dahilinde olduğu için, ben de bu belgede PHP+MySQL ikilisini anlatacağım.
Veritabanı Nedir?
Bir veritabanı adından da anlaşılacağı gibi bilgilerin depolandığı hiyerarşik bir yapıdır. Biz web üzerinde kullanıcı adı, şifresi, e-posta adresi gibi bilgileri bu veritabanlarında saklarız. Aynı bilgileri bir dosyaya yazıp gerektiğinde dosyayı açıp bilgileri okutmak da bir çözüm gibi görünse de bu işlem hem daha karmaşık ve zahmetli hem de daha yavaştır. Aslında az çok İngilizce bilen birisi için MySQL kullanmak pek zor olmayacaktır. Ben denemelerimi Linux altında yaptığım için bu belgede de anlatım o doğrultuda olacaktır. Fakat veritabanına bağlandıktan sonra SQL komutları (evet MySQL değil SQL. MySQL ile kullanılan komutlar birçok veritabanı sorgulama dilindekilerle aynıdır) arasında bir fark yoktur. Sadece Linux işletim sistemi altında büyük-küçük harf ayrımı vardır. Denemelerinizi yaptığınız sunucu üzerinde kullanıcı adınızın kullanici ve parolanızın parola olduğunu varsayarak bölüme başlıyorum. Veritanına bir Linux terminalinden bağlanmak için
Alıntı:
|
$ mysql –h localhost –u kullanici –p
|
komut satırını kullanmanız gerekli. En sondaki -p parametresi bizim kullanıcımız için bir parola tanımlı olduğunu ve yukarıdaki komutu verdikten sonra bu parolayı girmemiz gerektiğini anlatır.
Eğer bir sorun ile karşılaşmadan veritabanına bağlanabildiyseniz karşınıza aşağıdaki gibi bir ekran gelecektir.
Bu ekran bizim SQL’e doğru bir şekilde bağlandığımızı gösterir. Bir veritabanı hiyerarşisi içinde barındırdığı veritabanlarından ve bu veritabalarının içlerindeki tablolardan oluşur. Linux altındaki MySQL kurulumlarında “test” ve “mysql” isimli veritabanları hazır olarak gelir. Bir veritabanı hiyerarşisinde her kullanıcının kendine ait bir veritabanı vardır ve işlemlerini bu veritabanı altında gerçekleştirir. Yani kendi veritabanı altında tablo oluşturabilir, silebilir, tabloya bilgi ekleyip bilgi çıkarabilir. Bunun dışında her kurulum ile gelen “test” veritabanı tüm kullanıcıların kullanımına açıktır, “mysql” veritabanında ise kullanıcılara ait bilgiler tutulur ve bu veritabanını sadece veritabanı yöneticisi kullanabilir. Benim işlemlerimi yapacağım hayali veritabınımın ismi “base” olacak.
Alıntı:
$ mysql -h localhost -u kullanici -p
Enter Password:
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)
mysql>
|
Yukarıda sistemimizde mevcut veritabanlarını listesini show databases; komutu ile alıyoruz. MySQL’de her komuttan sonra mutlaka ; karakteri kullanılmalıdır. Aşağıda yeni bir veritabanı oluşturuyor ve onu kullanmaya başlıyorum.
Alıntı:
mysql> create database base;
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
| base |
+----------+
3 rows in set (0.00 sec)
mysql> use base;
Database changed
mysql>
|
Yukarıda base adlı bir veritabanı oluşturdum (create database base ve use base; komutu ile işlem yapacağım veritabanını belirledim. Burada dikkat edilmesi gereken husus bizim istediğimiz zaman bir veritabanı oluşturamayacağımızdır. Veritabanı hiyeraşisine kaydımız yapılırken bize kullanım hakkı verilen veritabanını oluşturabilir ve kullanabiliriz. Yani ben kullanici kullanıcısıyla herhangi adlı bir veritabanı oluşturamam.
MySQL’de Tablolar
Bilgilerimizi saklamak için veritabanlarını kullandığımızı daha önce belirtmiştim. Sakladığımız bilgileri daha kolay bir şekilde işleyebilmek için sınıflandırmamız gerekir. Bu sınıflandırma işlemi için tabloları kullanırız. Tablolar sütunlar ve satırlardan oluşur. Aşağıda veritabanında kayıtlı “kullanicilar” isimli bir tablo görünüyor (Tabloların nasıl oluşturulacağını ilerideki bölümlerde aklayacağım).
Alıntı:
mysql> select * from kullanicilar;
+----+--------------+---------+------------------------+-------+
| no | Ad | Soyad | eposta | bolum |
+----+--------------+---------+------------------------+-------+
| 1 | Fehmi Noyan | ISI | 12345@12.com | eee |
| 2 | Mehmet | Korkmaz | dfasf@fsfs.org.tr | pe |
| 3 | Adem | Sarnici | safsfai@safsaf.com | pe |
| 4 | Seckin Fatih | Solgun | sfsaf@safsaf | me |
+----+--------------+---------+------------------------+-------+
4 rows in set (0.05 sec)
mysql>
|
Yukarıdaki tabloda dört sütun ve dört satır var. Tablodaki verileri ekrana basmak için select * from kullanicilar; komutunu kullandım. Aynı komutu select Ad from kullanicilar; şeklinde verince
Alıntı:
mysql> select Ad from kullanicilar;
+--------------+
| Ad |
+--------------+
| Fehmi Noyan |
| Mehmet |
| Adem |
| Seckin Fatih |
+--------------+
4 rows in set (0.03 sec)
mysql>
|
Yukarıdaki gibi bir tablo elde ederiz. MySQL ile MS-DOS ve UNIX işletim sistemlerinde olduğu gibi joker karakterler kullanılabilir. İlk komut satırında kullandığım “*” karakteri de bu joker karakterlere bir örnek. İlk tablodaki no, Ad, Soyad ve eposta adlı bölümler tablonun sütunlarının isimlerini gösterir. Komut satırında kullandığım “*” karakteri bu sütunların hepsinin görüntülenmesini istediğimi belirtir. Aslında daha önceden komut satırından işlem yönetenler için fazla yabancı bir ifade olmasa da ilk kez karşılaşacaklar için biraz karışıktır fakat zamanla kavranacaktır. Kısacası veritabanından bilgi almak için
Alıntı:
|
select istenen_bilgi from tablo_adı;
|
gibi bir kalıp kullanılır. Veritabanından alınan sorgu belli koşulları gerektirebilir. Mesela yukarıdaki kullanicilar adlı tabloda ismi Mehmet olan kullanıcıları ekrana görüntülemek istersem
Alıntı:
|
mysql> select Ad from kullanicilar where Ad=’Mehmet’;
|
gibi bir komut kullanmam gerekirdi.
Örnekleri çoğaltmak mümkün. Yapılan sorgu isteğe ve gereksinime göre değişik koşullar dahilinde gerçekleştirilebilir. where kalıbı ile olmasını istediğimiz bir özelliği belirtiyoruz. Peki elimizdeki verilerde olmasını istemediğimiz bir bilgiyi nasıl belirteceğiz? Bu iş için not kalıbı kullanılır.
Alıntı:
|
mysql> select eposta from kullanicilar where not bolum=’pe’;
|
Yukarıdaki sorgu kalıbı kullanicilar adlı tablodan bolum bilgisi pe olmayan tüm kullanıcıların e-posta adreslerini ekrana basacaktır. not kalıbı ile or kalıbı da kullanılır. or kalıbı çift istekli durumlarda not işleçinin tam tersi işlev görür. Yani kullanicilar adlı tablodan Ad bilgisi Mehmet olan ve bölümü eee olmayan kullanıcıların listesi için kullanılması gereken SQL komutu aşağıdaki gibidir.
Alıntı:
|
mysql> select Ad from kullanicilar where not bolum=’pe’ or Ad=’Mehmet’;
|
Buraya kadar hep tablolar üzerinde işlemlerden bahsettim. Sıra üzerinde işlem yaptığımız bu tabloları nasıl oluşturduğumuza geldi.
SQL’de tablo oluşturma işi aynen veritabanı oluşturma gibidir. Sadece tablo oluştururken tabloda tanımlı alanların özelliklerinin belirtilmesi gerekir. Yukarıda tüm örneklerimde kullandığım kullanicilar adlı tabloyu oluşturmak için kullanılacak SQL satırı aşağıdaki gibidir.
Alıntı:
mysql> create table kullanicilar
->(no int auto_increment, Ad varchar(13), Soyad varchar(12),
-> eposta varchar(25), bolum varchar(5), primary key(no));
mysql>
|
Tabloda kullanılan sütunların veri tiplerini ve en fazla kaç baytlık veri saklayabileceklerini belirttim. int terimi kullanılacak verinin sayısal bir değer olacağını simgeler, diğer sütunlar için kullandığım varchar terimi ise girilecek dizinin karakter kümesi olduğunu ve parantez içindeki sayısal değer ise bu kümenin maksimum alabileceği karakter sayısını belirler. Eğer girilen veri belirtilen maksimum değerden fazla ise belirtilen değer kadar karakter işleme alınır. Bunun için tablo oluştururken girilecek verilerin uzunluğunu göz önünde bulundurmanızda fayda vardır. Bunların dışında -> karakteri de dikkatinizi çekmiştir. SQL’de bir komutu ; ile sonlandırmadığınız sürece o komut ENTER tuşun bassanız bile bitmiş sayılmaz ve sizden bitirici karakteri (“;” ya da \g) girmeniz beklenir. Komutu üç satır halinde yazmamın sebebi sadece uzun ve karmaşık bir satır yazmaktan kaçınmak içindi. Aynı komutu tek satır yazmanız halinde de sonuçta herhangi bir değişiklik olmayacaktır. no sütunu için kullandığım auto_increment ve en sonda kullandığım primary key(no) kalıpları tabloda no ile belirtilen kısmın otomatik olarak her veri girdiğinde bir arttırılmasını sağlar. Bu özelliğin kullanılabilmesi için kullanılacak sütuna primary key özelliğinin atanması gerekir.
Diyelim ki tablomuzu oluşturduk ve web üzerinden bilgilerimizi kaydediyoruz. Bir gün, tablomuzu oluştururken kullandığımız sütun özelliklerini görmek istersek ne yapacağız? Bunun için describe komutu kullanılır. Komutun kullanımı
şeklindedir.
Şimdi sıra boş olarak oluşturduğumuz kullanicilar adlı tabloya bilgi girişinde. Bilgi girişi için insert komutu kullanılır.
Alıntı:
mysql> insert into kullanicilar
-> values (“”,”Finduks”,”ISI”,
-> “sda@genckoli.net”,”eee”);
|
Yukarıdaki komut kümesi kullanicilar adlı tabloya belirtilen bilgileri sırası ile girer. Bilgi girişi için
Alıntı:
|
insert into tablo_adi values ("alan1_değeri", "alan2_değeri", ..., "alanN_değeri");
|
kalıbı kullanılır. İlk sütuna gelecek bolume sadece “” karakterlerini bırakmam bu bölümün auto_increment özelliğinden dolayı SQL tarafından otomatik olarak doldurulacak olmasındandır. Girilen her değer tırnak içinde yazılır ve birbirlerinden virgül ile ayrılır.
Bazen bir tablodaki verileri herhangi bir sebepten dolayı yenilememiz gerekebilir. Mesela yukarıdaki tabloda Fehmi Noyan adlı kullanıcının e-posta adresi değişmişse ve biz yeni adresi tablomuzda eski adresle değiştirmek istiyorsak kullanacağımız komut update komutudur.
Alıntı:
mysql> update kullanicilar set eposta=’yeni_adresim@adres.com’
-> where no=’1’;
|
Yukarıdaki SQL satırı kullanicilar adlı tablodan no bilgisi 1 olan kullanıcının eposta bilgisini yeni_adresim@adres.com olarak değiştirilmesi için kullanılır. Komutun kullanımında
Alıntı:
|
update tablo_adı set sütun_adı=’yeni değer’ where koşul;
|
kalıbı uygulanır. where koşulundan sonra herhangi bir koşul satırı kullanılabilir (ben no bilgisini kullandım).
Girilen bilgileri silmek için delete komutu kullanılır.
Alıntı:
|
mysql> delete from kullanicilar where bolum=’eee’;
|
Yukarıdaki SQL komutu kullanicilar tablosundaki bolum bilgisi eee olan tüm kullanıcılar ile ilgili satırları silecektir. Komutun kullanımı
Alıntı:
|
delete from tablo_adı where koşul;
|
şeklindedir.
Son olarak da, MySQL’den çıkış için quit komutu kullanılır.
|
|
|
|
|
27-05-06, 12:50
|
#2 (permalink)
|
|
Üye
|
PHP ile MySQL kullanmak
Buraya kadar PHP ve MySQL’e giriş yaptım. Buradan sonra artık web üzerinde akrobasi yapmaya başlayabiliriz .
Aslında veritabanlarının çok çeşitli kullanımları olsa da ben genelde çerez yollama, sayaç, ziyaretçi defteri, parolalı giriş ve kullanıcı kaydı gibi konular üzerinde duracağım. Buradan sonra artık yeni işlev kullansam bile çok nadir olarak kullandığım yeni işlevin kullanım şeklini açıklayacağım (Bu belgeyi buraya kadar okumuş ve kendi çabaları ile bir şeyler yapmış birisi için buna ihtiyaç olacağını da sanmıyorum zaten ). Bu bölüm genelde yazacağım örnekler ve bu örneklerin açıklamaları halinde olacaktır.
İlk önce MySQL bölümünde kullandığım “kullanicilar” adlı tablodan PHP ile veri alma, veri silme ve veri yükleme işlemlerini gerçekleştirelim. Aşağıda “kullanicilar” tablosunu bir hatırlatma olsun diye tekrar verdim.
Alıntı:
+----+--------------+---------+------------------------+-------+
| no | Ad | Soyad | eposta | bolum |
+----+--------------+---------+------------------------+-------+
| 1 | Fehmi Noyan | ISI | asfas@safsas.com.tr | eee |
| 2 | Mehmet | Korkmaz | asds@asfsaf.com.tr | pe |
| 3 | Adem | Sarnici | safsi@safafsa.com | pe |
| 4 | Seckin Fatih | Solgun | sfsa@safsa.org | me |
+----+--------------+---------+------------------------+-------+
|
Önce PHP ile veritabanına bağlanma ve veri alma işlemlerini ele alalım. PHP ile MySQL’e bağlanmak için mysql_connect() işlevi kullanılır.
Alıntı:
<?
#################
# mysql.php #
#################
/* mysql’e bağlanma islemi */
@mysql_connect(“localhost”, ”kullanici”, ”parola”)
or die (“Veritabanına bağlanırken bir hata oluştu!”);
/* mysql’de kendi veritabanimizi secim islemi */
@mysql_select_db(“base”)
or die(“Veritanında bir hata oluştu!”);
$sira = 0;
while ($sira < 4)
{
/* mysql’e sorgu gönderiliyor ve bu sorgudan gelen degerler bir degiskene atanıyor.
$sorgu = mysql_query(“select * from kullanicilar”);
$ad = mysql_result($sorgu, $sira, ’Ad’);
echo “$ad <br>”;
$sira++;
}
?>
|
Yukarıdaki PHP dosyası bizim kendi sunucumuz üzerindeki MySQL sunucusuna kullanici kullanıcı adı ve parola parolası ile bağlanıyor. Komutların başındaki @ işareti komutun işletilmesinde bir hata oluşursa ekrana hata mesajının basılmaması içindir. Onun yerine kendi belirlediğimiz hata mesajını or die kalıbı ile verebiliyoruz. Bağlanma işleminden sonra mysql_select_db (mysql’deki use base gibi) işlevi ile kendi veritabanımıza geçiyoruz.
Buradan sonra sira bir adlı bir değişkene 0(sıfır) değerini atadım. Bunun amacı MySQL’de işlem yapılan satırların sıfırdan itibaren bir satır sayısı almalarıdır. (Ben örneğimde while döngüsünde koşulu $sira < 4 şeklinde tanımladım ama normalde bir tabloda kaç satır olduğunu bilmeniz mümkün olmayabilir. Ben satır sayısını bildiğim için böyle bir yol seçtim.)
Döngü içerisinde $sorgu adlı değişkene mysql_query() işlevi ile SQL’den alınan bilgiler atanıyor. Daha sonra mysql_result() işlevi ile bu bilgilerden istek doğrultusundan ayıklama yapılıyor. mysql_result() işlevinin işleyiş tarzını bir düzleme benzetirsek:
1.
$sorgu adındaki bilgilerin olduğu düzleme git.
2.
$sira ile belirtilen satırdan
3.
Ad sütunundaki bilgiyi al.
şeklinde bir yorum yapılabilir. mysql_query() sorgusu ile alnan sonuçlar mysql_result() ile ayıklanır. $ad değişkenine atanan değerler alt alta ekrana basılıyor. Daha sonra $sira değişkeni bir arttırılıyor (aksi taktirde sonsuz bir döngü içine girilir!) ve döngüden çıkılıyor.
Şimdi de kafamızda hayali bir senaryo oluşturup bu senaryoya göre bir HTML dosyası ve bu dosyadan veri alan bir PHP dosyası yapalım. Kullanıcı kaydı tutan bir web formu ve bu formdan bilgi alacak PHP dosyasını oluşturalım. Ama daha önce bu bilgilerin kaydedileceği SQL tablosunu oluşturalım.
Alıntı:
$ mysql –h localhost –u kullanici –p
Enter Password:
mysql> use base;
Database changed
mysql> create table kayit
-> (no int auto_increment, kullaniciadi varchar(15),
-> sifre(25), eposta(25), primary key(no));
mysql> quit
|
Yukarıda komut satırından mysql’e bağlanıp kayit isimli bir tablo oluşturdum. Şimdi sıra HTML form dosyamızda.
Alıntı:
<!-- kayit.html -->
<html>
<body bgcolor="#FFFFFF" text="#000000">
<form action="kayit.php" method="post">
<b>Kullanıcı Adınız:</b><input type="text" name="u_name" size="20"><br>
<b>Parolanız:</b><input type="password" name="pass" size="20"><br>
<b>e-posta adresiniz:</b><input type="text" name="mail" size="20"><br>
<input type="submit" value=" Kayıt ">
</form>
</body>
</html>
<?
/* kayit.php */
@mysql_connect("localhost", "kullanici", "parola")
or die("Veritabani ile baglanti kurulamadi!");
@mysql_select_db("base")
or die("Veritabaninda bir hata olustu!");
@mysql_query("insert into kayit values(‘’,’$u_name’,’$pass’,’$mail’)");
echo "<center><b>Bilgileriniz varitabanina kaydedildi.</b></center>";
require("./kayit.html");
?>
|
Yukarıdaki PHP dosyası form ile gelen bilgileri veritabanındaki kayit adlı tabloya kaydediyor.
Kayıt işleminden sonra ekrana işlemin başarı ile gerçekleştirildiğine dair bir mesaj geliyor ve formu içeren HTML dosyası tekrar ekrana basılıyor.
MySQL’de tablo yenileme (update) ve veri silme (delete) komutları da mysql_query() işlevi ile kullanılır. Yani normal olarak SQL sorgusu gönderiliyor.
Burada sonra artık örnek uygulamalara geçiyorum.
Yeni bölüme başlamadan önce size phpinfo() işlevinden biraz söz etmek istiyorum. Yapmanız gereken tek şey bir PHP dosyası için <? phpinfo(); ?> yazıp kaydetmek. Üzerinde çalıştığınız sunucunun birçok özelliğini ve PHP ile birlikte kullanabileceğiniz birçok faydalı değişkeni bu işlev altında bulabilirsiniz.
Ziyaretçi Defteri Örneği
Çoğu web sitesinde gördüğümüz ziyaretçi defterlerini PHP yardımı ile kendi sitenizde de kullanabilirsiniz. Gerçi internet üzerinde bu işi yapan hazır betikler bulmak pek zor değil fakat bu basit uygulamaları daha ileri teknikler için bir ön adım olarak kullanmanız açısından faydalı olacaktır.
Bu iş için önce bir HTML dosyası ile kullanıcıdan bilgi alınmalı. Daha sonra bu bilgi bir PHP dosyası ile bir metin dosyasına yazılarak isteyen kullanıcılara görüntülenmeli.
Alıntı:
<!-- Bu dosya defter.html adı ile kaydedilecek -->
<html>
<head>
<title>Ziyaretçi Defteri</title>
</head>
<body bgcolor="#ffffff" text="#000000">
<center>
<br>
<table bgcolor="#000000" border="0" cellpadding="1" cellspacing="0" width="450">
<tr><td>
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" width="450">
<tr><td bgcolor="#006486">
<b><center>Defteri Doldurun</b>
</td></tr>
<td>
<form action="defter.php" method="pos"t><br>
<b>Kimden :</b><input type="text" name="kimden" size=30><br><br>
<center><textarea rows="15" cols="50" name="metin"></textarea>
</td></tr>
<tr><td>
<center><br>
<input type="submit" value=" Deftere ekle ">
<input type="reset" value=" Yazdıklarımı sil "><br><br>
</td></tr>
</table>
</td></tr>
</table>
</body>
</html>
<?
/* Bu dosya defter.php adi ile kaydedilecek */
if ($dosya_ac = (fopen(“./defter.txt”,”a”)))
{
$tarih = date("d.m.Y");
$yeni_metin = "<br><table border='0' cellpadding='0' cellspacing='0' bgcolor='#eaeaea' width='600'>
<tr><td><b>$kimden</b> tarafından <b>$tarih</b> tarihinde yazılmış.<br><br></td></tr>\n
<tr><td>$metin</td></tr></table><br>”;
fwrite($dosya_ac, $yeni_metin);
fclose($dosya_ac);
echo “Sayın $kimden defterimizi doldurduğunuz için teşekkürler.<br>”;
require(“./defter.txt”);
}
else
{
echo “<center><br><b>Dosya açmada bir hata oluştu!</b></center>”;
}
?>
|
Yukarıdaki iki dosyayı yazdıktan sonra belirtilen isimler ile kaydedin. Tabii bu dosyalar basitten hazırlanmış haldeler. Görünümü güzelleştirmek ve geliştirmek size kalmış.
Sanırım ilk HTML dosyasında ne yaptığımı anlatmaya gerek yok. Bir form ile kimden ve metin adlı iki tane değişkeni belirtilen PHP dosyasına post yöntemi ile yolluyorum. Belki PHP dosyasında biraz karışıklık yaşamışsınızdır. Burada yabancı olduğunuz sadece date() işlevi var. PHP’de tarih almak için kullanılan date() işlevi, istenen bilgi türü küçük harf olursa (benim dosyamdaki d ve m gibi ) bilgi rakamla, büyük harf olursa (benim dosyamdaki Y gibi) bilgi tam olarak yazılır (tabi ki İngilizce).
Ziyaretçiden gelen bilgiler defter.txt adlı bir dosyada tutuluyor (dosyaya herkes için yazma yetkisi verilmelidir!) ve benim PHP koşulumun sonunda bu dosya ekrana yazdırılıyor (require ile). $metin değişkenini bir tablo içinde yazmamın tek sebebi ziyaretçiye görünecek dosyanın daha hoş olması içindir. require() işlevi ile ekrana yazdrdığımız dosya bir txt dosyası olsa bile içindeki HTML kodları istemci tarafından yorumlanacaktır. Eğer sayfanızdan ayrı bir bağ verip önceden yazılanların görüntülenmesini istiyorsanız, o zaman bir metin değil de HTML dosyası kullanmanız gerekecektir.
Sayaç Örneği
Sayaç yapmanın birçok yolu vardır. Ben en basitinden bir uyguluma olarak, dosyalara değer yazıp bu değerler üzerinde işlem yapan bir sayaç uygulaması örneği verdim.
Alıntı:
<?
/* Bu dosya sayac.php adi ile kaydedilecek */
# $REMOTE_ADDR degiskeni sunucu hafizasinda tutulan gecici degiskenlerdendir.
$r_ip = $REMOTE_ADDR;
$ip_dosya_ac = fopen(“./ip.txt”, ”r”);
$dosyadaki_ip = fgets($ip_dosya_ac,1024);
if ($r_ip != $dosyadaki_ip)
{
$sayac_dosyasi_ac = fopen(“./sayac.txt”, ”r”);
$eski_deger = fgets($sayac_dosyasi_ac,1024);
fclose($sayac_dosyasi_ac);
$sayac_dosyasi_yaz = fopen(“./sayac.txt”,”w”);
$yeni_deger = ++$eski_deger;
fwrite($sayac_dosyasi_yaz, $yeni_deger);
fclose($sayac_dosyasi_yaz);
$ip_dosyasi_ac = fopen(“./ip.txt”,”w”);
fwrite($ip_dosyasi_ac, $r_ip);
fclose($ip_dosyasi_ac);
echo “Sitemiz bugüne kadar <b>$yeni_deger</b> kere ziyaret edilmiştir.”;
} else {
$sayac_dosyasi_ac = fopen(“./sayac.txt”, ”r”);
$eski_deger = fgets($sayac_dosyasi_ac,1024);
fclose($sayac_dosyasi_ac);
echo “Sitemiz bugüne kadar <b>$eski_deger</b> kere ziyaret edilmiştir.”;
}
?>
|
Yukarıdaki dosyayı oluşturduktan sonra aynı dizine sayac.txt ve ip.txt diye iki dosya oluşturun. Yalnız sayac.txt dosyasının içine başlangıç değeri olarak 0(sıfır) yazmalısınız.
Yukarıdaki PHP programı önce ip.txt dosyasını açıp içindeki IP numarası ile ziyaretçinin IP numarasını karşılaştırıyor. Eğer iki numara aynı değilse sayaç dosyası açılıyor ve dosyada eski ziyaretçi sayısı ($eski_deger) okunuyor. Daha sonra bu okunan eski değer bir arttırılıp yani bir değişkene ($yeni_değer) atanıyor. Daha sonra IP değerinin tutulduğu dosya açılıp ziyaretçinin IP numarası bu dosyaya yazılıyor. En son olarak da ziyaretçiye sitenin bugüne kadar kaç defa ziyaret edildiğini gösteren bir mesaj ekrana yazılıyor.
Çerez Örneği
Çerezler HTTP ile kullanıcının bilgisayarına gönderdiğimiz bilgi paketleridir. Bu bilgiler düz yazı dosyası halinde kullanıcıya ulaşır ve kullanılan istemcinin tipine göre herhangi bir dizinde belirlenen süre kadar saklı tutulur. Çerezlere gönderen bilgisayar dışında başka bir bilgisayar tarafından ulaşılamaz. Windows sistemlerde MS-Internet Explorer, sunucu tarafında yollanan çerezleri C:\WINDOWS\Cookies dizini altında saklar. Linux altında, kullanılan istemci tarafından kullanıcının kendi ev dizininde oluşturulun gizli bir dizinde saklanır.
Örneğimde bir web sitesine parola ile giriş yapmış bir kullanıcının bilgisayarına yollanan çerezin kullanımı var. Tabii bu örnek için kullandığım veritabanı bilgilerinin varolduğunu varsayıyorum.
Alıntı:
<!-- Bu dosya index.html adı ile kaydedilecek -->
<html>
<head>
<title>Şifrenizi girin</title>
</head>
<body bgcolor="#ffffff" text="#000000">
<br><br>
<center>
<form action="login.php" method="post">
<b>Kullanıcı adınız</b><input type="text" name="uid" size="20"><br>
<b>Parolanız</b><input type="password" name="passwd" size="20"><br><br>
<input type="submit" value=" Giriş ">
</form>
</body>
</html>
<?
/* bu dosya login.php adi ile kaydedilecek */
if (isset($uid) && isset($passwd)) {
# Veritabanina baglaniliyor
@mysql_connect(“localhost”, ”kullanici”, ”parola”)
or die(“Veritabani ile baglanti kurulamadi!”);
@mysql_select_db(“base”)
or die(“Veritabaninda bir hata olustu!”);
$sorgu = mysql_query(“select * from kayit”);
$db_passwd = mysql_result($sorgu, $uid, ’parola’);
if ($db_passwd == $passwd) {
setcookie(“identify”,”OK”, time() + 3600);
echo “Cerez yollandi.”;
} else {
echo “<center><b>Kullanici adi ve sifrenizi kontrol edin!</b></center>”;
require(“./index.html”);
}
} else {
echo “<center><b>Bir kullanici adi ve sifre girmelisiniz!</b></center>”;
require(“./index.html”);
}
?>
|
Bu PHP dosyası eğer formdan $passwd ve $uid değişkenleri gelirse if döngüsüne giriyor. Döngü içerisinde MySQL’e bağlanılıp kayit adlı tablodan kullanıcı adı $uid olan satırdaki parola alınıp bir değişkene ($db_passwd) atanıyor. Eğer iki şifre aynı ise setcookie() işlevi ile kullanıcıya çerez yollanıyor. Yollanan çerezin adı identify ve bu çerezin değeri OK. Karşı tarafın bilgisayarında kalma süresi ise 1 saat (3600 saniye). Çerez yollandıktan sonra ekrana “Cerez yollandi.” diye bir mesaj yazılıyor.
Çerez ile yollanan bir değişkenin değerini $deger adlı bir değişkene atmak için
Alıntı:
|
$deger = $HTTP_COOKIE_VARS["cerez_adi"];
|
satırı kullanılır. Ancak çerezleri kullanırken dikkat etmeniz gereken önemli bir nokta var! Çerezi yolladığınız PHP dosyası ile aynı çerezin değerini çağıramıyorsunuz. Bu işlemi başka bir dosya üzerinde yapmak zorundasınız.
Renk Tablosu Örneği
Bu örneğimde HTML ile kullanabileceğiniz renklerin onaltılık tabandaki karşılıklarını veren bir PHP betiği var. Betik 512 tane rengin onaltılık kod karşılığını vermektedir. Aynı betik üzerinde sadece bir küçük değişiklik yaparak tam olarak 4096 tane rengin onaltılık karşılığını almak mümkündür. Bunu için, kodun başında yorum işareti ile verilen $d dizisini (16 elemanlı) yorum olmaktan çıkarıp normal (8 elemanlı) olan diziyi yorum satırı haline getirmek yeterlidir.
Fakat 4096 renk arasından kullanacağınız rengi seçmek gerçekten çok güçtür ve renk tonlamalarındaki geçişler çok yumuşak olduğu için çoğu renk birbirinin aynı gibi görünecektir.
Alıntı:
<!-- Bu dosyayı renk.php adı ile kaydedin -->
<html><head><title>HTML Renk Kodları</title></head>
<body bgcolor="#e8e8e8" text="#000000">
<center>
<h1>HTML Renk Kodları</h1>
<table border="0" width="540" cellpadding="0" cellspacing="2">
<?
//$d = array("0","1","2","3","4","5","6","7","8","9","a", "b","c","d","e","f");
$d = array("0","2","4","6","8","a","c","e");
$d_c = count($d);
// Kırmızı
$r_i = 0;
while($r_i < $d_c) {
$r = $d[$r_i] . $d[$r_i];
// Yeşil
$g_i = 0;
while($g_i < $d_c) {
$g = $d[$g_i] . $d[$g_i];
// Mavi
$b_i = 0;
echo "<tr>";
while($b_i < $d_c) {
$b = $d[$b_i] . $d[$b_i];
// HTML Kodu ile tablonun satirlari olusturuluyor
$renk = "#" . $r . $g . $b;
echo "\n<td style='background:$renk; color:white'><b>$renk</b></td>";
$b_i++;
}
echo "\n</tr>";
$g_i++;
}
$r_i++;
}
?>
</table></center></body></html>
|
|
|
|
|
|
27-05-06, 13:30
|
#3 (permalink)
|
|
Yeni Genç
|
Çok güzel bir çalışma olmuş Finduks ellerine sağlık
|
|
|
|
|
 |
| Seçenekler |
|
|
| Stil |
Normal
|
|