BLP251 Web Programcılığı Dersi

Web Sitesi Proje Raporu


Öğrenci Bilgileri
Öğ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
Admin Paneli Giriş Bilgileri
Kullanıcı Adı: admin
Şifre: Admin123!
Giriş Adresi: https://tunabasol.com/yonetim

1 Projenin Amacı

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:

  • Modern ve profesyonel bir kurumsal web sitesi tasarlamak
  • PHP ve MySQL kullanarak dinamik içerik yönetimi sağlamak
  • Yönetici paneli üzerinden tam CRUD (Oluşturma, Okuma, Güncelleme, Silme) işlemleri gerçekleştirmek
  • Responsive (duyarlı) tasarım ile tüm cihazlarda uyumlu çalışmayı garanti etmek
  • Web güvenliği standartlarına uygun geliştirme yapmak

2 Kullanılan Teknolojiler

PHP 8+

Sunucu taraflı programlama dili. Saf PHP kullanılmış, framework kullanılmamıştır. PDO ile veritabanı işlemleri gerçekleştirilmiştir.

MySQL

İlişkisel veritabanı yönetim sistemi. 7 adet tablo ile tüm site verileri yönetilmektedir.

HTML5

Semantik HTML5 etiketleri ile yapılandırılmış sayfa yapısı. SEO uyumlu meta etiketleri kullanılmıştır.

CSS3

Modern CSS3 özellikleri: CSS değişkenleri, gradient, animasyonlar, flexbox, grid ve media query kullanımı.

JavaScript

Dinamik kullanıcı etkileşimleri, form doğrulama, scroll animasyonları ve sayaç animasyonları için kullanılmıştır.

Bootstrap 5

Responsive grid sistemi, hazır bileşenler (navbar, card, modal, form) ve yardımcı sınıflar kullanılmıştır.

Ek Araçlar ve Kütüphaneler:
  • Font Awesome 6: İkon seti
  • Google Fonts (Inter): Modern tipografi
  • XAMPP: Apache + MySQL yerel geliştirme ortamı
  • PDO (PHP Data Objects): Güvenli veritabanı bağlantısı

3 PHP ve MySQL Kullanımı

PHP Kullanımı:
  • Oturum Yönetimi (Session): Admin paneli güvenliği için PHP session mekanizması kullanılmıştır. session_start(), session_regenerate_id() ve session_destroy() fonksiyonları ile güvenli oturum yönetimi sağlanmıştır.
  • Dosya Dahil Etme (Include): require_once ile tekrar eden kodlar (header, navbar, footer) modüler yapıda ayrıştırılmıştır.
  • Dosya Yükleme: 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.
  • Şifreleme: password_hash() ve password_verify() fonksiyonları ile güvenli şifre yönetimi.
  • XSS Önleme: Tüm kullanıcı çıktılarında htmlspecialchars() fonksiyonu kullanılmıştır.
  • CRUD İşlemleri: Tüm veritabanı tabloları için Oluşturma, Okuma, Güncelleme ve Silme işlemleri PHP ile gerçekleştirilmiştir.
MySQL Kullanımı:
  • PDO Prepared Statements: SQL enjeksiyon saldırılarına karşı koruma için tüm sorgularda hazırlanmış ifadeler (prepared statements) kullanılmıştır.
  • 7 Veritabanı Tablosu: users, settings, services, projects, blogs, comments, contact_messages
  • UTF-8 Karakter Seti: Türkçe karakter desteği için utf8mb4 karakter seti kullanılmıştır.
  • AUTO_INCREMENT: Tüm tablolarda otomatik artan birincil anahtar kullanılmıştır.
  • DATETIME: Zaman damgaları için CURRENT_TIMESTAMP varsayılan değeri kullanılmıştır.
Örnek PDO Kullanımı:
// 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();

4 Bootstrap Kullanımı

Projede Bootstrap 5.3.0 sürümü kullanılmıştır. Aşağıdaki Bootstrap bileşenleri aktif olarak kullanılmaktadır:

  • Grid Sistemi: 12 sütunlu responsive grid (container, row, col-*)
  • Navbar: Responsive navigasyon menüsü (hamburger menü dahil)
  • Cards: İçerik kartları (hizmetler, projeler, blog)
  • Forms: Form bileşenleri (input, textarea, select, file)
  • Buttons: Buton stilleri (btn-primary, btn-danger, btn-success)
  • Tables: Responsive tablolar (table-striped, table-hover)
  • Alerts: Bildirim kutuları (alert-success, alert-danger)
  • Badges: Etiketler (okunmamış mesaj sayısı)
  • Utilities: Spacing, display, text yardımcıları
  • Breakpoints: sm, md, lg, xl, xxl responsive kırılım noktaları

5 Veritabanı Yapısı

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
E-R (Varlık-İlişki) Diyagramı:
Veritabanı Tabloları

Veritabanı tablolarının şematik gösterimi

6 Admin Panel Çalışma Mantığı

