jjj
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Tabellen erstellen, falls nicht vorhanden $db->exec("CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, email TEXT UNIQUE, password TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP )"); $db->exec("CREATE TABLE IF NOT EXISTS posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, title TEXT, description TEXT, content TEXT, tags TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(user_id) REFERENCES users(id) )"); $db->exec("CREATE TABLE IF NOT EXISTS comments ( id INTEGER PRIMARY KEY AUTOINCREMENT, post_id INTEGER, user_id INTEGER, content TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(post_id) REFERENCES posts(id), FOREIGN KEY(user_id) REFERENCES users(id) )"); // Hilfsfunktionen function isLoggedIn() { return isset($_SESSION['user_id']); } function currentUser($db) { if (!isLoggedIn()) return null; $stmt = $db->prepare("SELECT id, username FROM users WHERE id = ?"); $stmt->execute([$_SESSION['user_id']]); return $stmt->fetch(PDO::FETCH_ASSOC); } function h($str) { return htmlspecialchars($str, ENT_QUOTES); } // Registrierung if (isset($_POST['register'])) { $username = trim($_POST['username']); $email = trim($_POST['email']); $password = $_POST['password']; $password_confirm = $_POST['password_confirm']; $error = ''; if (!$username || !$email || !$password) $error = "Alle Felder sind Pflicht."; elseif ($password !== $password_confirm) $error = "Passwörter stimmen nicht überein."; else { $stmt = $db->prepare("SELECT id FROM users WHERE username = ? OR email = ?"); $stmt->execute([$username, $email]); if ($stmt->fetch()) $error = "Benutzername oder E-Mail existiert bereits."; else { $hash = password_hash($password, PASSWORD_DEFAULT); $stmt = $db->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); $stmt->execute([$username, $email, $hash]); $_SESSION['user_id'] = $db->lastInsertId(); header("Location: ".$_SERVER['PHP_SELF']); exit; } } } // Login if (isset($_POST['login'])) { $email = trim($_POST['email']); $password = $_POST['password']; $stmt = $db->prepare("SELECT * FROM users WHERE email = ?"); $stmt->execute([$email]); $user = $stmt->fetch(); if ($user && password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; header("Location: ".$_SERVER['PHP_SELF']); exit; } else { $login_error = "Ungültige Anmeldedaten."; } } // Logout if (isset($_GET['logout'])) { session_destroy(); header("Location: ".$_SERVER['PHP_SELF']); exit; } // Neuen Beitrag speichern if (isset($_POST['new_post']) && isLoggedIn()) { $title = trim($_POST['title']); $description = trim($_POST['description']); $content = trim($_POST['content']); $tags = trim($_POST['tags']); if ($title && $content) { $stmt = $db->prepare("INSERT INTO posts (user_id, title, description, content, tags) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$_SESSION['user_id'], $title, $description, $content, $tags]); header("Location: ".$_SERVER['PHP_SELF']); exit; } } // Kommentar speichern if (isset($_POST['new_comment']) && isLoggedIn()) { $post_id = (int)$_POST['post_id']; $content = trim($_POST['content']); if ($post_id && $content) { $stmt = $db->prepare("INSERT INTO comments (post_id, user_id, content) VALUES (?, ?, ?)"); $stmt->execute([$post_id, $_SESSION['user_id'], $content]); header("Location: ".$_SERVER['PHP_SELF']."?post=$post_id"); exit; } } // Aktueller Nutzer $user = currentUser($db); // Wenn eine Beitrags-ID gesetzt ist, zeige Einzelansicht $post_id = isset($_GET['post']) ? (int)$_GET['post'] : 0; ?>
Mini PHP Forum Demo
Beitrag nicht gefunden.
"; } else { // Kommentare laden $stmt = $db->prepare("SELECT comments.*, users.username FROM comments JOIN users ON comments.user_id = users.id WHERE post_id = ? ORDER BY created_at ASC"); $stmt->execute([$post_id]); $comments = $stmt->fetchAll(); ?>Von am
Tags:
Kommentare
am
Anmelden, um Kommentare zu schreiben.
Beiträge
Von am
...
Tags:
Keine Beiträge vorhanden.
Kommentare
Kommentar veröffentlichen