BLP251 Web Programcılığı Dersi
| Öğrenci Adı Soyadı: | Salih Tunahan Başol |
| TC Kimlik No: | 17960315440 |
| Ders: | BLP251 Web Programcılığı |
| Yayın Adresi: | https://tunabasol.com |
| Kullanıcı Arayüzü: | https://tunabasol.com |
| Yönetici Paneli: | https://tunabasol.com/yonetim |
| Kullanıcı Adı: |
admin
|
| Şifre: |
Admin123!
|
| Giriş Adresi: | https://tunabasol.com/yonetim |
Bu proje, BLP251 Web Programcılığı dersi kapsamında, gerçek bir firma için tamamen işlevsel bir kurumsal web sitesi geliştirmeyi amaçlamaktadır. Tuna Tesisat adlı tesisat firması için hazırlanan bu web sitesi; elektrik tesisatı, su tesisatı ve doğalgaz tesisatı hizmetlerini tanıtan, müşterilerin firma ile kolayca iletişim kurabildiği ve yöneticinin tüm site içeriğini dinamik olarak yönetebildiği modern bir platform sunmaktadır.
Projenin temel hedefleri:
Sunucu taraflı programlama dili. Saf PHP kullanılmış, framework kullanılmamıştır. PDO ile veritabanı işlemleri gerçekleştirilmiştir.
İlişkisel veritabanı yönetim sistemi. 7 adet tablo ile tüm site verileri yönetilmektedir.
Semantik HTML5 etiketleri ile yapılandırılmış sayfa yapısı. SEO uyumlu meta etiketleri kullanılmıştır.
Modern CSS3 özellikleri: CSS değişkenleri, gradient, animasyonlar, flexbox, grid ve media query kullanımı.
Dinamik kullanıcı etkileşimleri, form doğrulama, scroll animasyonları ve sayaç animasyonları için kullanılmıştır.
Responsive grid sistemi, hazır bileşenler (navbar, card, modal, form) ve yardımcı sınıflar kullanılmıştır.
session_start(), session_regenerate_id() ve session_destroy() fonksiyonları ile güvenli oturum yönetimi sağlanmıştır.require_once ile tekrar eden kodlar (header, navbar, footer) modüler yapıda ayrıştırılmıştır.move_uploaded_file() fonksiyonu ile güvenli dosya yükleme işlemi gerçekleştirilmiştir. Dosya tipi (jpg, jpeg, png, webp) ve boyut (maks. 5MB) kontrolleri yapılmaktadır.password_hash() ve password_verify() fonksiyonları ile güvenli şifre yönetimi.htmlspecialchars() fonksiyonu kullanılmıştır.utf8mb4 karakter seti kullanılmıştır.CURRENT_TIMESTAMP varsayılan değeri kullanılmıştır.// Prepared Statement ile veri çekme
$stmt = $conn->prepare("SELECT * FROM services WHERE id = :id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$service = $stmt->fetch(PDO::FETCH_ASSOC);
// Prepared Statement ile veri ekleme
$stmt = $conn->prepare("INSERT INTO services (title, description, image)
VALUES (:title, :description, :image)");
$stmt->bindParam(':title', $title);
$stmt->bindParam(':description', $description);
$stmt->bindParam(':image', $image);
$stmt->execute();
Projede Bootstrap 5.3.0 sürümü kullanılmıştır. Aşağıdaki Bootstrap bileşenleri aktif olarak kullanılmaktadır:
Projede tuna_tesisat adında bir MySQL veritabanı kullanılmaktadır. Veritabanı 7 tablodan oluşmaktadır:
| Tablo Adı | Açıklama | Alanlar |
|---|---|---|
users |
Yönetici kullanıcılar | id, username, password |
settings |
Site ayarları | id, company_name, logo, phone, whatsapp, email, address, instagram, github, footer_text, about_text, slogan |
services |
Hizmetler | id, title, description, image |
projects |
Projeler | id, title, description, image, date |
blogs |
Blog yazıları | id, title, content, image, created_at |
comments |
Müşteri yorumları | id, name, comment, rating |
contact_messages |
İletişim mesajları | id, name, email, message, date, is_read |
Veritabanı tablolarının şematik gösterimi
Yönetim paneli /yonetim adresinden erişilebilir şekilde tasarlanmıştır.
/yonetim adresine giderpassword_verify() ile şifre doğrulanır$_SESSION['admin_logged_in'] ayarlanırauth.php ile oturum kontrolü yaparHer içerik türü (hizmetler, projeler, bloglar, yorumlar, mesajlar) için aşağıdaki işlemler admin panelinden gerçekleştirilebilir:
Yeni kayıt ekleme
Kayıtları listeleme
Kayıt güncelleme
Kayıt silme
Web sitesi, tüm ekran boyutlarında doğru şekilde görüntülenmek üzere tasarlanmıştır:
| Cihaz | Ekran Boyutu | Bootstrap Sınıfı | Özellikler |
|---|---|---|---|
| Mobil | < 576px | col-12 | Tek sütun, hamburger menü, küçültülmüş görseller |
| Tablet | 576px - 991px | col-sm-6, col-md-6 | İki sütun, uyarlanmış boşluklar |
| Masaüstü | 992px - 1199px | col-lg-4 | Üç sütun, tam menü, geniş görseller |
| Büyük Ekran | > 1200px | col-xl-* | Maksimum genişlik sınırı, optimize edilmiş düzen |
Responsive tasarım şu yöntemlerle sağlanmıştır:
img-fluid sınıfı ile esnek görseller<meta name="viewport"> etiketi ile ölçekleme| Tehdit | Önlem | Uygulama |
|---|---|---|
| SQL Injection | PDO Prepared Statements | $stmt->bindParam(':id', $id) |
| XSS (Cross-Site Scripting) | Çıktı filtreleme | htmlspecialchars($data, ENT_QUOTES, 'UTF-8') |
| Şifre ifşası | Tek yönlü hash | password_hash() ve password_verify() |
| Session Hijacking | Session yenileme | session_regenerate_id(true) |
| Zararlı dosya yükleme | Dosya tipi ve boyut kontrolü | MIME tipi ve 5MB limit kontrolü |
| Yetkisiz erişim | Oturum kontrolü | auth.php ile her sayfada doğrulama |
Projenin çeşitli bölümlerine ait ekran görüntüleri aşağıda sunulmuştur. Görsellere tıklayarak büyük halini görebilirsiniz.
Hazırlayan: Salih Tunahan Başol
Ders: BLP251 Web Programcılığı
Tarih: 28.06.2026