![]() |
|
||||||
| Web Programlama Bir web programlama dili ve veritabanı ile dinamik içerikli web siteleri yapmayı amaçlar. |
| ||
|
|
LinkBack | Seçenekler | Stil |
|
|
#1 | |
|
Çevrimiçi
|
PHP + Chart.js ile Gerçek Zamanlı Admin İstatistik Paneli — Trafik, Video, Üye Büyüme
Merhaba, PHP tabanlı kendi video/blog siteme yönetim paneli geliştirirken en çok ihtiyaç duyduğum şeylerden biri gerçek zamanlı istatistik ekranıydı. Google Analytics gibi dışarıya bağımlı olmak yerine veritabanımdan direkt çeken, sayfayı her açtığımda anlık durum gösteren bir panel istedim. Sonuç olarak ortaya çıkan stats.php'yi sizinle paylaşıyorum. Ne gösteriyor? Tek sayfada dört farklı bölüm var: 1. Günlük Özet (4 kart) — Bugünkü sayfa görüntüleme, unique ziyaretçi, video izlenme ve arama sayısı. Her kartta dünle karşılaştırma var, artış yeşil ↑ eksi kırmızı ↓ gösteriyor. 2. Trafik Grafikleri — Bugünün saatlik trafik dağılımı (bar grafik) ve son 30 günün günlük trafik trendi (alan grafik). Sayfa görüntüleme ve unique ziyaretçi ayrı ayrı çiziliyor. 3. Trend Videolar + Popüler Aramalar — O gün en çok izlenen 10 video (thumbnail'li liste) ve tüm zamanlardaki en çok aranan 15 kelime yan yana gösteriliyor. 4. Üye Büyüme Bölümü — Toplam üye, seçili dönemde yeni kayıt, bugün yeni kayıt, günlük ortalama kayıt kartları. Altında günlük yeni kayıt (bar) + kümülatif büyüme (çizgi) birleşik grafiği ve üye rol dağılımı pasta grafiği var (admin, moderator, vip, user...). ━━━━━━━━━━ EKRAN GÖRÜNTÜSÜ ━━━━━━━━━━ Alıntı:
━━━━━━━━━━ VERİTABANI YAPISI ━━━━━━━━━━ Kod çalışabilmesi için veritabanında şu tabloların olması gerekiyor: Kod:
-- Günlük/saatlik trafik tablosu
CREATE TABLE site_stats (
id INT AUTO_INCREMENT PRIMARY KEY,
stat_date DATE NOT NULL,
stat_hour TINYINT NOT NULL DEFAULT 0,
page_views INT NOT NULL DEFAULT 0,
unique_ips INT NOT NULL DEFAULT 0,
video_views INT NOT NULL DEFAULT 0,
searches INT NOT NULL DEFAULT 0,
INDEX (stat_date)
);
-- Video izlenme log tablosu
CREATE TABLE video_views_log (
id INT AUTO_INCREMENT PRIMARY KEY,
video_id INT NOT NULL,
view_date DATE NOT NULL,
INDEX (view_date),
INDEX (video_id)
);
-- Arama log tablosu
CREATE TABLE search_log (
id INT AUTO_INCREMENT PRIMARY KEY,
query VARCHAR(255) NOT NULL,
count INT NOT NULL DEFAULT 1,
UNIQUE KEY (query)
);
-- Kullanıcı tablosu (mevcut tablona göre uyarla)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
role VARCHAR(30) NOT NULL DEFAULT 'user',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX (created_at),
INDEX (role)
);
-- Video tablosu (mevcut tablona göre uyarla)
CREATE TABLE videos (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
thumbnail VARCHAR(500),
category VARCHAR(100)
);
━━━━━━━━━━ KURULUM ━━━━━━━━━━ 1. Tabloları oluştur Yukarıdaki SQL'i kendi veritabanına çalıştır. Zaten users ve videos tablon varsa onları kullan, yoksa oluştur. 2. Dosyayı yükle admin/stats.php olarak admin klasörüne yükle. Kod _layout.php ve stats_helper.php dosyalarına bağımlı — bunlar kendi admin iskeletin varsa uyarla, yoksa aşağıda sade bir alternatif gösteriyorum. 3. Bağımlılıkları uyarla Dosyanın en üstündeki 3 satırı kendi sisteminize göre düzenle: Kod:
require_once '_layout.php'; // kendi admin header/footer dosyan require_once '../stats_helper.php'; // yardımcı fonksiyonlar (require_perm vs) global $db; // PDO bağlantı nesnesi Kod:
// Geçici bypass — kendi auth kontrolünle değiştir
function require_perm($perm) {
if (empty($_SESSION['admin_logged_in'])) {
header('Location: login.php'); exit;
}
}
Grafiklerin çalışması için internet bağlantısı yeterli, dosyanın sonunda zaten şu satır var: Kod:
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.min.js"></script> 5. Saatlik veriyi kaydetmek için cron Trafik verisinin birikmesi için her saatte bir şu sorguyu çalıştıran bir cron job veya middleware gerekilir. Örnek cron satırı: Kod:
0 * * * * php /var/www/html/cron/log_stats.php Kod:
Zip içinde 3 dosya var: Kod:
stats.php — Temizlenmiş ana dosya. Harici _layout.php ve stats_helper.php bağımlılıkları kaldırıldı, kendi HTML/CSS/JS'i var, standalone çalışıyor. Arrow function syntax PHP 7.4 uyumlu hale getirildi. db.php — config/db.php olarak yükle, içine kendi host/dbname/user/pass bilgilerini yaz. stats.php bunu require ediyor. stats_kurulum.sql — phpMyAdmin'e import et, 5 tabloyu oluşturuyor. Zaten mevcut users veya videos tablonuz varsa o CREATE bloklarını atlayın. Kurulum sırası: SQL → db.php'yi doldur → stats.php'yi admin/ klasörüne yükle → tarayıcıdan aç. ━━━━━━━━━━ ÖZELLIKLER ━━━━━━━━━━
━━━━━━━━━━ GEREKSİNİMLER ━━━━━━━━━━
━━━━━━━━━━ EKLER ━━━━━━━━━━ stats_panel dosyalarını zip olarak yüklüyorum. Veritabanı tablo yapısı ve require_perm() gibi bağımlılıkları kendi sisteminize göre uyarlamanız gerekiyor, geri kalan her şey standart PDO ile direkt çalışıyor. Test ortamı: PHP 8.2 / MariaDB 10.6 / Chart.js 4.4.1. PHP 7.4 altında arrow function (fn() =>) syntax hatası verir, o durumda function($x) { return ...; } şeklinde dönüştürmeniz gerekir. Benzer Konular:
![]() Fallen code. Broken systems. No mercy. |
|
|
|
#2 |
|
Çevrimdışı
![]() Üyelerin profil bilgilerini yalnızca kayıtlı üyeler görüntüleyebilir. Lütfen kaydol bağlantısından üye olunuz.
|
Başarılı Paylaşım Adına Teşekkürler
![]() İmzalardaki bağlantıları veya görselleri görüntülemek için gönderi sayınızın 10 veya daha fazla olması gerekir. Şu anda 0 mesajınız var. İmzalardaki bağlantıları veya görselleri görüntülemek için gönderi sayınızın 10 veya daha fazla olması gerekir. Şu anda 0 mesajınız var. |
| Yer İmleri |
| Konuyu 1 kişi okuyor: (0 üye ve 1 misafir) | |
|
|
| Forum | Bilgilendirme | Künye |
|
Powered by vBulletin® Version 3.8.11 Copyright ©2000 - 2026, vBulletin Solutions Inc. Forum Sahibi: Dea Dia ve Gece |
Sitemiz; yer sağlayıcı bir forum sitesidir. Forumel.Com adresimizde yapılan paylaşımlar, moderasyon ekibimizin onayına dahil olmadan direkt olarak yayınlanmaktadır. 5237 sayılı TCK (Türk Ceza Kanunu) ve 5651 Sayılı Kanun'un ilgili maddelerini ihlal eden kişilerin IP adresleri de dahil olmak üzere sair kişi veya adli mercilere müzekkere (Resmi Üst Yazı), tarafımıza tanzim edildiği takdirde paylaşılacaktır. Hukuka aykırı bir paylaşımın olduğunu düşündüğünüz mesaj ya da konuyu; İLETİŞİM linkine bildirim yoluyla iletebilirsiniz. 48 saat içerisinde mevcut şikâyetiniz üzerinden tarafınıza ulaşılacak, gerekli işlemler tesis edilecektir. |
|