20
Kasım
2009

PHP: Hafta 3

php-logoBu yazı 11 Kasım’daki dersle alakalı. Biliyorum, üzerinden yıllar geçmiş ama yazının içeriğine bakınca neden bu kadar geciktiğini anlayacaksınız. Açıklayıcı olması ve vize dönemi yazılmasıdır nedeni.

PHP kursumuzun üçüncü haftasında kullanıcıdan veri çekmeyi öğrendik. Veri göndermek için iki tane (yaygın) metot olduğunu, bu metotların HTTP protokolü tarafından sağlandığı gördük. POST ve GET olan bu metotların özelliklerini, aralarındaki farkları ve hangi durumda hangisinin kullanmanın daha avantajlı olacağı konusunda tartıştık. Daha sonra POST ve GET metotları ile kullanıcıdan iki tane sayı ve bir işlem alıp, ekrana sonucu yazdıran bir hesap makinesi yaptık.

Önümüzdeki ders olan ilk hafta (3 Aralık 2009 Perşembe) hesap makinemizi geliştirmeye devam edeceğiz. Kullanıcıdan gelen verinin geçerliliğinin kontrolü, kullanıcının nasıl çılgınlıklar yapıp programı nasıl yanıltabileceği ve bunlara karşı nasıl uyanık olabileceğimiz üzerinde duracağız. Bunların hemen ardından jQuery kütüphanesini kullanarak aynı hesap makinesini AJAX ile çalıştırıp, aslında asenkron istek ile bilgi çekmenin çok da ahım şahım zorlukları olmadığını göreceğiz.

Böylece veri çekme ile ilgili sorunlarımız tamamlanmış olacak.

Bunların ardından eğer vakit kalırsa (ya da gerekli izinlerin alınması halinde, güme giden derslerden birini tamamlamak adına bir saat ek ders yaparak) PHP’de session’ların ne olduğuna ve neden sessionlara ihtiyaç duyulduğuna bakacağız. Böylece PHP scriptlerimizin çalışıp bitip, her seferinde kullanıcıyı unutması yerine, kullanıcının kim olduğunu hatırlayan zeki scriptlere dönüşmesini sağlayacağız. Hemen arkasından sessionların ne zaman ve ne amaçlarla kullanılmaması gerektiğini görecek ve bu konuda alınması gereken güvenlik önlemleri ile dersi bitireceğiz.

Gelelim derste geçen kod örneklerine ve yararlanılabilecek kaynaklara:

Hesap Makinesi

index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html lang="tr">
 
   <head>
      <title>Hesap Makinesi</title>
   </head>
 
   <body>
      <form action="hesap.php" method="post">
      <!-- Method kısmını get yapıp nelerin değiştiğini gözleyiniz. -->
         1. Deger: <input type="text" name="deger1" /><br />
         2. Deger: <input type="text" name="deger2" /><br />
         <select name="islem">
            <option>Topla</option>
            <option>Cikar</option>
            <option>Carp</option>
            <option>Bol</option>
         </select>
         <input type="submit" value="Gonder" />
      </form>
   </body>
 
</html>

hesap.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
// echo var_dump($_REQUEST);
/* Yukarıdaki satırı çalıştırarak, kullanıcıdan gelen bilgilerin
   PHP'ye nasıl ulaştığını görebilirsiniz. Burada unutulmaması
   gereken nokta, kullanıcı $_REQUEST ile İSTEDİĞİ BİLGİYİ gönderir.
   Doğru yanlış, hatalı, eksik, fazla asla bilemezsiniz. $_REQUEST'i
   bodoslama kullanmak güvenlik açıklarına sebep olur. Önce kullanıcıdan
   aldığınız veriyi MUTLAKA kontrol edin. Eksik ya da geçersiz olmasın. */
 
/* Aşağıda hata kontrollerine dair örnekler vardır. Buradaki isset() veya 
   is_numeric() gibi kontroller keyif için ya da karizma olsun diye yapıl-
   mamaktadır. Gerçek bir program yazarken bunları yazmamanız ÇOK CİDDİ
   BAŞ AĞRILARINA sebep olabilir. $_REQUEST, $_GET, $_POST, $_COOKIE GÜVENİLMEZDİR! */
 
