BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Form ile işlemciyi Birleştirme
 

Form ile işlemciyi Birleştirelim

Şu ana kadar yaptığımız bütün Form örneklerinde, Form'un bulunduğu HTML sayfası ile bu Form'un göndereceği verileri işleyen PHP programı iki ayrı belge halinde idi. Bu, buradaki örneklerde olduğu gibi, ziyaretçinin verdiği bilgileri sadece Brıowser penceresine yazdıran bir eğitim çalışması için belki uygun; ama gerçek Web sitelerimizde ziyaretçilerimizin vereceği bilgileri çoğu zaman sadece onların Browser pencerelerinde göstermekle kalmayız, fakat bu bilgileri ya elektronik posta yoluyla kendimize yollarız, ya da sunucuda bir düzyazı veya veritabası dosyasına işleriz. Bu ve diğer amaçlarla yapacağımız Form içeren HTML sayfaları, aslında PHP programımızın bir içinde yer alabilir; ya da başka bir deyişle, Form'umuz ziyaretçinin vereceği bilgileri kendi bulunduğu PHP programına gönderebilir!

Bu karmaşık ifadeyi bir örnekle açalım. Yukarıda yaptığımız son HTML sayfası ile ve PHP programını şöyle birleştirelim; ve bunu formlar04.php adıyla kaydedelim:

<?php

if ( isset ( $HTTP_POST_VARS )) {

print ("<HTML>n");

print ("<HEAD>n");

print ("<TITLE>PHP'de Formlar</TITLE>n");

print ("<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">n");

print ("<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">n");

print ("</HEAD>n");

print ("<BODY>n");

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

                  if ( gettype ($deger ) == "array" ) {

                        print ("$anahtar == <br>n");

                        foreach ( $deger as  $yeni_degerler )

                              print (".. $yeni_degerler<br>");

                              }

                  else {

                  print ("<b>$anahtar = $deger <br>n");

                  }

            }

print ("</BODY>n");

print ("</HTML>n");

}

else {

print ("<HTML>n");

print ("<HEAD>n");

print ("<TITLE>PHP'de Formlar</TITLE>n");

print ("<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">n");

print ("<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">n");

print ("</HEAD>n");

print ("<BODY>n");

print ("<FORM ACTION="$PHP_SELF" METHOD="POST">n");

print (" Adınız, Soyadınız: <INPUT TYPE="TEXT" NAME="adi">n");

print ("<BR>n");

print (" Elektronik Adresiniz: <INPUT TYPE="TEXT" NAME="adres">n");

print ("<BR>n");

print (" Hangi notunuzu öğrenmek istiyorsunuz? n");

print ("<BR>n");

print ("<SELECT NAME="hangi_not[]" MULTIPLE>n");

print ("<OPTION>Sınav 1 n");

print ("<OPTION>Sınav 2 n");

print ("<OPTION>Ortalama n");

print ("</SELECT>n");

print ("<BR>n");

print ("<INPUT TYPE="SUBMIT" VALUE="Gönder Gitsin!">n");

print ("<INPUT TYPE="RESET" VALUE="Vazgeç, Gönderme!">n");

print ("</FORM>n");

print ("</BODY>n");

print ("</HTML>n");

}

?>

Bu dosyanın tümüyle PHP programı olduğuna dikkat ettiniz, tabiî? Program açıldığında sunucunun $HTTP_POST_VARS dizi-değişkeninin bir değer içerip içermediğini  bir if deyiminin içinden bir değişkenin içeriği olup olmadığını anlamamıza yarayan isset () fonksiyonu ile yapıyoruz. Bu şart doğru ise, yani $HTTP_POST_VARS dizi-değişkeni bir değer içeriyorsa, program, foreach döngüsünün içinde bu değişkenin içindekileri almaya ve Broüwser penceresinde görüntülemeye başlıyor. Bu şart doğru değilse, yani $HTTP_POST_VARS dizi-değişkeni henüz bir değer içermiyorsa, if deyiminin birinci bölümünü içindeki hiç bir kod icra edilmiyor ve prgram else deyimine sıçrıyor. Programın else bölümü ise daha önceki HTML kodlarımızı içeren bir dizi print() fonksiyonu yerine getiriyor; yani Browser'a içinde Form bulunan HTML sayfasını yazdırıyor. Burada FORM etiketine dikkat edelim:

print ("<FORM ACTION="$PHP_SELF"METHOD="POST">");

Form'un ACTION parametresinde bir PHP programının adı yerine "$PHP_SELF" değişken adını görüyoruz. Bu, bu bölümün başında ele aldığımız gibi, sunucunun bu PHP programına sağladığı çevre değişkenlerinden biridir ve o anda çalışmakta olan PHP programının dosya adını içerir. (Bizim örneğimizde bu değişkenin değeri nedir?)

Dosya "çıkartma"

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.  Önce şu dosyayı, dosya_gonder.php adıyla kaydedin:

<HTML>

<HEAD>

<TITLE>PHP'de Dosya Gönderme</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>

<?php

$dosya_dizin = "/inetpub/wwwroot/";

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

if ( isset ( $dosya_gonder )) {

    print ("<b>Yol:</b> $dosya_gonder<br>n");

    print ("<b>Adı:</b> $dosya_gonder_name<br>n");

    print ("<b>Boyut:</b> $dosya_gonder_size<br>n");

    print ("<b>Tür:</b> $dosya_gonder_type<br>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 ("<img src="$dosya_url/$dosya_gonder_name"><p>nn");

      }

}

?>

</BODY>

<FORM  ENCTYPE="multipart/form-data" ACTION="<?php print $PHP_SELF?>" METHOD="POST">

<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="951200">

<INPUT TYPE="file" NAME="dosya_gonder"><BR>

<INPUT TYPE="SUBMIT" VALUE="Dosya Yolla!">

</FORM>

</BODY>

</HTML>

Bu programda <INPUT TYPE="file" NAME="dosya_gonder"> 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 kaydedektir. 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 (UNIX'te /tmp/phpXXX, Windows'da Windows/TEMP0phpXXX. Burada XXX yerine ziyaretçilerin gönderdiği dosyaların sıra numarasını göreceksiniz.)

$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 $HTTP_POST_FILES dizi-değişkeninde de tutar.

Yukardaki 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 kullanlacaktı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ünteleyeceğ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 varnaydığı fiziksel klasör adını ve yolunu bulmamız gerekir. Bunu daha önce yazdığımız php.php veya formlar01.php programlarını sitemizde çalıştırarak bulabiliriz. (Nasıl?) 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/";

 
 
  Bugün 12 ziyaretçi (16 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol