abschluss

This commit is contained in:
2025-06-20 07:55:37 +00:00
parent 497e6a0bdf
commit 6c2e71dd53
34 changed files with 1370 additions and 382 deletions

View File

@ -0,0 +1,42 @@
# Projektabschlussbericht Webframework in PHP
## 1. Projektübersicht
Das Ziel des Projekts war die Entwicklung eines kleinen Webframeworks in PHP, auf dessen Basis ein einfacher Blog mit Benutzeranmeldung realisiert wurde. Das Projekt wurde gemäß den im Pflichtenheft definierten Anforderungen umgesetzt.
## 2. Projektverlauf
Das Projekt wurde in vier Meilensteine unterteilt:
1. **Entwurf des Frameworks**
2. **Implementierung der Kernfunktionen**
3. **Entwicklung des Blog-Systems**
4. **Testen und Dokumentation**
Alle Meilensteine wurden im vorgesehenen Zeitrahmen abgeschlossen. Auftretende Probleme konnten zeitnah gelöst werden.
## 3. Zielerreichung
- **Funktionale Anforderungen:**
Alle im Pflichtenheft definierten funktionalen Anforderungen wurden vollständig umgesetzt. Das Framework unterstützt Routing, MVC, Datenbankanbindung (PDO) und ein Template-System. Der Blog bietet Benutzeranmeldung, Beitragsverwaltung und ein responsives Design.
- **Nicht-funktionale Anforderungen:**
Sicherheitsmaßnahmen wie Passwort-Hashing und CSRF-Schutz wurden implementiert. Die Performance entspricht den Erwartungen, und die Dokumentation ist vollständig.
## 4. Projektergebnisse
- Fertiges Webframework in PHP
- Funktionsfähiges Blog-System
- Ausführliche Dokumentation und Installationsanleitung
- Quellcode im Repository verfügbar
## 5. Abweichungen und Erfahrungen
Im Projektverlauf gab es keine wesentlichen Abweichungen vom ursprünglichen Plan. Kleinere Anpassungen wurden zeitnah umgesetzt. Die gewählte Architektur hat sich als flexibel und wartbar erwiesen.
## 6. Fazit und Ausblick
Das Projekt wurde erfolgreich abgeschlossen. Das Framework kann als Basis für weitere Webanwendungen genutzt und bei Bedarf erweitert werden. Für die Zukunft sind optionale Erweiterungen wie eine Kommentarfunktion, Benutzerregistrierung oder Medienverwaltung denkbar.
---
**Datum:** 20.06.2025

116
documents/lastenheft.md Normal file
View File

