|
![]() |
|
|||||||
| Kayıt ol | Cezalilar | Tüm Albümler | Yardım | Üye Listesi | Ajanda | Arama | Bugünki Mesajlar | Forumları Okundu Kabul Et |
|
||
![]() |
|
|
LinkBack | Seçenekler | Stil |
|
|
#1 (permalink) |
![]() Üyelik tarihi: Sep 2008
Üye No: 8
Mesajlar: 3,693
Konular: 1968
Referanslari: 5
Arkadaslari: (11)
Nerden: KüRDiSTaN
Meslek: pc emekcisi :)
Interests: ASİ
Biyografi: kece kudan
Cinsiyet: .
Kullandigi Tesekkür: 30 Aldigi Tesekkürler: 254
Tecrübe Puanı: 150
Aldigi Puanlar: 3620 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
Ruh Hali:
Son Aktivitesi: Dün :
01:39
Toplam Online Süresi: 6 Gün 10 Saat 58 Dakika 41 Saniye
|
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, formlar03b.htm adıyla kaydedelim: <FORM ACTION="formlar03a_isle.php" METHOD="POST"> Aynı şekilde son Form işleme programımızda da sadece şu değişikliği yapalım: foreach ($HTTP_POST_VARS as $anahtar=>$deger ) { Bu dosyayı da formlar03b_isle.php adıyla kaydedelim. HTML sayfasını açarak formu doldurur ve gönderirseniz, sonucun metod olarak GET kullanan Form'dan hiç farklı olmadığını göreceksiniz. Çünkü PHP programı bu Form'un gönderdiği bilgilerin $HTTP_POST_VARS değişkenine yazıldığını biliyordu. $HTTP_POST_VARS da PHP açısından içinde anahtar=değer çiftleri olan bir dizi-değişkendir; bu değişkenin değerlerine de tıpkı daha önce olduğu gibi erişiriz. HTTP açısından GET ile POST'un tek farkı gelen değerlerin nerede nasıl tutuldueğundan ibaret değildir. GET yönteminde, bir Browser'ın sunucuya gönderebileceği verinin uzunluğu, Sunucunun ayarlarına bağlı olmak üzere, sınırlıdır. Oysa POST ile alacağımız veri miktarı, sadece sunucunun bulunduğu bilgisayarın sabit disk alanıyla sınırlıdır. (Tabiî bu günümüzde sınırsızdır, anlamına geliyor!) Bir başka fark, Browser'ın GET yoluyla gönderdiği verilerin (ve bu arada ziyaretçinin parola olarak yazdıklarında ekrana yıldız olarak çıkan metinler dahil) tümü, sunucuya, URL-kodlanmış metin olarak, Browser'ın URL adres hanesine de yazılmasıdır. Bir çok kullanıcı için bu bir güvensizlik belirtisi sayılır. Bu iki unsur Formlarımızda metod olarak GET yerine POST kullanmanın daha yerinde olduğunu gösterir. Tedbirli Web programcılığı, özellikle birden fazla tasarımcı ve programcının birlikte çalıştığı ve Formlarda hangi yöntemin tercih edildiğini bilmenin kolay olmadığı projelerde, Form bilgisi işleyen PHP programlarımızda Form'da hangi metod kullanılmış olursa olsun, işlyeyici programın iki duruma da elverişli olmasını sağlamaktır. Sözgelimi son yazdığımız Form işleme programımızı şöyle değiştirirsek, ve Form içeren HTML sayfasını bu programı veri gönderecek şekilde değiştirirsek (nasıl?), her iki metodla gönderilen verileri işleme yeteneğine sahip bir program elde etmiş oluruz. <?php $form_bilgisi = ( isset($HTTP_POST_VARS ) ) ? $HTTP_POST_VARS : $HTTP_GET_VARS; foreach ($form_bilgisi 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"); } } ?> 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; if ( isset ( $HTTP_POST_VARS )) { print ("<HTML>\n"); print ("<HEAD>\n"); print ("<TITLE>PHP'de Formlar</TITLE>\n"); print ("****** http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-9\">\n"); print ("****** 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 ("****** http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-9\">\n"); print ("****** 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?) |
|
|
|
|
|
#2 (permalink) |
![]() Üyelik tarihi: Sep 2008
Üye No: 8
Mesajlar: 3,693
Konular: 1968
Referanslari: 5
Arkadaslari: (11)
Nerden: KüRDiSTaN
Meslek: pc emekcisi :)
Interests: ASİ
Biyografi: kece kudan
Cinsiyet: .
Kullandigi Tesekkür: 30 Aldigi Tesekkürler: 254
Tecrübe Puanı: 150
Aldigi Puanlar: 3620 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
Ruh Hali:
Son Aktivitesi: Dün :
01:39
Toplam Online Süresi: 6 Gün 10 Saat 58 Dakika 41 Saniye
|
PHP ile HTTP Başlıklarının Kullanımı
Bu kitapçık HTTP başlık fonksiyonlarını anlatmak amacında olmayıp bu geniş konu hakkında sadece pratikte bilgi aktarmakla yetinecektir. Bir web tarayıcı bir web sunucuya bir döküman istediği gönderdiğinde web sunucu istenilen dökümanın yanısıra header(başlık) adı verilen bazı açıklayıcı ve yönlendirici bilgiler de gönderir. Konuyu örneklerle açıklamaya çalışalım. header("Pragma: no-cache"); header("Cache-Control: no-cache, must revalidate"); PHP, dinamik içerikli web siteleri oluşturmak amaçlı kullanıldığı için kimi zaman bazı sayfaların web tarayıcının cache denilen ara belleğinde saklanmaması daha doğru olmaktadır. Bu, özellikle yüksek güvenlik gerektiren ve çok sık değişen siteler için gereklidir. Yukarıdaki kod parçası kullanıldığı PHP betiğinin çıktısının cache denilen ara bellekte saklanmasını engellemek amacı ile kullanılır. header("Location: http://www.php.org.tr"); Bu kod parçası ise dökümanın herhangi bir yerinde, kullanıcıdan hiç bir girdi almaya ihitiyaç duymadan aktif adresi değiştirmeye yarar. Çok sık kullanılır ve özellikle bir login ekranından sonra girilen bilgiye göre karar vererek aktif adresi değiştirmek gibi uygulamalar için faydalıdır. Örnek vermek gerekirse... login.html adlı bir HTML dökümanımız olduğunu varsayalım. Bu HTML dökümandan alınan girdi "karar.php" adlı PHP betiğinde işlenecek ve girilen bilgiye göre adresi değiştirecektir. <html> <head> <title> Login Form </title> </head> <body> <form action="karar.php" method="post"> <input type="text" name="kullanici_adi"><p> <input type="password" name="sifre"><p> <input type="submit" name="submit" value="Tamam"> </form> </body> </html> Bu sayfadan alınan girdiler kullanici_adi ve sifre seklindedir. Bu bilgileri karar.php dosyasında inceleyerek karar veriyoruz. // başındaki ve sonundaki boşlukları yok ediyoruz. $kullanici_adi = trim($kullanici_adi); $sifre = trim(sifre); if ($kullanici_adi == "umut") { if ($sifre = "bu_bir_sifredir") { header ("Location : giris_basarili.php"); } } header ("Location : giris_basarisiz.php"); Yukarıdaki kod parçasında kullanıcı adı ve şifrenin doğru olup olmadığı kontrol edildikten sonra eğer her iki bilgi de doğru ise giris_basarili.php adlı döküman çağrılıyor. Eğer bu bilgilerden herhangi birisi doğru değilse giris_basarili.php betiği çağrılmayacak ve dolayısı ile aktif adres, koşulsuz çağrılan giris_basarisiz.php dosyası olacaktır. Yukarıdaki örnekte dikkat edilmesi gereken bir nokta vardır. header ("Location........."); kullanımı sadece kendisinden önce ekrana bir çıktı yapılmadığı durumlarda çalışacaktır. Örneğin : echo "Öylesine bir çıktı"; header(Location : "deneme.html"); Kod parçacığı beklendiği gibi deneme.html dosyasını çağırmayacaktır. Bu kısıtlama PHP' nin zayıflığından değil HTTP protokolünün tanımlarından kaynaklanmaktadır. Diğer bazı çok kullanılan HTTP başlıkları şu şekildedir: Content-Encoding Content-Language Content-Type Expires Referrer Last-Modified User-Agent Accept-Encoding Accept-Language ..... |
|
|
|
|
|
#3 (permalink) |
![]() Üyelik tarihi: Sep 2008
Üye No: 9
Mesajlar: 5,447
Konular: 2642
Referanslari: 7
Arkadaslari: (9)
Nerden: Kürdistan
Meslek: örenci
Interests: xerib
Biyografi: qaraqocanin asi kizi
Yaş: 20
Kullandigi Tesekkür: 166 Aldigi Tesekkürler: 452
Tecrübe Puanı: 150
Aldigi Puanlar: 5298 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Son Aktivitesi: Bugün :
00:36
Toplam Online Süresi: 2 Hafta 2 Gün 22 Saat 7 Dakika 27 Saniye
|
sps paylasimin için heval
|
|
|
|
|
|
#4 (permalink) |
![]() Üyelik tarihi: Sep 2008
Üye No: 8
Mesajlar: 3,693
Konular: 1968
Referanslari: 5
Arkadaslari: (11)
Nerden: KüRDiSTaN
Meslek: pc emekcisi :)
Interests: ASİ
Biyografi: kece kudan
Cinsiyet: .
Kullandigi Tesekkür: 30 Aldigi Tesekkürler: 254
Tecrübe Puanı: 150
Aldigi Puanlar: 3620 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
Ruh Hali:
Son Aktivitesi: Dün :
01:39
Toplam Online Süresi: 6 Gün 10 Saat 58 Dakika 41 Saniye
|
heval
|
|
|
|
|
|
![]() |
| Bookmarks |
| Etiketler |
| bilgiler, formdan, gelen, metoduyla, post |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | |
| Stil | |
|
|