4 Mayıs 2013 Cumartesi

PHP DERSLERİ(DAHA COK DERS BU KONUNUN SAYFASINDADIR)




DUYURU 
İlk scriptleri eklemeye başladım arkadaşlar,sizden gelenler doğrultusunda onları da ekleyeceğimve altlarına elimden geldiğince açıklama yazmaya çalışacağım.
---->Eğer siz de scriptlerinizi gönderirseniz,güzel bir kaynak oluşturmuş olur ve bir çok arkadaşa da yardımcı olmuş oluruz.












Evet sevgili arkadaşlar,bir müddettir istediğim php derslerinin ilk bölümünü nihayet hazırlayabildim.Amacım sıfırdan başlayarak php için büyük,kaliteli bir kaynak oluşturmak.
Lafı fazla dolandırmadan direkt giriş yapmak istiyorum ama ondan önce bir hatırlatma da bulunayım : eğer siz de bana yardımcı olmak istiyorsanız hazırladığınız makakaleleri ya da örnek scriptleri bana ö.m den ulaştırırsanız hem daha geniş,hem de daha düzenli bir kaynak oluşturma şansını yakalamış oluruz.Şunu da belirteyim ki elbette gönderdiğiniz anlatımların ve scriptlerin altında isminiz olacaktır. 

Tüm anlatımlar bittiğinde inşallah kaynağımız aşağıdaki içeriğe sahip olacaktır.
(Kırmızı renkli yazılar şu an mevcut olanlar)


-php nedir ?
-php kurulumu

-değişkenler,veri türleri,sabitler,operatörler
-akış kontrolü ve döngüler (if-else-else if,switch,? operatörü,for,while,do...while,foreach,break,continue)
-diziler ve foreach
-fonksiyonlar
-form işlemleri
-belli başlı php fonksiyonları
-dosya işlemleri
-tarih/zaman işlemleri
-veritabanı işlemleri
-cookiler ve sessionlar

-örnek scriptler (anket,sayfalama scripti,not ortalaması kontrol scripti,ziyaretçi defteri scripti eklendi)

Bu arada sorularınızı YORUM YAZARAK SOYLEMENIZI VEYA KAFANIZA TAKILAN YERLERI SORMANIZI RICA EDERIM ISTERSENIZ BASKA BIR KONU ILE ILGILI DERS VERIRIM..



1-PHP NEDİR ?
Kısaca php,1996 yılında Rasmus Lerdorf'un daha dinamik web sayfaları yapmak amacıyla geliştirdiği sunucu taraflı bir web programlama dildir.Bir çok bakımdan C diliyle benzerlik gösterir.Açık kaynak kodlu ve ücretsiz php; günümüzde PHP GRUBU tarafından geliştirilmektedir.Günümüzde yaklaşık 10.000.000 web sunucusu tarafından kullanılmaktadır. (Kaynak : Kasım 2003 Netcraft)
Php nin ilk açılımı : PERSONEL HOME PAGES yeni açılımı ise HYPERTEXT PREPROCESSOR'dur.


2-PHP KURULUMU ?
Php'ye giriş yapmadan önce php dosyalarını bilgisayarımızda çalıştırabileceğimiz bazı ekipmanlara ihtiyacımız olduğunu belirtmeliyim.Php dosyaları,html dökümanları gibi çift tıklayışta çalıştırılamazlar.
Şimdi biz gerekli tüm herşeyi beraber kuracağız.

Öncelikle php dosyalarını çalıştırabilmek için bir web sunucusuna (apache ya da iis) ve veritabanı işlemlerini yapabilmek için de doğal olarak bir veritabanına ihtiyacımız vardır.Biz web sunucusu (web server) olarak apache,veritabanı (database) olarak ta mysql kullanacağız.Şimdi önümüzde iki seçenek var.Ya apache'yi,mysql'i,php'yi ayrı ayrı indirip kuracağız.Ya da hiç uğraşmadan wampserver,phptriad,zendstudio,easyphp,appserver gibi bir paketle otomatikman kuracağız.Bu paketlerden birini kurduğunuzda sisteminize otomatikman apache+mysql+php yüklenecektir.Ben burada kendi kullandığım wampserverın kurulmasını anlatacağım,siz istediğiniz başka bir paketi de kurabilirsiniz.

wampserver : http://www.wampserver.com/en/download.php

Öncelikle programı indirip virüs taramasından geçirelim.
Önümüze çıkan pencelere "next" deyip sözleşmeyi kabul edip devam ediyoruz.Bir müddet sonra önümüze şu alan çıkacaktır :



Bu yol bizim php doslarını yerleştireceğimiz olan wamp klasörünün kurulacağı yer olacaktır.Eğer ellemezsek direkt C içine kurulacaktır.(Siz isterseniz değiştirebilirsiniz.)
Ardından bize masaüstü ikonu vs ikonu oluştursun mu diye soracaktır.Burayı keyfinize göre ayarladıktan sonra "next" diyip "install" diyoruz.Kurulum bitince next diyip finish diyoruz.
Kurulum bittikten sonra C içine gidip bakarsanız bir wamp dizini oluştuğunu göreceksiniz.(eğer kurulumda yerini değiştirmediyseniz) ve görev çubuğunun sağında,yani ekranın sağ alt köşesinde yeni,beyaz bir logo belirdiğini de göreceksiniz.İşte o logo bizim wampserverımızın çalıştığı anlamına gelmektedir.Php dosyalarımıza erişmek istediğimiz de wampserverı çalıştırıp o logonun yanmasını beklememiz gerekmektedir.



Ardından tarayıcı açıp,adres çubuğuna "http://localhost/" yazıp enter dersek aşağıdaki gibi aşağıdaki gibi gri bir ekranla karşılaşmamız gerekmektedir.Bu ekranı görüdüğümüzde wampserverın başarıyla kurulduğunu anlarız.



Tüm php dosyalarımıza C nin içindeki wamp dizinin altında bulunan www klasöründen erişiriz.Biz tüm php dökümanlarımızı buraya atacağız ve yine tarayıcıdan localhost yazarak onlara ulaşacağız.

Toparlamak gerekirse :
->wampserverı indirip kurun
->wampserverı çalıştırın,sağ alt köşede beyaz wamplogosunun yanmasını bekleyin
->tüm gerekli php dökümanlarınızı wamp/www dizinine atın
->adres çubuğuna localhost yazarak onlara ulaşın

İsterseniz şimdi bizde bir deneme yapabiliriz.Hemen not defterinizi açın ve
<?php

echo "Merhaba Dünya";

?>


yazın.Bu kodları wamp/www içine dh.php olarak kaydedin.Ve adres çubuğuna http://localhost/dh.php yazarak ulaşın.Eğer başarılı bir şekilde ekrana Merhaba Dünya yazılıyorsa sorun yok demektir.

Şunu da unutmamak gerekirki tüm php kodları <?php ?> ya da <? ?> arasına yazılır.Ancak <? ?> arasına yazdıklarımız wampserverca kabul görmezler.Bu durumun nasıl düzeltileceğini de anlatacağım.

Uyarı : Çok iyi bir dille yazamadım özür dilerim,sabahın 5 inde,bir de bitirmem gereken bir kitap varken ancak bu kadar oluyor. 
Neyse devamı gelecek.



 


_____________________________

Software Developer...

23 Temmuz 2008; 14:00:04 


3-DEĞİŞKENLER,VERİ TÜRLERİ,SABİTLER,OPERATÖRLER 
Değişkenler
Değişkenler,bir çok programlama dilinin olduğu gibi şüphesiz php'nin de vazgeçilmez bir parçasıdır.Kısaca tanımlamak gerekirse değişkenler,programcı tarafından tanımlanan,içine geçici bir değer yüklenen ve yeri geldiğinde bu değerin kullanılmasını sağlayan nesnelerdir.Tüm değişkenler php de $ ile tanımlanırlar.$ den sonra değişkenin ismi gelir.


<?php

$sagopa = 2008;

?>


işte yukarıda en basitinden bir değişken tanımladık ve ona 2008 değerini atadık.Dediğimiz gibi değişkenler $ ile tanımlanırlar.$ den sonra değişkenin ismi gelir.Değişkenlere bir değer atamak için = operatörünü kullanırız.= operatörünün sağındaki değerler soldaki değişkene atanır.Yukaridaki 2008 değerini de = operatörü ile $sagopa değişkenine atadık.";" ile de php ye değişkene değer atama işlemimizin bittiği haberini verdik.Noktalı virgül (;) php de bir işlemin bittiği anlamına gelir.
Değişkenlere tam sayı değeri atadığımız gibi onlara karakter dizisi de atayabiliriz.


<?php

$sagopa = "melankolya";

?>


İşte yukarıda $sagopa değişkenine melankolya değerini atadık.Aşağıda da değişkenlerimizi amacına ulaştırmış oluyoruz.$sagopa değişkenin içindeki değeri ekrana yazdırıyoruz.


<?php

$sagopa = "melankolya";

echo $sagopa;

?>


echo komutu php de ekrana yazı yazmak için kullanılır.Aynı şekilde bir değişkene veri atamadan da ekrana yazabilirdik.


<?php

echo "melankolya";

?>


Veri Türleri
Elbetteki php de de belli başlı veri türleri vardır.Biz en çok kullanacağız string,boolean,integer,float/double değerlerini göreceğiz.




Aşağıda türleri test etmeyi gördüğümüzde daha iyi anlayacaksınız.

Türleri php de gettype() fonksiyonu ile test ederiz.Aşağıda en basitinden değişkenlere belli verileri atıyoruz,ardındanda bu değişkenlerin içerisindeki verilerin türlerini öğreniyoruz.


<?php

$sagopa = "melankolya";
echo gettype($sagopa);  //string yazdırır

$kolera = 2008;
echo gettype($kolera);  //integer yazdırır

$medusa = 2.545; 
echo gettype($medusa); //dobule yazdırır

$ceycey = false;  
echo gettype($ceycey); //boolean yazdırır

$kuheylan;
echo gettype($kuheylan); //NULL yazdırır,çünkü burada değişkene hiç bir değer tanımlamadık ancak bu hareket bazen sistemimizde güvenlik açıklarının oluşmasına sebep olabilir

//diğer türleri de zamanla öğreneceksiniz  (object,array,resource)

?>


Gördüğümüz gibi değişkenlerin içindeki verinin türü ne ise o tür yazdırılıyor.Boolean türünü anlamamış olabilirsiniz.Bu tür ya true ya da false ifadelerinden oluşur.True'nun karşılığı doğru,false'un karşılığı yanlıştır.Bu tür genellikle iki ifadenin karşılaştırılması durumunda ortaya çıkar.Mesela 2 5 ten büyükse true,değilse false döner.Bu türü operatörler bölümünde daha iyi anlayacaksınız.

Bir de verilerin türlerini değiştirme işlemleri vardır.Onu da aşağıdaki örnekte görebilirsiniz


<?php

$kolera = "taş dibe düşmez";
echo gettype($kolera); //doğal olarak string yazdırılacaktır
settype($kolera, 'integer');
echo gettype($kolera) //integer yazar

?>


settype() fonksiyonu ile php de verilerin türlerini değiştirebiliriz.Bu fonksiyon iki parametre alır.Birincisi türü değiştirilecek değişkenin ismi,ikincisi değişkenin yeni türü.

settype($turu_degisecek_degisken,'yeni tür');

Değişkenlerin türlerini settype() fonksiyonu kullanmadan da değiştirebiliriz.


<?php

$kolera = "taş dibe düşmez";
$kolera = (integer) $kolera;
echo gettype($kolera);

?>


Yukarı önce $kolera isimli bir değişken oluşturup içine bir karakter dizisi atadık.Ardından da $kolera değişkenini yeniden tanımladık.Tanımlarken yeni türü parantez içinde yazıp ardından üstteki değişkeni yazdık.İkisi de aynı değişken.Yeniden tanımlarken yukarıdaki değeri aşağıya kopyaladık ve türü değiştirdik hepsi bu.Bu şekilde de yapabilirdik :


<?php

$heidi = "dağlar kızı heidi";
$keloglan = (integer) $heidi;
echo gettype($keloglan);
echo "<br>".gettype(heidi);

?>


Gördüğünüz gibi heidi değişkenin türünü ellemedik, sadece keloglan değişkenini atarken türü integer yapıp heidi içindeki tüm değerleri keloglana geçirdik.Şimdi sabitlere oradan da php nin vazgeçilmez bir parçası olan operatörlere geçeceğiz.Aklınızda soru işaretleri kalmış olabilir,yine bunları foruma sorarak giderebilirsiniz. Merak etmeyin bir müddet sonra soru işaretleri yerlerini programlama dünyasının verdiği vazgeçilmez hazza bırakacaklar. (ne cümle kurdum )

Sabitler
Sabitler değişkenlere benzerler.Yaptıkları iş hemen hemen aynıdır.Tek farkları değişkenler kodların icrası sırasında değişebilirler.Eğer değişmeyecek bir değişken tanımlamak istiyorsak bu işi sabitlere bırakmalıyız.Bazı sebeplerden ötürü bazı değişkenlerimizin değerlerinin hiç bir zaman değişmemesini isteyebiliriz.İşte bu yüzden sabitleri kullanırız.
Sabitler define() fonksiyonu ile tanımlanırlar.Aşağıda bir sabit örneği görmekteyiz :


<?php

define("Misti","hoşaf");
echo Misti;
define("Misti","mesir macunu");
echo "<br>".Misti      

?>


Gördüğünüz gibi tepede önce Misti adında bir sabit(constant) tanımladık ardındanda onu ekrana yazdırdık.Altta Misti sabitini tekrar tanımlak istedik ancak başarılı olamadık.Çünkü adı üstünde sabit.
Karakter dizisi olduğu gibi sabitlere rakam değerleri de verebiliriz.


<?php

define("Cedric",31);
echo Cedric;

?>


Yukarıda gördüğünüz gibi Cedric ismindeki sabite bir tamsayı değerini atadık.

Sabit tanımlarken önce isim sonra da sabite atanacak değer gelir.

Toparlamak gerekirse
--- Değişkenler :
-> $ işareti ile tanımlanırlar
-> = operatörü ile değişkenlere veri atanır
-> ";" işareti php de herhangi bir işlemin bittiği anlamına gelir
-> echo komutu php de yazı yazdırma komutudur
-> gettype() fonksiyonu ile değişkenlerin tipleri test edilir ÖRNEK : gettype($değişken);
-> settype() fonksiyonu ile değişkenlere yeni türler verilir ÖRNEK : settype($değişken , 'double');
-> değişkenlere settype() kullanmadan da yeni türler verilebilir ÖRNEK : $değişken = (boolean) $değişken;

