PHP Konzept: Einfache Mitgliederverwaltung und Gästebuch
Erste Schritte: PHP Konzept: Einfache Mitgliederverwaltung & Gästebuch
In vielen PHP-Projekten brauchst du zumindest eine einfache Struktur, um Benutzer anzulegen (Mitgliederverwaltung) und ihnen die Möglichkeit zu geben, etwas zu veröffentlichen – zum Beispiel in einem kleinen Gästebuch. Dieses Tutorial zeigt dir ein mögliches Konzept, ohne zu sehr ins Detail zu gehen. So bekommst du eine Idee, wie die einzelnen Teile – Datenbank, PHP und HTML-Formulare – zusammenspielen.
1. Grundidee & Datenbankstruktur
Für eine Mitgliederverwaltung kannst du eine Tabelle users anlegen, die z. B. Felder wie id, username, passwort, email enthält. Für ein Gästebuch nutzt du eine weitere Tabelle, z. B. guestbook mit Feldern wie id, user_id, nachricht, datum.
-- Tabelle users (id, username, passwort, email) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, passwort VARCHAR(255) NOT NULL, email VARCHAR(100) ); -- Tabelle guestbook (id, user_id, nachricht, datum) CREATE TABLE guestbook ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, nachricht TEXT NOT NULL, datum DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) );
So kannst du im Gästebuch-Eintrag gleich angeben, welcher Benutzer (user_id) das geschrieben hat, falls gewünscht. Bei einem öffentlichen Gästebuch könnte man das user_id-Feld optional machen oder den Namen direkt speichern.
2. Registrierung: Einfache Mitgliederverwaltung
Ein Formular für die Registrierung (z. B. register.php) mit Feldern wie username, passwort, email könnte so aussehen:
<form action="register_process.php" method="POST"> <label>Benutzername:</label> <input type="text" name="username" required> <label>Passwort:</label> <input type="password" name="pass" required> <label>E-Mail:</label> <input type="email" name="email"> <button type="submit">Registrieren</button> </form>
In register_process.php validierst du Eingaben und speicherst den Datensatz in users. Bei Passwörtern ist es wichtig, sie gehasht zu speichern (z. B. password_hash in PHP).
// register_process.php (Beispiel mit PDO) $pdo = new PDO("mysql:host=localhost;dbname=deinedb", "user", "pass"); $username = $_POST['username']; $pass = $_POST['pass']; $email = $_POST['email'] ?? ''; // Eingabe validieren (z. B. nicht leer, ggf. Regex oder length checks) // Passwort hashen $hash = password_hash($pass, PASSWORD_DEFAULT); // INSERT $sql = "INSERT INTO users (username, passwort, email) VALUES (:uname, :pw, :mail)"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':uname', $username); $stmt->bindValue(':pw', $hash); $stmt->bindValue(':mail', $email); $stmt->execute(); // Weiterleitung nach Erfolg header("Location: register_success.php"); exit;
3. Login und Session
Um Benutzer wiederzuerkennen, nutzt du Sessions. Du erfragst in einem login.php-Formular Benutzername und Passwort, vergleichst es mit dem Hash in der DB, und wenn es stimmt, legst du eine Session-Variable an.
// login_process.php session_start(); $pdo = new PDO("mysql:host=localhost;dbname=deinedb", "user", "pass"); $username = $_POST['username']; $pass = $_POST['pass']; $sql = "SELECT id, passwort FROM users WHERE username = :uname"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':uname', $username); $stmt->execute(); $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user && password_verify($pass, $user['passwort'])) { // Login erfolgreich $_SESSION['userid'] = $user['id']; header("Location: index.php"); exit; } else { // Falsches Passwort oder User nicht gefunden header("Location: login.php?error=1"); exit; }
Mit $_SESSION[‚userid‘] weiß dein Skript später, welcher Benutzer eingeloggt ist.
4. Gästebuch-Eintrag erstellen
Hat sich der Benutzer eingeloggt, kannst du ihm ein Formular geben, um eine Nachricht ins Gästebuch zu schreiben.
<form action="guestbook_add.php" method="POST"> <textarea name="nachricht" rows="5" cols="50"></textarea> <button type="submit">Eintrag speichern</button> </form>
Im Skript guestbook_add.php prüfst du, ob der Benutzer eingeloggt ist, und nimmst die Nachricht entgegen:
session_start(); if (!isset($_SESSION['userid'])) { // Nicht eingeloggt header("Location: login.php"); exit; } $pdo = new PDO("mysql:host=localhost;dbname=deinedb", "user", "pass"); $user_id = $_SESSION['userid']; $nachricht = $_POST['nachricht'] ?? ''; // Validierung ... $sql = "INSERT INTO guestbook (user_id, nachricht) VALUES (:uid, :msg)"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':uid', $user_id); $stmt->bindValue(':msg', $nachricht); $stmt->execute(); header("Location: guestbook_view.php"); exit;
5. Gästebuch anzeigen
In guestbook_view.php zeigst du alle Einträge an, ggf. zusammen mit dem Benutzernamen aus der Tabelle „users“ (via JOIN oder zwei SELECTs).
$pdo = new PDO("mysql:host=localhost;dbname=deinedb", "user", "pass"); // Beispiel JOIN $sql = "SELECT g.nachricht, g.datum, u.username FROM guestbook g JOIN users u ON g.user_id = u.id ORDER BY g.datum DESC"; $stmt = $pdo->query($sql); $eintraege = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($eintraege as $eintrag) { echo "<div><strong>" . htmlspecialchars($eintrag['username']) . ":</strong> "; echo htmlspecialchars($eintrag['nachricht']) . "<br>"; echo "<em>" . $eintrag['datum'] . "</em>"; echo "</div><hr>"; }
So sieht man pro Eintrag den Benutzernamen, die Nachricht und das Datum. Achte auf htmlspecialchars(), um XSS zu vermeiden.
6. Zusammenfassung des Ablaufs
- Registrierung: User gibt Daten ein, du speicherst sie mit gehashtem Passwort in users.
- Login: User vergleicht E-Mail/Username + Passwort mit DB. Bei Erfolg: Session-Variable setzen.
- Gästebuch schreiben: Eingelogger Benutzer füllt Textfeld aus, du INSERT in guestbook mit user_id.
- Gästebuch ansehen: SELECT aller Einträge (JOIN mit users), Ausgabe nach Datum sortiert.
Fazit
Mit dieser Mitgliederverwaltung (Registrierung, Login mit Session) und einem einfachen Gästebuch (Tabelle, Insert, Ausgabe) hast du ein Grundgerüst, das in vielen Webprojekten ähnlich aussieht. Ob du es minimal hältst oder erweitern willst (Profilseiten, Benutzerrollen, Bild-Uploads etc.), das Prinzip bleibt: users-Tabelle für die Benutzer, guestbook-Tabelle für die Einträge und eine PHP-Logik, die Insert, Select, Session-Handling und Sicherheit (z. B. prepared statements, htmlspecialchars) beachtet. So lernst du wichtige Basics, die dir in fast jedem PHP-Projekt weiterhelfen.