25 Eylül 2009 Cuma

PHP DERSLERİ

-*PHP PROGRAMLAMA DİLİ

PHP nin Yazım Kuralları:

PHP bir script dildir. Php komutları , veya etiketleri arasına yazılır. Bir kullanıcı sunucudan bir php sayfası isteğinde bulunduğunda Sunucu bu dosyanın içindeki php komutlarını yorumlar ve kullanıcıya sadece HTML verisini gönderir. Yani PHP HTML üreten dinamik bir sayfa yapmaya olanak sağlar.

PHP de herhangi bir yazıyı ekrana yazdırmak için 3 komut vardır. Bunlar echo, print ve printf komutlarıdır. Printf komutunun başka özellikleri de olmasına rağmen yazdırmak için de kullanılır.

echo “Merhaba Dünya”;

?>

Bu kodu çalıştırdığımız zaman ekrana “Merhaba Dünya” yazısı çıkacaktır. Bu örneği yazım kuralları bakımından incelersek:

· Bütün PHP komutları arasında yazılmalıdır.

· Her bir komut “;” karakteri ile bitecektir.

DEĞİŞKENLER:

· PHP de değişken yaratmak için dolar ($) simgesi kullanılır.

· Değişkenler rakam ile başlayamaz harf veya “_” işareti ile başlar.

· Değişkenlere değer ataması “=” ile yapılır.

Karakter Dizileri (String): Stringler içerisinde birden karakter barındıran değişken türüdür. String değer atama işlemi için çift tırnak (“) veya (‘) karakteri kullanılır. Şimdi Bu iki kullanımın birbirinden farkını inceleyelim.




PHP dilinde karakter dizileri “” ile sınırlandırılarak tanımlandığında içerisinde değişkenler barındırabilirler. Fakat tek tırnak ‘ karakteri ile yapılan string atamada stringin içerisinde bir başka değişken kullanılamaz.

Boolean: Php dilinde birçok programlama dilinde olduğu gibi “boolean” veri tipi mevcuttur. Bu veri tipi ürettiğimiz yazılımlarda özellikle mantıksal ve ilişkisel işlemlerde kullanılır. “True” ( 1 ) yada “False” ( 0 ) değeri alır.

Dizi değişkenler: PHP dilinde dizi değişkenler son derece rahat bir şekilde kullanılabilen bir başka veri tipidir. PHP de dizi değişkenler:

$isim[indis]=deger yapısında tanımlanır.

Örn:

$isim[0]=”Ozgur”;

$isim[1]=”Fuat”;

$ajanda[“Pazartesi”]=”Toplantı”;

echo $isin[0].”
”;

echo $isin[1].”
”;

echo $ajanda[“Pazartesi”].”
”;

?>

Escape

şu satırdaki, ters-bölü işareti dikkatinizden kaçmamış olmalı:

print "İkinci değişkenin adı: \$alfanumerik
";

PHP için özel anlamı olan işaretlerin anlamlandırılmasını önlemek ve bu işaretleri düz metin saymasını sağlamak için bu işaretlerin önüne ters-bölü işareti koyarız.

şöyledir:

\' Tek tırnak

\" Çift tırnak

\\ Ters-bölü

\$ Dolar işareti

\n Yeni Satır (New Line)

\r Satır Başı (Return)

\t Sekme (Tab) karakteri

isset(): Bu komut bir değişkenin içerisinde değer olup olmadığını sınar. Eğer değişkenin içerisinde değer bulunuyorsa TRUE değeri geri döndürür.

if (isset($degisken) ):

print “değişkenin değeri var”;

else:

print “değişkenin değeri yok”;

endif;

empty(): isset() fonksiyonunun tam tersi işleve sahiptir. Değişkenin değeri varsa FALSE aksi durumda TRUE değer döndürür.

intval(): Belirtilen sayıyı tam sayı olarak alır.

$sayi1=15;

$sayi2=4;

$deger=($sayi1/$sayi2);

print intval($deger);

is_string(),is_integer(),is_double()

Sınadıkları değişkenin aradıkları türden değer içermesi halinde doğru True sonuç verirler.

$a = 6.567;