---Sabitler
-> define() fonksiyonu ile tanımlanırlar ÖRNEK : define("Sabit","değer");
-> değerleri hiç değişmez
-> sayısal ve ya karakter dizisi değeri verilebilir


Yorum Satırları
Ben biraz php de ki yorum satırlarına değinmek istiyorum.Hemen her programlama dilinde olduğu gibi php de de ekrana yazdırılmayan ve sadece arkaplanda bulunan yorum satırları tanımlanabilir.
Php de yorum satırı tanımlamanın üç metodu vardır.


# : bu karakterden sonra bir satır boyunca yorum yazabilir
// : yine bu kısımdan sonrasına da yorum yazabiliriz
/* */ : burada ise /* işaretinden */ işaretine kadar olan kısım komple yorum bölümüdür


<?php

echo "Yorum Satırları"; //BURASI GÖRÜNMEZ

#BURASI DA GÖRÜNMEZ

/* E HİÇ BURASI GÖZÜKÜR MÜ ?
HAYIR GÖZÜKMEZ
İYİ O ZAMAN*/

?>



Operatörler
Operatörler hemen her programlama dilinde kullanılan,tabii ki php de de bulunan,diğer öğrendiklerimiz gibi php nin temelini oluşturan kavramlardandır.Kısaca operatörler belli bir işi yapmak üzere hazırlanmış özel karakterler ya da karakterler dizisidir.Operandlar ise operatöre işlemesi için verilen değerlere denir.Mesela biz şuana kadar en çok = operatörünü gördük.= operatörü soldaki operandı sağdakine eşitliyordu.Mesela aşağıdaki kod bloğunu inceleyelim :

<?php

$redkit = "tintin";

?>


yukarıda $redkit değişkenine tintin değerini verdik.Burada $redkit ve tintin = operatörünün operandı oluyorlar.

Operatörler aritmetik,mantıksal,karşılaştırma gibi ya da tek operandlı,çift operandlı,daha fazla operandlı olarak sıralanabilirler.Biz matematiksel operatörlerden başlayacağız.


