Vollständiges, schlankes PHP/SQLite-CMS für IT-, KI- und Gaming-Inhalte: - Core: DB-Singleton, Auth mit Passwort-Hashing, Session-Cookies, CSRF-Schutz, Login-Rate-Limit, Bild-Upload mit serverseitiger Validierung - Admin: Dashboard, Artikel/Seiten-Verwaltung mit Quill WYSIWYG-Editor, Kategorien, Navigation (Drag & Drop), Medienbibliothek, Profil - Frontend: Responsive Dark-Theme, Artikel-Grid, Kategorie-Filter, Archiv, Paginierung, SEO-Meta-Tags - Sicherheit: Prepared Statements, HTML-Sanitizer, .htaccess-Schutz für sensible Verzeichnisse, PHP-Ausführungsschutz im Upload-Ordner - Installation: install.php erstellt DB-Schema und Admin-Account https://claude.ai/code/session_01Xsg4j2t4S9goMuWVpF3ezG
68 lines
2.5 KiB
PHP
68 lines
2.5 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../core/auth.php';
|
|
auth_start_session();
|
|
auth_require_login();
|
|
|
|
$pdo = db();
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_id'])) {
|
|
csrf_verify();
|
|
$stmt = $pdo->prepare('DELETE FROM pages WHERE id = ?');
|
|
$stmt->execute([(int) $_POST['delete_id']]);
|
|
flash('success', 'Seite gelöscht.');
|
|
redirect('/admin/pages.php');
|
|
}
|
|
|
|
$pages = $pdo->query('SELECT id, title, slug, status, created_at FROM pages ORDER BY created_at DESC')->fetchAll();
|
|
|
|
$pageTitle = 'Seiten';
|
|
$currentPage = 'pages';
|
|
ob_start();
|
|
?>
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h3>Alle Seiten (<?= count($pages) ?>)</h3>
|
|
<a href="/admin/page-edit.php" class="btn btn-primary btn-sm">Neue Seite</a>
|
|
</div>
|
|
<?php if (empty($pages)): ?>
|
|
<p class="empty-state">Noch keine Seiten vorhanden.</p>
|
|
<?php else: ?>
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>Titel</th>
|
|
<th>Slug</th>
|
|
<th>Status</th>
|
|
<th>Erstellt</th>
|
|
<th>Aktionen</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($pages as $pg): ?>
|
|
<tr>
|
|
<td><a href="/admin/page-edit.php?id=<?= $pg['id'] ?>"><?= e($pg['title']) ?></a></td>
|
|
<td>/seite/<?= e($pg['slug']) ?></td>
|
|
<td>
|
|
<span class="badge badge-<?= $pg['status'] === 'published' ? 'success' : 'warning' ?>">
|
|
<?= $pg['status'] === 'published' ? 'Veröffentlicht' : 'Entwurf' ?>
|
|
</span>
|
|
</td>
|
|
<td><?= format_date($pg['created_at']) ?></td>
|
|
<td class="actions">
|
|
<a href="/admin/page-edit.php?id=<?= $pg['id'] ?>" class="btn btn-sm">Bearbeiten</a>
|
|
<form method="post" class="inline-form" onsubmit="return confirm('Seite wirklich löschen?')">
|
|
<?= csrf_field() ?>
|
|
<input type="hidden" name="delete_id" value="<?= $pg['id'] ?>">
|
|
<button type="submit" class="btn btn-sm btn-danger">Löschen</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php
|
|
$content = ob_get_clean();
|
|
include __DIR__ . '/templates/layout.php';
|