Yönetim paneli /yonetim adresinden erişilebilir şekilde tasarlanmıştır.

Kimlik Doğrulama:
  1. Kullanıcı /yonetim adresine gider
  2. Kullanıcı adı ve şifre girer
  3. PHP password_verify() ile şifre doğrulanır
  4. Başarılı ise $_SESSION['admin_logged_in'] ayarlanır
  5. Her admin sayfası auth.php ile oturum kontrolü yapar
  6. Yetkisiz erişim otomatik olarak login sayfasına yönlendirilir
CRUD İşlemleri:

Her içerik türü (hizmetler, projeler, bloglar, yorumlar, mesajlar) için aşağıdaki işlemler admin panelinden gerçekleştirilebilir:

CREATE

Yeni kayıt ekleme

READ

Kayıtları listeleme

UPDATE

Kayıt güncelleme

DELETE

Kayıt silme

Yönetilebilir Alanlar:
  • Site Ayarları: Firma adı, logo, telefon, WhatsApp, e-posta, adres, sosyal medya linkleri, footer ve hakkımızda metinleri
  • Hizmetler: Hizmet başlığı, açıklama, görsel
  • Projeler: Proje adı, açıklama, görsel, tarih
  • Blog: Başlık, içerik, görsel, tarih
  • Yorumlar: Müşteri adı, yorum, puan
  • Mesajlar: İletişim formundan gelen mesajlar (okundu/okunmadı durumu)

7 Responsive Tasarım Açıklaması

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:

  • Bootstrap Grid: 12 sütunlu esnek grid sistemi
  • Media Queries: Özel CSS medya sorguları ile cihaza özel ayarlar
  • Fluid Images: img-fluid sınıfı ile esnek görseller
  • Mobile-First: Önce mobil tasarım, sonra büyük ekranlar için genişletme
  • Viewport Meta: <meta name="viewport"> etiketi ile ölçekleme

8 Güvenlik Önlemleri

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

9 Ekran Görüntüleri

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.

Masaüstü Ekran Görüntüleri
Ana Sayfa - Masaüstü Görünümü
Ana Sayfa — Hero Bölümü

Sitenin ana sayfası; hero başlık, CTA butonları ve hizmet rozetleri ile modern bir karşılama sunar.

Hizmetlerimiz Sayfası - Masaüstü
Hizmetlerimiz Sayfası

Elektrik, Su ve Doğalgaz tesisatı hizmetlerinin dönüşümlü kart yapısıyla sunulduğu detay sayfası.

Yönetim Paneli Giriş - Masaüstü
Yönetim Paneli — Giriş Ekranı

Güvenli oturum açma ekranı; kullanıcı adı ve bcrypt şifre doğrulaması ile korunan admin girişi.

Yönetim Paneli Dashboard - Masaüstü
Yönetim Paneli — Dashboard

İstatistik kartları (hizmet, proje, blog, mesaj sayıları), son mesajlar ve hızlı erişim linkleri.

Yönetim - Hizmetler CRUD
Yönetim Paneli — Hizmetler CRUD

Hizmet kayıtlarının listelendiği, düzenlenip silinebildiği ve yeni hizmet eklenebilen yönetim ekranı.

Yönetim - Projeler CRUD
Yönetim Paneli — Projeler CRUD

Tamamlanan projelerin tarih, başlık ve görsel bilgileriyle yönetildiği admin ekranı.

Yönetim - Blog Yazıları CRUD
Yönetim Paneli — Blog Yazıları CRUD

Blog yazılarının başlık, içerik, görsel ve tarih bilgileriyle eklenip yönetilebildiği ekran.

Mobil Ekran Görüntüleri Responsive
Ana Sayfa - Mobil Görünümü
Ana Sayfa

Hero bölümü mobil görünüm

Admin Giriş - Mobil Görünümü
Admin Giriş

Yönetim girişi mobil görünüm

Admin Dashboard - Mobil Görünümü
Dashboard

Dashboard mobil görünüm

Admin Hizmetler - Mobil Görünümü
Hizmetler

Hizmetler CRUD mobil görünüm

10 Kullanılan Kaynaklar

  1. PHP Resmi Dokümantasyonu - php.net/docs.php
  2. MySQL Resmi Dokümantasyonu - dev.mysql.com/doc
  3. Bootstrap 5 Dokümantasyonu - getbootstrap.com/docs/5.3
  4. W3Schools PHP Tutorial - w3schools.com/php
  5. MDN Web Docs - developer.mozilla.org
  6. Font Awesome Icons - fontawesome.com
  7. Google Fonts - fonts.google.com
  8. OWASP Web Güvenliği Kılavuzu - owasp.org
  9. PHP PDO Tutorial - php.net/manual/en/book.pdo.php
  10. Stack Overflow - stackoverflow.com

Hazırlayan: Salih Tunahan Başol
Ders: BLP251 Web Programcılığı
Tarih: 28.06.2026