if (is_double($a)) {

print ("A Double'dır
");

}

$b = "Reşit";

if (is_string($b)) {

print ("B String'dir
");

}

$c = 6;

if (is_int($c)) {

print ("C Integer'dır
");

}

?>

Bu kod, Browser penceresine "A double'dır, B String'dir, C Integer'dır" yazdıracaktır. PHP'de bu fonksiyonlara benzeyen fakat başka tür değer arayan şu fonksiyonlar da vardır:

is_array(), is_object().


$yes = array('this', 'is', 'an array');

echo is_array($yes) ? 'Array' : 'not an Array';
echo "\n";

$no = 'this is a string';
echo is_array($no) ? 'Array' : 'not an Array';
?>

Aritmetik Operatörler:

örnek

Adı

echo ( $a+$b).”
”;

echo( $a-$b). ”
”;

echo( $a*$b). ”
”;

echo( $a/$b). ”
”;

Sonuç

-$a

Negatif

$a ‘nın tersi(negatifi)

$a + $b

Toplama

$a ve $b nin toplamı

$a - $b

Çıkartma

$a ve $b nin farkı

$a * $b

Çarpma

$a ve $b nin çarpımı

$a / $b

Bölme

$a ve $b nin bölümü

$a % $b

Mod

$a nın $b ye bölümünden kalan

Mantıksal Operatörler:

&& : AND

|| : OR

! :NOT

İlişkisel Operatörler:

== : Eşittir. >= : Büyük veya eşit

> : Büyüktür. <= : Küçük veya eşit.

< :Küçüktür. != : Eşit değil

$vize = 45;

$final = 65;

if ($vize >= 50 && $final >= 50) {

print ("Öğrenci geçti!");

}

else {

print ("Öğrenci kaldı!");

}

?>

Arttırma / Azaltma Operatörü:

++ : Arttırma

-- : Azaltma

Hata Operatörü (@):

Hazırlayacağımız scriptlerde herhangi bir hata meydana gelmesi durumunda hatanın olduğu gibi ziyaretçinin ekranına yansımasını önlemek için hata olabilecek fonksiyonların başına @ işareti eklenir


/* Intentional file error */
$my_file = @file (“olmayan bir dosya adı”) or
die ("Failed opening file: error was '$php_errormsg'");

?>

DİZİ DEĞİŞKENLERİ

En basit anlamada bir dizi oluşturmak için bir değişken adı ve sonuna köşeli parantez kullanarak dizi değişkenler tanımlanır.



Dizi elemanlarının sıra numarası belirtilmezse 0,1,.. Olarak varsayılır. İstenirse sıra numarası belirtilebilir( deneme[‘a’]=”ASP”; )


$deneme[]=”Ali”;

$deneme[]=”Mehmet”;

$deneme[]=”Ahmet”;

Dizi değişkenlere verileri yukarıdaki gibi teker teker atamak yerine array yapısı kullanılabilir.

$deneme = array(“Ali”,”Mehmet”,”Ahmet”)// indis numaraları 0,1,2 şeklinde olur.

İndis numaraları m,k,i

( $deneme[‘m’]=”mehmet” )

$deneme=array(

‘m’=> ”mehmet”,

‘k’=>”kemal”,

‘i’=>”irfan”

};

$ogrenciler = array (

array ( adi => "Özbay", soyadi => "Altun", sinav1 =>"", sinav2 =>"", not =>""),

array ( adi => "Muharrem", soyadi => "Taç", sinav1 =>"", sinav2 =>"", not =>""),

array ( adi => "Hasan", soyadi => "Civelek", sinav1 =>"", sinav2 =>"", not =>""),

);

// Buraya başka kodlar girecek

print $ogrenciler[0][adi];

?>

Programdaki "print()" komutunu sadece dizi değişkeni doğru yazıp yazmadığımızı sınamak amacıyla yazdık; bu programı Browser'da açtığınızda yazdığınız ilk ismi Browser penceresinde görüyorsanız, dizi-değişkeni doğru şekilde oluşturdunuz demektir. Burada, array() komutu yazarken, süslü parantez değil, normal parantez kullandığımıza ve her bir elemanın değerlerinin sonunda virgül olduğuna dikkat edin. Bir diğer önemli nokta: endeks adları bir kelimeden fazla ise bunları tırnak içine alarak belirtmektir.

Örneğin:

array ( adi => "Özbay", soyadi => "Altun", "Sinav 1 Notları" =>"", "Sinav 2 Notları" =>"", "Toplam Not Ortalamasi" =>"");

Çok elemanlı ilişkili dizi oluşturmanın bir diğer yolu, yeri geldiğinde böyle bir dizi için yeni bir üye ilgili bilgileri eleman indeksi ve değerler için indeks adı belirterek şöyle bir kod yazmaktan ibarettir.

$ogrenciler[0][adi] = "Özbay";

$ogrenciler[0][soyadi] = "Altun";

$ogrenciler[0][sinav1] = "";

$ogrenciler[0][sinav2] = "";

$ogrenciler[0][not] = "";

// Buraya başka kodlar girecek

print $ogrenciler[0][adi];

?>

Bir dizi değişkende kaç boyut olacaksa, o kadar iç içe array() öğesi oluşturabiliriz. Buna göre tek boyutlu bir dizi değişken sadece bir array() komutu ile veya sadece değerler verilerek oluşturulabilir. Diyelim ki yukarıdaki öğrenci listemiz sadece öğrencilerin isimlerinden oluşacak. Bu durumda $ogrenciler değişkenine ilişkin satırı şöyle yazabilirdik:

$ogrenciler = array ("Özbay", "Muharrem", "Hasan", "Şahika");

count / sizeof: Dizi değişkende kaç tane veri olduğunu veren fonksiyondur.

$deneme =array(1,2,3,4,5,6,7,8,9);

for ($i=0;$i

echo “$denem[$i]e
”; }

foreach Döngüsü : Bu döngü esasen dizi değişkenleriyle birlikte kullanılır. Yukarıdaki for döngüsü yerine aşağıdaki foreach döngüsü kullanılabilir.

foreach ( $deneme as $deger) {

echo “$deger
”;

}

Bu döngüde dizi değişkeninde kaç tane veri tutulduğuna bakmaya gerek kalmadı. Çünkü foreach döngüsü dizi içerisindeki tüm elemanlar boyunca dönecektir. İlk olarak dizi değişkeninin adı yazılır. Dizi elemanlarını temsil eden değişken as komutundan sonra yazılır.

Dizi elemanlarına indisleriyle birlikte erişmek için foreach yapısı biraz değiştirilir.

$deneme=array(‘a’,’b’,’c’,’d’)

foreach ( $deneme as $anahtar => $deger) {

echo “Anahtar: $anahtar Değer: $deger
”;

}

ilk gösterdiğimiz foreach yapısından tek farkı as ifadesinden sonra iki değişken kullanılır. Birinci değişken dizinin indisini diğer değişken değerini ifade eder.

Aynı ifade while döngüsü ile;

while (list( $anahtar, $deger)=each($deneme) )

{

echo “Anahtar: $anahtar Değer: $deger
”;

}

while döngüsünün koşul satırında list komutu ile dizi değişkende bulunan anahtar ve değerleri birer değişkende topluyoruz. Buradaki ilk değişken dizi değişkeninin sıra numarasını ikinci değişkende değeri tutuyor. Each komutu ile de hangi dizi değişkenin listeleneceğini belirtiyoruz.

Dizi değişken fonksiyonları:

PHP de dizi değişkenlerle yaptığımız çalışmalarda kullanmamız muhtemel olan birçok fonksiyon vardır. Bunlardan bazıları;

Fonksiyon

Açıklama

sort() ve rsort()

Bir dizinin içindeki değerleri alfabetik veya küçükten büyüğe/büyükten küçüğe doğru sıralar

asort() ve ksort()

Bir ilişkili diziyi değerlerine göre sıralamak için asort(),anahtarına göre sıralamak için ksort() fonk kullanılır.

count(dizi_değişken)

Dizi değişkenin sahip olduğu eleman sayısını döndürür.

in_array(aranan, dizi_değişken)

Bir dizi değişende eleman aranabilmesini sağlar. Bulursa TRUE değer döndürür.

array_merge()

İki veya daha fazla dizinin bütün elemanlarını birleştirerek, ortaya yeni bir dizi çıkartır

array_push()

Bir diziye yeni değişkenler eklemek için

array_slice()

Bir dizi-değişkenin bir kesitini alır

SONUÇ:
 
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange

sort():

$fruits = array ("lemon", "orange", "banana", "apple");
sort ($fruits);
while (list ($key, $val) = each ($fruits)) {
    echo "fruits[".$key."] = ".$val."\n";
}
?>

asort():

  
SONUÇ:
 
c = apple
b = banana
d = lemon
a = orange
 

$fruits = array ("d"=>"lemon",
"a"=>"orange", 
"b"=>"banana", 
"c"=>"apple");
asort ($fruits);
while (list ($key, $val) = each ($fruits)) {
    echo "$key = $val\n";
  
SONUÇ:
 
a = orange
b = banana
c = apple
d = lemon

}

ksort():

ksort ($fruits);
while (list ($key, $val) = each ($fruits)) {
    echo "$key = $val\n";
}
 

array_merge(): İkinci dizinin bütün elemanları, birinci dizinin elemanlarının arkasına eklenir

$birinci_dizi = array ( "Özbay" , "Muharrem" , "Hasan" , "Şahika" );

$ikinci_dizi = array ( "Altun" , "Taç" , "Civelek" , "Tabak" );

$yeni_dizi = array_merge ( $birinci_dizi, $ikinci_dizi );

Bu kod ile oluşturulan $yeni_dizi isimli dizi değişkenin hangi elemanlara sahip olduğunu, şöyle bir kodla görebilirsiniz:

foreach ( $yeni_dizi as $yeni_eleman ) {

print (" $yeni_eleman
");

}

array_push():

 

$birinci_dizi = array ( "Özbay" , "Muharrem" , "Hasan" , "Şahika" );

$esay = array_push ($birinci_dizi, "Altun" , "Taç" , "Civelek" , "Tabak" );

Burada $yeni adlı değişken sadece $birinci_dizi adlı dizinin yeni eleman sayısını tutar. array_push(), kendisine adını verdiğimiz dizinin içeriğini değiştirir. Yukarıdaki örnekte içine yeni değerler yazılan dizinin elemanlarını görüntülemek için şöyle bir kod yazabiliriz:

print ("\$birinci_dizi adlı dizide $yeni_dizi adet değişken var
");

foreach ( $birinci_dizi as $ogrenci ) {

print ("$ogrenci
");

}

array_slice():

$birinci_dizi = array ( "Özbay" , "Muharrem" , "Hasan" , "Şahika", "Altun" , "Taç" , "Civelek" , "Tabak");

$kesit = array_slice ($birinci_dizi, 3, 4);

Burada, PHP'ye $kesit adlı yeni dizi değişkene, $birinci_dizi adlı dizinin 3'ncü değerinden itibaren (3 dahil) dört değeri yerleştirmesini bildiriyoruz. array_slice(), adını verdiğimiz değişkenin içeriğine dokunmaz; yeni dizi değişken oluşturulur.

array_values: Dizinin bütün elemanlarını geri döndürür.

Sayfaya get metoduyla gönderilen verileri ad, soyad ve no değişkenlerine aktarır.

list ($ad, $soyad, $no) = array_values($_GET);

echo $ad."
";

echo $soyad."
";

echo $no."
";

MANTIKSAL DENETLEME

Mantıksal denetlemede; programa bir şart verilerek, bu şartın gerçekleşmesi veya gerçekleşmemesi durumunda oluşabilecek durumlar belirtilir.

if Deyimi:

if ( koşullar ) {

koşullar doğru ise yapılacak işlere ilişkin komutlar

}

elseif (diğer koşullar) {

diğer koşullar doğru ise yapılacak işlere ilişkin komutlar

}

else {

diğer her durumda yapılacak işlere ilişkin komutlar

}

· Koşullar () arasında yazılır.

· Koşulun gerçekleşmesi durumunda yapılacak komutlar { } arasında yazılır.

· Koşul yanlış olması durumunda yapılacak işlemler else bloğu içerisinde oluşturulur.

· Koşul/koşulların yanlış olması durumunda yeni koşullar else if ile gerçekleştirilir.

if ( $parola == "" ) {

echo ("Sitemize girmek için parola yazmanız gerekir.
");

echo ("Lütfen parolayı yazın!
");

}

?>

Alternatif if Kullanımı: Bu yazım şekli genellikle içi içe if deyimi kullanıldığında, karışıklığı ortadan kaldırmak için kullanılır.

İf (koşul veya koşullar):

Koşul doğru ise yapılacak komutlar

Else if ( bağımsız koşul veya koşullar):

Koşul doğru ise yapılacak komutlar

Else:

Koşulların doğru olmaması durumunda yapılacak komutlar

Endif;

? : operatör: Basit kontrolleri yapmak için if yapısı yerine “?:” operatörü kullanılabilir.

$uyari = ($parola == "" ) ? "Parola yazmanız gerekir" : "Teşekkür ederiz" ;

echo ($uyari);

?>

Bu kod parçacığı, ziyaretçinin parola girip girmediğini $parola değişkeninin içinin boş olup olmadığına bakarak anlayacak ve $parola değişkenin içi boş ise (yani soru işaretinin sorguladığı durumun doğru olması halinde) iki nokta üst üste işaretinden önceki metni $uyarı değişkenin içeriği haline getirecek; $parola değişkeninin içi dolu ise (yani koşul yerine gelmiyorsa, durum yanlış ise) iki nokta üs tüste işaretinden sonraki metni $uyarı değişkeninin içeriği yapacaktır. Bir sonraki echo() komutu ise içeriği bu sınama sonucuna göre belirlenen $uyarı değişkeninin değerini Browser penceresinde görüntüleyecektir.

Switch Deyimi: Bu deyimde bir değişken oluşturulur ve değişik seçenekler yaratılır.

Değişken hangi seçeneğe uyuyorsa o komutlar çalışır.

Switch ($degisken)

{

case deger1:

komut ifadesi1;

break;

case deger2:
komut ifadesi2;

break;

default:

komut ifadesi;

}

if ($gonder) {

if ($username==”” || $password==””):

Print “Kullanıcı adını veya şifrenizi girmeyi unuttunuz”;

elseif ($username==”admin” && $password==”123456”):

Print “Şu anda şifreli alandasınız.”;

else:

Print “kullanıcı adı veya şifre yanlış”;

endif;

}else{

?>

UserName:

Password:

switch ($_POST[“islem”]) {

case “toplama”:

$sonuc=$_POST[“sayi1”]+$_POST [“sayi2”];

break;

case “cikarma”:

$sonuc=$_POST[“sayi1”]-$_POST [“sayi2”];

break;

case “carpma”:

$sonuc=$_POST[“sayi1”]*$_POST [“sayi2”];

break;

case “bolme”:

$sonuc=$_POST[“sayi1”]/$_POST [“sayi2”];

break;

default: $sonuc=0;

}

DÖNGÜLER:

while döngüsü: Belirli bir şart sağlandığı sürece komut bloğunun tekrar tekrar çalışmasını sağlar.

while (koşul)

{

Koşul doğru ise yapılacak işlere ilişkin komutlar

}

print “

”;

$i=1;

while ($i<=7){

print ”

”;

print “

\n”;

$i++;

}

print “

$i KTU OMYO
”;

?>

do..while döngüsü: while döngüsünden tek farkı komut bloğu en az bir defa çalışacaktır. Döngü koşul doğru olduğu sürece devam eder.

do

{

Koşul doğru ise yapılacak işlere ilişkin komutlar

}while (koşul);


$i = 0;
do {
echo $i;
} while ($i > 0);
?>

for döngüsü:

for (değişken;koşul;artış)

{

Koşul doğru ise yapılacak işlere ilişkin komutlar

}

for ($sayac = 1; $sayac <= 7 ; $sayac++ ) {

print ("");

print ("

İyileri iyilikleri ile alkışlayınız!

");

print ("");

}

?>

Döngüyü sona erdirmek : break

$tekrar = 10 :

for ($sayac = 1; $sayac <= $tekrar ; $sayac++ ) {

if ( $tekrar <= 0 )

break;

print ("");

print ("

İyileri iyilikleri ile alkışlayınız!

");

print ("");

}

?>

Döngüyü sürdürmek: continue

$sayac = -5 :

for (; $sayac <= 7 ; $sayac++ ) {

if ( $sayac <= 0 )

continue;

print ("");

print ("

İyileri iyilikleri ile alkışlayınız!

");

print ("");

}

?>

FONKSİYONLAR:

PHP'de fonksiyonlar “function” komutu ile oluşturulur. Tanımladığımız fonksiyon, kendisini göreve çağıracak komuttan, yapacağı işlemde kullanmak üzere değer alacaksa, bu değerlere vereceğimiz değişken isimleri fonksiyon adının yanında parantez içinde gösterilir. Fonksiyon birden fazla değer bekleyecekse, bunların değişken adlarının arasına virgül koyarız. Fonksiyona ulaştırılan değerlere argüman denir. Fonksiyon, kendisine bir değer ulaştırılmasını beklemese bile içi boş parantez koymamız gerekir. Buna göre PHP'de fonksiyon şöyle yazılır:

function fonksiyon_adı(argüman1, argüman2,...)

{

fonksiyonun yapacağı işe ilişkin komutlar

}

function yazdirBR ($metin) {

print ("$metin
\n");

}

function yazdirH1 ($metin) {

print ("

$metin

\n");

}

function yazdirH2 ($metin) {

print ("

$metin

\n");

}

function yazdirH3 ($metin) {

print ("

$metin

\n");

}

function yazdirH4 ($metin) {

print ("

$metin

\n");

}

function yazdirP ($metin) {

print ("

$metin

\n");

}

// Başka kodlar buraya girebilir

yazdirH1("Bu H1 Başlık");

yazdirH2("Bu H2 Başlık");

yazdirH3("Bu H3 Başlık");

yazdirH4("Bu H4 Başlık");

yazdirBR("Bu kendisinden sonra BR olan birinci metin.");

yazdirBR("Bu kendisinden sonra BR olan ikinci metin.");

yazdirP("Bu uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun bir paragraf metni.");

yazdirP("Bu uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun bir diğer paragraf metni.");

?>

DEĞİŞKENLERİN KAPSAMI: GLOBAL VE STATİC

Fonksiyon dışındaki bir değişkene fonksiyon içinden erişmek için GLOBAL deyimi kullanılır






$cumle=”Ne mutlu Türküm diyene”;

function deneme() {

echo $cumle; // hiçbirşey yazmaz!

}


$cumle=”Ne mutlu Türküm diyene”;

function deneme() {

global $cumle;

echo $cumle; // cümleyi yazar!}



Bu noktada dikkat etmemiz gereken şey, global deyimi ile kendisine kullanılmak üzere verilen değişken, artık bir bakıma fonksiyonun malı olur ve fonksiyon tarafından değeri değiştirilebilir. Bütün program boyunca kullanmaya niyetli olduğunuz global değişkenlerin, kullanımına verildiği fonksiyon tarafından değiştirilip-değiştirilmediğine dikkat edin.

Bir değişkenin bütün programda gerekli olmadığı ve sadece bir fonksiyon içinde kullanılacağı durumlarda bu değişkeni fonksiyonun içinde tanımlamak daha doğru olur. Fakat daha önce belirttiğimiz gibi fonksiyonların içinde tanımlanan değişkenler fonksiyon çalışırken var olur; fonksiyon sona erdiğinde de ölür. Başka bir deyişle, bir fonksiyonun içinde oluşturduğumuz bir değişkenin fonksiyon sona erdiğinde sıfırlanmaması için bir çare olması gerekir. Bu çarenin adı, static deyimidir. Şöyle bir örnek düşünelim: Sitemizdeki bir hesaplama fonksiyonu ziyaretçilerimizin yeni alışverişlerinin toplamını eski toplama ekleyerek, yeni ana toplamı buluyor ve ziyaretçi alışveriş sepetine yeni bir mal ekledikçe ve o andaki ana toplamın ne olduğunu öğrenmek istedikçe, fonksiyonumuzun eski ana toplamı hatırlaması gerekiyor. Şu andaki PHP bilgimizle böyle bir program yazmaya kalkmayalım;

function saydir () {

static $sayi = 0;

$sayi++;

print ("

Fonksiyonun tuttuğu sayı: $sayi

");

}

// Başka kodlar buraya girebilir

print ("

Fonksiyonun birinci kez çağrılması:

");

saydir();

print ("

Fonksiyonun ikinci kez çağrılması:

");

saydir();

print ("

Fonksiyonun üçüncü kez çağrılması:

");

saydir();

print ("

Fonksiyonun dördüncü kez çağrılması:

");

saydir(); ?>

Bu programı, static deyimi olmadan çalıştıracak olursak, saydir() fonksiyonu her çağrıldığında $sayı değişkeninin baştan tanımlandığını ve bir türlü 1'den ileri gidemediğini göreceğiz. static ise fonksiyon bittikten sonra $sayi değişkeninin değerinin değişmeden kalmasını sağlayacaktır.

KULLANICI İLE BİLGİ İLETİŞİMİNİN SAĞLANMASI:

URL SORGU CUMLELERI: URL sorgu cümleleri bir web sayfası adresinden sonra “?” işareti ile başlayan içerisinde değişkenler ve değerler taşıyabilen cümlelerdir. Bu cümleler, sayfaya yapılan istem sırasında web sunucusuna başlık içerisinde iletilir. Web sunucusu bu başlığı PHP yorumlayıcısına otomatik olarak iletecektir ve PHP yorumlayıcısı da bu cümleler ile iletin verilere erişmiş olacaktır.

http://www.deneme.com/sorgu.php?isim=Ozgur&soyad=Cayci&sehir=Ankara

Bu adreste “?” ne kadar olan kısım adresin kendisini teşkil eder. “?” işareti ile başlayan

isim=Ozgur&sayad=Cayci&sehir=Ankara kısmı ise URL sorgu cümlesidir. Yani bu cümle ile adres satırından scriptin olduğu sayfaya değişkenler ve değerlerini iletebiliriz. Adres satırından gönderilen bilgiler $_GET isimli bir dizi aracılığıyla PHP scriptinden erişilebilir.

Örneğin isim adli değişkenin değerine: $_GET[“isim”] ifadesi ile erişilebilir.

echo “Merhaba, sayfamıza hoş geldiniz. İsminiz:”.$_GET[isim]; ?>

FORMLAR: Ziyaretçiler ile web sayfası arasında bili alışverişi için formlar kullanılır. Form oluşturmak için

... HTML etiketi kullanılır. FORM etiketi içerisinde kullanıcıdan bilgi girişini sağlan bazı nesneler kullanılır (input, ratdio, checkbox vs.) Form etiketi içerisinde kullanılan;

ACTİON: Formdaki girdileri işlemekle görevli yeri,

METHOD: Formun taşıdığı verileri iletme yöntemi

Name: Formun adını

Tanımlamamıza olanak sağlar.

Formdan Verileri iletme Metotları: Formdan veriler iki metotla iletilebilir. Bu metotlar GET ve POST metotlarıdır.

· GET metodu ile veri iletildiği zaman forma girilen veriler görev yerine adres satırına eklenerek iletilirler. Yani URL sorgusu şeklinde iletilir.

Bu metot kullanılarak iletilen verilere $_GET adındaki dizi değişken kullanılarak erişilebilmektedir.

· POST metodunda veriler görevli olan scripte adrese eklenerek değil yapılan istemin gövdesine eklenerek gönderilir. Bu yöntemle adres satırında kullanıcıların görmesini istemediğimiz bilgiler olmayacaktır. GET metoduna göre bir başka avantajı ise daha büyük boyutta veriler iletebilmesidir.

Bu metot kullanılarak iletilen verilere de benzer şekilde $_POST adındaki dizi değişken vasıtasıyla erişilir.

Form'dan GET Metoduyla Gelen Bilgiler

Basit bir HTML Form'u tasarlayalım.

PHP'de Formlar

form_isle.php" METHOD="GET">

Adınız, Soyadınız:


Elektronik Adresiniz:


Form'un ACTION parametresine dikkat ederseniz, form_isle.php adlı bir dosyanın adını göreceksiniz. Bu, ziyaretçinin Gönder düğmesini tıklamasıyla birlikte Form'un içerdiği bilgilerin METHOD parametresinde pazılı olan GET yöntemiyle Sunucu'da gönderileceği programın adıdır. Bu sayfa, Browser'da şöyle bir görüntü verecektir:

Browser'ınızdaki hata mesajına aldırmadan, URL adres kutusunda ne yazdığını okuyun:

http://server/form_isle.php?adi=Muharrem+Ta%E7&adres=muharremtac@mynet.com

Bu, HTTP protokolüne göre GET yoluyla bilgi göndermekte kullanılan yöntemin tam bir örneğidir. Browser, GET yoluyla bilgi göndereceği zaman, Form'daki bütün bilgileri URL-Encoding denen sistemle kodlar. Form'un alan adlarına o alanlara ziyaretçinin yazdığı bilgileri bir eşittir işaretiyle ekler; bu tür alan=girdi çiftlerinin arasına & (ve işareti) koyar ve gönderir. Web sunucu, bu bilgileri alınca, önce kendi oluşturduğu bazı değişkenlere yazar ve sonra URL hanesinde adı yazılı olan programa (sayfaya) verir. Şimdi bizim bu bilgilerin gönderildiği PHP programını kendisine verilecek bu bilgileri işlemeye hazır şekilde yazmamız gerekir.

print ("Sayın :$_GET[“isim”]\n\n");

print ("

Elektronik adresiniz: >:$_GET[“adres”]

\n\n");

?>

Form'dan POST Metoduyla Gelen Bilgiler

HTML Form etiketinin METHOD parametresinin değeri GET olabildiği gibi POST da olabilir; ve HTTP sunucusu bu yöntemle gelen bilgileri $HTTP_POST_VARS dizi-değişkeninde tutar. Yukarıdaki çok-seçmeli Form'un FORM etiketini şöyle değiştirerek kaydedelim:

Aynı şekilde son Form işleme programımızda da sadece şu değişikliği yapalım:

print ("Sayın :$_POST[“isim”]b>\n\n");

print ("

Elektronik adresiniz: >:$_POST[“adres”]

\n\n");

?>

Formlardan gönderilen bilgilere $_GET ve $_POST dizileri kullanılarak erişilebildiği gibi $HTTP_GET_VARS ve $HTTP_POST_VARS dizi değişkenleri aracılığıyla da erişilebilir. Bu dizi değişkenler formdan gelen bütün bilgileri içinde barındırır. Bir döngü yardımıyla tutulan değişkenler ve değerlerine erişilebilir.

if (isset($HTTP_POST_VARS)) {

foreach($HTTP_POST_VARS as $anahtar => $deger)

Print “$anahtar = $deger
\n”;

}

if (isset($HTTP_GET_VARS)) {

foreach($HTTP_GET_VARS as $anahtar => $deger)

Print “$anahtar = $deger
\n”;

}

if (empty($HTTP_GET_VARS) || empty($HTTP_POST_VARS))

Print “Form alanından GET veya POST metoduyla bilgi gönderilemedi”;

?>

örnek: Formdan gönderilen bilgileri kullanma

FORM

ISIM: SOYAD:
E_POSTA:
ADRES:
CINSIYET: KADIN ERKEK
e_posta listesine uye olmak istiyorum

kayıp.php

echo "Formu doldurdugunuz icin tesekkur ederiz.
";

echo "Sayın ".$_GET["isim"]." ".$_GET["soyad"]." , ";

echo "Girmis oldugunuz bilgiler:
";

echo "e-posta adresiniz: ".$_GET["eposta"]."
";

echo "Adresiniz: ".$_GET["adres"]."
";

echo "Cinsiyetiniz: ".$_GET["cinsiyet"]."
";

echo "e_posta listesine uye olmak istiyormusunuz:";

if ($_GET["uyelik"]) echo "EVET";

else echo "HAYIR";

?>

Örnek: Hesap makinesi

HESAP MAKINASI

$sonuc=0;

if ($_POST[islem]=="toplama") $sonuc=$_POST["sayi1"]+$_POST["sayi2"];

else if ($_POST[islem]=="cikarma") $sonuc=$_POST["sayi1"] - $_POST["sayi2"];

else if ($_POST[islem]=="carpma") $sonuc=$_POST["sayi1"] * $_POST["sayi2"];

else if ($_POST[islem]=="bolme") $sonuc=$_POST["sayi1"] / $_POST["sayi2"];

?>

bgcolor="#CCCCCC">

bgcolor="#CCCCCC">

HESAP MAKINASI

1.SAYI "> 2.SAYI VALUE="">
+ - * /

SONUC:

METİN İŞLEMLERİ:

Metin Düzenleme Fonksiyonları:

Fonksiyon_adı

Açıklama

strlen(karakter_dizisi)

Karakter dizisindeki toplam karakter sayısını döndürür.

strtoupper(karakter_dizisi)

Karakter dizisini bütün harfleri büyük harf olacak şekilde döndürür.

strtolower(karakter_dizisi)

Karakter dizisini bütün harfleri küçük harf olacak şekilde döndürür.

ucfirst(karakter_dizisi)

Karakter dizisini ilk harfleri büyük olacak şekilde döndürür.

trim(karakter_dizisi,

[karakterler])

Karakter dizisindeki boşlukları temizler. “Karakterler” opsiyonel argümanı girilecek olursa boşluk yerine girilecek olan argümanlar temizlenir

ltrim(karakter_dizisi,

[karakterler])

Karakter dizisinin sol tarafındaki boşlukları temizler. “Karakterler” opsiyonel argümanı girilecek olursa boşluk yerine girilecek olan argümanlar temizlenir.

rtrim(karakter_dizisi,

[karakterler])

Karakter dizisinin sağ tarafındaki boşlukları temizler. “Karakterler” opsiyonel argümanı girilecek olursa boşluk yerine girilecek olan argümanlar temizlenir

ord(karakter)

Karakterin ASCII numarasını döndürür.

chr(ascii)

ASCII numarası verilen karakteri döndürür.

nl2br(karakter_dizisi)

Karakter dizisini satır sonu ayraçlarını(\n\r) HTML’in satır sonu ayraçları(
) ile değiştirerek döndürür.

strpos(metin,arana)

İkinci parametre ile belirtilen karakteri metin içerisinde arar bulamazsa false bulursa yerini verir.

int strcmp ( str1, str2 )

İki stringi karşılaştırır.

<>

>0 str1 büyük

=0 iki string eşit

string substr (str1, start [,l])

Stringin parçasını alır

$cumle=”merhaba ben bir php scriptiyim.”;

echo “Cümlenin orijinal hali: $cumle
”;

echo “Cümlemiz ”.strlen($cumle).” Karakterden oluşuyor
”;

echo “Cümlemiz büyük harf olarak yazılırsa: .strtoupper($cumle).
”;

echo “Cümlemiz küçük harf olarak yazılırsa: .strtolower($cumle).
”;

echo “Cümlemiz ilk harfi büyük harf olarak yazılırsa: .ucfirst($cumle).
”;

$cumle=” merhaba ben bir php scriptiyim ”;

Echo “boşlukları temizlenmiş cümle: ”.trim($cumle);

Metinlerin Parçalanması ve Birleştirilmesi:

Php scriptlerimizi hazırlarken belirli bir karakter dizisinin bir parçasını almayı yada diziyi parçalara ayırmayı gerektiren durumlarla karşılaşırız. Bu tarz çalışmalarda kullanılan fonksiyonlardan bazıları aşağıda verilmiştir.

Substr(): bir karakter dizisinin belirli bir parçasını bulmak için kullanılır.

Substr(karakter_dizisi, başlangıç [,bitiş])

$cumle =” Bugün hava çok güzel”;

echo substr($cumle,0,5).”
”; // Birinci karakterden başlayarak 5 karakter – Bugün

echo substr($cumle,2,3).”
”; // Üçüncü karakterden başlayarak 3 karakter – gün

echo substr($cumle,-3,3).”
”; // Sondan 3. karakterden başlayarak 3 karakter – zel

?>

explode(): Bu fonksiyon belirleyeceğimiz bir ayraca göre bir karakter dizisini parçalara ayırmakta kullanılır.

explode (ayraç,karakter_dizisi [,sayi])

  • Ayraç, karakter dizisinin parçalanması sırasında hangi karakter yada karakterlerin ayraç olarak kabul edileceğidir.
  • Karakter_dizisi, parçalama işleminde kullanılacak ana karakter dizisi,
  • Sayı, eğer bu parçalama işleminde belirli bir sayıdan fazla parça elde etmek istemiyorsak istediğimiz max. Parça sayısıdır.

$cumle=ozgur@deneme.com;

$parca=explode(“@”,$cumle);

$kullanıcı=$parca[0];

$domain=$parca[1];

echo “Kullanıcı Adı: $kullanıcı
”;

echo “Domain : $domain
”;

?>

implode(): explode() fonksiyonunun tam tersi fonksiyona sahiptir.

implode(ayraç,dizi_Değişken)

şeklinde kullanılan bu fonksiyon dizi değişkenin parçalarını belirtilen ayraç ile birbirine bağlar ve bir karakter dizisi olarak geri döndürür.


$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // çıktı: lastname,email,phone
?>

Metinlerde (Karakter Dizilerinde) Arama/Değiştirme Yapılması:

Strstr(): Bu fonksiyon bir karakter dizisinin içinde arama yapmak için kullanılır. Arama yapıldıktan sonra eğer parça bulunamazsa FALSE değeri, bulunur ise parçanın bulunduğu yerden başlayarak geri kalan karakter dizisi döndürülecektir. Strstr() fonksiyonu büyük küçük harf duyarlıdır. Büyük/küçük harf duyarsız olarak yapılacak aramalarda stristr() fonksiyonu kullanılır.

Strstr(karakter_dizisi, aranan_parça)


$email = 'user@example.com';
$domain = strstr($email, '@');
echo $domain; // çıktı: @example.com
?>


$email = 'USER@EXAMPLE.com';
echo stristr($email, 'e');
// çıktı: ER@EXAMPLE.com
?>

Str_replace(): Bir karakter dizisindeki parçanın başka bir parça ile basit olarak değiştirilmesini sağlayan fonksiyondur. Bu fonksiyon büyük/küçük harf duyarlılığına sahiptir.

Str_replace(aranan_parça,yeni_parça,karakter_dizisi) şeklinde kullanılır.,

$cumle=”Merhaba, nasıl gidiyor?”;

echo $cumle.”
”;

$yeni_cumle=str_replace(“nasıl gidiyor”, “nasılsınız”,$cumle);

echo $yeni_cumle.”
”; ?>

TARİH VE SAAT İŞLEMLERİ:

PHP kullanırken tarih yada saat kullanarak birtakım işlemler yapmak özellikle ziyaretçilerle etkileşimli web sayfaları hazırlarken karşımıza çıkacaktır.

time(): time fonksiyonu 1 OCAK 1970 yılından o ana kadar geçen zamanı saniye cinsinden veren fonksiyondur.

microtime(): timden farklı olarak geçen süreyi microsaniye hassasiyetinde verir.

SONUÇ:

time: 1113493750
microtime: 0.12340100 1113493750

$zaman=time();
$mzaman=microtime();
echo "time: $zaman
";
echo "microtime: $mzaman
";

?>

örn: geçen zamanı hesaplama

function basla()
{
global $b_zamani;
$g_deg=explode(" ",microtime());
$b_zamani=(float) $g_deg[1]+(float)$g_deg[0];
}
function goster()
{
global $b_zamani;
$g_deg=explode(" ", microtime());
$bit_zamani= (float) $g_deg[1]+(float)$g_deg[0];
return ($bit_zamani-$b_zamani);
}
basla();
$x=0;
for ($i=1;$i<1000000;$i++)
$x=$x+$i;
echo "islem suresi: ". goster()."saniyedir";
?>

date(): date fonksitonu PHP scriptlerinde yazdığımız tarih ve saat işlemlerinde en çok kullanılan fonksiyondur. Date() fonksiyonunun genel yapısı;

Date (format [,zamandamgası]) şeklindedir.

Format parametresi tarih nesnesinin biçimini belirlememizi sağlar;

HARF: MANA: ÖRNEK:

g saat(12 saatlik formata göre) 4

G saat(24 saatlik formata göre) 16

h saat(12 saatlik formata göre, iki karakter) 04

H saat(24 saatlik formata göre, iki karakter) 16

a küçük harfle am yada pm pm

A Büyük harfle AM yada PM PM

i dakika 15

s saniye 27

j ayın hangi günü olduğunu 1

d ayın hangi günü olduğunu 01

t bulunduğu aydaki gün sayısı 28

n ay 7

m ay 07

F ay ismi Novenber

y yıl (2 basamaklı) 01

Y yıl (4 basamaklı) 2001

Z yılın hangi günü olduğunu 304

L artık yıl ise 1 değilse 0 0

D haftanın hangi günü olduğunu Thu

I haftanın hangi günü olduğunu Thursday

echo “saat şu anda: ”.date(“H:i:s:A”).”
->Saat şu anda 09:53:00 AM

echo “Tarih ay-gün-yıl olarak:”.date(“m-j-Y”).”
->....: 04-17-2005

?>

DOSYA İŞLEMLERİ:

file_exists: Bir dosyayı okumadan/oluşturmadan önce dosyanın mevcut olup olamadığının kontrol etmek için kullanılan fonksiyondur.

if ( file_exist(“deneme.txt”)) {

print “Dosya var”;

}else {

print “dosya yok”;}

is_file/is_dir: Belirttiğimiz adın dosyamı yoksa dizin mi olduğunu öğrenmek için kullanılır.

if (is_dir(“/www/htdocs/deneme”))

echo”bu bir dizindir”;

else

echo “bu bir dosyadır.”

is_readable/is_writeable: dosyanın okunabilir veya yazılabilir olup olmadığını kontrol eder.

is_executable(): Dosya çalıştırılabilir mi?

Filesize(): Dosyanın boyutunu bayt cinsinden verir.

print ("Dosyanın boyutu:");

print filesize( "bir_dosya.txt" );

Dosyaya Yazma:Bir dosyadan bilgi alışverişi yapabilmek için dosyayı öncelikle açmalıyız.

Bu işlem için kullanacağımız komut fopen komutudur.

fopen(“dosya”, parametre) // parametre ifadesi C/C++ dakinin aynısıdır.

fopen(“dosya.txt”,”a”)

$dizin=”/Apache/htdocs”;

if (@fopen (“$dizin/deneme.txt”,r))

echo “deneme.txt dosyasını açabildim”;

else

echo “deneme.txt dosyasını açamadım”;

Bir komutun çalışıp çalışmamasını sürekli if deyimiyle kontrol etmek yerine bir komutun true değeri ile dönmemesi durumunda komutu durdurabiliriz. Bunun için de die komutu kullanılır.

fopen(“$dizin/deneme.txt”,”r”) || die (“HATA”); ifadesi kullanılabilir.

Dosyaya yazmak için fputs veya fwrite fonksiyonu kullanılır. Dosya fopen fonksiyonu ile açılır fputs/fwrite ile içerisine bilgi yazılır ve fclose ile de bağlantı kapatılır.

int fputs ( int fp, string str [, int length])

int fwrite ( int fp, string string [, int length])

$dosya=”deneme.txt”;

$adi=”Ömer”;

$soyadi=”Günaydın”;

$meslek=”Mühendis”;

$username=”admin”;

$password=”pass”;

$baglan=fopen(“$dizin/$dosya”,”a”);

if (fputs($baglan,”$adi:$soyadi:$meslek:$username:$password\n”))

echo “verilen değişkenler kaydedildi”;

else

echo “bir hata oldu”;

fclose($baglan); ?>

Dosyadan Okuma:Dosyadan okumak için fread/fgets fonksiyonları kullanılır.

string fread ( int fp, int length)

string fgets ( int fp [, int length]): lengt ifadesi seçimliktir.

Length kullanılmazsa bir satır okunacaktır. Length kullanılırsa belirtilen bayt okunacaktır. Fread arsındaki tek fark length in seçimlik olmasıdır.

Dosya üzerinde belirli bir noktaya konumlanmak için C/C++’a benzer olarak fseek komutu kullanılır.

int fseek ( int fp, int offset [, int referans])

Ofset parametresi ne kadar gidileceğini belirtir.

Referans parametresi ise nereden başlanacağını belirtir. Kullanılmazsa dosya başına göre işlem yapar. Referans noktasını tanımlamak için;

SEEK_SET dosyanın başından

SEEK_CUR Şu anki konumdan

SEEK_END Dosyanın sonundan ifadeleri kullanılır

fseek(fp,5,SEEK_SET); // baştan 5. byte

fseek(fp,5,SEEK_END); // sondan 5. byte

fseek(fp,5,SEEK_CUR); //Şu anki konumdan 5. byte sonraya git.

bool rewind ( resource handle ): Dosyanın başına konumlan.


$fp = fopen('somefile.txt', 'r');

$data = fgets($fp, 4096); // 4096 byte oku

fseek($fp, 0); // dosya başına git (rewind($fp))
?>

int feof ( int fp): dosya sonunu kontrol eder

$fd = fopen ("/tmp/inputfile.txt", "r");
while (!feof ($fd)) {
    $buffer = fgets($fd);
    echo $buffer;
}
fclose ($fd);
 

Kimi zaman dosyalarımızın içeriğini satır-satır okutmak yerine, kendi tayin edeceğimiz uzunlukta parçalar halinde okutmak isteriz. Bunu, fread() fonksiyonu ile sağlarız. Örnek:

$dosya_dizin = "/inetpub/wwwroot/";

if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {

print ("Dosya açıldı!
");

}

else {

print ("Dosya açılamadı!");

}

while ( ! feof ($dosya) ) {

$paragraf = fread ( $dosya, 1024 ) ;

print ("$paragraf
");

}

fclose ($dosya);

?>

fread() fonksiyonu da daha önce açılmış olan dosyanın işaret değişkenin adını ve okunmasını istediğimiz asgari byte ölçüsünü parametre olarak alır. fread() fonksiyonu verdiğimiz uzunluk ölçüsüne ulaşmadan önce dosyada bir yeni satır işareti görürse, veya dosyanın sonuna ulaşırsa, okumaya son verir. Bu fonksiyondan yararlanırken, verdiğiniz uzunluk ölçüsünün, almak istediğiniz metin parçasına uygun olduğunu sınamalısınız. fread(), bu ölçüye ulaştığında okumayı keser. Buradaki örneği 1024 byte ölçüsünü değiştirerek ve mesela 1, 2, 3 yaparak deneyebilir ve böylece vereceğiniz ölçünün okunan metnin uzunluğunu nasıl tayin ettiğini görebilirsiniz.

$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";

if ($dosya = (fopen ($dosya_adi , 'r') ) ) {

print ("Dosya açıldı!
");

}

else {

print ("Dosya açılamadı!");

}

$dosya_boyut = filesize($dosya_adi);

$olcu = (int) ($dosya_boyut / 2 );

while ( ! feof ($dosya) ) {

$paragraf = fread ( $dosya, $olcu) ;

print ("$paragraf
");

}

fclose ($dosya);

?>

Burada, okutulacak dosyanın boyutunun yarısını atadığımız $olcu değişkenini, okutulacak metnin ölçüsü olarak kullanıyoruz. Bu durumda PHP, dosyayı iki paragraf halinde görüntüleyecektir.

Kullanımdaki dosyanın kilitlenmesi

Web sunucusundaki dosyalarımızla sadece bir kişi işlem yapıyor olsa idi, bir sorun olmazdı; ne var ki, bir Web sitesine aynı anda birden fazla kişi eriyebilir ve dosyalarla işlem yapan programları çalıştırıyor olabilir. Bu, PHP'nin dosya işlemlerine engel olabilir. Bu sebeple, işlem için açacağımız bir dosyayı, önce kilitlemek yerinde bir önlem sayılır. Bunu, flock() fonsiyonu ile yaparız; bu fonksiyona kilitlemek istediğimiz dosyanın işaret değişkeninin adını ve kilit türünü belirten indeks sayısını parametre olarak yazarız. Örnek:

$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";

$dosya = fopen ($dosya_adi , 'w') or die ("Dosya açılamadı!");

flock ( $dosya , 2); // dosyayı kilitle

$metin = "Bu satır dosyaya yazılacak: Merhaba Dünya!\n";

fwrite ( $dosya , $metin ) ;

fputs ( $dosya , "Bu satır ise sonradan eklenecek\n" ) ;

flock ( $dosya , 3); //dosyayı kilidini aç

fclose ($dosya);

?>

Bu fonksiyon ile kullanabileceğimiz indeks parametreleri şunlardır:

1 Paylaşım Diğer proseslerin dosyayı paylaşmalarına imkan verir

2 Tam Diğer proseslerin dosyaile işlem yapmasına engel olur

3 Serbest Dosyanın 1 veya 2 olan kilidini kaldırır

Bir dosya, herhangi bir PHP programı tarafından kilitlendiği anda, aynı dsyayı daha sonra kilitlemeye kalkan diğer programlar kendilerinden önce konulmuş kilide saygı gösterirler.

rename():Bu fonksiyon dosya sistemindeki bir dosyanın adını yeniden belirlememizi sağlar fonksiyon başarılı ise TRUE, bir sorun olduğu taktirde FALSE değeri döndürür.

bool rename ( string oldname, string newname )


rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>

unlink():Bu fonksiyon dosya sistemindeki bir dosyanın silinmesini sağlar fonksiyon başarılı ise TRUE, bir sorun olduğu taktirde FALSE değeri döndürür.

copy():Bu fonksiyon dosya sistemindeki bir dosyayı belirttiğimiz bir yere kopyalayabiliriz. Fonksiyon başarılı ise TRUE, bir sorun olduğu taktirde FALSE değeri döndürür.


$file = 'example.txt';
$newfile = 'example.txt.bak';

if (!copy($file, $newfile)) {
echo "failed to copy $file...\n";
}
?>

Dosya "gönderme" (upload)

Internet'ten hep dosya "indiririz!" Bir sunucuya, Web ziyaretçisi olarak gönderebildiğimiz tek şey ise, Formlara yazdığımız yazılardır! Oysa HTML'in INPUT INPUT etiketinin çok az kullanılan TYPE="file" parametresi ziyaretçiye Web sunucusuna dosya gönderme (upload) imkanı sağlar. HTTP protokolü buna imkan vermekle birlikte Browser'lar bu imkanı kullanmaya ileri sürümlerinde kavuştular. PHP4, ziyaretçilerimizin sitemize dosya göndermeleri halinde, bu dosyaların yönetimine ayrıca kolaylık sağlayan değişkenlere sahiptir.

$dosya_dizin = "/inetpub/wwwroot/";

$dosya_url = "http://server/";

if is_uploaded_file( $_FILES[“dosya_gonder”][“tmp_name”] )) {

print ("Yol: $dosya_gonder
\n");

print ("Adı: $dosya_gonder_name
\n");

print ("Boyut: $dosya_gonder_size
\n");

print ("Tür: $dosya_gonder_type
\n");

copy ( $dosya_gonder, "$dosya_dizin/$dosya_gonder_name" )or die ("Dosya kopyalanamıyor!");

if ( $dosya_gonder_type == "image/gif" ||$dosya_gonder_type == "image/pjpeg" ) {

print ("

\n\n");

}

}

?>

ENCTYPE="multipart/form-data" ACTION="" METHOD="POST">


Bu programda etiketinde kullandığımız NAME parametresine verdiğimiz değer, ziyaretçimizin göndereceği dosyanın sunucu tarafından kaydedileceği geçici dizinin tam yolunun yazılacağı değişkenin adı olacakdır. PHP, bu dosya ile ilgili her türlü bilgiyi bu adla kaydecektir. PHP, ziyaretçiden bir dosya başarıyla aktarıldığı anda otomatik olarak bu isimden yararlanarak şu değişkenleri oluşturur:

$dosya_gonder Geçici kayıt dizini yolu

$dosya_gonder_name Ziyaretçinin gönderdiği dosyanın adı.

$dosya_gonder_size Ziyaretçinin gönderdiği dosyanın boyutu.

$dosya_gonder_type Ziyaretçinin gönderdiği dosyanın türü

PHP ayrıca bu bilgileri $_FILES dizi-değişkeninde de tutar. Dosya erişmek için aşağıdaki değişkenler kullanılabilir.

tmp_name: Gönderilen dosyanın geçici kayıt yolu

name: gönderilen dosyanın adı

size: gönderilen dosyanın boyutu

type: Gönderilen dosyanın türü

Yukarıdaki programda şu iki değişken çok önemlidir:

$dosya_dizin = "/inetpub/wwwroot/";

$dosya_url = "http://server/";

$dosya_dizin adıyla oluşturduğumuz değişkene vereceğimiz değer, ziyaretçinin göndereceği dosyanın kopyalanacağı klasörün adı olarak kullanılacaktır. Sözgelimi Windows ortamında buraya kişisel Web sunucunun varsayılan klasörünün adını yazabilirsiniz. Ziyaretçinin göndereceği dosya bir GIF biçiminde grafik dosyası ise bunu Browser'da görüntüleyeceğimiz için, bu dizinin Web'e açık olması, başka bir deyişle bizim Web sunucumuzun erişebileceği bir dizin olması gerekir. Nitekim, $dosya_url değişkenine değer olarak bu klasörün URL adresini veriyoruz. Bu iki değişkeni gerçek Web sunucu için yazacağımız zaman, bizim sunucumuzun varsaydığı fiziksel klasör adını ve yolunu bulmamız gerekir.Sözgelimi, http://www.mycgiserver.com/~ocal/ adresindeki sitenin fiziksel adresi ile bu adresin URL'ini dikkate alarak bu iki değişkeni yazmış olsaydık, şunu yazacaktık:

$dosya_dizin = "/wwwroot/mycgiserver.com/members/uNhM13/";

$dosya_url = "http://www.mycgiserver.com/~ocal/";

Bu uygulamayı kendi sunucunuzda yapmak isterseniz, mutlaka bu iki değişkeni doğru yazmanız gerekir

INCLUDE VE REQUIRE:

Bu iki ifade harici bir dosyayı kendi içerisinde işleyip, istenilen dosyaya monte eder. Aralarındaki fark include() ifadesinde monte edeceğimiz dosya bulunamaz ise script çalışmaya devam edecektir. Ancak require ifadesi kullanıldığında monte edilecek dosya mutlak surette bulunması gerekir, bulunamaz ise script o satırda çalışmasını sonlandırır.

Birçok yerde aynı ifadelerin kullanılması gerekiyorsa bu ifade harici bir dosyada oluşturulup diğer dosyalara eklenir. Örneğin veritabanı bağlantısını sağlayan fonksiyonlar harici.inc adında bir dosyada oluşturulur ve veritabanı bağlantısı gereken her yerde include edilerek aynı kod yeniden yazılmaz.

Örnek: Dosya içinde kayıt arama

Untitled

if (!isset($_POST["submit"]))

{

?>

Ogrenci Numaranizi Girin


VALUE="ARA">

}

else

{

include "arama.inc";

?>

Ogrenci Bilgileri
ADI:TD>

SOYADI:
1.VIZE:
2.VIZE:
FINAL:
ORTALAMA:
Ogrencinin Durumu:

}

?>

arama.inc

$dosya="veri.csv"; // kayıtlı verilerin bulunduğu dosya

$baglan=fopen($dosya,"r"); // dosyayı aç

$boy=filesize($dosya); // dosya boyunu al

$tumu=fread($baglan,$boy); // tüm verileri oku

fclose($baglan); // bağlantıyı kapa

$satir=explode("\n",$tumu); // veriyi satırlara böl

if ($_POST["numara"]!="")

{

$aranan=$_POST["numara"];

foreach($satir as $yeni) // tüm satırları tara

{

list($a,$soyadi,$no,$v1,$v2,$f)= explode(";", $yeni);// verileri “;” karakterine göre parçala

if ($no==$aranan): // aranan buldu ise

$var=true; // var değişkenini true yap

break; // döngüden çık

endif;

}

}

function ortalama() // ortalam hesaplar

{

global $v1,$v2,$f;

$ortalama=($v1*0.3)+($v2*0.3)+($f*0.4);

return $ortalama;

}

function durum() // durumunu belirler (GEÇTİ / KALDI)

{

$ort=ortalama();

if ($ort>=50):

return "GECTI";

else:

return "KALDI";

endif;

}

if (!$var){

?>

exit();// bulunamadıysa çık.

}

?>

DİZİN İŞLEMLERİ:

Web sunucu üzerinde herhangi bir dizinde herhangi bir dizin yaratabilir veya silebiliriz. Dizin oluşturmak ve silmek için mkdir ve rmdir komutları kullanılır.

int mkdir ( string pathname, int mode)

mkdir komutunda ilk olarak yaratacağımız dizinin adını yazıyoruz. Sonra bu dizinin erişim hakkını belirtiyoruz. Genelde buraya 0755 yazıyoruz.






$dizin=”/Apache/htdocs”;

if (mkdir(“$dizin/deneme”,0755)){

echo “deneme klasörü oluşturuldu”;

} else {

echo “klasör oluşturulamadı”;}


$dizin=”/Apache/htdocs”;

if (rmdir(“$dizin/deneme”)){

echo “deneme klasörü silindi”;

} else {

echo “klasör silinemedi”;}


PHP ile herhangi bir dizinde bulunan tüm dosya ve dizinleri listelememiz mümkündür. Bu işlemi yapabilmek için öncelikle dizini opendir komutu ile açmalıyız. Açılan dizindeki dosya veya klasör isimlerine erişmek için readdir komutu kullanılır. Readdir komutu opendir komutunun geriye döndürdüğü dizin tutamacını parametre olarak kullanır.

  • resource opendir ( string path)
  • string readdir ( resource dir_handle)






// tmp içindeki dosya ve klasörler

if ($dir = @opendir("/tmp")) {

while (($file = readdir($dir)) !== false) {

echo "$file
\n";

} closedir($dir);

}closedir($dir) ?>


// yalnız dosyaları listeler

if ($dir = @opendir("/tmp")) {

while (($file = readdir($dir)) !== false) {

if ( is_dir ($file ) ) echo "$file
\n";

} closedir($dir);

} ?>


Dizin içindeki dosya ve klasörleri ayırmak için is_dir/is_file komutu kullanılabilir.

bool chdir(string directory): Aktif dizini değiştirir. Eğer başarılı ise TRUE değilse FALSE değer döndürür.

string getcwd ( void ): O anki aktif dizini geri döndürür.



echo getcwd() . "\n"; // aktif dizini yaz
chdir('cvs'); // dizin değiştir.

echo getcwd() . "\n"; // aktif dizini yaz

?>

Çıktı:

/home/didou
/home/didou/cvs

E_Mail İşlemleri

PHP ile mail gönderebilmemiz için öncelikle kendi makinemizde bir SMTP sunucusunun bulunması gerekmektedir. Mail işlemlerini bir üyelik sisteminde şifresini unutan kullanıcılara şifresini mail adresine gönderirken ihtiyaç duyabiliriz.

PHP ile mail göndermek için mail komutu kullanılır. Bu komutun kullanım şekli ;

mail (kime,konu,mesaj) şeklindedir.

En basit anlamda bir mail gönderme işlemi; mail komutunun içerisine ilk olarak mail adresini, konusunu ve mesaj parametreleriyle yapılır.








( Genel kullanım şekli )

...

@mail($kime,$konu,$mesaj) || die(“Mail Gönderilemedi”)

....

?>


Bu haliyle gönderilen mailin gönderen kısmında mail server’ın varsayılan bir mail adresi olacaktır. Gönderdiğimiz mailin adresini gizleme, HTML şeklinde mail gönderme, mailin ekinde bir dosya taşıma gibi işlemleri mail komutunda 4. bir ek değişkenle yaparız. Bu değişkenle;

From: Mailin kimden geldiğini gösterir.

Replay-to: Cevabın yollanacağı adresi;

Cc: Karbon kopya

Bc: Göndereceğiniz mailde mail adresinizi gizler.

ü Gönderen kişi ve Cevabın yollanacağı adres belirtilmiş

$kime=”deneme@localhost”;

$konu=”Bu bir denemedir.”;

$mesaj=”Bu bir deneme maildir”;

$ek=”From:webmaster@aspet.net\n”;

$ek.=”Replay-to:deneme@localhost”;

if (@mail($kime,$konu,$mesaj,$ek)){

echo “mail gönderildi”;

}else {

echo “mail gönderilemedi”;} ?>

Göndereceğimiz maili HTML formatında yollamak için ek başlığa aşağıdaki kodu girmemiz gerekir;

Content-Type:text/html;charset=iso-8859-9 (Türkçe karakter kullanabilmek için )



$kime=”deneme@localhost”;

$konu=”deneme.”;

$mesaj=’ mail denemesi

’;

Bu bir mail gonderme denemesidir

$ek=”Content-Type:text/html;charset=iso-8859-9”;

if (@mail($kime,$konu,$mesaj,$ek)){

echo “mail gönderildi”;

}else {

echo “mail gönderilemedi”;} ?>


Örnek: Önce e-posta gönderilecek formumuzu hazırlayalım ve dosyamızı eposta.php olarak saklayalım:

Sitemizi inşa etmede ve yenilemede görüşleriniz

çok önemlidir. Lütfen doldurmaktan çekinmeyin.

Ad Soyad:

E-Posta:

Yorumlarınız:


Lütfen 20 sn. bekleyin. Tekrar Gönder butonuna basmanıza

gerek yoktur.

Her zaman için öncelikle formunuzdaki Anahtar = Değer çiftlerini aklınızda tutarsanız, PHP'de değişkenleri atamanız çok kolaylaşacaktır.

Dikkat ederseniz "kime" anahtarına "deneme@php.org.tr” değerini atadım.

"konu" anahtarına da "Web Sitemden" değerini atadım.

Değerleri bu şekilde atamamızın amacı, ileride sadece bu iki alanı değiştirerek farklı formlar yaratabilmenizi sağlamak. Böylece hem daha anlaşılır bir sisteminiz olacak, hem de yeni bir form yaratmanız daha az zamanınızı alacak.

Yukardaki formda yer alan değişkenleri sıralayalım:

1.adsoyad (ziyaretçi dolduracak)

2.eposta (ziyaretçi dolduracak)

3.yorum (ziyaretçi dolduracak)

4.kime (deneme@php.org.tr)

5.konu (Web sitemden)

Şimdi bu verileri kullanarak elektronik postamızı hazırlayıp yollayacak PHP kodumuzu yazalım:

$mesaj = "Ad Soyad: " . $adsoyad . "\n";

$mesaj .= "E-Posta: " . $eposta . "\n";

$mesaj .= "Yorum: " . $yorum . "\n";

$extra_baslik = "From: $kime\n";

$extra_baslik .= "Reply-To: $eposta\n";

$extra_baslik .= "Bcc:arsiv@php.org.tr\n";

$extra_baslik .= "Content-Type:text/plain; charset=\"iso-8859-9\"\n";

$extra_baslik .= "Content-Transfer-Encoding: 8bit\n";

mail($kime, $konu, $mesaj, $extra_baslik);?>

Önce size yabancı gelebilecek birkaç kullanım şeklini açıklayalım.

Eğer Perl veya C tabanlı bir kullanıcı iseniz, “.=” kullanımına zaten aşinasınız demektir. Basic benzeri dillerden gelen kullanıcılar için de onlara tanıdık gelecek kullanım örneğini verelim:

$mesaj = $mesaj . “E-Posta: “ . $eposta . “\n”;

PHP’de, Basic benzeri dillerden farklı olarak, değişkenleri birbirlerine eklemek için nokta kullanılır. PHP ile her iki kullanım şekli de doğrudur. Biz bütün örneklerimizde “.=” biçimini kullanacağız.

HTML sayfalarını yayınlarken geçerli olan bütün kurallar, e-posta hazırlarken de geçerlidir: İçeriğin hangi karakter seti ile okunması gerektiğini mutlaka belirtmelisiniz, aksi takdirde e-postanız farklı e-posta istemcilerinde farklı sonuçlar verecektir! Bu sorunu çözmek için, $extra_baslik değişkenine iki yeni satır ekledik: Content-Type ve Content-Transfer-Encoding.

Dikkat ettiyseniz, postanın BCC bölümüne de bir e-posta adresi yazdık. Böylece yollanan bütün formların bir kopyasının da “mailto:arsiv@php.org.trr” adresine gitmesini sağlamış olduk.

Son olarak unutmamamız gereken bir şey daha var. Formu gönderdikten sonra, ziyaretçimize e-postanın gönderildiğine ilişkin bir mesaj vermeliyiz. Bunun için yukarıdaki kodumuza dokunmadan onu HTML kodlarıyla sarıp, gonder.php ismiyle kaydedeceğiz. Gonder.php dosyasının son hali aşağıdaki gibi olacaktır:

$mesaj = "Ad Soyad: " . $adsoyad . "\n";

$mesaj .= "E-Posta: " . $eposta . "\n";

$mesaj .= "Yorum: " . $yorum . "\n";

$extra_baslik = "From: $kime\n";

$extra_baslik .= "Reply-To: $eposta\n";

$extra_baslik .= "Bcc:arsiv@php.org.tr\n";

$extra_baslik .= "Content-Type:text/plain; charset=\"iso-8859-9\"\n";

$extra_baslik .= "Content-Transfer-Encoding: 8bit\n";

mail($kime, $konu, $mesaj,$extra_baslik);

?>

Sayın <?php echo($adsoyad) ?>, formunuz başarıyla alındı.

Sayın ,

formunuz

adresine gönderilmiştir.

Teşekkür ederiz.

Başta da belirttiğimiz gibi, bu kodları denemek için iki şansınız var, Linux veya Windows 2000 kullanıcısı iseniz, daha şanslısınız, sisteminizde zaten yüklü bir SMTP sunucu olma ihtimali çok yüksek. Eğer Windows 95 / 98 kullanıcısı iseniz, http://www.php.org.tr/ adresinden, Windows 95 / 98 altında kullanabileceğiniz SMTP sunucusunun adresini ve kurulum bilgilerini gerekli bütün detaylarıyla birlikte bulabilirsiniz.

İkinci bir şansınız daha olduğunu söyledik, o da Internet’e bağlı olmak koşuluyla kullanabileceğiniz kendi ISP’nizin SMTP sunucusu, ya da Yahoo! gibi ücretsiz posta hizmeti veren ve SMTP adresi bilinen bir site. Her iki olanak için de yapmanız gereken değişikliklere bakalım. Windows altında çalışıyorsanız, C:\Windows\php.ini dosyasını açın ve [mail function] başlığı altındaki ayarlarınızı şu şekilde değiştirin:

Kullandığınız bilgisayarda kurulu bir SMTP sunucusu varsa:

SMTP = localhost ;for win32 only (Kendi serverınızın smtp ayarını yazın)

sendmail_from=deneme@php.org.tr ;for win32 only (Email adresinizi yazın)

Kullandığınız bilgisayarda kurulu bir SMTP sunucusu yoksa:

SMTP = smtp.mail.yahoo.com (Yahoo! dan bir e-posta adresiniz olduğunu varsayıyoruz)

sendmail_from=deneme@php.org.tr

Yahoo!'nun SMTP'sini kullanmak istiyorsanız, Yahoo! sitesindeki hesabınıza girin ve Options (Seçenekler) kısmından POP3 ile e-posta alacağınızı belirtin. Yukarıdaki satırları php.ini dosyanıza ekledikten sonra, Yahoo! nun SMTP sunucusunu kullanarak e-posta yollayabilirsiniz.

Formu istediğiniz gibi çoğaltabilirsiniz. Gerisi sizin yaratıcılığınıza kalmıştır.

ÇEREZLER(COOKİES):

Cookie’ler web sayfasını ziyaret eden ziyaretçileri daha sonra tanımak amacıyla, belirli süreler boyunca ziyaretçinin bilgisayarına atılan metin dosyalarına denir. Bu metin dosyaları kullanılan browser’a göre çeşitli yerlerde depolanır. Mesela IE cookileri c:\windows\cookie dizininde depolar. Cookieler herhangi bir web sayfasından gönderilebilir ve bu cookieler başka hiçbir web sayfasından okunamaz. Gönderilen cookiler $HTTP_COOKIE_VARS, $_REQUEST yada $_COOKIE dizi değişkeniyle okunur. Şimdi basit bir cookie gönderelim ve bu cookie yi okuyalım.

setcookie(“cookie_adı”,”COOKIENin_degeri”);

echo $http_COOKIE_VARS[“cookie_Adı”];

Bu komut ilk çalıştırıldığında ekrana bir şey yazmayacaktır. Ama program ikinci defa çalıştırıldığında COOKIEnin_degeri yazısı çıkacaktır. Setcookie fonksiyonuna 3. bir parametre ile cookinin nezamana kadar aktif kalacağını da belirtebilir.

setcookie(“ad”,”ergun”,time()+600);

Bu kod parçaşı ile ad isminde ergun değerine sahip bir cookie oluşturulur. Bu cookie nin geçerlilik süresi ise 600 sn yani 10 dakikadır. Cookie 10 dk sonra otomatik olarak silinecektir.

Şimdi kolay ve klasik bir örnek olarak bir cookie ile ziyaretçinin sayfamıza kaç kere girdiğini hafızada tutacak PHP scripti hazırlayalım.

$gecerli_sure=time()+600;// 10dk

if ($_COOKIE["sayac"]!="")

{

$yeni_sayac=$_COOKIE["sayac"] +1;

setcookie("sayac",$yeni_sayac,$gecerli_sure);

echo "merhaba sayfamıza $_COOKIE[sayac] kez girdiniz. Yine bekleriz.";

}

else

{

setcookie("sayac",1,$gecerli_sure);

echo "merhaba sayfamıza ilk girişiniz! Teşekkür ederiz";

}

?>

Cookie kullanılark web stesi özelleştirebilir. Örneğin ziyaretcinin seçtiği zemin rengini cooki kullanark kullanıcının bilgisayarında saklayabilir. Böylece aynı kullanıcı siteyi yeniden ziyaret ettiğinde bu cookie kullanılarak kullanıcının seçtiği zemin rengi seçilebilir.

//genel.php

ANA SAYFA

$renk_kodu="#FFFFFF";

if ($_COOKIE["renk"]!="")

{

switch ($_COOKIE["renk"])

{

case "beyaz": $renk_kodu="#FFFFFF"; break;

case "gri": $renk_kodu="#C0C0C0"; break;

case "sari": $renk_kodu="#FFFF00"; break;

case "yesil": $renk_kodu="#00FF00"; break;

case "mavi": $renk_kodu="#0000FF"; break;

case "siyah": $renk_kodu="#000000"; break;

default:$renk_kodu="#FFFFFF"; break;

}

echo $_COOKIE["renk"];

}

?>

">

Kisisel web sayfanıza hosgeldiniz!

Sayfanizin ayarlarini degistirmek ieterseniz tıklayın.

OTURUM YÖNETİMİ(SESSİON):

Oturum yönetimiyle, bir kullanıcının web sayfasındaki üyelik sistemine giriş yaptığı andan başlayarak tarayıcısını kapattığı ana kadar açabileceği çeşitli sayfalarda dolaşabilme imkanı sunar. Bir üyelik sistemi yaptığımızı varsayalım. Bir üyenin sisteme girip bir sayfadan diğer bir şifreli sayfaya geçiş yapmk istediğinde kullanıcının o sayfada login olup olmadığını nasıl anlarız? Bu işlem iki yöntemle gerçekleştirilebilir. Birincisicookie kullanmaktır. Bu yöntem maksimum güvenlik gerektiren sayfalarda kullanılamaz. Diğer yöntemse, kullanıcı bir kere login olduğunda kullanıcı bilgilerini adres satırına taşıyarak her sayfada kullanıcıyı veritabanında bulunan verilerle kıyaslamaktır. Hem çok zaman aldığından hemde kullanıcının izi browser’da kaldığı için bu yöntemde güvenli bir yol değildir.

Bu işlemi yapabilmek için session kullanmamız gerekmektedir. Aslında session’larda cookie’ler gibi birer metin dosyasıdır. Fakat session’lar cookie’ler gibi ziyaretçinin bilgisayarına gönderilmezler. Session’lar web server’ın geçici bir klasöründe depolanır. Bir dosyanın içinde session kullanıldığında geçici klasörün içinde uzun bir şifreli dosya oluşturulur. Her session oluşturulduğunda farklı bir dosya oluşturulur ve tarayıcının kapanmasına kadar veya biri bu dosyanın görevini bitirinceye dek orada etkin olur.

Bir session oluşturmak için önce session_start fonksiyonu ile session başlatılır. Daha sonra session_register fonksiyonu ile session kaydedilir.

Örnek:

//kisisel.php

$sure=7;

if ($_POST["renk_sec"]!=""){

$g_sure=time()+($sure*24*60*60);

setcookie("renk","$_POST[renk_sec]",$g_sure);

header("Location:genel.php"); //genel.php sayfasına yönlendirir.

exit;

}

?>

KISISELLESTIRIN!

" method="post">

Arka Plan Rengini Seçiniz:

Beyaz
Sari
Yesil
Mavi
Siyah


session_start();
session_register(“veri”);

if(!$git) {

$veri=”PostgreSQL”;

echo “Session oluşturuldu.”;

echo “Bu sessionun degerini görmek için tıklayın”;

}else {

echo “Session degeri: $_SESSION[veri]”;
}
?>

Bir üyelik sistemine girip gerekli işlemleri yaptıktan sonra sistemden çıkış yapmak için illaki browser’ı kapatmamıza gerek yoktur. Oluşturduğumuz session’u silmek için session_destroy ile session_unregister komutları kullanılır. İlk komut tüm sessionları ikincisi ise ismi belirtilen session’u siler.

Örnek:

session_start();

session_register("veri");

if($git=="01") {

echo "Session degeri: $_SESSION[veri]
";

echo "Sessionu silmek için tıklayın";

}elseif($git=="02") {

session_destroy(); //session_unregister(“veri”)

echo "Session silindimi acaba
";

echo "Öğrenmek için tıkla";

}elseif($git=="03") {

echo "Session varsa degeri: $_SESSION[veri]";

} else {

$veri="PostgreSQL";

echo "Bir session oluşturuldu";

echo "Sessionun degerini öğrenmek için tıkla";

}?>

Örnek:

//session_a.php

session_start(); // Bunu hep register komutundan önce kullanmamiz gerek

$isim="Mustafa";

$soyisim="Karabulut";

session_register("isim");

session_register("soyisim");

echo "Ismimi ve soyismimi,görmek için tiklayiniz";

?>

//session_b.php

session_start(); // Oturum bilgilerini almak için bu kullanilmali

$isim = $HTTP_SESSION_VARS["isim"];//$_SESSION[“isim”]

$soyisim=$HTTP_SESSION_VARS["soyisim"];//$_SESSION[“soyisim”]

echo "Merhaba, ismim = $isim ve soyismim $soyisim";

?>

Dikkat ettiyseniz $isim ve $soyisim değişkenlerini session_a.php dosyasynda kayıt ederken, session_register kullandım ve parametre olarak sadece değişken isimlerini yazdym, başlarındaki $ işaretlerini kullanmadym. session_register komutunu kullanyrken sadece değişkenin ismini yazmamyz gerekiyor, yani

Şimdiye kadar hiç kontrol yaptırmadık. Çoğu durumda oturum komutlarını bir şeyleri kontrol etmek için kullanırız, mesela ziyaretçi login olmuşmu gibi.Oturum içinde değişkenlerin kayıt edilip edilmediğini kontrol etmek için session_is_registered komutu kullanılır. Eğer kayıtlı ise TRUE değilse FALSE değer döndürür.

bool session_is_registered ( string name )

Örnek:

//a.php login sayfası

session_start() ;

$randomuserid=md5(microtime());

session_register("randomuserid");

echo "Diger sayfaya geçnmek için tiklayiniz";

?>

//b.php sayfası

session_start();

if (session_is_registered("randomuserid")){

echo "Giris yaptiginiz için tesekkürler";

} else {

echo "oturum açmadınız!
";

echo "açmak için tıkla";

// header ("Location:a.php");// login sayfasına direk gitmesini sağlar.

}?>

MySQL Veritabanı

mySQL veri türleri

MySQL'de bir çok veri türü oluşturulabilir. Ancak Web programları açısından önemli olan bir kaçı ve özellikleri şöyle saralanabilir:

INT Tamsayı: -2147483648'den 2147483647 kadar değişen diziye "signed" (işaretli), 0'dan 4294967295'e kadar değişenine "unsigned" (işaretsiz) denir.

VARCHAR(n) n sayısını geçmemek şartıyla değişen boyutta karakter olabilir.

CHAR(n) Kesinlikle n sayısı kadar karakter olabilir.

TEXT En fazla 65535(2^16-1) karakter alabilen metin alanı.

MEDIUMTEXT En fazla 16777215(2^24-1) karakter alabilen metin alanı.

DATE 1000-01-01'den 9999-12-31'e kadar değişebilen tarih alanı.

TIMESTAMP 1 Ocak 1970'den 18 Ocak 2038'e kadar olan ve Yıl+Ay+Gün+Saat+Dakika+Saniye biçimindeki zaman bilgisi.

MySQL'de bir tablo oluşturmak için gerekli CREATE TABLE komutu şöyle kullanılır:

CREATE TABLE uyeler (adi VARCHAR(30), soyadi VARCHAR(30), üye_no INT ) ;

Bu komutla, "uyeler" isimli üç sütunlu bir tablo oluşturulur: birinci ve ikinci sütunlarda en fazla 30, karakterlik değişen boyutta alfanümerik değerler yer alırken, üçüncü sütunda sadece tam sayı olan değerler bulunabilir. Bu komutla oluşturulan tabloya INSERT INTO komutuyla veri girebilirsiniz:

INSERT INTO uyeler (adi, soyadi, uye_no) VALUES ('Muharrem','Taç','1234')

Bir tablonun oluşturulması ile içine veri yerleştirilmesi komutları ayrı ayrı zamanlarda, ayrı işlemler olarak yapılabileceği gibi, toplu bir metin halinde, otomatik olarak da yapılabilir.

MySQL veritabanından bilgi edinmek için SELECT komutunu kullanırız:

SELECT * FROM uyeler ;

Bu, MySQL'e, uyeler adlı tablodaki bütün değerlerin okunmasını bildirir. Buradaki "*" işareti, "bütün sütunlardaki bütün değerler" anlamına gelir. Diyelim ki yukardıda oluşturduğumuz tablonun sadece "adi" ve "soyardi" sütunlarındaki bilgileri almak isteseydik, bu komutu şöyle yazacaktık:

SELECT adi soyadi FROM uyeler ;

Bir veritabanındaki bilgilerin yenileriyle değiştirilmesini, yani veritabanı dosyasının güncelleştirilmesini UPDATE komutu sağlar. Bu komutu kullanarak veritabanımızdaki bazı kutucukların içindeki bilgileri değiştirebiliriz. Veritabanı dosyalarını güncelleştirme zorunluğu bulunması ise bize veritabanı tasarımının çok önemli olduğunu gösterir. Örneğin:

UPDATE uyeler SET adi = "Şahika" ;

Bu komut, veritabanındaki bütün satırlarda, birinci sütundaki değerleri "Şahika" olarak değiştirmekle sonuçlanırdı. Amacımız bu ise, sorun değil; ancak çoğu kez MySQL'e hangi satırda (veritabanı tekniğindeki terimle söylersek, hangi kayıtlarda) değişiklik yapılacağını daha ayrıntılı sölememiz gerekir. Veritabanı dosyamızı oluştururken, her kaydın diğer kayıtlarda olmayan (unique) bir sütun (bunu da veritabanı tekniğindeki terimle söylersek. alan) bulunmalıdır, ki MySQL'e yapılacak değişikliğin tam yerini söyleyelim. Örneğin

UPDATE uyeler SET adi = "Şahika" WHERE uye_no = 1234;

MySQL bu komutu alınca sadece üye numarası 1234 olan kişinin (yani uye_no alanındaki değer 1234 olan kaydın) "adi" alanındaki değeri silecek ve yerine verdiğimiz yeni değeri yazacaktır. Böyle birincil alanı bulunan, iyi düşünülmüş bir veritabanından seçim yapmak da kolay olur. Örneğin:

SELECT adi soyadi FROM uyeler WHERE uye_no >= 123;

deyimi ile tablomuzda bulunan kayıtlardan sadece üye numarası 123'den büyük olanları seçebiliriz.

Bir MySQL veritabanındaki kaydı silmek için DELETE komutunu kullanırız:

DELETE FROM uyeler WHERE uye_no = 1234;

Veritabanında sadece bir kayıtta üye numarası 1234 olacağı için bu komutla sadece bir satır silinecektir. Bu komutu, diyelim ki üyelik kaydını yenilememiş kişilerin tümünü silmek için de kullanabiliriz. Veritabanımızda üyelik kaydının yenilendme tarihini gösteren bir alan bulunduğunu varsayalım:

DELETE FROM uyeler WHERE yenileme_tarihi <>

Bu komutla, üyeliğini yenileme tarihi 31 Ocak 2000'den eski olan bütün üyelerimizin kaydını veritabanından silmiş oluruz.

PHP MYSQL İLİŞKİSİ


Bir kullanıcı PHP ve MySQL kullanılan bir web sayfasına bağlandığında gerçekleşen olaylar ve sırası yukarıdaki şekildeki gibi olacaktır.

PHP scripti içerisinden MySQL veritabanı ile bağlantıyı sağlarken sırasıyla aşağıdaki adımlar gerçekleştirilir.

· Önce MySQL veritabanı sunucusuna bağlanırız.

· Çalışacağımız veritabanını seçeriz.

· Edinmek istediğimiz veya değiştirmek istediğimiz. İçerik için gerekli sorgulamaları SQL sorgulama dilinde yaparız.

· Yaptığımız sorgulama ile edindiğimiz bilgileri değerlendiririz. Gerekli işlemleri yaparız.

· İşlemler bittiğinde veritabanı ile olan bağlantımızı sona erdiririz.

MYSQL’E BAĞLANILMASI VE VERİTABANININ SEÇİLMESİ:

Mysql bağlantısı yapılırken VT sunucu adresi, kullanıcı adı ve şifre parametreleri ile mysql_connect komutu kullanılır.

· mysql_connect(“host”,”kullanıcı adı”,”şifre”);

Eğer yerel makinenizdeki MySQL sunucusunu kullanacaksanız “host” olarak localhost veya 127.0.0.1 IP adresi yazılır.

$veri_yolu =mysql_connect(“localhost”,”root”,”parola”) ;

Burada "localhost" yerine MySQL programının parçası olarak çalıştığı sunucunun adı yazılır. "root" bu MySQL sunucusunda açılacak oturumun kimin adına açılacağını belirter. "root" kelimesi, sunucunun yönetici olarak oturum açılacağı anlamına gelir: "parola" kelimesinin yerine de MySQL'i kurarken belirlediğimiz bir kullanıcı parolası varsa, onu yazarız. Bu komutta yer alan $veri_yolu değişkeni, açılacak veri yolunun, PHP ile MySQL veritabanı sunucusu arasındaki bağın tanıtıcı işareti olacaktır. Bu bağlantı kurulduktan sonra, açtığımız veri yolundan gelecek bilgiler ve veritabanına gidecek bilgiler bu değişken aracılığıyla gerçekleşecektir. Veri sunucusu ile veri yolu bağlantısı kurulursa, bu değişken değer tutar hale gelir; bağlantı kurulamazsa bu değişken boş kalır. mysql_connect() fonksiyonunun başarılı olup olmadığını bu değişkenin durumunu sınayarak anlayabiliriz. Örneğin:

$veri_yolu =mysql_connect("kara-murat", "root");

if ( ! $veri_yolu) die ("MySQL ile veri bağlantısı kurulamıyor!);

Burada veri sunucusunun bulunduğu Web sunucusunun adının "kara-murat" olduğuna, ve o oturumun "root" yetkileriyle açıldığına dikkat edin. İkinci satırdaki if deyimi, $veri_yolu değişkeninin değer içerip içermediğine bakıyor ve değişkende bir değer yoksa, bağlantı kurma girişini durdurarak, ziyaretçiye hata mesajı gönderiyor.

farklı yöntemler;

---------------------------------------------

$baglan=@mysql_connect(“localhost”,”root”) ;

if (!$baglan) {

echo “MySQL’e bağlanamadık. Bir hata oldu.
”;

echo “Hata mesajı ”.mysql_error().”
”;

echo “Hata numarası ”.mysql_errno().”
”;

exit();

}

-------------------------------------

@mysql_connect(“localhost”,”root”) || die(“Hata Numarası:”.mysql_errno());

echo (“Bağlantı kuruldu”);

-------------------------------------

Bağlantı kurulduktan sonra yapılacak işlem üzerinde çalışacağımız Veri Tabanının seçilmesidir. Bunun için mysql_select_db komutu kullanılır.

bool mysql_select_db(veritabanı_adı [,baglantı_adı])

· Veritabanı adı; çalışacağımız veritabanı adı,

· Bağlantı numarası; mysql’e bağlanırken mysql_connect fonksiyonundan edindiğimiz bağlantı numarasını temsil eder .

$baglan=@mysql_connect(“localhost”,”root”) || die(“Hata Numarası:”.mysql_errno());

mysql_select_db( "veritabanın_adı" , $baglan ) || die ("VT açılamıyor!".mysql_error() );

MYSQL’de Veritabanı İşlemleri:

· mysql_create_db: MySQL’de yeni bir veritabanı oluşturmak için kullanılır.

bool mysql_create_db ( string database name [, bağlantı_adı])

@mysql_connect(“localhost”,”root”) || die(“MySQL’e bağlanamadım”);

if (mysql_create_db(“yeni_veritabanı”)) {

echo “MySQL’de yeni_veritabanı adında bir veritabanı oluşturuldu”;

}else {

echo “Bir sorun çıktı.veritabanı yaratılamadı ”;}

?>

· mysql_drop_db: Mysql’de bulunan bir veritabanını silmek için mysql_drop_db komutu kullanılır.

bool mysql_drop_db ( string database_name [, bağlantı_adı])

Bağlantı adı seçimliktir. Kullanılmaması durumunda “mysql_connect” fonksiyonu ile bağlanılan son bağlantı kabul edilir.

· mysql_list_dbs: MySQl’de bulunan veritabanlarını listelemek için kullanılır.

resource mysql_list_dbs ( [bağlantı_adı])

Bağlantı adı seçimliktir. Kullanılmaması durumunda “mysql_connect” fonksiyonu ile bağlanılan son bağlantı kabul edilir.


$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$db_list = mysql_list_dbs($link);

while ($row = mysql_fetch_object($db_list)) {
echo $row->Database . "\n";
}
?>

Yukarıdaki program parçasının çıktısı aşağıdaki gibi olur.

database1
database2
database3

$list=mysql_list_dbs($baglan);
while ($row=mysql_fetch_object($list))
{
echo "$row->Database \">$row->Database
";
}
}

Yukarıdaki program parçası mevcut veritabanlarını alt alta link vererek listeler.

database1
database2

Veritabanında SQL sorgularının yapılması:

Php scriptleri içerisinden SQL sorgularını gerçekleştirmek için mysql_query() komutu kullanılır. Fonksiyonun genel yapısı;

resource mysql_query(sorgu,[bağlantı_adı]); şeklindedir.

Aşağıdaki kod parçası deneme1 adında bir tablo oluşturacaktır

mysql_connect(“localhost”,”root”)|| die(“MYSQl’e bağlanamadım.”);

@mysql_select_db(“yeni_veritabani”) || die (“Veritabanını seçemedim”);

$tablo=”CREATE TABLE deneme1(

adi CHAR(10) NULL,

soyadi CHAR(10) NULL,

)”;

if (mysql_query($tablo)){

echo “mysql’de bir tablo oluşturuldu”;

}else{

echo “bir hata oldu tablo oluşturulamadı”;}?>

Aşağıdaki kod parçası mysql_drop_db fonksiyonu ile aynı işi yapmaktadır.


$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$sql = 'DROP DATABASE my_db';
if (mysql_query($sql, $link)) {
echo "Database my_db was successfully dropped\n";
} else {
echo 'Error dropping database: ' . mysql_error() . "\n";
}
?>

Bir veritabanı içerisinde bulunan tabloları listelemek için;

  • mysql_list_tables: Veritabanındaki tüm tabloları listeler,

resource mysql_list_tables ( string database [, bağlantı_adı])

  • mysql_num_rows: satır sayısını verir,

int mysql_num_rows ( resource result)

  • mysql_tablename: veritabanında bulunan tablo adını verir.

string mysql_tablename ( resource result, int i)

mysql_field_name: Veritabanında bulunan tablonun sütun adlarını verir.

string mysql_field_name ( resource result, int field_index)

Örnek: Tablonun sütun adlarının listelenmesi;

$link = mysql_connect('localhost', "mysql_user", "mysql_password");
 
mysql_select_db(“yeniveritabanı”)
    or die("baglanamadı");

$res = mysql_query("select * from users", $link);

echo mysql_field_name($res, 0) . "\n";// ilk alanın adı

echo mysql_field_name($res, 2); // 3. alanın adı

 

Örnek: Tablo isimlerinin listelenmesi;

@mysql_connect(“localhost”,”root”) || die(“MYSQL’e bağlanamadım”);

$sorgu= @mysql_list_tables(“yeni_veritabanı”);

$tablo_say=mysql_num_rows($sorgu);

for ($i=0;$i<$tablo_say;$i++) {

$tabloadi[$i]=mysql_tablename($sorgu,$i);

echo “$tabloadi[i]
\n”;

}

Örnek:mysql_query() komutunu kullanarak deneme1 adlı tabloya kayıt girişi;

@mysql_connect(“localhost”,”root”) || die(“MySQL’e bağlanamadim”);

@mysql_select_db(“yeni_veritabanı”) || die(“veritabanını seçemedim”);

$veri=”INSERT INTO deneme1 VALUES(‘Bayram’,’Güneşdoğdu’)”;

$veri_gir=mysql_query($veri);

if (isset($veri_gir)) { echo “ MYSQL’e veri girişi yapıldı”;

} else { echo “bir hata oldu veri girişi yapılamadı ”; }

Örnek: Tablo1 adlı tablodaki 5671 nolu kayıtları silmek(delete);

mysql_select_db("deneme");
$sorgu="delete from tablo1 where no='5671'";
if (mysql_query($sorgu))
{
echo "kayıt silindi";
}

Örnek: tablo1 adlı tablodaki no alanı 5671 olan kayıtları güncellemek(update);

mysql_select_db("deneme");
$sorgu="update tablo1 set no='555', adi='aaa',soyadi='bbb' where no='5671'";
if
(mysql_query($sorgu))
{
echo "kayıt guncellendi";
}

Veritabanı bağlantısını harici bir dosyada tanımlayarak veritabanı bağlantısı gereken tüm yerlerde bu dosya kullanılarak gereksiz yere aynı kodun yazımından kurtulabiliriz.

// harici.inc olarak kaydedilecek

function baglan(){

@mysql_connect(“localhost”,”root”) || die(“MySQL’e bağlanamadim”);

@mysql_select_db(“yeni_veritabanı”) || die(“veritabanını seçemedim”);

}?>

  • mysql_result: Mysql’de bulunan verileri okumak için kullanılan komuttur.

mixed mysql_result ( resource result, int row [, mixed field])

1.parametre verinin bulunduğu sonuç değişkeni, 2.paramere çekilecek verinin satır numarası, 3.parametre istenen alan adı(seçimlik).

include “harici.inc”; // harici db bağlantı dosyası

baglan();

$sorgu =”SELECT * FROM deneme1“;

$sonuc=mysql_query(sorgu);

$satir=mysql_num_rows($sonuc);

for ($i=0;$i<$satir;$i++) {

echo @mysql_result($sonuc,$i,”adi”);

}?>

· mysql_fetch_array: MySQL’den verileri bir dizi değişkene çeken fonksiyondur. Sütun sayısı fazla olduğu zaman mysql_result fonksiyonunu kullanmak zahmetli olacaktır. Bu durumda mysql_result yerine mysql_fetch_array fonksiyonunu kullanabiliriz.

array mysql_fetch_array ( resource result [, int result_type])

“result_type” parametresi seçimlik olarak kullanılır. MYSQL_NUM, MYSQL_ASSOC, MYSQL_BOTH değerlerini alabilir. Kullanılmaması durumunda MYSQL_BOTH kabul edilir. Sadece elde edilen diziye erişim şeklini değiştirir ($row[0], $row[1]/ $row["id"], $row["name"]/ $row[0], $row["name"] ).

include “harici.inc”;

baglan();

$sonuc=mysql_query(“SELECT * FROM deneme1”);

while ($oku= mysql_fetch_array($sonuc)){

echo “$oku[0] $oku[1]
\n”;

}?>

· mysql_fetch_assoc: Tablodan verileri çekerken dizi değişkene sıralama olarak tablo sütunlarının adlarını verir mysql_fetch_array fonksiyonunun “MYSQL_ASSOC “ parametresi ile kullanımının aynısıdır.

array mysql_fetch_assoc ( resource result)

while ($oku= mysql_fetch_assoc ($sonuc)){

echo “$oku[adi] $oku[soyadi]
\n”;

}?>

· mysql_db_query: Bu fonksiyonu kullanarak belirli bir veritabanına sorgu gönderebiliriz. Yani mysql_select_db ve mysql_query komutlarının birleşimi mysql_db_query komutudur.

resource mysql_db_query ( string database, sorgu [, bağlantı_adı] )

$link = mysql_connect('localhost', "mysql_user", "mysql_password");

$sorgu=mysql_db_query(“yeni_veritabani”,”SELECT * FROM deneme1”);

while ($oku=mysql_fech_assoc($sorgu)){

echo “$oku[adi] $oku[soyadi] $oku[username] $oku[password]
\n”;

}

  • mysql_num_fields: Bir tabloda bulunan sütunların sayısını verir.
  • mysql_field_len: Sütunların max. Kaç karakter alabileceğini verir.

....

$sonuc=mysql_query(“SELECT * FROM uye”);

$sutun=mysql_num_fields($sonuc);

echo “Tabloda toplam $sutun sütun var.

Bu sütunların alabileceği maksimum karakter sayıları:
\n”;

$i=0;

while ($i<$sutun) {

$sutun_adi[$i]=mysql_field_name($sonuc,$i);

$maksimum=mysql_field_len($sonuc,$i);

echo “ $sutun_adi[$i] sütunu maksimum $maksimum karakter alır
\n”;

$i++;

}

MySQL Bağlantısını Kesmek:

Veritabanına mysql_connect komutu ile bağlantı kurulduktan sonra veri tabanı ile ilgili işlemler bittiği zaman mysql_close komutu kullanılarak bağlantı kesilir.


$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo “Bağlantı sağlandı”;
mysql_close($link);
?>

Örnek Veritabanındaki kayıtları 10 arlı gruplar halinde tabloya yazdıran uygulama.

include "harici.inc";
baglan();
if (!isset($k)) $k=0;
$sorgu="SELECT * FROM deneme ORDER BY adi LIMIT $k,5";
$sonuc=mysql_query($sorgu);
$tumu=mysql_query("SELECT * FROM deneme");
$row=mysql_num_rows($tumu);
while($oku=mysql_fetch_assoc($sonuc)){
echo "$oku[adi]---$oku[soyadi]
\n";
}
$i=0;
while($i<$row){ $a=$i+5;
echo "$i'>[$i-$a]";
$i=$i+5;
}

?>

Hiç yorum yok:

Yorum Gönder