/* Kullanıcı islem göndermiş mi? Gönderdiyse bu, bize gelmesi 
   gerekenlerden biri mi? Yoksa "sgdshdfh" gibi bir şey mi? */
if (!(isset($_REQUEST['islem']) && 
      ($_REQUEST['islem'] == "Topla" || $_REQUEST['islem'] == "Cikar" || 
       $_REQUEST['islem'] == "Carp" || $_REQUEST['islem'] == "Bol"))) {
   hataVer(); /* Hata mesajı yaz ve çık */
}
$islem = $_REQUEST['islem']; /* Bu noktadan sonra $islem'e güvenilir. */
 
/* Birinci sayı atanmış ve sayısal bir değer mi? */
if (!(isset($_REQUEST['deger1']) && is_numeric($_REQUEST['deger1']))) {
   hataVer(); /* Hata mesajı yaz ve çık */
}
$deger1 = $_REQUEST['deger1'];
 
/* İkinci sayı atanmış ve sayısal bir değer mi? */
if (!(isset($_REQUEST['deger2']) && is_numeric($_REQUEST['deger2']))) {
   hataVer(); /* Hata mesajı yaz ve çık */
}
$deger2 = $_REQUEST['deger2'];
 
if($islem == "Topla") {
   echo $deger1 + $deger2;
} elseif ($islem == "Carp") {
   echo $deger1  * $deger2;
} elseif ($islem == "Cikar") {
   echo $deger1 - $deger2;
} else {
   echo $deger1  / $deger2;
}
 
function hataVer() {
   die("Hatali bir veri var! Siz kimi kandiriyorsunuz?");
   /* Die, bir mesaj vererek programın çalışmasını durdurur. */
}
?>

Kaynak dosyasını istediğiniz gibi kullanabilir, kendinizce yeni özellikler eklemeye çalışabilir, orasını burasını oynadığınızda nelerin değiştiğini gönül rahatlığıyla inceleyebilirsiniz.

Önerilen Kaynaklar

HTML Formları

(HTML formları ile gönderilen verilerin PHP’ye nasıl yansıdığını her HTML elementi için (checkbox vs.) ayrı ayrı inceleyiniz.)

PHP POST GET REQUEST

Bu sayfaların alt kısımlarındaki örnekleri mutlaka inceleyip, anlamadıklarınızı ya da ilginç bulduklarını deneyiniz, takıldığınız yerde bana sorunuz.

Diğerleri

İsteğe Bağlı Ödev

Dersin sonunda isteğe bağlı bir ödev vermiştim. Burada da hatırlatmakta fayda var:

Dirençlerin değerleri üzerlerine renk kodu olarak işlenmektedir. Dirençlerin üzerine işlenen bu dört renklerin değerlerine bakılarak dirençlerin değerleri hesaplanabilir. Sizden istenen kullanıcıdan renkleri almak ve direncin değerinin kaç ohm ve kaç kiloohm olduğunu ekranda göstermenizdir.

Kullanıcıdan veri aldığınız ekranda mı, yeni ekranda mı göstereceğiniz ve benzeri tasarım sorunları tamamen size kalmıştır.

Dirençlerle ilgili tabloya buradan ulaşılabilir. Ödevlerinin kontrolünün yapılmasını ve ödevlerinde ne gibi eksik/açıklar olduğu konusunda yorum isteyenler ödevlerini bana elektonik posta olarak gönderebilirler.

Dönem Sonu Değerlendirmesi Hakkında Duyuru

Biliyorsunuz kurs bitiminde başarılı bulunanlara sertifika verilecek. PHP kursu için “başarılı olmak” şu şekilde değerlendirilecek: Dönemin bitimine doğru, derste anlatılanların hepsini içeren ve bunun yanında gereken noktalarda internetin nimetlerinden yararlanmayı da gerektiren bir proje vereceğim. Sizden verilen süre içerisinde (en az bir hafta) bu projeyi tamamlamanız beklenecek. Daha sonra bu projelerin kaynak kodlarını tek tek inceleyeceğim. Projeniz fonksiyonel tasarım, hatasızlık, güvenlik gibi kategoriler altında ayrı ayrı değerlendirilecek. Bunlar sonucunda belirli bir puanı aşan projelerin sahipleri başarı sertifikalarını alacaklar.

