Bir uygulamanın kullanıcılarını, siparişlerini veya ürünlerini düz metin dosyalarında saklamak ilk bakışta kolay görünebilir. Ancak veri büyüdükçe arama yapmak, aynı kaydın tekrarını önlemek ve eş zamanlı işlemleri güvenle yönetmek zorlaşır. İlişkisel Veritabanı Yönetim Sistemleri, yani RDBMS’ler, bu karmaşayı tablolar, kurallar ve ilişkiler aracılığıyla düzenler. MySQL de bu dünyanın en yaygın temsilcilerinden biridir.
Devamı...
Bir uygulamanın hiç hata üretmemesi güzel bir hayaldir; ancak gerçek dünyada ağ bağlantıları kopar, veritabanları kısa süreliğine erişilemez olur ve kullanıcılar sayısal alana “patates” yazabilir. Profesyonel yazılımın amacı hataları tamamen yok etmekten çok, oluşan hataları kontrollü biçimde yönetmek, kullanıcıya güvenli bir mesaj göstermek ve geliştiriciye sorunu araştırabileceği kayıtlar bırakmaktır.
Devamı...
Bir veritabanıyla çalışan hemen her uygulama aynı dört temel ihtiyaca sahiptir: yeni veri eklemek, mevcut verileri okumak, bilgileri güncellemek ve artık gerekli olmayan kayıtları silmek. Bu işlemler İngilizce karşılıklarının baş harfleriyle CRUD olarak adlandırılır. SQL dünyasında CRUD, karmaşık görünen veritabanı macerasının sağlam ve oldukça pratik başlangıç noktasıdır.
Devamı...
Bir e-ticaret veritabanında binlerce sipariş olduğunu düşünün. Satırları tek tek incelemek yerine “Kaç sipariş aldık?”, “Toplam ciro nedir?” veya “En çok hangi kategori kazandırdı?” gibi sorular sormak isteriz. SQL toplama fonksiyonları ve GROUP BY, ham verileri anlamlı özetlere dönüştürerek bu sorulara hızlı cevaplar verir.
Devamı...
Bir veritabanında binlerce ürün, kullanıcı veya sipariş bulunabilir. Fakat çoğu zaman bütün satırları değil, belirli koşulları sağlayan küçük bir bölümü görmek isteriz. SQL’in WHERE, ORDER BY ve LIMIT araçları; verileri süzmemizi, anlamlı biçimde sıralamamızı ve yönetilebilir parçalar hâlinde sunmamızı sağlar.
Devamı...
Bir giriş formu düşünün: Kullanıcı adını ve parolayı alıp veritabanında arıyorsunuz. Masum görünen bu işlem, kullanıcı girdisini doğrudan SQL metnine eklerseniz saldırgana sorgunuzu yeniden yazma fırsatı verebilir. Prepared statements, yani hazırlanmış ifadeler, SQL komutunu veri parçalarından ayırarak bu tehlikeli kapıyı kapatır.
Devamı...
Bir kullanıcı arama kutusuna kelime yazdığında, giriş formunu doldurduğunda veya bir bağlantıya tıkladığında tarayıcı ile sunucu arasında veri alışverişi gerçekleşir. PHP, gelen bu verilere erişebilmemiz için $_GET ve $_POST adlı süper global değişkenleri sunar. Adlarındaki “süper” ifadesi boşuna değildir; bu değişkenlere fonksiyonların içinden bile doğrudan erişilebilir.
Devamı...
Bir web sayfasındaki kullanıcı adı, ürün listesi veya sepet tutarı kendiliğinden ortaya çıkmaz. Perdenin arkasında çalışan PHP; isteği karşılar, verileri işler ve tarayıcıya gönderilecek HTML çıktısını üretir. Tarayıcı PHP kodunu görmez; yalnızca onun hazırladığı sonucu görür. Gelin bu mutfağa girip PHP’nin çalışma mantığını, sözdizimini ve veri tiplerini inceleyelim.
Devamı...
PHP ile dinamik bir web uygulaması geliştirirken dosyaya çift tıklamak yeterli değildir. Tarayıcı PHP kodunu doğrudan çalıştıramaz; isteğin bir web sunucusuna ulaşması, PHP yorumlayıcısından geçmesi ve gerekiyorsa veritabanıyla konuşması gerekir. XAMPP ve MAMP, bu parçaları tek pakette sunarak bilgisayarımızı internete açmadan küçük bir geliştirme sunucusuna dönüştürür.
Devamı...
Bir PHP uygulamasının verilerle konuşabilmesi için güvenilir bir köprüye ihtiyacı vardır. PDO, yani PHP Data Objects, PHP ile MySQL gibi veritabanları arasında bu köprüyü kuran nesne yönelimli bir arayüzdür. Hazırlanmış sorgular, hata yönetimi ve farklı veritabanı sistemlerine uyum gibi özellikleri sayesinde hem güvenli hem de esnek uygulamalar geliştirmeyi kolaylaştırır.
Devamı...
Satrançta rakibin vezirini tehdit ettiğinde neden hemen sevinmemelisin? Çünkü rakibin de plan yapıyor! Oyun teorisi, kararlarımızın sonucunun yalnızca bize değil, başka oyuncuların seçimlerine de bağlı olduğu durumları matematiksel olarak inceler. Minimax algoritması ise bu fikirleri bilgisayarların anlayabileceği bir oyun ağacına dönüştürerek mümkün olan en güvenli hamleyi seçmelerini sağlar.
Devamı...
Bir kullanıcı giriş yaptığında uygulamanın onu sonraki istekte hatırlaması gerekir. HTTP ise doğası gereği durumsuzdur; yani sunucu, arka arkaya gelen iki isteğin aynı kişiye ait olduğunu kendiliğinden bilmez. Oturum ve çerez mekanizmaları bu hafıza problemini çözer. Biri bilgiyi çoğunlukla sunucuda, diğeri tarayıcıda taşır; doğru kullanıldıklarında güvenli ve akıcı bir kullanıcı deneyimi oluştururlar.
Devamı...
PHP ile birkaç sayfalık bir uygulama geliştirirken fonksiyonlar ve değişkenler yeterli görünebilir. Ancak proje büyüyüp kullanıcılar, siparişler, ödemeler ve raporlar devreye girdiğinde kod tabanı hızla spagettiye dönüşebilir. Nesne Yönelimli Programlama, yani OOP, bu karmaşayı gerçek dünyadaki varlıkları sınıflar ve nesneler biçiminde modelleyerek yönetmemizi sağlar.
Devamı...
Bir e-ticaret sisteminde müşteriler bir tabloda, siparişler başka bir tabloda tutulur. Peki “Hangi müşteri hangi siparişi verdi?” sorusunu nasıl yanıtlarız? SQL dünyasının çöpçatanı JOIN, farklı tablolardaki ilişkili satırları ortak sütunlar üzerinden buluşturur ve sonuçları tek bir sanal tablo gibi sunar.
Devamı...
Dosya yükleme özelliği, profil fotoğrafından PDF başvuru belgelerine kadar pek çok web uygulamasının vazgeçilmezidir. Ancak kullanıcıdan gelen bir dosyayı doğrudan sunucuya kabul etmek, kapıyı çalan herkese anahtarı teslim etmeye benzeyebilir. Güvenli bir sistem; dosyanın adını, boyutunu, gerçek türünü ve saklanacağı konumu denetlemelidir.
Devamı...
Haritadaki noktaları çevreleyen en kısa çiti bulmak, kesişen yol parçalarını tespit etmek veya bir çokgenin alanını hesaplamak… Bilgisayarlı geometrinin bu klasik problemleri, birkaç temel işlem üzerine kurulur. Nokta, doğru ve çokgenleri matematiksel olarak temsil etmeyi öğrendiğimizde dışbükey örtü ve tarama doğrusu gibi ilk bakışta ürkütücü görünen algoritmalar oldukça anlaşılır hâle gelir.
Devamı...
Bir web formu, kullanıcı ile sunucu arasındaki dijital köprüdür. Ancak bu köprüden yalnızca isimler ve e-posta adresleri geçmez; hatalı değerler, bot istekleri ve kötü niyetli SQL parçaları da geçmeye çalışabilir. Bu nedenle veriyi doğrudan veritabanına göndermek, kapının anahtarını paspasın altına bırakmaya benzer.
Devamı...
Bir program büyüdükçe aynı işlemleri farklı yerlerde tekrar tekrar yazmak, başlangıçta masum görünen bir alışkanlıktan ciddi bir bakım sorununa dönüşür. Fonksiyonlar ve modüler kodlama, bu tekrarları anlamlı parçalara ayırarak kodu daha okunabilir, test edilebilir ve yeniden kullanılabilir hâle getirir. Kısacası amaç, bilgisayara yalnızca ne yapacağını söylemek değil, bunu düzenli ve sürdürülebilir bir biçimde söylemektir.
Devamı...
Bir web sayfasındaki ürün kartlarını tek tek elle yazmak, aynı şarkıyı yüz kez başa sarmaya benzer: yapılabilir ama hiç eğlenceli değildir. Diziler verileri düzenli biçimde saklarken for ve foreach döngüleri bu verileri sırayla işler. Böylece birkaç satırlık PHP koduyla onlarca HTML bloğunu dinamik, tutarlı ve kolay güncellenebilir biçimde ekrana basabiliriz.
Devamı...
Bir web sayfasının kullanıcıya göre farklı davranmasını sağlayan temel güç, değişkenler ve kontrol akış yapılarından gelir. Değişkenler verileri hafızada tutarken if-else ve switch-case gibi yapılar programın hangi kod yolunu izleyeceğine karar verir. Kısacası değişkenler sahnedeki oyuncuları, kontrol yapıları ise senaryoyu temsil eder.
Devamı...