@ -0,0 +1,116 @@
# Lastenheft Blogsystem
## 1. Zielbestimmung
Das zu entwickelnde System ist ein webbasiertes Blogsystem, das es autorisierten Benutzern ermöglicht, Blogbeiträge zu erstellen, zu bearbeiten und zu löschen. Besucher können die Beiträge lesen. Das System soll einfach bedienbar, sicher und erweiterbar sein.
## 2. Produkteinsatz
- **Zielgruppe:** Autoren (Lehrkräfte, Schüler, Redaktion), Leser (Öffentlichkeit)
- **Betriebssystem:** Linux-Server
- **Zugriff:** Webbrowser (Desktop und mobil)
- **Sprache:** Deutsch
## 3. Produktübersicht
Das Blogsystem bietet folgende Kernfunktionen:
- Anzeige einer Übersicht aller Blogposts
- Detailansicht einzelner Blogposts
- Benutzer-Login/-Logout
- Erstellung, Bearbeitung und Löschung von Blogposts (nur für eingeloggte Nutzer)
- Schutz vor CSRF-Angriffen
## 4. Produktfunktionen
- **Blogübersicht:**
Besucher sehen eine Liste aller veröffentlichten Beiträge mit Titel, Vorschau, Datum und Autor.
- **Detailansicht:**
Besucher können einzelne Beiträge vollständig lesen.
- **Benutzerverwaltung:**
Nutzer können sich einloggen und ausloggen.
- **Beitragserstellung:**
Eingeloggte Nutzer können neue Beiträge verfassen.
- **Beitragsbearbeitung:**
Eingeloggte Nutzer können bestehende Beiträge bearbeiten.
- **Beitragslöschung:**
Eingeloggte Nutzer können Beiträge löschen.
- **Sicherheit:**
CSRF-Schutz bei Formularen, Passwort-Hashing, Session-Management.
## 5. Nicht-funktionale Anforderungen
- **Benutzerfreundlichkeit:**
Intuitive Bedienung, responsive Design.
- **Performance:**
Schnelle Ladezeiten, auch bei vielen Beiträgen.
- **Sicherheit:**
Schutz vor gängigen Webangriffen (CSRF, XSS, SQL-Injection).
- **Wartbarkeit:**
Klare Code-Struktur, Dokumentation, Erweiterbarkeit.
## 6. Schnittstellen
- **Datenbank:**
MySQL/MariaDB für Speicherung von Nutzern und Beiträgen.
- **Webserver:**
Apache/Nginx mit PHP-Unterstützung.
## 7. Lieferumfang
- Quellcode des Blogsystems
- Installationsanleitung
- Datenbankschema
- Kurzanleitung für Nutzer
## 8. Abgrenzung
- Keine Kommentarfunktion
- Keine Medienverwaltung (Bilder, Videos)
- Keine Benutzerregistrierung über die Oberfläche
## 9. Installationsanleitung (Kurzfassung)
1. **Voraussetzungen:**
- Linux-Server mit Apache oder Nginx
- PHP (mindestens Version 7.4)
- MySQL oder MariaDB
- Git (optional)
2. **Quellcode bereitstellen:**
- Repository klonen oder Quellcode entpacken:
`git clone <REPOSITORY-URL>`
- Dateien ins Webverzeichnis kopieren.
3. **Datenbank einrichten:**
- Neue Datenbank und Benutzer anlegen.
- Das mitgelieferte SQL-Schema importieren:
`mysql -u <user> -p <datenbankname> < schema.sql`
4. **Konfiguration:**
- Zugangsdaten zur Datenbank in der Konfigurationsdatei eintragen (`.env`).
5. **Berechtigungen setzen:**
- Schreibrechte für Upload- oder Cache-Verzeichnisse vergeben (falls benötigt).
6. **Webserver neu laden:**
- Apache/Nginx neu starten:
`sudo systemctl reload apache2` oder `sudo systemctl reload nginx`
## 10. Kurzanleitung für Nutzer
- **Anmelden:**
Über die Login-Seite mit Benutzername und Passwort anmelden.
- **Blogbeiträge lesen:**
Die Startseite zeigt eine Übersicht aller veröffentlichten Beiträge. Ein Klick auf den Titel öffnet die Detailansicht.
- **Neuen Beitrag erstellen:**
Nach dem Login auf „Neuer Beitrag“ klicken, Titel und Inhalt eingeben und speichern.
- **Beitrag bearbeiten/löschen:**
Eigene Beiträge können nach dem Login bearbeitet oder gelöscht werden.
- **Abmelden:**
Über den „Logout“-Button oben rechts abmelden.
---

131
documents/pflichtenheft.md Normal file
View File

