Browser bilgilerini çekme
<?php
foreach ($GLOBALS as $anahtar=>$deger ) {
print ($anahtar . ” = ” . $deger . “<br>”);
}
?>
Şimdi
Browser penceresinde gördüğünüz bilgileri irdeleyelim; çünkü biraz
sonra ziyaretçiden Form ile gelen verileri yakalarken ve işlerken bu
bilgilerden yararlanacağız. (Bu programı kişisel bilgisayarınızda,
kişisel Web sunucuda çalıştırıyorsanız, aynı programın gerçek bir
Unix-tabanlı Web sunucuda (Apache) nasıl sonuç verdiğini
Bu
programla PHP”nin daima varolan $GLOBALS dizisinin üyelerini
görüntülüyoruz. $GLOBALS bir ilişkili-dizi-değişken, yani değişken
değerlerinin endeks adı (anahtarı) bulunan bir dizi olduğu için,
içerdiği değerlere adları ile ulaşabiliriz. Bu programda, $GLOBALS”ın
anahtarlarını $anahtar, değerlerini ise $değer değişkenine yazdırıyoruz
ve bir foreach döngüsü ile Brnowser penceresine gönderiyoruz. Programı
çalıştırdığımız sisteme ve Web sunucu programına bağlı olmak üzere,
ekranımızda bir çok değişken görebiliriz. Bunlar arasında bütün HTTP
Server programları için ortak ve Web programcısı için önemli
değişkenler şunlardır:
HTTP_ENV_VARS HTTP:
Sunucu programın çalışmakta olan PHP dosyası için oluşturduğu çevre
değişkenlerinin yazılı olduğu dizi değişken. Bu değişkenin içinde şu
unsurlar bulunur:
HOSTNAME: Sunucunun IP adresi
SHELL: Unix sisteminde kullanılan Shell programı
HOSTTYPE: Sunucunun adı ve sürünü
OSTYPE: Sunucu”nun işletim sistemi
HOME: Çalışan programın kök dizini
PATH: Çalışan programın Sunucu”daki yolu
HTTP_SERVER_VARS: Sunucu
programın çalışmakta olan PHP dosyasına sunduğu bazı bilgilerin
bulunduğu dizi değişken. Bu değişkenin içinde şu unsurlar bulunur:
PHP_SELF: Çalışan PHP programının bulunduğu dizin ve adı
PATH_TRANSLATED: Çalışan PHP programının fiziksel yolu
HTTP_GET_VARS: Bir Form”dan GET metoduyla alınan bilgilerin anahtar=değer çiftleri olarak kaydedildiği dizi değişken
HTTP_POST_VARS: Bir Form”dan POST metoduyla alınan bilgilerin anahtar=değer çiftleri olarak kaydedildiği dizi değişken
HTTP_USER_AGENT: Ziyaretçinin bilgisayarında kurulu Internet Browser programı
QUERY_STRING: Form ile bilgi alırken GET metodunu kullandığımız takdirde, Browser”ın göndereceği bilgilerin tutulduğu değişken
REMOTE_ADDR: Ziyaretçinin bilgisayarına ISS tarafından atanmış IP adresi
REQUEST_METHOD: Form ile gelen bilgilerin gönderildiği metod: GET veya POST
REQUEST_URI: O anda çalışmakta olan PHP dosyasının adı ve varsa bu ada eklenmiş Query_String
SCRIPT_FILENAME: O anda çalışmakta olan PHP programının dosya adı
SCRIPT_URI: O anda çalışmakta olan PHP programının tam URL adresi
SERVER_ADDR: Sunucunun IP adresi
SERVER_PROTOCOL: Sunucunun HTTP protokolünün sürümü
Form”dan GET Metoduyla Gelen Bilgiler
Ziyaretçilerimizin
ne tür Browser kullandıklarını HTTP_USER_AGENT değişkeninin değerini
alarak ve bu değerin içinde belirli anahtar kelimeleri aratarak
bulabiliriz. Form ile gelen bilgiler, GET metodu ile alınıyorsa, hem
QUERY_STRING, hem de HTTP_GET_VARS dizisine kaydolur. POST metoduyla
aldığımız bilgileri HTTP_POST_VARS değişkenin değerleri arasında
buluruz. Bunları öğrendiğimize göre, şimdi gerçekten bir HTML Form”u
yapabilir ve bununla ziyaretçimizden bilgi alabiliriz.
Basit bir HTML Form”u tasarlayalım.
<HTML>
<HEAD>
<TITLE>PHP”de Formlar</TITLE>
<meta http-equiv=”content-type” content=”text/html; charset=ISO-8859-9″>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1254″>
</HEAD>
<BODY>
<FORM ACTION=”formlar02_isle.php” METHOD=”GET”>
Adınız, Soyadınız: <INPUT TYPE=”TEXT” NAME=”adi”>
<br>
Elektronik Adresiniz: <INPUT TYPE=TEXT” NAME=”adres”>
<br>
<INPUT TYPE=”SUBMIT” VALUE=”Gönder Gitsin!”> <INPUT TYPE=”RESET” VALUE=”Vazgeç, Gönderme!”>
</FORM>
</BODY>
</HTML>
Bu
Form”la Web tasarım yarışmasına katılmayacağımıza göre, şimdilik sadece
Web Sunucuya bilgi göndermekte kullanabiliriz. Form”un ACTION
parametresine dikkat ederseniz, formlar02_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.
Şimdi
bir an için ne olacağını düşünmeden, formu doldurun ve Gönder düğmesini
tıklayın; ve Browser”ınızdaki hata mesajına aldırmadan, URL adres
kutusunda ne yazdığını okuyun:
http://server/formlar02_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 (hem QUERY_STRING, hem de HTTP_GET_VARS
dizisine) 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.
<?php
print (”Sayın <b>$adi</b>
“);
print (”<p>Elektronik adresiniz: <b>$adres </b></p>
“);
?>
Şimdi,
Browser”ınızda formlar02.htm sayfasını yeniden açın, Form”u doldurun ve
gönderin. Açılacak sayfa, Form”un gönderecğii bilgileri alacak ve kendi
görünteleyecektir.
Fakat burada
gördüğünüz gibi Sunucu”nun ziyaretçiden gelen bilgileri depoladığı
dizileri kullanmadık. Bunu yaparken, GET ile gelen bilgiler kendisinde
verildiğinde PHP programının alan adlarını değişken adı, bunların
karşısında yazılı olan verileri de bu değişkenin değeri saymasından
yararlandık. Fakat isteseydik, bu değişkenleri, Sunucu”nun oluşturduğu
dizilerden de alabilirdik. Şimdi hem Form”umuzu geliştirelim; hem de bu
kez okuma işini Sunucu dizisinden yapalım.
<FORM ACTION=”formlar03_isle.php” METHOD=”GET”>
Adınız, Soyadınız: <INPUT TYPE=”TEXT” NAME=”adi”>
<BR>
Elektronik Adresiniz: <INPUT TYPE=TEXT” NAME=”adres”>
<BR>
Hangi notunuzu öğrenmek istiyorsunuz?
<BR>
<SELECT NAME=”hangi_not”>
<OPTION>–Lütfen seçiniz–
<OPTION>Sınav 1
<OPTION>Sınav 2
<OPTION>Ortalama
</SELECT>
<BR>
<INPUT TYPE=”SUBMIT” VALUE=”Gönder Gitsin!”> <INPUT TYPE=”RESET” VALUE=”Vazgeç, Gönderme!”>
</FORM>
Yeni
Form”da yeni bir HTML unsuruna yer verdiğimizi ve SELECT..OPTION
etiketi ile ziyaretçiye bir seçim imkanı verdiğimizi görüyorsunuz.
Şimdi, bu Form”un göndereceği bilgileri işleyecek PHP programını
yazalım. Aşağıdaki kodları formlar03_isle.php adıyla kaydedelim:
<?php
foreach ($HTTP_GET_VARS as $anahtar=>$deger ) {
print (”<b>$anahtar = $deger <br>
“);
}
?>
Demiştik
ki, Web sunucu, bir istemci Browser”dan kendisine GET yöntemiyle
yollanan Form bilgilerini $HTTP_GET_VARS adlı dizi değişkende tutar.
Yine daha önce görmüştük ki dizi değişkenlerin içinde ya sayı ya da
isim olarak bir anahtar ve bu anahtarın temsil ettiği bir değer vardır.
Burada, $HTTP_GET_VARS değişkeninin anahtar ve değerlerini $anahtar ve
$deger değişkenlerine => operatörünün yardımıyla, bir foreach
döngüsü içinde atıyoruz. Döngü kullanmamızın sebebi, dizi değişkenin
içinde birden fazla anahtar=değer çifti bulunması ihtimali bulunması;
döngü olarak da foreach kullanmamızın sebebi dizide kaç adet
anahtar=değer çifti bulunduğunu bilmememizdir.
Form
sayfasının gönderdiği bilgilerin nasıl derlenip toplanıp URL-koduyla
Sunucuya gönderildiğini, Form”un Gönder düğmesini tıkladığımızda
Browser”ın URL adres hanesinde ilen bilgilerin görülecektir. Buradaki
örnekte bu bilgi (HTTP bölümünü ve URL kodlarını kaldırarak):
adi=Şahika+Tabak&adres=stabak@somenet.com&hangi_not=Sınav+1
şeklindedir.
Bu bilgi, sunucu tarafından $HTTP_GET_VARS dizi değişkeninin içine
yazıldığına göre, daha önce gördüğümüz gibi dizi değişkenlerin
anahtarlarını ve bu anahtarların temsil ettiği değerleri bir döngü
içinde $anahtar ve $deger değişkenlerine atarsak, daha sonra bu
değişkenlerin değerlerini Browser penceresine göndermemiz mümkün olur.
Şimdi
biraz dizi-değişken içine dizi-değişken koyalım! Yani ziyaretçinin
göndereceği bilgiler, buradaki gibi SELECT..OPTION etiketinde yapacağı
sadece bir unsur seçimi olmasın da çoklu-seçim olsun. HTML
bilgilerinizi yoklarsanız, bunu SELECT etiketini MULTIPLE parametresi
ile yapabildiğimizi hatırlayacaksınız.
<FORM ACTION=”formlar03a_isle.php” METHOD=”GET”>
Adınız, Soyadınız: <INPUT TYPE=”TEXT” NAME=”adi”>
<BR>
Elektronik Adresiniz: <INPUT TYPE=TEXT” NAME=”adres”>
<BR>
Hangi notunuzu öğrenmek istiyorsunuz?
<BR>
<SELECT NAME=”hangi_not[]” MULTIPLE>
<OPTION>Sınav 1
<OPTION>Sınav 2
<OPTION>Ortalama
</SELECT>
<BR>
<INPUT TYPE=”SUBMIT” VALUE=”Gönder Gitsin!”> <INPUT TYPE=”RESET” VALUE=”Vazgeç, Gönderme!”>
</FORM>
Burada,
HTML”in SELECT.. OPTION etiketlerini kullanarak, ziyaretçimizden hangi
sınav notunu öğrenmek istediğini bize bildirmesini istiyoruz. Dikkat
ettiğiniz gibi, bu kez Form, elde edeceği verileri formlar03a_isle.php
programına yollamak istiyor. Form”daki <SELECT NAME=”hangi_not[]”
MULTIPLE> satırına da dikkat ettiniz mi? Bu satırın özelliği, daha
önceki SELECT..OPTION etiketinden farklı olarak ziyaretçinin çoklu
seçme yapmasına imkan veriyor; ve elde edilecek değeri “hangi_not[]”
alanının değeri olarak bildiriyor. HTTP iletişim ilkelerine göre
çoklu-seçim halinde seçilen OPTION değerleri Sunucu”ya aynı alan adının
karşısına yazılarak gönderilir. Formumuzun göndereceği bilgi yumağını
satırlar haline getirirsek (HTTP bölümünü atar ve URL kodlarını
çözersek) bunu görebiliriz:
adi=Şahika Tabak
adres=stabak@somenet.com
hangi_not[]=Sınav 1
hangi_not[]=Sınav 2
hangi_not[]=Ortalama
Kendisine
böyle bir bilgi yumağı gelen Server, bunun tümünü $HTTP_GET_VARS dizi
değişkeninin içine yazacaktır. Başka bir deyişle, bu dizi değişken
çıok-boyutlu çok-elemanlı ilişkili-dizi olduğu için, içinde rahatça
aynı isimde değişkenlere farklı endeks sayısı verecektir. Fakat sorun
PHP”nin, bu dizinin içinden değişkenleri almasında ortaya çıkacak ve
endeks ismi aynı olan değişkenler sorun olacaktır. Bunu değişkenin
endeks adı olarak kullanılacak kelimenin yanına köşeli parantez koyarak
çözüyoruz. PHP bu adı görünce, bunun çok-elemanlı bir dizi değişken
olacağını anlayacaktır.
Eğer
bu formu, formlar03_isle.php programına gönderseniz (bunu nasıl
yapabilirsiniz?), “hangi_not” değişkeninin değeri olarak Browser
penceresinde “array” kelimesinin belirdiğini görebilirsiniz. Çünkü PHP
açısından bu değişken bir dizidir ve içinde anahtar=değer çiftleri
vardır. Daha önce anahtar=değer çiftlerini geçici değişkenlere atayıp
bir döngü ile yazdırmıştık. Şimdi, PHP kodumuzu bu duruma uygun hale
getirelim. Biraz önce yazdığımız Form işleme programının sadece PHP
bölümünü şöyle değiştirerek, formlar03a_isle.php adıyla kaydedelim:
<?php
foreach ($HTTP_GET_VARS as $anahtar=>$deger ) {
if ( gettype ($deger ) == “array” ) {
print (”$anahtar == <br>
“);
foreach ( $deger as $yeni_degerler )
print (”.. $yeni_degerler<br>”);
}
else {
print (”<b>$anahtar = $deger <br>
“);
}
}
?>
PHP”nin
gettype() fonksiyonunu daha önce görmüş ve bir değişkenin türünü
anlamaya yaradığını öğrenmiştik. Burada $HTTP_GET_VARS değişkeninden
aldığımız değerlerden herhangi birinin gerçekten bir değişken değeri
mi, yoksa bir dizi (array) mi olduğunu gettype() ile anlayabiliriz.
Eğer değer olarak karşımıza “array” kelimesi çıkarsa, bunu kendi içinde
anahtar ve değer olarak bölebilir ve herbirini ayrı ayrı
görüntüleyebiliriz. Eğer $HTTP_GET_VARS değişkeninden aldığımız değer,
dizi değil de gerçekten bir değişken ise (else) doğruca bu değeri ve
anahtarını yazdıracaktır. Sonuç ise dizi-değişken içindeki
dizi-değişkenin değerlerinin tek tek görüntülenmesi olacaktır.