ile

PHP ile içerik yönetim sistemi – 4 Sınıflarımızı yazmaya başlayalım.

sinif-ogretmenligi-bolumu_clip_image006

Bir önceki örneğimizde sınıfımızdaki metodların içlerini boş bırakmıştık. Şimdi tek tek bu metodların içlerini dolduracağız. Öncelikle veritabanına bağlanacağız. Ancak bu bağlantıyı, sınıf çalışıyorken bir değişkende tutmamız gerek.

Korkuttu mu? Korkutmasın. Tek tek bakalım:

  1. Sınıfımızın genelinde kullanacağımız $db değşkenini tanımladık
  2. Fonksiyonun içine kullanıcı adı, parola, veritabanı ismi ve sunucu adresini girdik
  3. Yeni bir veritabanı bağlantısı oluşturduk.
  4. Bağlanamazsa, hata mesajını metodun çıktısı olarak vermesini (return etmesini) sağladık.

Şimdi ekleme, güncelleme, silme ve listeleme ve gösterme metodlarını dolduralım.

Yine işlemimizi adım adım inceleyelim.

  1. Önce daha önceden hazırlamış olduğumuz sorguları oluşturduk ve değişkenleri içeri yerleştirdik.
  2. Daha sonra execute metoduyla sorguyu çalıştırdık.
  3. En sonunda eğer işlem başarılı oldu ise, sınıftan ürettiğimiz objeye ait değişkenleri değiştirdik. (Bu cümleyi anlayamadıysanız sorun değil.)

Güvenlik için dışarıdan gelen $title ve $content verisini de sorguya execute metoduyla dahil ettik ki, sistemimize hacker’lar saldırmasın. Değişkenleri SQL sorgularına hiçbir kontrol olmadan sokmak, gerizekalılıktır arkadaşlar. Örneğin elimizdeki sorgu, SELECT * FROM users WHERE id=’osman’ AND password = $password olsun. $id verisi geldiğinde kullanıcıyı sisteme sokalım. Eğer password dediğimiz veri string değil de, ” OR ‘1’=’1′ gibi bir ifadeyse sorgunuz şöyle olur: SELECT * FROM users WHERE id=’osman’ password =” OR ‘1’=’1′; Eleman pat diye sisteminize girer. Yani msql fonksiyonlarını güvenlik için kullanmıyorum ve anlatmıyorum. PDO kütüphanesini kullanmamızın sebebi de bu.

Genel olarak veritabanı kullanan işlemlerimiz neredeyse aynı.

Yine adım adım inceleyelim. Önce sınıfımızdan yaratılan objemize daha önceden verinin çekilip çekilmediğini kontrol ettik. Veri çekildiyse sorun yok, doğrudan değer döndürebiliriz. Yok eğer çekilmediyse, o zaman klasik pdo sorgumuzu oluşturduk. PDO::FETCH_ASSOC ifadesiyle sonucu alan isimlerinin dizi anahtarları şeklinde içeren bir dizi olarak çekmek istediğimizi belirttik. Bu ayarla ilgil başka özellikle de var, her zamanki gibi anlatmıyorum, siz ihtiyacınız olduğunda araştırırsınız.

Metodlarımızı doldurmaya devam edelim. Tüm verileri çeken index metodumuzu oluşturalım:

Buradaki tek fark şu, fetchAll metodu kullanarak, tüm cevap satırlarını dizi olarak döndürüyoruz. Sırada girdileri düzenlediğimiz metod var.

Daha önceki veritabanı sorguları bölümünden hatırlayacağımız gibi, verileri düzenlerken UPDATE komutunu çalıştırıyoruz. Yine değişkenlerimizi ve sorgumuzu korumak adına prepare (hazırla) ve execute (çalıştır) metodlarını kullandık. Son bir işlemimiz kaldı. O da verileri silmek.

Girdimizi basitçe sildikten sonra sınıfı nasıl kullanacağımıza bir göz atalım. Aynı klasörde index.php isimli bir dosya yaratalım.

Önce new komutuyla sınıfımızdan bir obje ürettik. Bağlatı işlemi yaptık. İki makale ekledik, 1 numaralı id’ye sahip olan makaleyi güncelledik, ve 2 numaralı id’ye sahip olan makaleyi de sildik. En son olarak da ekrana veritabanımıza eklediğimiz verilerin çıktısı gelcek. Görüntüsü de şöyle olacak:

Sınıfımızın son hali https://github.com/mtkocak/merakli/blob/d1cb92d2724434030d2c3be2a120ac74b9ae746c/posts.php

Şu ana kadar tek bir sınıf ve veritabanı tablosu için back-end’de yani sunucu tarafında yapmamız gerekenleri gördük, veriyi ekledik, düzenledik, sildik, değiştirdik ve listeledik. Daha sonra diğer sınıfları oluşturarak devam edeceğiz. Siz de teme mantığı anladığınız üzere, kendi sınıflarınızı yazmaya başlayabilirsiniz.

 

Kaynaklar

  1. http://www.erbilen.net/816-pdo-kullanimi.html
  2. http://omerozkan.net/oop-kapsulleme/
  3. http://omerozkan.net/oop-kalitim/
  4. http://omerozkan.net/oop-polimorfizm/
  5. http://omerozkan.net/oop-soyutlama/
  6. http://www.yazilimciblog.com/oop-temel-prensipleri/
  7. http://www.csharpnedir.com/articles/read/?id=101http://www.kazimapanoglu.com/makaleler/csharp/11-csharp-oop/4-encapsulation
  8. https://semihkirdinli.wordpress.com/category/object-oriented-programming/

Yorumla

Yorum

  1. connect fonksiyonunu yazarken ayrı bir fonksiyon yerine

    [php]
    public function __construct($host, $username, $password, $dbname){
    try {
    return $this->db = new PDO("mysql:host=".$host.";dbname=".$dbname."", "".$username."", "".$password."");
    } catch ( PDOException $e ){
    return $e->getMessage();
    }
    }
    [/php]

    olsa daha iyi olurdu. böylece Class’ı sayfamıza dahile ederken içinde ayrı fonksiyon çalıştırmaz ve ;

    [php]$db = new Baglan(‘localhost’,’db’,’root’,’password’);[/php]

    şeklinde işlem yapabilirdik 🙂

    • __construct() gibi magic oop fonksiyonlarını henüz anlatmadığım için o şekilde yazmadım. oop kavramları başlığında dediğinizi yapacağım. çok teşekkürler..