Vereceğim proje dünyanın en zor tasarlanabilir programı olmasa da, sadece internetten kod bulup kopyala yapıştır yapılabilecek kadar basit bir şey de olmayacak. Bu yüzden verdiğim alıştırmaları yapmaya çalışmanızı, takıldığınız yerleri sormanızı ve en önemlisi kendiniz yeni bir şeyler denemenizi şiddetle öneriyorum. PHP, (hatta bilgisayarla ilgili neredeyse her şey) sadece derste, haftada bir seansla öğrenilebilecek bir şey değil.

Herkese iyi geceler.

bu yazı 2.122 defa okundu

Site hoşunuza gitti mi? Belki arkadaşlarınızın da gider.

İstekli

Aaa Reklam

+ Yorumunuzu Ekleyin 3 yorum

  • Hüseyin KÜÇÜK 20 Kasım 2009 01.33

    Çok güzel bir payylaşım :) )

  • Savaş YILDIZ 23 Kasım 2009 00.07

    Evet paylaşım güzel olmuş ama bu kursun bitiş tarihi ya da o projenin verileceği tarih aralığı hangi döneme denk geliyor acaba ?

    • Umut 24 Kasım 2009 18.06

      Kurs dönemin sonunda bitecek ama şu an kesin bitiş tarihini bilmiyorum. Onu en kısa sürede öğrenip sana bildiririm. Projeyi bayramda vereceğim. Ondan sonra dönemin sonuna kadar uzunca bir vaktiniz olacak. Bu süre içerisinde de projede kullanılması gereken ama henüz görmediğimiz konuları göreceğiz.

      Byaramdan sonra görüşmek üzere. :)

Yorumunuzu Bırakın

Bu yazıya gönderilen yeni yorumları e-posta aracılığıyla bana bildir
Yeni gönderilenleri yorum yapmadan takip etmek için tıklayınız.

Yorumunuz başarıyla alındı. Onaylandıktan sonra yayımlanacaktır. Teşekkürler.

Twitler yükleniyor... 5 saniye sonra

Bıdı bıdı bıdı bıdı dıdı dıdı dudu dudu hıdı hıdı hödü hödü yüklüyoruz öhüm öhüm bıdı bıdı vs vs... 6 nanosaniye önce

Yüklenmenin geç olmasının sebebi ben değilim, Twitter API'sinin yavaş olması. Gudu gudu hıdı hödö büdü büdü... 25697 asır önce

Ha tabi bunları okumuşsan, bu sitenin çok gizli bir özelliğini bulmuşsun demektir. ;) Tebrikler. Bu "sürpiz yumurta"yı bulduğunu bana da haber verir misin? Tıkla! 6 dinazor önce

Geçen Yıllarda Bu Hafta

2011

Bunun Burada Ne İşi Var?

Bunun Burada Ne İşi Var?

Dün şehre inmek için Sayın Menderes Türel’in zamanında Hafif Metro ...

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Biliyorsunuz Microsoft, Windows Vista’dan bu yana bilgisayarlar için bir performans ...

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü sınıfın yarısı bitti. Okuldan mezun olmak üzereyim. İyisiyle kötüsüyle bir ...

UBenzer’den Alın!

UBenzer’den Alın!

Ablam evdeki kullanılmayanları ayırmış, “Umut bunları sat.” dedi. Hazır elime ...

2009

Kısık Işık

Kısık Işık

Tavana asılmış tek beyaz floresan lambayı sevemedim bir türlü… “Ben ...

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya’da ulaşım bir ölüm. Trafik sıkışıklığı, haftada bir yönü değişen ...

2008

14 Şubat

14 Şubat

Biliyorsun bugün 14 Şubat. Daha iki gün öncesinden hazırdı zaten ...

Uyumadan Önce Son Boşluk

Uyumadan Önce Son Boşluk

Uykuya dalmadan önce düşünürüm… Kötü alışkanlıklarımdan biridir. Aklıma ne gelirse ......

NES Emulatörleri

NES Emulatörleri

Daha önceki şu iki yazımda (1.si, 2.si), çocukken bolca oynadığımız ...

Son Yorumlar