.data-table tr:hover td background-color: #fef9e6;
<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <title>Sorgu Paneli | Veri Sorgulama Sistemi</title> <style> * box-sizing: border-box; font-family: system-ui, 'Segoe UI', 'Inter', 'Roboto', sans-serif; body background: linear-gradient(145deg, #e9eef3 0%, #dce2ea 100%); min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 20px; margin: 0;
<div class="table-wrapper"> <table class="data-table" id="resultTable"> <thead> <tr> <th>ID</th><th>Kullanıcı Adı</th><th>E-posta</th><th>Rol</th><th>Durum</th><th>Kayıt Tarihi</th> </tr> </thead> <tbody id="tableBody"> <tr class="no-data"><td colspan="6">Veriler yükleniyor...</td></tr> </tbody> </table> </div> <footer> Sorgu Paneli v2.0 | Örnek veri seti üzerinde çalışır - Gerçek API ile entegre edilebilir. </footer> </div> </div>
// Basit XSS koruması function escapeHtml(str) if (!str) return ''; return str.replace(/[&<>]/g, function(m) if (m === '&') return '&'; if (m === '<') return '<'; if (m === '>') return '>'; return m; ).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, function(c) return c; ); Sorgu Paneli Scripti
let html = ""; for (const row of dataArray) const statusBadge = row.status === "active" ? '<span class="badge badge-active">✔ Aktif</span>' : '<span class="badge badge-inactive">⛔ Pasif</span>'; html += ` <tr> <td>$row.id</td> <td><strong>$escapeHtml(row.username)</strong></td> <td>$escapeHtml(row.email)</td> <td><span class="badge">$escapeHtml(row.role)</span></td> <td>$statusBadge</td> <td>$row.registered</td> </tr> `; tableBody.innerHTML = html;
.btn-secondary background: #e2e8f0;
.data-table td padding: 14px 20px; border-bottom: 1px solid #ecf3fa; color: #1f2d3d; Farklı kriterler deneyin
.data-table th text-align: left; padding: 16px 20px; background-color: #f1f5f9; color: #1e2f3e; font-weight: 600; border-bottom: 2px solid #e2e8f0;
<script> // ---------- ÖRNEK VERİ SETİ ---------- const mockData = [ id: 1001, username: "ahmet_yilmaz", email: "ahmet@domain.com", role: "Admin", status: "active", registered: "2024-01-15" , id: 1002, username: "elif_demir", email: "elif.demir@domain.com", role: "Editör", status: "active", registered: "2024-02-20" , id: 1003, username: "mehmet_kaya", email: "mehmet.k@domain.com", role: "İzleyici", status: "passive", registered: "2023-11-02" , id: 1004, username: "zeynep_arslan", email: "zarslan@domain.com", role: "Admin", status: "active", registered: "2024-03-10" , id: 1005, username: "burak_sahin", email: "burak.sahin@domain.com", role: "Destek", status: "active", registered: "2024-01-28" , id: 1006, username: "sibel_aksoy", email: "sibel.a@domain.com", role: "İzleyici", status: "passive", registered: "2023-12-05" , id: 1007, username: "orkun_celik", email: "orkun.c@domain.com", role: "Editör", status: "active", registered: "2024-04-01" , id: 1008, username: "pinar_yildiz", email: "pinar.y@domain.com", role: "Destek", status: "active", registered: "2024-02-14" , id: 1009, username: "serkan_dogan", email: "serkan.d@domain.com", role: "İzleyici", status: "passive", registered: "2023-10-19" , id: 1010, username: "gulsen_ertekin", email: "gulsen.e@domain.com", role: "Admin", status: "active", registered: "2024-03-25" ];
.panel-header h1:before content: "🔍"; font-size: 2rem; Farklı kriterler deneyin.<
.no-data text-align: center; padding: 48px 20px; color: #7e8c9e; font-style: italic;
.badge-inactive background: #ffe4e2; color: #9b2c1d;
function renderTable(dataArray) if (!dataArray.length) tableBody.innerHTML = `<tr class="no-data"><td colspan="6">🔍 Sonuç bulunamadı. Farklı kriterler deneyin.</td></tr>`; return;
// DOM Elements const searchInput = document.getElementById('searchInput'); const statusFilter = document.getElementById('statusFilter'); const roleFilter = document.getElementById('roleFilter'); const queryBtn = document.getElementById('queryBtn'); const resetBtn = document.getElementById('resetBtn'); const tableBody = document.getElementById('tableBody'); const statsArea = document.getElementById('statsArea');