BİL206U-WEB SUNUCU PROGRAMLAMA
Ünite 8: Veritabanı İşlemleri
Giriş
Yazılım alanında otomasyon sistemler gerçekleştirmek, web programcılığının önemli amaçları arasındadır. Otomasyon sistemler, kullanıcıların sistem üzerinde kendi kendine işlem yaptıkları, bu işlemler için insan denetiminin mümkün olduğunca minimize edildiği böylelikle sürekli olarak kullanıcıya hizmet veren tüm uygulamaları kapsayan bir kavramdır. Web programlama konusunda otomasyon işlemlerinin yapılabilmesi veri girişi, bilginin bir ortamda saklanılması ve verilen yetki doğrultusunda bu bilgilere erişim konularını içermektedir.
Verinin Değişken Olarak Alınması
HTML Form Verilerinin Alınması
HTML gönderim için kullanılan form nesnelerinin veri haline getirilmesinde dikkat edilmesi gereken birkaç önemli faktör bulunmaktadır. Öncelikli olarak <form action= “.php” method= “…”> </form> kısmında ifade edilen action ve method parametreleri ifade edilebilir. Burada hangi verinin NEREDEN çekileceği ve NASIL çekileceği soruları yanıt bulmaktadır. Action kısmında belirtilen dosyanın bir php dosyası, yani php uzantılı dosya (uyeol.php, kayitsil.php, guncelle.php vb.) olması zorunludur. Submit butonuna tıklanınca gidilecek adres bu dosya olup veri doğal olarak sunucudaki ilgili dosyaya gönderilmektedir. Dolayısıyla veriyi elde etmeye yönelik kodlar hedefteki yani action kısmına yazılan ilgili “.php” uzantılı dosyasının içerisine yazılmalıdır. Yani action kısmına “uyeol.php” yazılırsa, bu durumda php veri çekme komutları ($_GET, $_POST) “uyeol.php” dosyasının içine yazılmalıdır. Verilerin nasıl gönderileceği GET/POST olmak üzere iki yöntemle yapılabilmektedir. Bu bilgi verinin çağrılmasında kullanılması açısından önemlidir. Çünkü method=“GET” yöntemi ile gönderilen veri $_GET[‘name adı’] kodu ile method= “POST” yöntemi ile gönderilen veri ise $_POST[‘name adı’] kodu ile alınmaktadır. HANGİ VERİnin çekileceği ise form nesnelerinin türüne göre farklılaşabilmekle birlikte çoğunlukla o form nesnesinin tanımlaması için kullanılan “name” etiketi ile ilgilidir. $_GET/$_POST[‘name adı’]; kodundaki “name adı” hangi verinin çekileceğini sunucuya iletir. Formdaki her bir form ögesinin (ad, soyad, numara, şifre, mesaj vb.) tek tek değerlerinin bu şekilde action’da belirtilen hedef php dosyası içerisinden alınması gerekmektedir.
Bir başka deyişle gerek GET gerek POST metotlarında bu değer aracılığı ile veri karşı tarafta değişkene dönüştürülmektedir. Değere alınması ise GET metodunda $_GET[‘’]; POST metodunda ise $_POST[‘’]; komutları ile değerler değişkene alınmaktadır. Linkler de temelde GET metodu ile aynı olup veri aynı şekilde karşılanmaktadır.
<Input> etiketinin type parametrelerinin password, email, number, checkbox, date, textarea, tel, select, file gibi parametrelerin tamamında gönderim ve kullanım şekilleri name ile yapılmaktadır. Şifre için girilen password type’lı
değerin kullanıcıya form giriş ekranında **** şeklinde gizlenerek gösterilmemesine karşın, programcının kontrol edilebilmesi adına hedef php dosyasında kullanıcının girdiği değer görülebilmektedir.
Type olarak kullanılan bir diğer parametre ise “file” olup seçilen dosya yine bir name ile gönderilmektedir. Gelen dosyanın sunucuda nereye kaydedileceği, hangi isimle kaydedileceği gibi işlemlerin action’da belirtilen php dosyası içerisinde yapılması gerekmektedir çünkü yüklenilen belgeler (resim, video, Word veya pdf belgesi vs.) veritabanında değil, sunucuda belirtilen klasörde saklanılmaktadır ve veritabanında sadece dosyanın adı ve konum bilgisi (“fotolar/çoklar_ahmet_1.jpg” gibi) metin olarak tutulabilmektedir. Bu nedenle php ile gerçekleştirilen uygulamalarda veritabanında kayıtlı olan görseller, kendilerine ait bu adresler kullanılarak çağrılmaktadır. Örneğin veritabanında foto1 alanında “fotolar/foto_coklar_42.jpeg” gibi bir dosya $adres şeklindeki bir değişkene atanmış olsun. Resmin web sayfasında görüntülenmesi Hata! Dosya adı belirtilmemiş. ” > şeklinde HTML kodları ile yapılmaktadır.
Bazı durumlarda formlar gönderilen dosyasının kendi içerisinden de çağrılabilir. Bir başka ifade ile “uyeol.php” gibi bir sayfadaki formun action kısmında dosyanın kendi ismi yani “uyeol.php” yazılabilmektedir. Bu işlemin amacı üye kaydı gibi yerlerde şifre ile tekrar şifrenin uyuşmaması, şifrenin içinde istenilen karakterlerin olmaması, girilen e-Postanın daha önceden kullanılmış olması gibi durumlarda tüm bilgileri yeniden girmek yerine, girilen bilgilerin kullanıcıya geri getirilmesi ve sadece istenilen yerde giriş yapması şeklinde işlemi kısaltmaktır.
Link Verilerinin Alınması
HTML’de veri aktarımı için kullanılabilecek bir diğer yöntem ise linklerdir. Linkler <a href= ‘ilansil.php?ad=Ahmet&soyad=Çoklar&tc=23112225555’> sil </a> şeklinde kullanılmakta ve değer gönderimi yapılmaktadır. Linke tıklanması durumunda ilansil.php sayfasına gidileceği, ad, soyad ve tc olmak üzere üç değişken kullanılacağı, değer olarak ise = işaretinden sonraki değerlerin değişkenlere değer aktarılacağı söylenebilir. Link tarayıcıda ilansil.php?ad=Ahmet&soyad=Çoklar& tc=23112225555 şeklinde görünecektir. İncelendiğinde aslında bu kullanım doğrudan formda kullanılan GET yöntemi ile aynıdır. Linkteki ad, soyad ve tc GET’teki namel’ler, gelen Ahmet, Çoklar ve 23112225555 şeklindeki değerler ise kullanıcının girdiği değerlerdir. Bu nedenle linklerle verinin alınması GET yöntemindeki ile aynı şekilde yapılmaktadır.
Session Verilerinin Alınması
Session, PHP’de veri gönderiminde kullanılan diğer bir yöntemdir. Çoğunlukla oturum açma işlemlerinde giriş sonrası tüm sayfalarda oturumun açılıp açılmadığını kontrol etmek yani güvenliği sağlamak amacıyla kullanılır. Ancak bunun yanı sıra gizil olarak veri gönderim yapılmasında da kullanılabilir. GET ve POST yönteminden farklı olarak kendi veri aktarım yöntemleri bulunmaktadır.
Link ve formlardan farklı olarak, session istenildiği sayfa başlatılarak diğer tüm php sayfalarında çalıştırılabilir. Tarayıcı kapatılıncaya, session_destroy(); veya unset($_SESSION[‘uye_id’]); komutları verilinceye kadar oluşturulan session veri gönderimine devam etmektedir. Siteye ait istenilen tüm php sayfalarından veri gönderme, oluşturma veya çekme işlemleri yapılabilir. Web programcılığı ile uğraşan bir programcının bu şekilde bir gönderim yöntemi seçeneğine sahip olduğunu bilmesi de önemlidir.
Temel Veritabanı İşlemleri
Veritabanı çok sayıda verinin sınıflandığı ve belirli bir mantıkla bir arada tutulduğu veri depolama yöntemi olarak tanımlanabilir. Veritabanı, programlamadan bağımsız olarak ele alınabilecek, önemli bir konudur ve yazılım, donanım, veri, veritabanı erişim türü gibi çok sayıda bileşenden oluşmaktadır. Tüm bu bileşenlerin birbiriyle uyumunun sağlanması veritabanı yönetim sistemlerini önemli kılmaktadır.
Web programcılığı için veritabanı kullanım ve seçimini tercih eden farklı yöntemler bulunmaktadır. İlişkisel, dağıtık, merkezi, hiyerarşik, grafik tabanlı, bulut tabanlı gibi çok sayıda veritabanı çeşidi bulunmaktadır. Bunlardan ilişkisel veri tabanının en çok kullanılan olduğu da söylenebilir. İlişkisel veri tabanında exceldeki satır ve sütun mantığı ile veriler çok sayıda tablolarda saklanmaktadır. Veritabanı bilgilerin saklandığı, tutulduğu tabloları birleştiren üst çatı olarak ifade edilebilir ve her uygulama/program için çoğunlukla tek bir veritabanı kullanılır.
Özetle veritabanı Windows ortamında kullanılan klasör kavramına, tablolar ise dosya kavramına benzetilebilir. Veritabanı içinde veri bulundurmak yerine düzeni sağlar. Verinin saklandığı tablolar ise dosyalar gibi bilginin depolandığı yerlerdir. Bir veritabanında birden fazla tablo kullanılabilir. Bu durumda tabloların ilişkilendirmesi yapılmalıdır. Tabloları oluşturan alanlar ise excel’deki sütunlara benzetilebilir. Ad, soyad, numara, adres gibi farklı alanlar tabloda bilginin türünü ve hangi özelliklere sahip olacağını ortaya koyması açısından bir kez tanımlanır. Sonrasında SQL komutları ile bu sütunlara bilgi eklenir. Burada tabloya eklenen her bir veriye ise kayıt denilmektedir.
Veritabanı oluşturma, tablo tanımlama gibi işlemler bir defaya mahsus olmak üzere PHP ortamında kodlarla veya PHPMYADMIN adı verilen program aracılığı ile kolaylıkla yapılabilirken, web programcılığı ortamında SQL veritabanı yönetim sistemleri ile bu tablolar içerisindeki bilgilerin silinmesi, eklenmesi, düzenlenmesi işlemleri yapılabilmektedir. Veritabanı yönetim sistemleri, veritabanındaki veriler üzerinde kullanıcının istediği işlemleri yapabilmesini sağlayan ve PHP ortamından bağımsız olarak ele alınması gereken bir konudur. SQL (Structured Query Language-Yapılandırılmış Sorgu Dili) olarak adlandırılan bu dillerden SQLServer, SQLite,
Oracle, MariaDB gibi farklı çeşitleri bulunmasına karşın, en çok kullanılanlardan birisi MYSQL’dir. Her dilin farklı kod yazım kuralları bulunmaktadır. Bir MYSQL veritabanına bağlantı için MYSQL, MYSQLi ve PDO (PHP Data Objects – PHP Veri Nesneleri) şeklinde üç farklı yöntem bulunmaktadır.
Veritabanını Kullanıma Açma ve Kapatma İşlemi
Bir veritabanı işleminde SQL sorgulaması gerçekleştirebilmek için veritabanın açılması, SQL komutlarının hangi veritabanı üzerinde gerçekleştirileceğinin belirtilmesi gerekir. SQL PHP’den bağımsız bir veritabanı yönetim sistemidir. Veritabanının seçilmesi/açılmasından kapatılmasına kadar çok sayıda işlem SQL sorgusu/komutu ile veritabanına hükmetmeyi sağlamaktadır. Örneğin soyadı GENÇ olanların listelenmesi, uyeid’si 5 olan kaydın silinmesi, yeni bir kayıt ekleme gibi tüm işlemler SQL komutları ile yapılabilmektedir. Bu açıdan dört temel SQL komutu yaygın olarak kullanılmaktadır. “Select from” arama/bulma, “inser into” kayıt ekleme, “update set” kaydı güncelleme/değiştirme, “delete from” veriyi silme işlemlerini yapmaktadır.
Arama/Seçme (Select From) Komutu
Bir SQL komutu olarak arama işlemi veritabanında belirtilen şartlara uygun olan kayıtların, belirtilen alanlarına ait bilgilerini getirmeyi sağlamak amacı ile kullanılır.
Ekleme (Insert Into) Komutu
Veritabanı işlemlerinde en sık kullanılan sql komutlarından bir diğeri de insert into komutudur. Bu komut veritabanına veri eklemek için kullanılmaktadır. Yeni üyelik, ilan verme, e-Posta gönderme, şikâyetini bildirme gibi uygulamaların çoğunluğunda insert into sql sorgusu/komutu ile veritabanına ekleme işlemi yapılmaktadır.
Güncelleme (Update Set) Komutu
Veritabanında tutulan veriler üzerinde sıkça yapılan bir diğer işlem ise güncelleme/değiştirme işlemidir. Bir üyenin şifresini, adresini veya e-Posta adresini değiştirmesi, öğrenci işlerinde notun değiştirilmesi, sisteme girilen ürüne ait bilgilerin veya fiyatının güncellenmesi gibi işlemlerin tamamı güncelleme sql komutu olarak UPDATE SET komutu için verilebilecek örneklerdir. Bu komutta güncelleme/değiştirme söz konusu olduğu için mutlaka kendisinden önce veri girişinin yapılmış olması gerekir. Bu nedenle “update set” sql sorgusundan önce çoğunlukla “select from” komutu ile veri arama işlemi yapılarak form içerisinde value parametresi ile veritabanı içerisindeki değerler getirilmekte ve kullanıcıya değiştirilmek istenen bilgilerin gösterilmesi sağlanmaktadır.
Silme (Delete From) Komutu
Sql temel komutlarından bir diğeri ise veritabanından verileri kalıcı olarak silme işlevini yerine getiren delete from sorgusudur. Bir üyenin siteden çıkışı, üye tarafından verilen bir ilanın silinmesi, formlarda yazılan uygunsuz bir yorumun silinmesi gibi tüm işlemlerde veritabanından
verinin silinmesi işlemi gerçekleştirilmektedir. Bu noktada üç önemli nokta konusunda uyarı yapılabilir. Birincisi eğer bir sistemden bir üye silinirse o üyeye ait “uyeid” ile ilişki kurulan veritabanı içindeki diğer tüm tablolardan da verilerin silinmesi unutulmamalıdır. İkinci önemli nokta “delete from” sorgusunda silinecek veriye ait şartın “select from”da olduğu gibi çok iyi belirlenmesi gerekir. Aksi durumda veritabanında istenmeyen veriler de silinebilir. Üçüncü önemli nokta olarak veritabanı işlemlerinde düzenli olarak veritabanının yedeklenmesi unutulmamalıdır. Böylelikle istenmeyen durumlarda veritabanlarına son alınan yedekler geri yüklenerek bazı durumların telafisi kısmen sağlanabilir.