PHP ile Admin Paneli — Kullanıcı Profil & Rozet Yönetimi (EXP, Özel Rozet, Profil Düzenleme)
Merhaba,
PHP tabanlı sitelere üye yönetim paneli için; kullanıcılara özel rozetler vermek, puan (EXP) atamak ve profil bilgilerini admin tarafından düzenleyebilmek adına bunların hepsini tek bir sayfada toplayan edit_user_profile.php dosyasını sizinle paylaşıyorum.
━━━━━━━━━━ SAYFA NE YAPIYOR? ━━━━━━━━━━
Sol panelden herhangi bir kullanıcı seçince sağ tarafta o kullanıcıya ait tüm işlemler açılıyor:
- Rozet Havuzu: Sisteme tanımlı tüm rozetler sol panelde görünüyor. Her rozet için Font Awesome ikon + özel renk seçilebiliyor. Tek tıkla silinebiliyor.
- Yeni Rozet Oluştur: Ad, açıklama, ikon (FA class), renk girilerek anında sisteme rozet eklenebiliyor.
- Puan (EXP) Güncelle: Kullanıcının mevcut puanı gösteriliyor, 100 / 500 / 1K / 5K hızlı butonlarıyla veya elle değiştirilebiliyor.
- Rozet Ver: Rozet havuzundan seçilerek kullanıcıya verilebiliyor. İsteğe bağlı "verilme nedeni" yazılabiliyor. Zaten verilmiş rozetler listede disabled görünüyor.
- Rozet Geri Al: Kullanıcının mevcut rozetleri tarih ve nedenle birlikte listeleniyor, X butonu ile tek tıkla geri alınabiliyor.
- Profil Düzenle: Şehir, cinsiyet, website ve biyografi alanları admin tarafından düzenlenebiliyor.
━━━━━━━━━━ ROZET ÖRNEKLERİ ━━━━━━━━━━
Sisteme tanımlayabileceğiniz örnek rozetler:
━━━━━━━━━━ DOSYA YAPISI ━━━━━━━━━━
Kod:
sitem.com/
├── config/
│ └── db.php ← PDO bağlantısı (zip içinde hazır)
└── admin/
└── edit_user_profile.php ← Ana dosya
━━━━━━━━━━ VERİTABANI TABLOLARI ━━━━━━━━━━
Tablolar dosya ilk çalıştırıldığında otomatik oluşturuluyor. Ama isterseniz manuel de oluşturabilirsiniz:
Kod:
-- Rozet tanımları
CREATE TABLE IF NOT EXISTS badges (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
icon VARCHAR(60) DEFAULT 'fa-star',
color VARCHAR(20) DEFAULT '#ff3366',
created_at DATETIME DEFAULT NOW()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Kullanıcı-rozet ilişkisi
CREATE TABLE IF NOT EXISTS user_badges (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
badge_id INT NOT NULL,
reason TEXT,
created_at DATETIME DEFAULT NOW(),
UNIQUE KEY uq_user_badge (user_id, badge_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- users tablosuna ek kolonlar (zaten varsa ALTER IGNORE ile geçer)
ALTER TABLE users ADD COLUMN IF NOT EXISTS points INT DEFAULT 0;
ALTER TABLE users ADD COLUMN IF NOT EXISTS bio TEXT NULL;
ALTER TABLE users ADD COLUMN IF NOT EXISTS city VARCHAR(100) NULL;
ALTER TABLE users ADD COLUMN IF NOT EXISTS gender VARCHAR(20) NULL;
ALTER TABLE users ADD COLUMN IF NOT EXISTS website VARCHAR(255) NULL;
━━━━━━━━━━ KURULUM ━━━━━━━━━━
1. Dosyaları yükle
Zip içindeki
edit_user_profile.php dosyasını
admin/ klasörüne,
db.php dosyasını
config/ klasörüne koy.
2. db.php'yi doldur
config/db.php dosyasını aç, host / dbname / kullanıcı adı / şifre bilgilerini kendi sunucunuza göre düzenle.
3. Sayfayı aç
admin/edit_user_profile.php adresine git. Tablolar yoksa otomatik oluşturulur, herhangi bir kurulum adımına gerek yok.
4. İlk rozeti oluştur
Sol panelde
"Yeni Rozet Oluştur" bölümünü aç → Ad, ikon ve renk gir → Kaydet. Artık kullanıcılara verebilirsin.
━━━━━━━━━━ ÖNEMLİ NOTLAR ━━━━━━━━━━
- Tablo garantisi: Sayfa her açılışta eksik tablo veya kolon varsa otomatik oluşturuyor. Yeni kurulumda elle SQL çalıştırmana gerek yok.
- Duplicate engeli: Aynı rozet aynı kullanıcıya iki kez verilemez. UNIQUE KEY ile veritabanı seviyesinde engelleniyor, form da disabled gösteriyor.
- CSRF koruması: Tüm POST ve GET işlemleri CSRF token ile korunuyor.
- Bağımlılık yok: Composer veya harici kütüphane gerekmez. Font Awesome CDN üzerinden yükleniyor.
- Profil alanı genişletilebilir: users tablosuna yeni kolon ekleyip formda ilgili alanı oluşturarak kolayca genişletilebilir.
━━━━━━━━━━ GEREKSİNİMLER ━━━━━━━━━━
- PHP 7.4 veya üzeri
- PDO + PDO_MySQL extension
- MySQL 5.7 / MariaDB 10.3 veya üzeri
- Font Awesome 6 (CDN üzerinden, kurulum gerektirmez)
━━━━━━━━━━ EKLER ━━━━━━━━━━
- edit_user_profile.php — Kullanıcı seçme, rozet oluşturma/verme/geri alma, puan güncelleme ve profil düzenleme arayüzü.
- db.php — PDO bağlantı dosyası. Sadece kendi bilgilerinizi girmeniz yeterli.
Test ortamı: PHP 8.2 / MariaDB 10.6. Font Awesome ikonları için fontawesome.com/icons adresinden sınırsız ücretsiz ikon seçebilirsiniz, sadece class adını (fa-star, fa-crown vb.) kopyalamanız yeterli.