aritmetik operatörler : +-/*% operatörleridir.

+ : Toplama işlemi yapan operatördür.Sağdaki operand ile soldaki operandı toplar. ÖRN : 5+10 ve ya $aa + $bb ve ya $ds + 8
- : Çıkarma işlemi yapan operatördür.Soldaki operanddan sağdakini çıkarır. ÖRN : 10-8 ve ya $aa - $bb ve ya $ds - 4
/ : Bölme işlemi yapan operatördür. ÖRN : 10/2
* : Çarpma işlemi yapan operatördür. ÖRN : 4*2
% : Bu operatör ise bir sağdaki operandın soldakine bölümünden kalanı verir.Mesela yandaki öğrenkte 10 un 3 e bölümünden kalanı verir ÖRN : 10%3

bitiştirme operatörü : .
. : Bitiştirme operatörüdür.İki operandı birleştirir. ÖRN : echo "gece"."kondu";

Birleşik Atama Operatörleri :

Bu operatörler sağdaki operandı soldakine eklerler.

Örneğin elimiz de içinde 4 değeri bulunan bir değişken var.Biz buna 10 daha eklemek ve toplamda 14 yapmak istiyoruz.Ner yaparız ? Şuana kadar öğrendiklerimiz ile şunu :


<?php

$degisken = 4;                            
$degisken = $degisken + 10;       

?>


Gördüğünüz gibi $degiskeni yeniden tanımladık,tanımlarken de $degisken deki değeri 10 ile topladık.Aynı şeyi birleşik atama operatörleri ile aşağıdaki gibi yapabiliriz :


<?php

$degisken = 4;
$degisken += 10;

?>


Yani $degiskenin üzerine 10 ekledik. 

Aşağıda diğer birleşik atama operatörleri ve eşdeğer kullanımlarını görüyorsunuz.



.= ile birleştirme operatörünün (.) birleşik atama halidir.


Son Artırma ve Son azaltma Operatörleri : ++ ve --

Bu operatörler değişkenlerin değerini bir artırmak ve ya bir azaltmak için kullanılırlar.


<?php

$php=5;
$php++;
echo $php; //6 yazar

?>


Gördüğümüz gibi arkadaşlar $php ye 5 değerini verip,değerini bir artırıyoruz.Ardıdan ekrana yazdırıp sonucu görüyoruz.Aynı şekilde değeri azaltabilirdik de.


<?php

$php = 5;
$php--;
echo $php; //4 yazar

?>


Bir de bu operatörleri operandlarının önüne getirerek ön artırma ve ön azaltma yapabiliriz.


<?php

$php = 5;
++$php; 
echo $php; //6 yazar

--$php;
echo $php;  //5 yazar (Yukarıda 6 ya çıkarttığımız için bir azalttığımızda 5 yazar
?>


Peki soracaksınız ne fark etti diye.İkisinde de değeri bir artırıp azalttık.Ancak ekler sona geldiğinde önce işlem yapılır,sonra değer artırılır ya da düşürülür.Oysa ekler değişkenin önüne geldiğinde yapılan işlemden önce düşürülür ya da artırılır.Bunu yukarıda anlayamayız.Aşağıya bakalım :


<?php

$php = 5;
echo $php++;

?>


gördüğümüz gibi hiç bir şey olmadı.Neden ? : Çünkü önce echo komutu çalıştı ve değer çalıştıktan sonra artırıldı.


<?php

$php = 5;
echo ++$php;

?>


Oysa şimdi echo çalıştırılmadan artırıldı,ardından echo çalıştı.İşte bu eklerin sona gelmesiyle,öne gelmesinin arasındaki fark budur.

-> Son eklerde önce,örneğin echo ile kullanıyorsak önce echo çalışır ardından değerde işlem yapılır.
-> Ön eklerde ise önce işlem yapılır sonra yazılır.

Karşılaştırma Operatörleri

İki operandı karşılaştırırlar.Mesela $a ile $b eşitse sonuç true,değilse false döner.Hatırlarsanız false yanlışı,true ise doğruyu ifade ediyordu.




Yukarıda gördüklerimizi bir örnekle pekiştirelim.


<?php

$keloglan = 15;
echo $keloglan == 15;   //ekrana 1 yazacaktır    İKİSİ EŞİTSE
echo $keloglan != 10;     //ekrana 1 yazacaktır    DEĞİŞKEN 10 A EŞİT DEĞİLSE
echo $keloglan > 5;       //ekrana 1 yazacaktır     DEĞİŞKEN 5 TEN BÜYÜKSE
echo $keloglan <2;        //ekrana hiç bir şey yazmayacaktır      DEĞİŞKEN 2 DEN KÜÇÜKSE
echo $keloglan >= 31;   //ekrana hiç bir şey yazmayacaktır      DEĞİŞKEN 31 DEN BÜYÜKSE YA DA 31 e EŞİTSE
echo $keloglan <= 44;   //ekrana 1 yazar     DEĞİŞKEN 44 TEN KÜÇÜKSE YA DA 44 e EŞİTSE
echo $keloglan === "15";  //ekrana bir şey yazmaz    DEĞİŞKEN  15 e EŞİTSE VE TİPLER AYNIYSA

?>




Benim burada değinmek istediğim iki nokta var.Birincisi neden true ya da false değilde karşılaştırmaların sonucu olarak 1 yazdırdı ve ya hiç bir şey yazdırmadı.İşte php de karşılaştırmaların sonucu olarak 1 ve ya 0 rakamları ortaya çıkar.Doğruysa 1,değilse 0 çıkar.Bu yüzdendir ki bazı uzmanlar php de true ya da false değerlerinin olmadığı söylerler.Sonuç olarak 1 true,0 false ifade ediyor burada.Yani yukarıdaki karşılaştırmalarda doğruysa 1 yazdırılıyor.Yanlışsa hiç bir şey yazdırılmıyor.
İkincisi === operatörü.Gördüğünüz gibi bu operatörün doğru döndürmesi için yalnızca operandların eşit olması değil aynı zamanda tiplerininde eşit olması gerekiyor.Biz en son örnekte sağdaki operand olan 15'i tırnak içine aldığımızdan dolayı onun türü de otomatik olarak stringe dönüştü.$keloglan da ise bir tamsayı (integer) değeri bulunduğundan ekrana bir şey yazılmadı.Eğer en alttaki === operatörünü == olarak değiştirirseniz ekrana 1 yazıldığını yani true döndüğünü göreceksiniz.


Mantıksal Operatörler

Operatörler bölümünde göreceğimiz son operatör türü mantıksal operatörler olacak.



Şimdi bu operatörleri bir açıklayayım.

|| ve ya OR : || ve ya OR ikisi de geçerlidir.Bu operatör;soldaki ve sağdaki karşılaştırmalardan en az birisi true ise true döndürür.Elbette ikisi de true ise true döndürür.

&& ve ya AND : && ve ya AND ikisi de geçerlidir.Bu operatör;soldaki ve sağdaki karşılaştırmaların ikisi de true ise true döndürür.

Xor : Bu operatör;soldaki ya da sağdaki karşılaştırmalardan en az bir tanesi true ise true döndürür.Ancak && aksine ikisi de true ise false döndürür.

! : Tek operand alır.Örneğin ----------> !($ss = 21) $ss değişkeni true değilse true döndürür.Yani $ss değişkeni 21 e eşit değilse true döner.


_____________________________






4-AKIŞ KONTROLÜ VE DÖNGÜLER
if deyimi
If kelimesinin İngilizce anlamı "eğer" dir.Biz de php de eğer li,yani şarta bağlı direktifler vermek için if deyimini kullanacağız.


<?php

$php = 5;

if($php < 10) {

echo "10 dan büyüktür";

}
?>


Yukarıda if deyimini en basit haliyle görüyorsunuz.Bu kod bloğunun tam olarak yaptığı şudur : eğer $php değişkeni 10 dan küçükse (yani $php < 10 ifadesinden 1 dönerse (true)) 10 dan büyüktür yazdır.
if deyiminin ardından parantez içinde işlemin hangi şarta bağlı olduğu gelir.Yukarıda $php 10 dan büyükse dedik.Ardından koşulun doğrulanması halinde yapılacak işlemler { } nin arasına yazılır.Aşağıda da benzer bir örnek görüyoruz :


<?php

$php = 255;
$asp = 123;

if($php != $asp)
{
echo "ikisi de birbirlerine eşittir";
}

?>


Gördüğümüz gibi eğer koşul doğrulanırsa istediğimiz direktif yerine getirilir.


<?php

$php = 255;
$asp = 123;
$perl = 44;

if($php != $asp && $perl == 44) {
echo "doğrulandı";
}

?>


Yukarıdaki if deyiminde ise ilk ifade de $php $asp ye eşit değilse 1 döndürülüyor,ikincisinde ise $perl 44 e eşitse 1 döndürülüyor.Ve iki koşuldan da 1 dönmüşse doğal olarak doğrulandı yazıyor.(&& operatörünü hatırlayalım.İki tarafın da true döndürmesi gerekiyordu)
Siz diğer operatörleri de kullanabilirsiniz elbette.Unutmamaz gereken nokta ise,if deyimi içindeki koşulları istediğimizkadar artırabiliriz.Örneğin :


<?php

$php = 255;
$asp = 123;
$perl = 44;
$cgi = 72;
$jsp = 89;

if($php != $asp || $perl == 44 || $cgi == 72 || $jsp > 14) {
echo "personel home pages";
}

?>


|| operatörünü hatırlayın iki taraftan birinin 1 döndürmesi yetiyordu.

Else
Else if ile beraber kullanılır.Amacı if in aksi bir sonuç döndürmesi durumunda direktif vermektir.Aşağıdaki örneği inceleyelim.


<?php

$php = 255;
$asp = 123;

if($php == $asp) {
echo "eşitler";
} else {
echo "değiller";
}

?>


Yani yukarıda $php $asp ye eşitse "eşitler" yazdır aksi bir durum geçerliyse (eşit değillerse) "değiller" yazdır.Eşitlerse ilk komutu uyula,yok değillerse ikinci.

else if
Else if ise if ten sonra farklı bir koşulu denetlemek için kullanılır.


<?php

$php=255;
$asp = 123;

if($php < 10) {
echo "1.koşul";

} else if($php > 10) {
echo "2.koşul";

} else {
echo "hiçbiri";
}

?>


Yukarıda önce eğer $php 10 dan küçükse ilk komut uygulanıyor,eğer 10 dan büyükse ikinci komut uygulanıyor.Eğer hiçbiri değilse (yani eşitlerse) 3.komut uygulanıyor.

İf yapısında bilmemiz gereken bir noktada { lerle ilgilidir.Aşağıdaki örneği inceleyelim :


<?php

$dh = 12;

if($dh == 12)
             echo "donanımhaber";


?>


Gördüğümüz gibi "{" kullanmadan koşulumuz doğrulandığı için istediğimiz yazdırıldı.Eğer yapacağımız kısa bir iş ise yukarıda ki gibi if deyiminin hemen altına ya da yanına yazarak parantez kullanmadan da komutumuzu yazabiliriz.Aşağıdaki de doğrudur :


<?php

$dh = 12;

if($dh == 12) echo "dh";

?>


SWITCH
Switch te if deyimine benzer.Amaç yine bir değişkeni test etmektir.Ancak bu switch te biraz farklıdır.


<?php

$i=10;

switch($i) {
case 10:
          echo "değer 10";
          break;
case 9:
         echo "değer 9";
         break;
default:
        echo "ne bileyim ben";
        break;

}

?>


Yukarıda switche güzel bir örnek görüyoruz.Hadi açıklayalım.
Öncelikle switche hangi değişkeni test edeceğimizi söylüyoruz.Ardından süslü parantezlerin içine koşulları yazıyoruz.
case 10 yani $i 10 ise diyor ve bu koşulun doğrulanması halinde ne yapılacağını yazıyoruz.(echo "değer 10";) arıdanda break deyimi ile çıkış yapıyoruz.Burada break deyimi çıkış yapmak için kullanıyoruz.Yani case doğrulanırsa,$i 10 ise yazdır ve çık.Peki eğer break koymazsak ne olur.Hemen alttaki koşul doğrulanmadığı halde yazdırılır.Yukarıda ki örneği çalıştırdığınızda değer 10 yazısıyla karşılaşırsınız.


<?php

$i=10;

switch($i) {
case 10:
      echo "değer 10";
case 9:
      echo "değer 9";
      break;
default:
      echo "ne bilem";
      break;

}

?>



Yukarıdaki örneği çalıştırdığımızda ise değer10değer9 yazısı ile karşılaşırız.Yani case 9 doğrulanmamış olmasına rağmen yazdırılmıştır.Onun için case ler den sonra break koymamız case in doğrulanması halinde bir alttakine geçişi engelleyecektir.
Peki default ne oluyor.Default ise bizim switche verdiğimiz koşullarun hiç birisinin doğrulanmaması halinde yazdırılır.Mesela :


<?php

$i=202;

switch($i) {
case 1:
      echo "değer 1";
      break;
case 2:
      echo "değer 2";
      break;
default:
     echo "bilemem";
     break;
}

?>


Burada ise ekrana bilemem yazılacaktır.
Peki sadece sayısal değerler mi test edilir,hayır.


<?php

$i = "sagopa";

switch($i)
{
case "kolera":
       echo "rapper kolera";
       break;
case "abluka alarm":
       echo "rapper abluka alarm";
       break;
case "sagopa":
      echo "rapper sagopa";
      break;
default:
      echo "bu adam melankolia dan değil";
      break;
}

?>


Gördüğümüz gibi string değerler de switchler de test edilebilir.


? : 
Çok tatlı bir operatördür. Yaptığı iş yine koşul test etmektir.


<?php

$i = "anektod";
$t = ($i == "anektod") ? "koşul doğru" : "koşul yanlış";
echo $t;

?>


Gördüğümüz gibi sadece tek bir koşul alır.Eğer $i anketoda eşitse koşul doğru aksi halde koşul yanlışı $t değişkenine ata.Yukarıda dediğimiz bundan ibaret.

For Döngüsü
Döngüler de akış kontrolleri gibi bir programlama dili için önemli konulardandır.İsterseniz hemen başlayalım.
Kısaca döngünün yaptığı iş şudur; siz döngüye bir koşul verirsiniz,o koşul doğrulandığı sürece döngü verdiğiniz işi yapmaya devam eder.Yani adından da anlaşılacağı gibi tekrar eder durur.Buna iterasyon da denir.


<?php


for($i=0;$i<10;$i++)
{
echo "selam<br>";
}

?>


Yukarıda yaptığımız iş şudur: önce for döngüsünde bir $i değişkeni tanımlıyoruz ve buna 0 değerini atıyoruz.Ardından ikinci ifadeye geçiyoruz.İfadelerin arasına ; koyduğumuza dikkat edin.Ardından $i<10 kombinasyonunu for döngüsüne veriyoruz.Yani $i 10 dan küçükse.Ve devamında $i++ ifadesi for döngüsü her çalıştırıldığında $i nin değerinin bir artmasına sebep olacaktır.Şimdi yukarıdaki örneği çalıştırın.
Sonucun aşağıdaki gibi olması lazım :


selam
selam
selam
selam
selam
selam
selam
selam
selam
selam


Şimdi burada gerçekleşen olaylara şöyle tekrardan bir bakalım.$i değişkenine 0 değeri atadık.Ardından for döngüsüne $i 10 dan küçükse çalış dedik.Ve $i++ ile de her çalıştığında $i nin değişkenin değerini 1 artır dedik.
Kodların akışı for döngüsüne geldiğinde önce $i'ye 0 değeri atanacaktır.Ardından for döngüsü $i<10 ifadesine bakacaktır.Eğer bu ifade doğruysa for döngüsü çalışacak yani bir kere selam yazacak ve $i nin değerini bir artıracaktır.Ardından tekrar $i<10 ifadesine bakacaktır.Eğer bu doğruya tekrar bir kere çalışacaktır.Her çalışmada $i nin değeri bir artacaktır ve en nihayetinde $i nin değeri 10'a gelecek ve $i<10 değeri geçerliliğini yitirecektir.İşte mantık bu.
Yani ilk çalıştırılışta $i<10 deyiminin 0<10 dan farkı yoktur.İkincisinde 1<10,üçüncüsünde 2<10 gibi devam edecek ve 10.çalıştırılıştı 10<10 haline gelecektir.Ve dolayısıyla döngü tekrarlanmayacaktır.

Şimdi bir örnekle de $i değişkenin değerinin nasıl her defasında artırıldığına tanık olalım.


<?php

for($i=0;$i<10;$i++)
{
echo "$i<br>";
}

?>


Yukarıdaki kod bloğunun sonucu aşağıdaki gibi olmalıdır.

0
1
2
3
4
5
6
7
8
9

Gördüğümüz gibi for döngüsü her çalıştırıldığında $i nin değeri bir artırılıyor.

Tüm değişkenleri for döngüsü içerisinde tanımlamak zorunda değiliz,şöyleki:


<?php

$i=0;

for(;$i<10;$i++)
{
echo "selam";
}

?>


Gördüğümüz gibi $i değişkenini for dışında tanımladık.For döngüsünde değişkeni tanımladığımız yeri boş bırakıp yine ; koyup devam ettik.Aşağıda da buna benzer bir şey yaptık.


<?php

$i=0;

for(;$i<10;)
{
echo "selam<br>";
$i++;
}

?>


Yukarıda da $i değişkeni for dışında tanımladık,ve değeri { } içerisinde artırdık.Değişen bir şey olmayacaktır.

WHILE
While döngüsünün de yaptığı iş for dan çok da farklı değildir,ancak kullanıldığı yerler bazen farklılaşabilir.Şimdi while döngüsün yapısını inceleyelim.


<?php

$i=0;

while($i<10)
{
echo "selam<br>";
$i++;
}

?>


Gördüğünüz gibi değişkeni dışarıda tanımladık ve her çalıştırılışta değer artırılması işlemini döngü blokları içerisinde yaptık.


<?php

$i=0;

while($i != 10)
{
echo "selam<br>";
$i++;
}

?>


Yukarıda ise $i 10 olmadığı sürece while'ın çalışmasını sağladık.Değişen bir şey yok aslında.



do....while
do....while döngüsü ise bir kez çalıştıktan sonra koşulu kontrol eder.Eğer koşul doğrulanırsa çalışmaya devam eder.


<?php

$i=0;

do{
echo "selam<br>";
}while($i>10);

?>


Yukarıda while'a verilen koşulun doğrulanamayacağını biliyoruz.$i değişkeni ondan büyük değil.Bu yüzden döngü önce bir kez çalıştırılıp while bölümüne gelecek,koşulum doğrulanmadığı görülüp döngüden çıkılacaktır.

FOREACH
Foreach'ı dizileri okumak için kullanırız,bu yüzden bu döngüyü de diziler bölümünde göreceğiz.

BREAK
Break ifadesi döngülerden vs. çıkmaya yarar.Bunun en iyi örneğini sanırım switch deyiminde görmüştük,şimdi switchte break ifadesini nasıl kullandığımıza bakalım.


<?php

$i=2;

switch($i)
{
case 2:
        echo "değer 2";
        break;
case 1: 
        echo "değer 1";
        break;
default:
       echo "değeri bulamadım";
       break;
}

?>


Yukarıdaki kodları çalıştırdığımızda ekrana değer 2 yazılacaktır.Burada nelerin gerçekleştiğini bir daha gözlemlersek php önce case 2 ye bakacaktır,eğer $i nin değeri 2 ise koşul gerçekleşecek ve ekrana değer 2 yazılacaktır.Eğer değil ise alttaki caseyi kontrol edecektir.Eğer biz case 2 nin sonuna break deyimini yerleştirmiş olmasaydık,yani aşağıdaki gibi :


<?php

$i=2;

switch($i)
{
case 2:
        echo "değer 2";
       
case 1: 
        echo "değer 1";
        break;
default:
       echo "değeri bulamadım";
       break;
}

?>


Koşul doğrulandığı zaman değer 2 yazılacaktı ancak döngüden çıkılmayacak ve $i'nin değeri 1 olmamasına rağmen alttaki satırda yazılacaktı.Yani switch'ten çıkılmayacaktı.Eğer yukarıdaki örnek aşağıdaki gibi olsaydı :


<?php

$i=1;

switch($i)
{
case 2:
        echo "değer 2";
       
case 1: 
        echo "değer 1";
        
default:
       echo "değeri bulamadım";
       
}

?>


php önce koşulu yazacaktı,break olmadığı için alttakiler de yazılacaktı.($i nin değerini son örnekte 1 yaptık yani php koşulu yakaladığı yeri break yoksa koşulun altındaki caseleri yazdırır)

Gördüğümüz gibi break oldukça önemli bir deyimdir.


<?php

for($i=0;$i<10;$i++)
{
if($i == 5) break;
echo "$i.selam<br>";
}

?>


Yukarıdaki örnekte ise $i nin değeri 5'e geldiğinde döngüden çıkılmasını istiyoruz.Burada if deyimine dikkat çekmek istiyorum.If deyimine vereceğimiz tek satırlık bir direktif olduğu için { } kullanmadık.Aşağıdaki örnekleri inceleyelim :


<?php
$i=10;

if($i==10)   echo "selam<br>";       #GEÇERLİDİR

if($i==10)                                     #GEÇERLİDİR
echo "selam<br>";            

if($i==10)                                     #GEÇERLİDİR,"merhaba"'yı IF DOĞRULANMASA DA YAZACAKTIR

echo "selam<br>";
echo "merhaba";
?>


Gördüğümüz gibi tek satırlık ifadelerde { } kullanmasakta olur.

CONTINUE
Akış kontrolleri ve döngüler bölümünde göreceğimiz son konu continue deyimidir.Continue deyimi break'a benzer,bakalım hemen.


<?php

$i=0;

for(;$i<10;$i++)
{
if($i==5) continue;
echo "$i";
}

?>


Gördüğümüz gibi $i'nin değeri 5 olunca atlanıyor,ancak döngüden çıkılmıyor.


_____________________________

.






23 Temmuz 2008; 17:44:00


5-DİZİLER VE FOREACH
DİZİLER
Dizilerin de görevleri değişkenlerden farklı değildir.Amaç yine belli türde veri depolamaktır.Ancak dizilerde bir değil birden fazla değişken fazladır.Örneklerle daha iyi anlayacaksınız.
Php de dizileri array() fonksiyonu ile tanımlarız.Örneği inceleyelim.


<?php

$pd = array("php","asp","jsp");

?>


Az önce ilk dizimizi tanımladık.Ancak bu kodları yazıp,çalıştırdığınızda ekrana hiçbir şey yazılmayacaktır.Sebebi ise zaten birşey yazdırmamamızdır :).Peki o halde bu tanımladığımız dizi yazdıralım.Dizileri yazıdırırken dizi operatörünü ([]) kullanırız.


<?php

$pd  = array("php","asp","jsp");
echo "$pd[0]<br>";
echo "$pd[1]<br>";
echo "$pd[2]<br>";

?>


Gördüğümüz gibi 3 elemanlı dizimizi madde madde ekrana yazdırıyoruz.Örnekteki gibi dizi operatörünü kullanarak ([]) dizi elemanlarını ekrana yazdırabiliriz.Dizi operatörünün içine dizi indeksi adını verdiğimiz değer gelir.Dizi indeksi o maddenin dizideki yeridir.Yani jsp'nin dizideki yeri 2 dir.
Peki neden jsp nin dizi indeksi 2 dir,3 olması gerekmez mi ? Burada dikkat etmemiz gereken nokta şudur.Php deki dizi indeksleri 0 dan başlar.Yani yukarıdaki dizide "php" değerinin indeksi 0 dır.Bu yüzden de jsp nin indeks numarası 2 dir.
Biz de bu yüzden yazdırmaya 0 dan başladık. 

Dizileri farklı şekillerde de tanımlayabiliriz.Örneğin :


<?php

$pd[0] = "php";
$pd[1] = "asp";
$pd[2] = "jsp";

echo "$pd[0]<br>";
echo "$pd[1]<br>";
echo "$pd[2]<br>";

?>


Yine bu şekilde de tanımlayabilirdik :


<?php

$pd[] = "php";
$pd[] = "asp";
$pd[] = "jsp";

echo "$pd[0]<br>";
echo "$pd[1]<br>";
echo "$pd[2]<br>";

?>


Yukarıdaki durumda elemanlar tanımlanma sırasına göre indeksleneceklerdir.

Dizileri Seri Okumak (Döngülerle Diziler)
Dizilerin tüm elemanlarını bir döngü yardımıyla rahatça okuyabiliriz.


<?php

$dh = array("kopya kalpler","baytar","küheylan","vasiyet","terapi");

for($i=0;$i<count($dh);$i++)
{
echo "$dh[$i]<br>";
}

?>


Burada daha önce hiç karşılaşmadığımız bir fonksiyon gördük : count() fonksiyonu.Bu fonksiyonun işlemi kendisine parametre olarak verilen dizinin eleman sayını hesaplar.Fonksiyonlara işlemesi için verilen değerlere o fonksiyonun parametresi denir.Yukarıda $dh count() fonksiyonunun parametresidir.Yani yukarıdaki count() $dh içindeki dizinin eleman sayısını hesaplıyor böylelikle döngü sadece eleman sayısı kadar çalıştırılıyor.Döngü içerisinde ise dizi operatörleri içine $i değişkenini yerleştirdiğimize dikkat edin.$i değişkenin her çalıştırılışta değeri bir artıyor ve böylelikle döngü yazdırılıyor.


Foreach ile dizi okuma
Foreach genellikle dizi okumak için kullanırız.Hatta biz sırf dizi okumak için kullanacağız.Yukarıdaki dizi aşağıdaki şekilde de okuyabilirdik.


<?php

$dh = array("kopya kalpler","baytar","küheylan","vasiyet","terapi");

foreach($dh as $cc)
{
echo "$cc<br>";
}

?>


Yukarıdaki döngüde,döngü boyunda $dh içerisindeki değerler $cc ye yerleştirilecektir.Foreach'in asıl gücünü çok boyutlu dizilerde göreceğiz.

Çok Boyutlu Diziler
Şuana kadar tek boyutlu dizilerle çalıştık ancak php de çok boyutlu diziler tanımlamak ta mümkündür.Aşağıda çok boyutlu bir dizi örneği görüyoruz.


<?php

$dh= array(
       array("isim" => "echo",
              "işlevi" => "yazı yazdırır"),
      array("isim" => "count()",
            "işlevi" => "elemanları sayar"),
     array("isim" => "for",
            "işlevi" => "koşula göre iterasyon yaratır"));


?>


Çok boyutlu bir dizi tanımladık,ancak çok boyutlu dizileri tek boyutlular gibi "$dh[1]" şeklinde yazdıramayız."$dh[1]" şeklinde yazdırmayı denesek "Array" yazısıyla karşılaşırız.
Bunun sebebi birinci dizinin de kendi içinde diziler depolamasıdır.Yani farkettiyseniz birinci dizinin içinde de diziler tanımladık.Bu yüzden $dh[1] birinci dizinin elemanını yazdıracaktır.
Yani tekrar bir diziyi.Kısaca çok boyutlu dizileri aşağıdaki gibi yazıdırabiliriz.


<?php

$dh= array(
       array("isim" => "echo",
              "işlevi" => "yazı yazdırır"),
      array("isim" => "count()",
            "işlevi" => "elemanları sayar"),
     array("isim" => "for",
            "işlevi" => "koşula göre iterasyon yaratır"));

echo $dh[0]['isim'];


?>


Bu şekilde yazdırdığımızda echo yazısı ile karşılaşırız.Peki çok boyutlu dizileri nasıl seri bir şekilde tüm elemanlarını yazdırırız.İşte burada foreach döngüsü bize çok büyük kolaylıklar sağlıyor.


<?php

$dh= array(
       array("isim" => "echo",
              "işlevi" => "yazı yazdırır"),
      array("isim" => "count()",
            "işlevi" => "elemanları sayar"),
     array("isim" => "for",
            "işlevi" => "koşula göre iterasyon yaratır"));

foreach($dh as $cc)
{
while(list($a,$b) = each($cc))
{
echo "$a : $b<br>";
}
}

?>


Bu kodları çalıştırdığımızda tüm elemanların yazdırıldığını görürüz.Peki burada ne yaptık.Foreach her bir çalıştırılışta $dh deki elemanlar teker teker $cc ye geçecektir.Zaten foreach'i yukarıda da kullanmıştık.
Ayrıca foreach'in içinde bir de while döngüsünü kullandık.While döngsüne verdiğimiz koşulda ise,each() fonksiyonu aracılığıyla her bir değeri list fonksiyonuna aktardık.List fonksiyonu da kendisine aktarılan bu
değerleri kendi içinde verdiğimiz değişkenlere yerleştirdi.
Toparlamak gerekirse foreach ile dizi değişkenindeki her elemanı sırasıyla $cc değişkenine atıyoruz.Önce isim,sonra echo vs. vs..Daha sonra while içinde each() aracılığıyla $cc içindeki her bir değeri list'e atıyoruz.
List fonksiyonu ise kendi içinde tanımladığımız değişkenlere bu değerleri atıyor.$a ' ya başlıkları "isim" "işlevi",$b ye ise elemanları "echo" "yazı yazar" gibi.
Biliyorum biraz karışık ama gün geçtikçe daha da iyi anlayacaksınız.Ve tüm bilgiler oturacaktır.


6-FONKSİYONLAR
Bir çok programlama dilinin olduğu gibi fonksiyonlar php nin de yapı taşlarındandır.Farkında olmasak ta aslında şu ana kadar bir çok defa fonksiyonları kullandık.Örneği array(),list(),each(),echo() bunların hepsi birer fonksiyondu.Tabii bu fonksiyonlar php'nin getirdiği hazır fonksiyonlardı.Biz istersek php de kendi fonksiyonlarımızıda tanımlayabiliriz.Peki bu ne işe yarayacak.Fonksiyonlar aslında program parçacıklarıdır.Örneğin bir alışveriş portalı yazdığımızı farzedelim.Ve bir kaç farklı yerde veritabanı bağlantısı yapmamız gereksin.Biz heryer gerektiği yerde veritabanı bağlantı kodlarını yazacağımıza sadece tek bir yerde fonksiyon içerisinde yazıp gerektiğinde bu fonksiyonu kullanacağız.
Neyse fonksiyonlar tahmim ettiğiniz kadar zor değiller,hatta bence dizilerden daha kolaylar.

Fonksiyon Tanımlama
PHP de fonksiyonlar function ifadesi ile tanımlanırlar.Aşağıda ekrana "merhaba dünya" yazdıran bir fonksiyon tanımlayacağız.


<?php

function yazdir() 
{
echo "merhaba dunya";
}

?>


Function ifadesi ile php'ye bir fonksiyon tanımlayacağımı belirttik ve ardından da fonksiyonun ismini yazdık.Parantezleri şimdilik boş bırakıyoruz buraya daha sonra foknsiyonun alacağı parametreleri yazacağız.Ardından süslü parantezler içerisinde fonksiyonun gerçekleştirmesini istediğimiz komutları yazıyoruz.
İşte php de fonksiyon tanımlamak bu kadar basittir.Şimdi aşağıda tanımladığımız fonksiyonu çağıracağız ve ekrana "merhaba dünya yazılacak"


<?php
function yazdir() 
{
echo "merhaba dunya";
}

yazdir();

?>


Tanımladığımız fonksiyonları yine isim ve parantezler ile çağırırız.Şimdi aşağıda bu parantezleri de kullanacağız.

Dediğimiz gibi fonksiyonlarda parantezler yani (),fonksiyona parametre verilmesi için vardır.Şimdi öyle bir fonksiyon yazacağız ki,biz fonksiyonu çağırıp,ona 2 sayı vereceğiz ve fonksiyon o sayıları toplayıp ekrana yazdıracak.


<?php

function topla($a,$b)
{
echo $a+$b."<br>";
}


topla(2,4);


?>


Yukarıda yine bir fonksiyon tanımladık ve parantezler içine iki değişken yazdık.Ardından fonksiyona bu parantezlerdeki değişkenleri toplayıp yazdırmasını söyledik.
Aşağıda fonksiyonu çağırdımızda ona parametre olarak iki sayı verdik.2 $a değişkenine,4 ise $b değişkenine atandı.Fonksiyon da bu değerleri toplayıp yazdırdı.
Şimdi de farklı bir örnek yapacağız.Biz fonksiyonu çağırdımızda ona bir cümle vereceğiz ve bu cümleyi kaç defa tekrarlayacağınız söyleyeceğiz.


<?php

function iterasyon($cumle,$tekrar)
{
for($i=0;$i<$tekrar;$i++)
{
echo "$cumle<br>";
}
}


iterasyon("gam tozu ve dünyanın ninnisi",3);

?>


Bu kodları çalıştırdığımızda ekrana üç defa istediğimiz cümlenin yazılmış olduğunu görürüz.

Fonksiyonların değer döndürmesi
Fonksiyonlar illa ekrana birşey yazdırmak zorunda değildir.Onlar bir değer de döndürebilirler.Örneğin topla fonksiyonunu ele alalım.topla fonksiyonu ekrana sonucu yazdırmak zorunda değildi.İsteseydik topla fonksiyonu verdiğimiz iki rakamı toplayıp bize sonucu döndürürdü ve sonucu biz ekrana yazdırırdık.


<?php

function topla($a,$b)
{
return $a+$b;
}

echo topla(5,5);


?>


Yukarıdaki örnekte fonksiyonu çağırdığımızda $a ve $b değişkenlerine 5 değerlerini veriyoruz.Fonksiyon iki değişkeni toplayıp bize sonucu döndürüyor.Ve biz de sonucu ekrana yazdırıyoruz.Eğer echo yu kaldırırsanız ekrana bir şey yazılmadığını fark edeceksiniz.Fonksiyonların değer döndürmesini return sözcüğü ile sağlayabilirsiniz.Yukarıda da return $a+$b; ifadesi ile iki saynın toplamını döndür dedik.


Global İfadesi
Global ifadesi fonksiyonların dışındaki bir değişkenin fonksiyon içerisinde kullanılabilmesini sağlar.


<?php

$dh = 10;

function php()
{
echo $dh;
}

php();
?>


Bu kodları çalıştırdığınızda ekrana bir şey yazılmadığını fark edeceksiniz.Bunun sebebi $dh değişkenin fonksiyon tarafından tanınmamasındır.Dediğim gibi dışarıdaki bir değişkeni fonksiyon içerisinde kullanmak gerekir.Bunun için global ifadesini kullanırız.Aşağıda fonksiyon çalışacaktır.


<?php

$dh = 10;

function php()
{
global $dh;
echo $dh;
}

php();
?>



7-FORM İŞLEMLERİ
Evet php'nin yapıtaşlarını (diziler,değikenler,döngüler,fonksiyonlar,operatörler vs.) öğrendik,artık bu dili biraz daha etkin kullanma zamanımız geldi.
Öncelikle şunu söyleyeyim ki html kodlarının php versiyonları yoktur.Yani <form><a><b><i> vs. gibi html kodlarının php de bir karşılıkları yoktur.Zaten php de bir işaretleme dili değildir bu yüzden bu tagları getirmek zorunda değildir.Biz bu yüzden php içerisinde html de kullanırız.Mesela şu ana kadar da en çok <br> tagını php içerisinde kullandık.
Eğer html de form nesnelerini bilmiyorsanız,öğrnemenizi tavsiye ederim çünkü html form nesnelerini bilmeden bu konuyu anlamanız da mümkün olmaz.Zaten form nesnelerini öğrenmeniz de biraz html ilginiz varsa bence bir kaç saat sürecektir.Belki daha da kısa.
Bildiğiniz gibi form yollamanın iki metodu vardır.Biz bunları <form> etiketinin method niteliğinde belirtiyorduk.Bunlar GET ve POST metodlarıydı.Peki bu metodlar ne işe yarar ?
POST metodu ile veriler ziyaretçiler tarafından okunamazlar,yani ziyaretçiler göremezler.Oysa GET metondu veriler adres çubuğunda görünür,ziyaretçiler tarafından okunabilir.


BASİT FORM
Aşağıda kullanıcıdan bir isim alan ve onu ekrana yazdıran bir form görüyoruz.


DH.HTML nin içeriği :
<form action="dh.php" method="POST">
<b>isim :<br></b>
<input type="text" name="mesaj"><br>
<input type="submit" value="gönder">
</form>


DH.PHP NİN İÇERİĞİ
<?php

echo $_POST['mesaj'];

?>


$_POST değişkeni formdan post metoduyla gelen veriyi input alanından (textarea,vs. de olabilir) almaya yarar.DH.HTML de bir form hazırladık ve form gönderildiğinde dh.php sayfasının çağrılmasını istedik.DH.PHP çağrılınca da $_POST[] değişkeni formun mesaj ismindeki input alanındaki veriyi ekrana yazdırıyor.
Aynı şeyi GET ile de yapabilirdik.


DH.HTML
<form action="dh.php" method="GET">
<b>isim :<br></b>
<input type="text" name="mesaj"><br>
<input type="submit" value="gönder">
</form>




DH.PHP
<?php

echo $_GET['mesaj'];

?>


Burada da $_GET değişkeni ile adres çubuğundaki mesaj değişkenin değerini alıyoruz ve yazdırıyoruz.Adres çubuğuna bakarsanız şu şekli almış olduğunu görürsünüz :
http://localhost/dh.php?mesaj=yazdıklarınız
$_GET adres çubuğundaki değişkeni almak için kullanılır.Zaten biz de yukarıda öyle yaptık.

E-POSTA FORMU (MAIL FORM)
Sunucu taraflı dillerin güzel bir özelliği de web sayfası üzerinden herhangi bir kişinin e-posta adresine e-posta yollabilmesidir.Biz de bundan farklı birşey yapmayacağız.Ancak aşağıdaki kodları yerel ağda (localhost) çalıştıramayız.Localhost üzerinden bir kişiye e-posta gönderemeyiz.Bunun için bir hosta ihtiyacımız vardır.Daha doğrusu SMTP ye sahip bir hosta ihtiyacımız vardır.Peki SMTP nedir ? Açılımı Simple Mail Transfer Protocol'dür.Kısaca e-posta göndermek için SMTP destekli bir hosta ihtiyacımız vardır.Biz yine de örneğimizi yapacağız.Bence atlamayın ve bakın zaten php de e-posta yollamak için sadece bir fonksiyon kullanırız : mail().


DH.HTML
<form action="dh.php" method="POST">
<b>göndereceğiniz-posta adresi :</b><br>
<input type="text" name="eposta"><br><br>
<b>başlık :</b><br>
<input type="text" name="baslik"><br><br>
<b>mesajınız :</b><br>
<textarea name="mesaj"></textarea><br><br>
<input type="submit" value="gönder">
</form>



DH.PHP
<?php

$mesaj = $_POST['mesaj'];
$baslik = $_POST['baslik'];
$adres = $_POST['eposta'];
$konu = "bilgi vermek";

mail($adres,$konu,$mesaj,$baslik);
echo "e-posta gönderildi teşekkürler";
?>

mail fonksiyonu dört parametre alır.Yukarıdaki gibi mail($gonderilecek_adres,$konu,$icerik,$baslik)

Tek Bir Form Sayfası --Form Sayfasını ve Scripti Tek Sayfada Birleştirmek--
Şu ana kadar bir form gönderebilmek için iki sayfa kullandık.Bunlar formun bulunduğu,ve form tarafından çağrılan scriptin bulunduğu sayfalardı.Oysa biz çok daha kolay bir şekilde formu da scripti de tek bir sayfada birleştirebilirdik.Bu bize çok büyük bir kolaylık sağlar.


DH.PHP
<?php

if(!$_POST['gnd'])
{

echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"POST\">
         <b>isim :</b><br>
         <input type=\"text\" name=\"isim\"><br><br>
         <input type=\"submit\" name=\"gnd\" value=\"gönder\">
        </form>";

} else {

echo $_POST['isim'];

}
?>


Yukarıdaki form kullanıcıdan aldığı ismi ekrana yazdırıyor ancak bu form için tek bir sayfa yetiyor.Peki bu nasıl oluyor.Öncelikle size formda \ neden kullandığımızı açıklayayım.
Bildiğimiz gibi echo dan sonra iki tırnak kullanıyoruz.İşte ters slaş (\) karakteri kendisinden sonra gelen tırnağın geçersiz sayılmasını sağlar.Yani eğer biz \ kullanmasaydık php daha ilk tırnak gördüğü yerde echo ile yazmayı bitirdiğimizi sanacaktı ve formun yazımı devam ettiği için hata verecekti.Mesela normalde input tagının type niteliği type="text" şeklinde yazılır.Biz bunu php içinde type="text" şeklinde yazdığımızda php'nin kafası karışacaktı.Çünkü echo "type="text"" şeklinde bir yazımda php yazmayı hangi tırnaktan sonra kesip kesmeyeceğini anlamayacaktı.Fazla ve arka arkaya hatalı tırnak kullanımı echo nun çalışmasını engelleyecek ve hata verecekti.İşte biz ters slaş (\) karakteri ile php'ye bu karakterden sonra gelen tırnağın (") echo ile ilgisi olmadığını belirtiyoruz.Bunu html tagı içerisinde kullandığımız içinde ekrana yazılmıyor .Eğer html tagı içinde değilde şu şekilde kullansaydık ekrana bir tırnak yazdırılırdı. ÖRN : echo " \" ";

Ancak burada tek bilmediğimiz işlem bu değil.$_SERVER[PHP_SELF] değişkenini de neden kullandığımızı bilmiyoruz.Bizim bu değişkeni burada kullanma sebebimiz formu yine aynı sayfada açmasıdır.Bu değişken sayfanın ismini temsil eder.Yani formun gönderildiğinde yine aynı sayfayı açmasını sağlar.Biz burada $_SERVER[PHP_SELF] yerine dh.php de yazabilirdik (sayfası dh.php olarak kaydetmiştik) Eğer mesela.php diye bir sayfa oluşturup

<?php echo $_SERVER[PHP_SELF]; ?> yazıp kaydederseniz çalıştırdığınız sayfanın isminin ekrana yazılmış olduğunu görürsünüz.

Neyse kısaca $_SERVER[PHP_SELF] değişkenini burada kullanma amacımız sayfayın kendi kendisini çağırmasıydı.

Bir de sayfayı if ile iki ayırdık.If'e verdiğimiz koşul şuydu --> !$_POST['gnd']
Yani eğer formda gnd değişkeni yoksa formu göster,varsa scripti işle.Dikkat ederseniz submit'in ismini gnd yaptığımızı görürsünüz --> <input type="submit" name="gnd" value="gönder">

Form gönderildiğinde gnd isimli bir değişken oluşur ve sayfa yüklendiğinde php bu değişkeni kontrol eder.Eğer $_POST['gnd'] değişkeni yoksa formu gösterir.Eğer varsa scripti işlemeye başlar.Yani ismi ekrana yazdırır.

Kullanıcı Şifre/İsim Sorgulama
Son yapacağımız örnekte genellikle üyelik sistemlerinde bulunan kullanıcının girdiği şifreyi ve kullanıcı ismini sorgulama sistemini yazacağız.Tabii ki bir üyelik sistmi oluşturmak için veritabanı ve cookie (ya da session) bilgisi gerekir biz sadece sorgulayıp ekrana yazdıracağız.


<?php

if(!$_POST['gnd'])
{

?>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
<b>kullanıcı ismi :</b><br>
<input type="text" name="isim"><br><br>
<b>şifre :</b><br>
<input type="password" name="sifre"><br><br>
<input type="submit" name="gnd" value="gönder">
</form>

<?php

} else {

$gecerli_isim = "sagopa";
$gecerli_sifre = "kajmer";

if($_POST['isim'] == $gecerli_isim && $_POST['sifre'] == $gecerli_sifre)
{
echo "doğru giriş";
} else {
echo "yanlış giriş";
}

}

?>


Yine formu tek bir sayfa birleştirdik.Önce gnd değişkenin üretilip üretilmediğini kontrol ettik.Eğer üretilmemişse yani form gönderilmemişse formu yazdırdık.Eğer gönderilmişse de formdan gelen verilerin geçerli olup olmadığını kontrol ettik.

8-BELLİ BAŞLI PHP FONKSİYONLARI
Php de istediğimizi yapabilmemiz için aynı zamanda bir çok fonksiyon bilmemiz gerekir.İşte bu bölümde işimize yarayacak çeşitli fonksiyonları göreceğiz.

STR_REPLACE
Belli kelimeleri belli kelimelerle değiştirir. str_replace($eski,$yeni,$yazi);


<?php

$dh = "selam";

echo str_replace("selam","merhaba",$dh);

?>


Yukarıda str_replace() fonksiyonu $dh içinde "selam" görürse "merhaba" ile değiştirir.

SIZEOF()

Count() yaptığı işi yapar.

STRTOUPPER()

Kendisine verilen parametre içerisindeki tüm harfleri büyütür.


<?php

$dh = "selam";

echo strtoupper($dh);

?>


STRTOLOWER()

Kendisine verilen parametre içerisindeki tüm harfleri küçültür.


<?php

$dh = "SELAM";

echo strtolower($dh);

?>


UCFIRST()

Kendisine verilen parametrenin sadece ilk harfini büyütür.



<?php

$dh = "selam";

echo ucfirst($dh);

?>


UCWORDS()

Kendisine verilen parametrenin kelimelerinin sadece ilk harflerini büyütür.



<?php

$dh = "montajla düzelmeyecek tek şey hayattır";

echo ucwords($dh);

?>


TRIM()

Kendisine verilen parametrenin önünde ya da arkasında boşluk varsa siler.


<?php

$dh = "               montajla düzelmeyecek                   tek şey hayattır                 ";

echo "<pre>";
echo trim($dh);

?>


Bu fonksiyonun işlevini html'nin <pre> tagıyla daha rahat görebiliriz.

LTRIM()

Kendisine verilen parametrenin başındaki boşluğu siler.


<?php

$dh = "               montajla düzelmeyecek tek şey                hayattır             ";

echo "<pre>";
echo ltrim($dh);

?>


RTRIM()

Kendisine verilen parametrenin sonundaki boşluğu siler.



<?php

$dh = "               montajla düzelmeyecek tek şey                hayattır             ";

echo "<pre>";
echo rtrim($dh);

?>


FUNCTION_EXISTS()

Herhangi bir fonksiyonun mevcut olup olmadığını kontrol eder.


<?php

function dh()
{

}


if(function_exists(dh))
{
echo "mevcut";
} else {
echo "değil";
}

?>


NL2BR()

Kısaca metin içinde enter tuşunun işlev görmesini sağlar.Normalde aşağıdaki gibi bir metnin içinde enter kullanımı işe yaramayacaktır.Ancak nl2br() kullandığımız için işe yarıyor.


<?php

$dh = "selam
naber";

echo nl2br($dh);

?>


IS_NUMERIC()

Parametresinin numerik bir veri olup olmadığı kontrol eder.


<?php

$dh = 10;

if(is_numeric($dh))
{
echo "bu bir numara";
} else {
echo "numara değil";
}

?>


INTVAL()

Aldığı parametre sayısal ise bu değeri yansıtır.Eğer aldığı parametre boşsa ve ya sayı olmayacak bir karakterse 0'a eşitler.


<?php

$dh = "selam";

echo intval($dh);

?>


Yukarıdaki kodları çalıştırdığınızda ekrana 0 yazıldığını görürsünüz.Bunun sebebi $dh ın değerinin sayı olmamasıdır.Bu fonksiyon ne işe yarayacak diyebilirsiniz.Güzel bir güvenlik fonksiyonudur.


EXPLODE()

Kendisine verilen karakter katarını yine kendisine verilen karakterler doğrultusunda dizilere böler.


<?php

$dh = "selam&&merhaba&&iyidir";

$bol = explode("&&",$dh);

echo "$bol[0]<br>";
echo "$bol[1]<br>";
echo "$bol[2]<br>";

?>


STRLEN()

Strlen() bir karakter katarının uzunluğunu verir.



<?php

$dh = "selam";

echo strlen($dh);


?>



STRIP_TAGS()

Bu fonksiyonla karakter katarı içerisinde istediğimiz html taglarını devre dışı bırakabiliriz.


<?php

$dh = "<b>d<u>o</u>nanı<i>mh</i>aber</b";

echo strip_tags($dh,"<u>");

?>


Yukarıda strip_tags()'ın içindekiler hariç tüm taglar silinir.


9-PHP'DE DOSYA İŞLEMLERİ
Php,veritabanında olduğu gibi çeşitli dosyala üzerinde de işlem yapmamıza olanak tanır.'Peki veritabanı gibi bir nimet varken biz neden garip dosyalar üzerinde işlem yapalım' diyebilirsiniz.Bunun cevabı aslında çok basit.Bazı verileri veritabanına kaydedip onu yormak ve doldurmak istemeyiz.Dosyalar hiç tahmin etmediğimiz yerlerde imdadımızı yetişebilirler.

DOSYALARI AÇMA/KAPATMA
Dosylarla işlem yapabilmek için öncelikle onları açmalıyız.Bunun için fopen() fonksiyonunu kullanırız.Fopen() iki parametre kabul eder.Birincisi dosyanın ismi ve uzantısı,ikincisi ise dosyanın ne için açılacağıdır.Dosyayı ne için açarız ? ya okumak,ya yazmak,ya da eklemek yapmak için,eğer dosyayı okumak için açıyorsak : r,yazmak için açıyorsak : w,ekleme yapmak için açıyorsak : a'yı parametre olarak yazarız.
Fclose() fonksiyonu ise işimiz bittikten sonra dosyayı kapatmak için kullanılır.Dosya ile işimiz bittikten sonra onu kapatmalıyız.


<?php

$dh = fopen("dh.txt","w");
fclose($dh);

?>


Yukarıda dh.txt isminde bir dosyayı açtık ancak hiçbir işlem yapmadan kapattık.Dikkat etmemiz gereken nokta şu :Eğer dosyayı yazmak için açarsak (w) ve dosya mevcut değilse php dosyayı oluşturur ve gerekli işlemi yapar ancak eğer dosya zaten varsa o zaman da dosyadaki tüm veriler gidecek yani yeni veriler ötekilerini götüreceklerdir.
Bu diğer dosya işlemlerinde geçerli değildir.

DOSYAYA YAZMAK/EKLEMEK
Dosyalara yazmak için çeşitli fonksiyonlar kullanırız.Bunlar fputs(),fwrite().Bu iki fonksiyondan istediğimizi kullanabiliriz.


<?php

$dh = fopen("dh.txt","w");

fputs($dh,"donanımhaber");

fclose($dh);
?>


Yukarıdaki örnekte dosyayı yazmak için açıp,içine fputs() fonksiyonu yardımıyla "donanımhaber" yazıp,dosyayı kapatıyoruz.Eğer dh.txt dosyayı mevcut değilse o zaman bir dh.txt dosyası oluşturulur.Eğer mevcutsa ve içinde daha önceden veri varsa onlar silinir ve yenileri eklenir.Aynı şeyi fwrite() kullanarak ta yapabilirdik.


<?php

$dh = fopen("dh.txt","w");

fwrite($dh,"forum donanımhaber");

fclose($dh);
?>


Yukarıdaki kodları çalıştırdığımızda donanımhaber yazısının silindiğini ve yerine forum donanımhaber yazdığını görürüz.Bu dosyayı yazmak için açtığımızdan ileri gelir.Fonksiyonla bir alakası yoktur.

Peki dosyada önceki veri kalsa ve biz yenilerini ekleyebilsek ? Elbetteki bu da mümkün.Tek yapmamız gereken dosyayı yazmak yerine (w) eklemek için (a) açmak.Yazmak için kullandığımız fonksiyonları kullanabiliriz.


<?php

$dh = fopen("dh.txt","a");

fwrite($dh,"ne güzel sitedir\n");
fputs($dh,"donanımhaber");

fclose($dh);
?>


\n satır atlamamızı sağlar.Bunu dosya işlemleri haricinde de kullanırız (\n).

DOSYALARI OKUMAK
Dosyaları okumak olmasaydı sanıırım yazmanında pek bir anlamı kalmazdı.Dosyaları okumak için : fgets(),fgetc(),fread(),feof() fonksiyonlarını kullanabiliriz.

fgets()


<?php

$dh = fopen("dh.txt","r");
echo fgets($dh,1024);
fclose($dh);

?>


fgets() ile dosyadan veri okuyabiliriz.Yukarıdaki 1024 okunacak byte miktarıdır.Yukarıda fgets() 1024 byte lık bir veriyi alacaktır.

feof()
Dosyaları döngülerle okurken dosya sonuna ulaştığımızı haber verecek bir şeye ihtiyacımız vardır.Bu ihtiyacı php feof() fonksiyonu sağlar.Feof() fonksiyonu dosya sonuna ulaşılmadığı müddetçe false döndürür.Dosya sonuna ulaşıldığında ise true döndürür.Şimdi aşağıdaki şarkıyı dosyaya yazalım :

Kopya kalpler, gözlerin önünde parlamakta bir fener ve ihtirasla süslenen bir gelecek önüme kurban gülmek, ağlamak seçimlerim, hangi şıkta mola verendim ayazlarında terleyendim, saçmalık bu his ve geriye dönüşü yok, pis bir sakaya maruzum ve hecelerimde kimi zaman aruzum, anca buldum arzularımı, arz-talep mi bilmem, hep bu farzla yaşanılır mı, ben ne istedim ki önüme koydular bu kuklayı
ve zor günümde hor görüldüm, kor bir aleve ben gömüldüm, hislerimde çürüdüm artık anla, kopya kalbim çok çizildi, kaprisinden bezdi, adamın anca gizli bir kaçak suç işlemiş ve izini bulamamışlar, işte şimdi pişti oldun, yokluğun bir ölüme benzetildigi şiir tadında varlığın bir saçmalıkmış, acil anladım, anca topladım, kanca sapladım bu acıya bir el olsun ben de ateşi bastım, kurut bu dereyi sen kolaysa, gözlerim yine de parçalı bulutlu, anlamın da uludur, aşkın gözleri hep sulu mudur, hakkı bu mudur, sadakatın güvenimin sonu mudur, sen kaderdin.


Ve bu kodları çalıştıralım.


<?php

$dh = fopen("dh.txt","r");

while(!feof($dh))
{
echo fgets($dh,1024)."<br>";
}

fclose($dh);
?>


Yukarıda while() döngsüne verdiğimiz koşul şuydu : feof() true döndürmedikçe devam et.E feof() ta zaten dosya sonuna gelmedikçe true döndürmediğine hiçbir sorun yok. 

fgetc()
fgetc() dosyadan bir karakterlik bir veri okur.


<?php

$ds = fopen("dh.txt","r");
echo fgetc($ds);


fclose($ds);
?>


Ancak biz elbetteki bu fonksiyonla da tüm verileri okuyabiliriz.


<?php

$ds = fopen("dh.txt","r");

while(!feof($ds))
{
echo fgetc($ds);
}

fclose($ds);
?>



fread()
fread() fonksiyonu belirli boyutta veri okur.


<?php

$ds = fopen("dh.txt","r");

while(!feof($ds))
{
echo fread($ds,1024);
}

fclose($ds);
?>



Anlamadığınız yerleri ö.m den ya da konu açarak soruabilirsiniz arkadaşlar,hatam olmuşsa da bilenlerin düzeltmesini rica ediyorum.


DİĞER DOSYA FONKSİYONLARI
Bazen dosyanın ismini,boyutunu vs. öğrenmek isteyebiliriz.

filesize() : Dosyanın boyutunu döndürür.
is_file() : Parametrenin bir dosya olup olmadığını kontrol eder.
is_dir() : Parametrenin bir dizin olup olmadığını kontrol eder.
is_writable() : Dosyanın yazılabilir olup olmadığını kontrol eder.
is_readable() : Dosyanın okunup okunamayacağını kontrol eder.
fileatime() : Dosyaya son erişim tarihini verir.
filemtime() : Dosyanın son değiştirilme tarihini verir.
file_exists() : Dosyanın mevcut olup olmadığını kontrol eder.
unlink() : Dosyayı kaldırır.
touch() : Dosya oluşturur (dosya zaten varsa içeriğine dokunmaz ama güncellenme tarihlerini değiştirir)


Şimdi bir örnekte bu fonksiyonların nasıl çalıştığını görelim (dh.txt isimli bir dosyamız olsun)


<?php

if(file_exists("dh.txt"))
{
echo "dosya mevcut<br>";
}

echo "boyut ".filesize("dh.txt")."<br>";  

if(is_file("dh.txt"))
{
echo "bu bir dosyadır<br>";
}

if(is_dir("dh.txt"))
{
echo "bu bir dizindir<br>";
}

if(is_writable("dh.txt"))
{
echo "yazılabilir<br>";
}

if(is_readable("dh.txt"))
{
echo "okunabilir<br>";
}

echo "dosyaya son erişim :".fileatime("dh.txt")."<br>";
echo "dosyanın son değiştirilme :".filemtime("dh.txt")."<br>";
unlink("dh.txt");  //DOSYA GİTTİ
touch("dh.txt"); //DOSYA TEKRAR OLUŞTURULDU


?>


Dosya işlemlerimiz bitti,tarih ve zaman işlemlerinden sonra inşallah veritabanıyla uğraşmaya başlayacağız.


10-TARİH/ZAMAN İŞLEMLERİ
Php'de veritabanlarına geçmeden önce tarih zaman işlemlerini öğrenmemiz iyi olacaktır.

time()
Bu fonksiyonun ilginç bir işlevi var.1 Ocak 1970 tarihinden bulunduğumuz ana kadar geçen saniyeleri döndürür.Bu fonksiyonu tek başına kullanmak pek bir şey ifade etmez zira yazdırdığınızda (echo time() ) geçen saniyeleri görürsünüz.Bunu az sonra date() fonksiyonu ile beraber kullanacağız.

getdate()
getdate(); Fonksiyonu

Bu fonksiyon bir dizi (array) yaratarak alacağı parametrelere göre çıktı verir. Fonksiyonun alabileceği parametreler şunlardır;
seconds (Saniyeler)
minutes (Dakikalar)
hours (Saatler)
mday (Ay içerisindeki gün sıra sayısı)
wday (Hafta içerisindeki gün sıra sayısıdır. 0-6 arasında değer alır.)
mon (Yıl içerisindeki ayın sıra sayısı)
year (Yıl)
yday (Yıl içerisindeki günün sıra sayısı)
weekday (Gün)
month (Ay)
0 (Sıfır rakamı. 01.01.1970 tarihinden günümüze kaç saniye geçtiğini verir (UNIX zaman mührü).
Aşağıdaki şekilde, getdate(); fonksiyonunun oluşturduğu dizinin (array`in) tüm elemanlarını listeleyebilirsiniz. Hepsinin çıktısını alabilirsiniz;

<?php

# Şu andaki tarihi al
$x = getdate();

# Diziyi ekrana bas.
print_r($x);

?>

Örnek bir kullanım ise;

<?php

# Şu andaki tarihi al
$x = getdate();

# Gün-Ay-Yıl olarak tarihi bas.
echo $x[weekday] ."-". $x[month] ."-". $x[year];

?>


Bu örneğin çıktısı Tuesday-April-2004 gibi bir şey olacaktır. Çıktıyı Türkçe alabilmek için siz de bir array yapısı yaratın ve Türkçe çıktı almayı deneyin. Böylece hem array üzerine örnek yapmış olur, hem de basit bir script hazırlamış olursunuz
 (Getdate() alıntıdır )


date()
Date() fonksiyonu ile php'de tarih işlemleri yapabiliriz.Mesela bugünün tarihini alalım.

* a [Küçük A]: am veya pm şeklinde çıktı verir.
* A [Büyük a]: AM veya PM şeklinde çıktı verir.
* d [Küçük D]: Ayın içinde hangi günde olduğunuzu başta sıfır olmak üzere 01 gibi bir formatta verir.
* D [Büyük d]: Üç harfli gün adını verir.
* F [Büyük f]: Ayın tam adını ingilizce olarak verir. June gibi bir çıktı verecektir.
* g [Küçük G]: Başta sıfır olmamak üzere 12 saat formatında saati verir. 1-12 arasında çıktı verir.
* G [Büyük g]: Başta sıfır olmamak üzere 24 saat formatında saati verir. 1-23 arasında çıktı verir.
* h [Küçük H]: Başta sıfır olmak üzere 12 saat formatında saati verir. 01-12 arasında çıktı verir.
* H [Büyük h]: Başta sıfır olmak üzere 24 saat formatında saati verir. 01-23 arasında çıktı verir.
* i [Küçük I]: Dakika bilgisini 00 ve 59 arasında verir.
* j [Küçük J]: Başta sıfır olmadan ayın içinde hangi günde olduğunuzu verir. 1-31 arasında çıktı verir.
* l [Küçük L]: Günün tam adını ingilizce olarak verir. Sunday gibi bir çıktı verir.
* L [Büyük l]: Artık yıl için kullanılır. Eğer tarih artık yıl içerisinde ise true, değilse false olarak işler.
* m [Küçük M]: Başta sıfır olmak üzere 01-12 arasında yılın içerisindeki ayın sayısını verir.
* M [Büyük m]: Üç harfli ay adını verir.
* n [Küçük N]: Başta sıfır olmamak üzere 1-12 arasında yılın içerisindeki ayın sayısını verir.
* s [Küçük S]: Başta sıfır olmak üzere 0-59 arasında saniye değerini verir.
* S [Büyük s]: İngilizce`de “nci” anlamına gelen st, nd, rd, th değerlerinin çıktısını, ardından geldiği sayının değerine göre verir.
* t [Küçük T]: Belirtilen ayın kaç gün olduğunu verir. 28-31 arası çıktı verir.
* T [Büyük t]: Üç harfli sunucunun saat dilimi ayarını verir. EST, MDT gibi çıktılar verir.
* U [Büyük u]: UNIX zaman mührüdür. 01.01.1970 tarihinden günümüze kaç saniye geçtiğini verir.
* w [Küçük W]: Başta sıfır olmamak üzere haftanının gününü sayısal değerde verir. 0-6 değerleri arasında çıktı verir.
* y [Küçük Y]: İki rakamlı yıl çıktısı verir. Örneğin 2004 yılının bu formattaki çıktısı 04 olacaktır.
* Y [Büyük y]: Dört rakamlı yıl çıktısını verir. 2004 gibi bir çıktı verecektir.
 (italik yer alıntıdır)

<?php

$time = time();
echo date("Y-m-d",$time);

?>


Gördüğümüz gibi date() fonksiyonu ile onun alacağı özel parametreler ile istediğimizşekilde yazırabiliriz.Mesela şimdi ekrana tarihi ve saati yazdjıralım yazdıralım.

<?php


$time = time();
echo date("j F Y",$time);
echo "<br>".date("d/m/y, H:i",$time);
?>


Yukarıdaki örnek te gördüğümüz gibi farklı formatlarda,tarihi,saati yazdırıyoruz.

mktime()

Verdiğimiz tarihin hangi güne denk geldiğini bulur.Parametreleri saat-dakika-saniye-ay-gün-yıl şeklinde alır.


<?php

$x = mktime(0,0,0,9,8,2008);
echo date("l", $x);


//bu örnek alıntıdır
?>


ya da şu şekilde de yapabilirdik :

<?php

$dh = mktime(0,0,0,1,1,2005);
echo date("l F Y",$dh);

?>


checkdate()
Verilen tarihin geçerli olup olmadığını kontrol eder.Parametreleri Ay-Gün-Yıl şeklinde alır.

<?php

echo checkdate(4,4,2008)

?>


Yukarıdaki örnekte ekrana 1 yazıldığını görürüz.Bunun sebebi fonksiyonun true döndürmesidir.

11-VERİTABANI İŞLEMLERİ
Şuana kadar php'nin gücünü pek iyi anlayamadık.Ancak asıl olarak veritabanı işlemlerini öğrendikten sonra bu dilin gücünü ve bu dilde yapılabilecekleri kavrayacağız.
Peki veritabanı nedir ? Veritabanını (database) gerekli bilgilerin düzenli bir şekilde tutulduğu ve yeri geldiğinde kullanıldığı veri deposu olarak tanımlayabiliriz.Biz veritabanı olarak mysql kullanacağız.İlk derste de söylediğim gibi wampserver kurarak bilgisayarımıza mysql'de kurmuş olduk.Ancak şu ana kadar onu hiç kullanmadık.Eğer adres çubuğuna localhost/phpmyadmin yazarsanız mysql veritabanı için hazırlanan arayüzü görürsünüz.
Mysql bir veritabanıdır.Eğer wampserver'ın 2.0 sürümünü indirmişseniz (ilk derste verdiğim link) bilgisayarınıza apache 2,mysql 5,php 5 ve phpmyadmin yüklemişiniz demektir.Phpmyadmin,mysql'ü yönetmek için hazırlanmış bir arayüzdür.



Veritabanı işlemi yapmak demek SQL demektir.SQL veritabanları üzerinde işlem yapmamız için tasarlanmış bir dildir.Açılımı Structured Query Language (Yapısal sorgulama dili)'dir.Biz sql ile veritabanları üzerinde kayıt,veri silme,seçme vs. işleri yaparız.
Şu ana kadar sadece php ile çalıştık.Ancak veritabanları ile işlem yapmak için sql'i kullanmak zorundayız.Sql'i php'nin içinde yazarız.SQL php'den tamamen farklı bir dildir.Veritabanları üzerinde işlem yapmak için ASP'de de , C#'da da,JAVA'da da aynı SQL'i kullanırız.
Biz bu bölümde önce mysql'i biraz inceleyeceğiz.Ardından temel sql komutlarını ve php ile veritabanında işlem yapmayı öğreneceğiz inşallah.

MYSQL
Msyql'deki tüm verilerimiz satırlar halinde düzenlenmiş tabloların içinde bulunur.
Aşağıda benim veritabanlarımı görüyorsunuz.Tüm tablolar bu veritabanları içinde bulunur.



Eğer mysql'de daha önceden veritabanı oluşturmamışsanız muhtemel sizde information_schema,mysql gibi yüklemeden gelen bir veritabanı vardır.Neyse biz sadece inceleyeceğiz.Şimdi soldaki veritabanı linklerinden birine tıklayalım.Karşımıza o veritabanı içindeki tablolar gelir.



Neyse şimdilik biz sadece biraz inceleme yaptık.Asıl temel sql komutlarını öğrenmeye başladığımızda mysql'ü anlayacağız.


TEMEL SQL KOMUTLARI

TABLO OLUŞTURMA
Mysql'de tablo oluşturmak için CREAT TABLE komutu kullanılır.Şimdi veritabanı linklerinden birine tıklayın.Yukarıdaki "SQL" sekmesine tıklayın.Karşınıza şöyle bir ekran gelmeli.

Tüm sql komutlarını buraya yazıp çalıştıracağız.



CREATE TABLE komutu mysql'de tablo oluşturmaya yarar.Şimdi aşağıdaki komutu yazıp "Git" dediğimiz de "uyeler" isminde bir tablo oluşturmuş oluruz.

CREATE TABLE uyeler(isim VARCHAR(150),sifre VARCHAR(150));


Burada uyeler isminde,içerisinde iki alan barındıran bir tablo oluşturduk.Şimdi içine gidelim.Soldaki linklerden oluşturduğumuz tablonun ismini seçin.


Bu tabloya eklenen satırlarda da iki alan olacaktır.Bu eklenen satırlarda da isim ve şifreler yer alacaktır.Yani üyelerin isim ve şifrelerini bu tabloya kaydedeceğiz.Satır eklemyi de azs sonra göreceğiz.Peki bu VARCHAR vs. onlar nedir ? VARCHAR mysqldaki veri türlerinden biridir.Aşağıda MYSQL daki veri türlerini görüyorsunuz.



text-yazı
CHAR( ) : sabit 0 - 255 karakter.
VARCHAR( ) : değişken 0 - 255 karakter.
TINYTEXT : En Fazla 255 karakter.
TEXT : En Fazla 65.535 karakter.
BLOB : En Fazla 65.535 karakter.
MEDIUMTEXT : En Fazla 16.777.215 karakter.
MEDIUMBLOB : En Fazla 16.777.215 karakter.
LONGTEXT : En Fazla 4.294.967.295 karakter.
LONGBLOB : En Fazla 4.294.967.295 karakter.

sayı
TINYINT( ) : -128 ,127 yada 0-255 UNSIGNED.
SMALLINT( ) : -32.768 ,32.767 yada 0 – 65.535 UNSIGNED.
MEDIUMINT( ) : -8.388.608 , 8.388.607 yada 0 – 16.777.215 UNSIGNED.
INT( ) : -2.147.483.648 , 2.147.483.647 yada 0 – 4.294.967.295 UNSIGNED.
BIGINT( ) : -9.223.372.036.854.775.808 , 9.223.372.036.854.775.807 yada 0 – 18.446.744.073.709.551.615 UNSIGNED.
FLOAT : Küçük Noktalı sayı.
DOUBLE( , ) : Büyük Noktalı sayı.
DECIMAL( , ) : DOUBLE tipte string şeklinde saklanır.


tarih,saat
DATE : YYYY-MM-DD
DATETIME : YYYY-MM-DD HH:MM:SS
TIMESTAMP : YYYYMMDDHHMMSS
TIME : HH:MM:SS

diğer
ENUM ( ) : Kullanıcı tanımlı liste tipi. Ör; ENUM("e","h")
SET : Küme Tipi. ENUM benzeri. Aynı anda birden fazla kayıt tutabilir. 
(italik kısım alıntıdırhttp://www.ayhanbaris.c...05/mysql-veri-tipleri/)


Peki bu veri türleri ne işe yarar.Gördüğümüz gibi VARCHAR en fazla 0-255 arasında karakter alan bir türdür.Ve biz uyeler tablosunun isim ve sifre alanlarını bu türde oluşturduk.Ve oluştuturken de ne kadar karakter alacağını yazdık.VARCHAR(150).Zaten en fazla 255 karakter alabilirdi.İşte her sütunun bir veri türü vardır.

Anlamadığınız yerleri ö.m atarak ya da yeni konu açarak sorabilirsiniz.


VERİ EKLEME

Tabloya yeni verileri eklemek için INSERT INTO komutunu kullanırız.Şimdi daha önce oluşturduğumuz üyeler tablomuza bir gidelim.



Resimdeki gibi önce uyeler linkine tıklayalım (kırmızı çember),ardından gözat linkine tıklayalım (yeşil çember) ekrana hiç bir şey yazılmadığını göreceksiniz.Bunun sebebi tablomuza hiç veri eklemememizdir.Şimdi biz bu tabloya yeni bir satır ekleyeceğiz,içinde isim ve şifre yer alacaktır.

INSERT INTO uyeler(isim,sifre) VALUES('admin','abort45');


Bu kodları SQL bölümüne yazıp çalıştırdığınızda tablomuza yeni bir satır eklenmiş olduğunu görürsünüz.



Yukarıda INSERT INTO dan sonra verinin girileceği tabloyu ve verinin girileceği tablonun içindeki alanları yazdık.VALUES ten sonra ise gerekli değerleri yazdık.Kestirme yoldan aşağıdaki gibi de yapabilirdik.

INSERT INTO uyeler VALUES('admin','abort45');



VERİ SEÇMEK
Veritabanında tablo oluşturup veri ekliyoruz peki bu verileri nasıl seçeceğiz ? nasıl seçip ekrana basacağız ? bunun için SQL de SELECT komutunu kullanırız.

SELECT * FROM uyeler;


Yukarıdaki kodu çalıştırdığımızda uyeler tablosundaki verilerin ekrana geldiğini görürüz.
SELECT komutundan sonra kullandığımız yıldız (*) herşey anlamına gelmektedir.Yani tablodaki tüm alanlardaki verileri çek.FROM dan sonra ise de hangi tablodan veri çekileceği gelir.
Yani "uyeler tablosundan tüm alanları çek"

SELECT isim FROM uyeler;


Yukarıdaki kodları çalıştırdığımızda sadece isim alanındaki verilerin ekrana geldiğini görürüz.

Where
Where ile bir koşula bağlı olarak veri seçimi yapabiliriz.Şimdi tablomuza dört tane daha satır ekleyelim.

INSERT INTO uyeler VALUES('root','root');
INSERT INTO uyeler VALUES('abcd','root');
INSERT INTO uyeler VALUES('sago','root');
INSERT INTO uyeler VALUES('mysql','sql');


Yukarıda tablomuza dört yeni veri daha ekledik.Şimdi sadece şifresi "root" olanları çağıralım.

SELECT * FROM uyeler WHERE sifre = 'root';



Yukarıda uyeler tablosundan tüm alanları çekiyoruz ancak sadece sifre alanı root olan satırları.

AND ve OR
Şöyle bir koşul da isteyebilirdik ismi ve şifresi root olanları çek.O halde ne yapacaktık.

SELECT * FROM uyeler WHERE isim = 'root' AND sifre = 'root';


Yukarıdaki kod ile ismi ve şifresi root olan satırı çekiyoruz.Yukarıda ismi ve sifresi root olan satırlar gelecektir.Aşağıdaki ile ismi ya da sifresi root olanları çekebiliriz.

SELECT * FROM uyeler WHERE isim = 'root' OR sifre = 'root';


Yukarıda ise ismi ya da sifresi root olan satırlar gelecektir.

Sıralamak
Verileri çekerken belli bir şeye göre sıralamak isteyebiliriz.ORDER BY bunun için vardır.

SELECT * FROM uyeler ORDER BY isim;


Aynı şekilde alfabetik ya da tersten sıralatabiliriz.Mesela tüm verileri isim tablosunda z den a 'ya sıralatalım.

SELECT * FROM uyeler ORDER BY isim DESC;


A dan Z ye sıralatmak için ASC kullanırız.

SELECT * FROM uyeler ORDER BY isim ASC;




KAYIT SİLMEK

SQL de kayıt silmek için DELETE komutu kullanılır.

DELETE FROM uyeler;


Dikkat edilmesi gereken nokta yukarıdaki komutun tablo içindeki tüm verileri sileceğidir.Örneğin biz sadece sifresi root olanları silmek istiyoruz.

DELETE FROM uyeler WHERE sifre = 'root';



TABLO SİLMEK
Tabloyu DROP TABLE komutu ile silebilirsiniz.

DROP TABLE uyeler;


KAYIT GÜNCELLEME
Diyelim bir kullanıcı ismi olarak admin şifre olarak root girdik,ardından bu şifreyi değiştirmek istedik.Bunu UPDATE komutuyla yapabiliriz.

UPDATE uyeler SET sifre = 'yeniSifre' WHERE isim = 'admin';


Yukarıda isim alanı admin olan üye(ler) in sifre kısmı yeniSifre olacaktır.


PHP İLE VERİTABANI İŞLEMLERİ
Artık php ile mysql de işlem yapmamızın zamanı geldi.Bir php sayfasında veritabanı ile işlem yapabilmek için mutlaka veritabanı bağlantısı ve seçimi yapmış olmamız gerekir.
Bu iş için iki fonksiyon göreceğiz.

mysql_connect() : veritabanı bağlantısı yapar
mysql_select_db() : veritabanı seçimi yapar

şimdi bu fonksiyonların nasıl kullanacağımızı görelim : mysql_connect("vt sunucusu adresi","vt kullanıcı ismi","vt sifresi")

eğer mysql'ün kullanıcı ismi ve şifresini değiştirmemişseniz kullanıcı ismi root olacaktır.Şifre ise olmayacaktır.

mysql_connect("localhost","root","");


Veritabanına bağlandık.

mysql_select("information_schema");


Ve information_schema veritabanını seçtik,bu vt içindeki tüm tablolara erişebiliriz.



PHP İLE VERİTABANINA KAYIT EKLEMEK

<?php

mysql_connect("localhost","root","");
mysql_select_db("ceycey"); //DİKKAT EDİN KENDİ VERİTABANIMI YAZDIM

$sql = "INSERT INTO uyeler VALUES('admin','root')";
mysql_query($sql);

?>


mysql_query() php ile sql dilinde işlemler yapmamızı sağlar.Yani sql kodlarımızı çalıştırır.Yukarıda mysql_query ve sql dili aracılığıyla veritabanımıza kayıt ekliyoruz.

<?php

mysql_connect("localhost","root","");
mysql_select_db("ceycey"); //DİKKAT EDİN KENDİ VERİTABANIMI YAZDIM

$sql = "INSERT INTO uyeler VALUES('admin','root')";

if(mysql_query($sql))
{
echo "kaydınız başarıyla eklendi";
} else {
echo "kaydınız eklenemedi";
}

?>


İşte kayıt eklemek bu kadar kolay.Son olarak iki fonksion daha göreceğiz mysql_fetch_array() ve mysql_num_rows().

mysql_fetch_array() bir sql cümlesine göre o tablodaki verileri ekrana yazdırmamızı sağlar.

<?php

mysql_connect("localhost","root","");
mysql_select_db("ceycey"); //DİKKAT EDİN KENDİ VERİTABANIMI YAZDIM

$sql = "SELECT * FROM uyeler";
$sonuc = mysql_query($sql);

while($diz = mysql_fetch_array($sonuc))
{
echo $diz['isim']."<br>";
echo $diz['sifre'];
}


?>


Bir while dizisi içerisinde isim ve sifre alanlarına sahip uyeler isimli tablomuzdaki verileri rahatça sıraladık.

KAYIT SAYMAK VE BASİT ÜYE GİRİŞİ
mysql_num_rows() verdiğimiz sql cümlesinin veritabanında kaç satıra uygun olup olmadığını sayar diyebiliriz.Bir örnekle daha iyi anlayacaksınız.Şimdi basit bir üye giriş sistemi yapalım.

<?php

if(!$_POST['gnd'])
{
?>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
<b>kullanıcı ismi :</b><br />
<input type="text" name="user" /><br /><br />
<b>şifre :</b><br />
<input type="password" name="pass" /><br /><br />
<input type="submit" name="gnd" value="giris">

<?php

} else {

mysql_connect("localhost","root","");
mysql_select_db("ceycey"); 

$isim = $_POST['user'];
$sifre = $_POST['pass'];
$sql = "SELECT * FROM uyeler WHERE isim = '$isim' AND sifre = '$sifre'";
$sonuc = mysql_query($sql);

if(mysql_num_rows($sonuc)==0)
{
echo "kullanıcı ismi ve şifre yanlış";
} else {
echo "şifre ve isim doğru";
}
}

?>



Veritabanı işlemleri burada bitti.Örnek scriptler bölümünde çeşitli scriptlerle veritabanı işlemlerini daha rahat anlayacaksınız.



< Bu mesaj bu kişi tarafından değiştirildi amone -- 16 Ağustos 2008; 7:18:48 


_____________________________

Software Developer...






12-COOKIELER VE SESSIONLAR
COOKIELER
Cookie (çerez ya da kurabiye) aslıda web sitesinden kullanıcının bilgisayarına atılan bir text dosyasıdır.Bu dosya web sitesinin bilgilerini içerir.Zararlı bir dosya değildir.
Örneğin beni hatırla işlemleri cookieler aracılığıyla yapılır.Mesela bu sitenin de bir cookiesi bilgisayarınızda mevcuttur.
Diyelim bir üyelik sistemimiz var,kullanıcı,üye ismini ve şifresini yazar eğer girdiği veriler doğruysa bir cookie oluşturulur ve kullanıcı siteye giriş yapmış olur.Üyelik sistemlerinin temel mantığı bu kadar basittir.
Örneklerle cookieleri daha iyi anlayacaksınız.Cookieler setcookie() fonksiyonu ile oluşturulurlar.

setcookie("isim","değer",geçerliliksüresi,"yol","domain")

Yol ve domain genellikle kullanılmazlar.Örneğin cookienin hangi klasörde geçerli olacağı gibi diyebiliriz.

İsim bölümüne cookie nin ismi yazılır,cookie ye bir değer verilir ve geçerlilik süresi yazılır.


<?php

if(!$_COOKIE['rap'])
{

echo "bu sizin ilk gelişiniz";
setcookie("rap","rap",time()+3600);
} else {
echo "daha önce de geldiniz";
}

?>



Yukarıda öncelikle daha önceden "rap" isminde bir cookienin oluşturulup oluşturulmadığını,yani kullanıcının bilgisayarında böyle bir cookienin var olup olmadığını kontrol ettik.Eğer yoksa bunun kullanıcının ilk gelişi olduğunu anladık ve "bu sizin ilk gelişiniz" yazdırdık.Tabii bir de cookie oluşturduk.Önce cookie ismini,sonra cookie değerini ve geçerlilik süresini yazdırdık.Burada 3600 saniye cinsindendir (Bir saat 3600 saniye).
Eğer cookie varsa direkt "daha önce de geldiniz" yazdırdık.
Şu ana kadar üyelik sistemlerinin hep mantığından bahsettik.Şimdi bir tane yazacak kadar bilgiye sahip olduk.

İLK ÜYELİK SİSTEMİ
Bu üyelik sisteminde üç tane sayfamız olacak :

-index.php
-giris.php
-cikis.php

index.php sayfası eğer üye değilsek giris.php sayfasının linkini verip üye olmamımızı tavsiye edecek.Eğer üyeysek te hoşgeldiniz vs. vs. yazdıracak.
Tabii öncelikle üyelerin bilgilernin tutulacağı bir tabloya ihtiyacımız var.


CREATE TABLE php_uyeler(id INT,user VARCHAR(150),pass VARCHAR(150));


Şimdi de bir üyelik oluşturalım.


INSERT INTO php_uyeler VALUES('1','admin','admin');


INDEX.PHP sayfası


<?php

if(!$_COOKIE['ada'])   //EĞER GİRİŞ YAPMAMIŞSA
{
echo 'hoşgeldiniz sayın misafir,lütfen giriş yapın -> <a href="giris.php">giriş</a>';
} else {   //EĞER GİRİŞ YAPMIŞSA

echo 'hoşgeldiniz sayın '.$_COOKIE['ada'];
echo '<br><a href="cikis.php">çıkış</a>';
}

?>



GİRİS.PHP sayfası içeriği
<?php

if($_COOKIE['ada'])  //EĞER ZATEN GİRİŞ YAPMIŞSA
{
header("Location:index.php");  //İNDEX.PHP SAYFASINA YÖNLENDİRİYORUZ
} else {  //GİRİŞ YAPMAMIŞSA

if(!$_POST['giris'])  //ÜYE GİRİŞ FORMUNU YOLLAMAMIŞSA
{

?>

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<b>kullanıcı ismi :</b><br>
<input type="text" name="user"><br><br>
<b>şifre :</b><br>
<input type="password" name="pass"><br><br>
<input type="submit" name="giris" value="giriş">
</form>

<?php
} else {   //EĞER FORM GÖNDERİLMİŞSE

mysql_connect("localhost","root","");
mysql_select_db("ceycey");  //KENDİ VERİTABANIMI YAZDIM

$user = $_POST['user'];
$pass = $_POST['pass'];

$kontrol = mysql_query("SELECT * FROM php_uyeler WHERE user = '$user' AND pass = '$pass'");

if(mysql_num_rows($kontrol) == 0)  //VERİLERİ KONTROL EDİYORUZ YANLIŞSA
{
echo "kullanıcı ismi ya da şifresi yanlış";
} else {   //DOĞRUYSA

setcookie("ada","$user",time()+3600);  //ADA İSMİNDE 1 SAAT GEÇERLİ OLAN BİR COOKIE TANIMLADIK
header("Location:index.php");  //ANA SAYFAYA YÖNLENDİRİYORUZ
}
}
}

?>


CİKİS.PHP sayfası içeriği


<?php

setcookie("ada","ada",time()-3600);
header("Location:index.php");

?>


Cookieyi kaldırmak için ona geçmiş bir tarih vermemiz yeterli.
Evet ilk üyelik sistemimizi yaptık,üyelik sistemlerinin temel mantığı da buna dayanır.Hatta budur.Örnek scriptler bölümünde inşallah daha iyi örnekleri bulacaksınız.

SESSION
Sessionların (oturumlar) amacı da cookieler'deb pek farklı değildir.Aralarındaki fark şudur : cookiler kullanıcının bilgisayarında depolanırlar oysa sessionlar sunucuda bulunurlar.Bu yüzden daha güvenlidirler.Zira 3. bir kişinin bilgileri ele geçirip değiştirme oranı cookielere nazaran düşüktür.Tabii cookielerin içindeki bilgileri çeşitli yollarla şifreleyerek bu sorunu en aza indirgeyebiliriz.Güvenlik bölümünde inşallah daha ayrıntılarıyla cookie güvenliğini göreceğiz.
Şu da varkı sessionlar ile "beni hatırla" gibi işlemler yapılamaz.

Session_start() ile bir sayfada oturum (session) başlatırız.Bir session başlatmadan sessionlarla çalışmamız mümkün değildir.Şimdi sessionlara küçük bir örnek yapalım.

INDEX.PHP sayfası
<?php
session_start();

$_SESSION['ss'] = "degisken";

?>


HOME.PHP sayfası
<?php
session_start();

echo $_SESSION['ss'];

?>


Gördüğümüz gibi bir sayfadaki değişken diğer sayfada da tanındı.Şimdi sessionlar kullanarak ta bir üyelik sistemi yazalım.

SESSIONLAR İLE ÜYELİK SİSTEMİ

INDEX.PHP
<?php
session_start();
if(!$_SESSION['ada'])   //EĞER GİRİŞ YAPMAMIŞSA
{
echo 'hoşgeldiniz sayın misafir,lütfen giriş yapın -> <a href="giris.php">giriş</a>';
} else {   //EĞER GİRİŞ YAPMIŞSA

echo 'hoşgeldiniz sayın '.$_SESSION['ada'];
echo '<br><a href="cikis.php">çıkış</a>';
}

?>




GIRIS.PHP
<?php
session_start();
if($_SESSION['ada'])  //EĞER ZATEN GİRİŞ YAPMIŞSA
{
header("Location:index.php");  //İNDEX.PHP SAYFASINA YÖNLENDİRİYORUZ
} else {  //GİRİŞ YAPMAMIŞSA

if(!$_POST['giris'])  //ÜYE GİRİŞ FORMUNU YOLLAMAMIŞSA
{

?>

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<b>kullanıcı ismi :</b><br>
<input type="text" name="user"><br><br>
<b>şifre :</b><br>
<input type="password" name="pass"><br><br>
<input type="submit" name="giris" value="giriş">
</form>

<?php
} else {   //EĞER FORM GÖNDERİLMİŞSE

mysql_connect("localhost","root","");
mysql_select_db("ceycey");  //KENDİ VERİTABANIMI YAZDIM

$user = $_POST['user'];
$pass = $_POST['pass'];

$kontrol = mysql_query("SELECT * FROM php_uyeler WHERE user = '$user' AND pass = '$pass'");

if(mysql_num_rows($kontrol) == 0)  //VERİLERİ KONTROL EDİYORUZ YANLIŞSA
{
echo "kullanıcı ismi ya da şifresi yanlış";
} else {   //DOĞRUYSA

$_SESSION['ada'] = $user;
header("Location:index.php");  //ANA SAYFAYA YÖNLENDİRİYORUZ
}
}
}

?>



CIKIS.PHP
<?php
session_start();
unset($_SESSION['ada']);
header("Location:index.php");

?>





_____________________________







24 Temmuz 2008; 12:05:27


PHP ile linklemek(sayfalamak)
Bu scriptimiz ise veritabanına kaydettiğimiz verileri linkleyecek.Aşağıdaki gibi:



Öncelikle veriabanımıza şiirler isminde bir tablo açıp,içine 8-9 tane veri kaydedelim.Ben gerekli sql kodlarını vereceğim.


SQL KODLARI :
CREATE TABLE `siirler` (
  `id` int(11) NOT NULL auto_increment,
  `baslik` varchar(150) collate utf8_turkish_ci default NULL,
  `icerik` text collate utf8_turkish_ci,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=8 ;

INSERT INTO `siirler` (`id`, `baslik`, `icerik`) VALUES
(1, 'OTUZBEŞ YAŞ ŞİİRİ', 'Yaş otuz beş! yolun yarısı eder.\r\nDante gibi ortasındayız ömrün.\r\nDelikanlı çağımızdaki cevher,\r\nYalvarmak, yakarmak nafile bugün,\r\nGözünün yaşına bakmadan gider.\r\nŞakaklarıma kar mı yağdı ne var?\r\nBenim mi Allahım bu çizgili yüz?\r\nYa gözler altındaki mor halkalar?\r\nNeden böyle düşman görünürsünüz,\r\nYıllar yılı dost bildiğim aynalar?\r\nZamanla nasıl değişiyor insan!\r\nHangi resmime baksam ben değilim.\r\nNerde o günler, o şevk, o heyecan?\r\nBu güler yüzlü adam ben değilim;\r\nYalandır kaygısız olduğum yalan.\r\nHayal meyal şeylerden ilk aşkımız;\r\nHatırası bile yabancı gelir.\r\nHayata beraber başladığımız,\r\nDostlarla da yollar ayrıldı bir bir;\r\nGittikçe artıyor yalnızlığımız.\r\nGökyüzünün başka rengi de varmış!\r\nGeç farkettim taşın sert olduğunu.\r\nSu insanı boğar, ateş yakarmış!\r\nHer doğan günün bir dert olduğunu,\r\nİnsan bu yaşa gelince anlarmış.\r\nAyva sarı nar kırmızı sonbahar!\r\nHer yıl biraz daha benimsediğim.\r\nNe dönüp duruyor havada kuşlar?\r\nNerden çıktı bu cenaze? ölen kim?\r\nBu kaçıncı bahçe gördüm tarumar?\r\nNeylersin ölüm herkesin başında.\r\nUyudun uyanamadın olacak.\r\nKimbilir nerde, nasıl, kaç yaşında?\r\nBir namazlık saltanatın olacak,\r\nTaht misali o musalla taşında.\r\n\r\n CAHİT SITKI TARANCI'),
(2, 'Kara Toprak', 'Kara Toprak\r\n\r\n\r\nDost dost diye nicesine sarıldım\r\nBenim sadık yarim kara topraktır\r\nBeyhude dolandım boşa yoruldum\r\nBenim sadık yarim kara topraktır\r\n\r\nNice güzellere bağlandım kaldım\r\nNe bir vefa gördüm ne faydalandım\r\nHer turlu isteğim topraktan aldım\r\nBenim sadık yarim kara topraktır\r\n\r\nKoyun verdi kuzu verdi sut verdi\r\nYemek verdi ekmek verdi et verdi\r\nKazma ile dövmeyince kıt verdi\r\nBenim sadık yarim kara topraktır\r\n\r\nAdemden bu deme neslim getirdi\r\nBana turlu türlü meyve yetirdi\r\nHer gün beni tepesinde götürdü\r\nBenim sadık yarim kara topraktır\r\n\r\nKarnın yardım kazma ile bel ile\r\nYüzün yırttım tırnak ile el ile\r\nYine beni karşıladı gül ile \r\nBenim sadık yarim kara topraktır\r\n\r\nİşkence yaptıkça bana gülerdi\r\nBunda yalan yoktur herkesler gördü\r\nBir çekirdek verdim dört bostan verdi\r\nBenim sadık yarim kara topraktır\r\n\r\nHavaya bakarsam hava alırım\r\nToprağa bakarsam dua alırım\r\nTopraktan ayrılsam nerde kalırım\r\nBenim sadık yarim kara topraktır\r\n\r\nDileğin varsa iste Allahtan\r\nAlmak için uzak gitme topraktan\r\nCömertlik toprağa verilmiş haktan\r\nBenim sadık yarim kara topraktır\r\n\r\nHakikat ararsan açık bir nokta\r\nAllah kula yakın kul da Allaha\r\nHakkin gizli hazinesi kara toprakta\r\nBenim sadık yarim kara topraktır\r\n\r\nBütün kusurlarımı toprak gizliyor\r\nMerhem calip yaralarımı tuzluyor\r\nKolun açmış yollarımı gözlüyor\r\nBenim sadık yarim kara topraktır\r\n\r\nHer kim ki olursa bu sırra mazhar\r\nDünyaya bırakır ölmez bir eser\r\nGün gelir Veysel''i bağrına basar\r\nBenim sadık yarim kara topraktır \r\n\r\n\r\nAşık Veysel Şatıroğlu'),
(3, 'İmkansız dostluk', 'Değil kardeşim, dal yeşil değil,gök mavi değil,\r\nBilsen! Ben hangi alemdeyim, sen hangi alemde!\r\nAklından geçer mi dersin aklımdan geçen şeyler?\r\nSanmam! Yıldız ve rüzgar payımız müsavi değil;\r\nSen kendi gecende gidersin, ben kendi gecemde;\r\nVazgeç kardeşim, ayrıdır bindiğimiz gemiler!\r\n\r\n CAHİT SITKI TARANCI'),
(4, 'Memleket İsterim', 'Memleket isterim\r\nGök mavi, dal yeşil, tarla sarı olsun;\r\nKuşların çiçeklerin diyarı olsun.\r\n\r\nMemleket isterim\r\nNe başta dert ne gönülde hasret olsun;\r\nKardeş kavgasına bir nihayet olsun.\r\n\r\nMemleket isterim\r\nNe zengin fakir ne sen ben farkı olsun;\r\nKış günü herkesin evi barkı olsun.\r\n\r\nMemleket isterim\r\nYaşamak, sevmek gibi gönülden olsun;\r\nOlursa bir şikayet ölümden olsun.\r\n\r\n CAHİT SITKI TARANCI'),
(5, 'Olmasa', 'Olmasa\r\n\r\n\r\nGüzelliğin on par'' etmez\r\nŞu bendeki aşk olmasa\r\nEğlenecek yer bulaman\r\nGönlümdeki köşk olmasa\r\n\r\nTabirin sığmaz kaleme\r\nDerdin dermandır yareme\r\nİsmin yayılmaz âleme\r\nAşıklarda meşk olmasa\r\n\r\nKim okurdu kim yazardı\r\nBu düğümü kim çözerdi\r\nKoyun kurt ile gezerdi\r\nFikir başka başk'' olmasa\r\n\r\nGüzel yüzün görülmezdi\r\nBu şak bende dirilmezdi\r\nGüle kıymet verilmezdi\r\nAşık ve maşuk olmasa\r\n\r\nSenden aldım bu feryadı\r\nBu imiş dünyanın tadı\r\nAnılmazdı Veysel adı\r\nO sana aşık olmasa\r\n\r\nAşık Veysel Şatıroğlu'),
(6, 'Beni hor görme', 'Beni Hor Görme\r\n\r\n\r\nBeni hor görme kardeşim\r\nSen altınsın ben tunç muyum\r\nAynı vardan var olmuşuz\r\nSen gümüşsün ben saç mıyım\r\n\r\nNe var ise sende bende\r\nAynı varlık her bedende\r\nYarin mezara gidende\r\nSen toksun da be aç miyim\r\n\r\nKimi molla kimi derviş\r\nAllah bize neler vermiş\r\nKimi arı çiçek dermiş\r\nSen balsın da ben çeç miyim\r\n\r\nTopraktandır cümle beden\r\nNefsini öldür ölmeden\r\nBöyle emretmiş yaradan\r\nSen kalemsin ben uç muyum\r\n\r\nTabiata Veysel aşık\r\nTopraktan olduk kardaşık\r\nAynı yolcuyuz yoldaşık\r\nSen yolcusun ben baç mıyım\r\n\r\n\r\nAşık Veysel Şatıroğlu'),
(7, 'Dostlar beni hatırlasın', 'Ben giderim adım kalır\r\nDostlar beni hatırlasın\r\nDüğün olur bayram gelir\r\nDostlar beni hatırlasın\r\n\r\nCan kafeste durmaz uçar\r\nDünya bir han konan göçer\r\nAy dolanır yıllar geçer\r\nDostlar beni hatırlasın\r\n\r\nCan bedenden ayrılacak\r\nTütmez baca yanmaz ocak\r\nSelam olsun kucak kucak\r\nDostlar beni hatırlasın\r\n\r\nNe gelsemdi ne giderdim\r\nGünden güne arttı derdim\r\nGarip kalır yerim yurdum\r\nDostlar beni hatırlasın\r\n\r\nAçar solar türlü çiçek\r\nKimler gülmüş kim gülecek\r\nMurat yalan ölüm gerçek\r\nDostlar beni hatırlasın\r\n\r\nGün ikindi akşam olur\r\nGör i başa neler gelir\r\nVeysel gider adı kalır\r\nDostlar beni hatırlasın.\r\n\r\n\r\nAşık Veysel Şatıroğlu');



Evet işte sql kodları,bu kodları veritabanında çalıştırdıktan sonra aşağıdaki ya da ona benzer bir şekilde olmalı :





index.php sayfası (verileri linkleyen sayfa)
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1254">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-9">
<title>PHP ile sayfalama</title>

</head>
<body>
<?php
//veritabanına bağlanalım
mysql_connect("localhost","root","");
mysql_select_db("mysql");

//şiirleri alacak sorgu
$sql = mysql_query("SELECT * FROM siirler");
my
//eğer şiir yoksa
if(sql_num_rows($sql)==0)
{
echo 'maalesef hiç şiir bulunmuyor';
} else {
//eğer şiir varsa

//şiirleri diziyoruz
while($dz = mysql_fetch_array($sql))
{
$id = $dz['id'];
$baslik = $dz['baslik'];
echo "<a href=\"oku.php?id=$id\"><b>$baslik</b></a><br>";
}
}

?>
</body>
</html>




oku.php (verileri okuyan sayfa)
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1254">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-9">
<title>Sayfayı oku</title>
</head>
<body>
<?php
//veritabanına bağlanalım
mysql_connect("localhost","root","");
mysql_select_db("mysql");

//get değişkenini kontrol edelim
if($_GET['id'] == 0 || !is_numeric($_GET['id']) || $_GET['id'] < 0)
{
header("index.php");
}
$get = $_GET['id'];

//verileri çekecek sql sorgusu
$sql = mysql_query("SELECT * FROM siirler WHERE id = '$get'");

//veri yoksa
if(mysql_num_rows($sql)==0)
{
echo "böyle bir veri bulunmuyor";
} else {

//verileri yazdıralım
while($yaz = mysql_fetch_array($sql))
{
echo "<b>".$yaz['baslik']."</b><br><br>";
echo nl2br($yaz['icerik']);
}
}

?>


</body>
</html>

Hiç yorum yok:

Yorum Gönder