@ -0,0 +1,131 @@
# Pflichtenheft Webframework in PHP
## 1. Einleitung
### 1.1 Projektbeschreibung
Ziel des Projekts ist die Entwicklung eines kleinen Webframeworks in PHP. Auf diesem Framework soll ein einfacher Blog mit Benutzeranmeldung implementiert werden.
### 1.2 Zielgruppe
Die Zielgruppe sind Entwickler, die ein leichtgewichtiges Framework für kleine Webanwendungen suchen, sowie Endbenutzer, die den Blog nutzen möchten.
## 2. Anforderungen
### 2.1 Funktionale Anforderungen
#### 2.1.1 Webframework
- **Routing:** Implementierung eines einfachen Routingsystems, das URL-Anfragen an die entsprechenden Controller weiterleitet.
- **MVC-Architektur:** Das Framework soll nach dem Model-View-Controller (MVC) Muster aufgebaut sein.
- **Datenbankanbindung:** Bereitstellung einer einfachen Datenbankanbindung (mit PDO).
- **Template-System:** Ein einfaches Template-System zur Trennung von Logik und Präsentation.
#### 2.1.2 Blog
- **Benutzeranmeldung:** Implementierung eines Login-Systems für registrierte Benutzer.
- **Beitragsverwaltung:** Benutzer sollen Blogbeiträge erstellen, bearbeiten und löschen können.
- **Responsive Design:** Der Blog soll auf verschiedenen Geräten (Desktop, Tablet, Smartphone) gut aussehen.
### 2.2 Nicht-funktionale Anforderungen
- **Sicherheit:** Implementierung von Sicherheitsmaßnahmen (z.B. Passwort-Hashing, CSRF-Schutz).
- **Performance:** Das Framework und der Blog sollen schnell und ressourcenschonend sein.
- **Dokumentation:** Ausführliche Dokumentation des Frameworks und des Blogs.
## 3. Technische Anforderungen
### 3.1 Programmiersprache
- PHP (Version 8.0 oder höher)
### 3.2 Datenbank
- MySQL
### 3.3 Webserver
- Apache oder Nginx
### 3.4 Entwicklungsumgebung
- IDE (Visual Studio Code)
- Composer für die Paketverwaltung
## 4. Zeitplan
### 4.1 Meilensteine
- **Meilenstein 1:** Entwurf des Frameworks (2 Wochen)
- **Meilenstein 2:** Implementierung der Kernfunktionen des Frameworks (4 Wochen)
- **Meilenstein 3:** Entwicklung des Blog-Systems (4 Wochen)
- **Meilenstein 4:** Testen und Dokumentation (2 Wochen)
## 5. Abnahmebedingungen
- Das Projekt gilt als erfolgreich abgeschlossen, wenn alle funktionalen und nicht-funktionalen Anforderungen erfüllt sind und die Software in einer Testumgebung fehlerfrei läuft.
## 6. Projekt-Struktur-Plan
1. **Projektmanagement**
- Planung und Organisation
- Meilenstein- und Zeitplan
- Dokumentation
2. **Framework-Entwicklung**
- Routing-System
- MVC-Architektur (Model, View, Controller)
- Datenbankanbindung (PDO)
- Template-System
3. **Blog-Entwicklung**
- Benutzeranmeldung (Login/Logout)
- Beitragsverwaltung (Erstellen, Bearbeiten, Löschen)
- Responsive Design
4. **Sicherheit**
- Passwort-Hashing
- CSRF-Schutz
- Validierung und Fehlerbehandlung
5. **Testen**
- Funktionstests für Blog-Funktionen
- Manuelle Tests (Usability, Responsivität)
6. **Deployment**
- Einrichtung der Serverumgebung
- Installation und Konfiguration
- Dokumentation für Installation und Nutzung
7. **Abschluss**
- Abnahme durch Auftraggeber
- Abschlussdokumentation
- Projektübergabe
## 7. Anhang
- Glossar der verwendeten Begriffe
- Referenzen zu verwendeten Technologien und Frameworks
## Glossar der verwendeten Begriffe
- **Routing:** Mechanismus zur Zuordnung von URLs zu bestimmten Funktionen oder Controllern in einer Webanwendung.
- **MVC (Model-View-Controller):** Architekturmuster zur Trennung von Datenmodell, Benutzeroberfläche und Steuerungslogik.
- **PDO (PHP Data Objects):** Erweiterung für PHP zur objektorientierten Datenbankanbindung.
- **Template-System:** System zur Trennung von Anwendungslogik und Darstellung (HTML).
- **CSRF (Cross-Site Request Forgery):** Angriffsmethode, bei der unerwünschte Aktionen im Namen eines angemeldeten Nutzers ausgeführt werden.
- **Passwort-Hashing:** Verfahren zur sicheren Speicherung von Passwörtern durch Umwandlung in einen nicht rückrechenbaren Wert.
- **Composer:** Paketverwaltungstool für PHP.
- **Responsive Design:** Gestaltung von Webseiten, die sich an verschiedene Bildschirmgrößen und Geräte anpasst.
## Referenzen zu verwendeten Technologien und Frameworks
- [PHP](https://www.php.net/) Programmiersprache für die Serverlogik
- [MySQL](https://www.mysql.com/) Relationale Datenbank
- [PDO (PHP Data Objects)](https://www.php.net/manual/de/book.pdo.php) Datenbankzugriff in PHP
- [Composer](https://getcomposer.org/) Paketverwaltung für PHP
- [Apache HTTP Server](https://httpd.apache.org/) Webserver
- [Nginx](https://nginx.org/) Webserver
- [Visual Studio Code](https://code.visualstudio.com/) Entwicklungsumgebung
- [Bootstrap](https://getbootstrap.com/) Framework für responsives Design

39
documents/schema.sql Normal file
View File

@ -0,0 +1,39 @@
-- Adminer 4.17.1 MySQL 11.7.2-MariaDB dump
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
SET NAMES utf8mb4;
CREATE DATABASE `blog` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
USE `blog`;
DROP TABLE IF EXISTS `posts`;
CREATE TABLE `posts` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`author_id` int(20) NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
`stamp` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `posts` (`id`, `author_id`, `title`, `content`, `stamp`) VALUES
(1, 1, 'Testeintrag', 'Bacon ipsum dolor amet cupim ball tip alcatra, meatloaf pork belly porchetta tongue pancetta. Cupim beef picanha salami meatball burgdoggen porchetta chuck shankle ground round doner ham hock tenderloin pastrami drumstick. Tongue pork belly tenderloin, cow shankle pork chop venison beef ribs flank bresaola salami kielbasa picanha brisket. Meatball meatloaf ham hock, rump filet mignon alcatra boudin jowl. Pancetta turducken biltong boudin, brisket landjaeger ham shank pork chop turkey andouille meatloaf sausage. Frankfurter tenderloin salami kevin chuck meatloaf kielbasa pork loin spare ribs picanha chicken pancetta short loin ground round swine. Strip steak alcatra doner boudin, pork bresaola kielbasa ham hock meatloaf venison leberkas tongue bacon ground round.\r\n\r\nTri-tip pig brisket chicken shank flank pork chop prosciutto pork. Buffalo short ribs t-bone shankle ham hock. Landjaeger brisket kielbasa fatback, t-bone salami venison boudin jowl. Brisket strip steak meatball, frankfurter shankle rump picanha cow doner.\r\n\r\nShort loin cow pig, filet mignon swine turkey burgdoggen jerky pork. Strip steak bacon jowl spare ribs tongue turkey. Pig t-bone pork belly, hamburger drumstick sausage ham biltong meatball shank tenderloin. Corned beef porchetta andouille, capicola cow pancetta burgdoggen hamburger meatloaf leberkas. Tongue shank drumstick ribeye spare ribs swine pork sausage kevin beef ribs chuck. Tongue salami jerky tenderloin.\r\n\r\nPork chop pastrami chuck buffalo chislic ham hock. Cow ground round meatball fatback shank pork pastrami brisket landjaeger strip steak. Picanha chicken jerky, pancetta cupim biltong tenderloin kevin turkey swine sausage. T-bone ground round filet mignon leberkas tongue. Beef biltong capicola short ribs beef ribs tri-tip pork doner chicken meatloaf. Bacon kevin jerky sirloin, salami venison shoulder picanha prosciutto boudin. Ham hock capicola t-bone drumstick leberkas kevin alcatra doner hamburger cupim pork chop, salami ham.\r\n\r\nChislic cow drumstick, ribeye pancetta fatback sirloin flank alcatra andouille chicken tenderloin cupim ground round buffalo. Biltong sausage ribeye chicken cow chuck short ribs turkey. Shoulder sausage shankle tongue t-bone. Buffalo biltong short ribs beef ribs doner shankle. Strip steak beef ribs turducken pastrami bresaola jowl ball tip tenderloin ham hock boudin ham hamburger pork loin turkey. Short ribs flank beef prosciutto, meatball meatloaf buffalo short loin beef ribs pork loin.\r\nDoes your lorem ipsum text long for something a little meatier? Give our generator a try… its tasty!', 1744353753),
(2, 1, 'Test', 'test test', 1750398912);
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`login` varchar(255) NOT NULL,
`password` varchar(167) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `users` (`id`, `username`, `login`, `password`) VALUES
(1, 'Stefan', 'stefan', '$argon2id$v=19$m=65536,t=4,p=1$WC5NMjdFM2J3RllJYmlyQg$Rr44G1o045aqhQHcrgysyLoK5l0XWrL3PH3gT7jcEYc');
-- 2025-06-20 07:36:23