From 1f8e7dc67bdb1e42706edcf8b1d238890dfe5fba Mon Sep 17 00:00:00 2001 From: Karsten Tlotzek Date: Thu, 12 Jun 2025 16:14:54 +0200 Subject: [PATCH 1/8] Test --- index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.php b/index.php index 9609eea..956dc5c 100644 --- a/index.php +++ b/index.php @@ -1,6 +1,6 @@ Date: Thu, 12 Jun 2025 16:27:03 +0200 Subject: [PATCH 2/8] Added .gitignore --- .gitignore | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ccb8229 --- /dev/null +++ b/.gitignore @@ -0,0 +1,193 @@ +# Created by https://www.toptal.com/developers/gitignore/api/intellij,windows,macos,git +# Edit at https://www.toptal.com/developers/gitignore?templates=intellij,windows,macos,git + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/encodings.xml +.idea/php.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/intellij,windows,macos,git \ No newline at end of file From 5cef69ae81715343415e9a4f4c1a514534f2b4bc Mon Sep 17 00:00:00 2001 From: Max Schneider Date: Thu, 12 Jun 2025 16:29:00 +0200 Subject: [PATCH 3/8] added database creation sql with test data karsten kann nicht coden --- bibarts.sql | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++ contact.sql | 30 ------------- 2 files changed, 124 insertions(+), 30 deletions(-) create mode 100644 bibarts.sql delete mode 100644 contact.sql diff --git a/bibarts.sql b/bibarts.sql new file mode 100644 index 0000000..9392db8 --- /dev/null +++ b/bibarts.sql @@ -0,0 +1,124 @@ +-- phpMyAdmin SQL Dump +-- version 4.5.1 +-- http://www.phpmyadmin.net +-- +-- Host: 127.0.0.1 +-- Erstellungszeit: 24. Nov 2017 um 17:01 +-- Server-Version: 10.1.16-MariaDB +-- PHP-Version: 7.0.9 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + +-- +-- Datenbank: `blog` +-- + +-- -------------------------------------------------------- + +CREATE TABLE User ( + userid INT AUTO_INCREMENT PRIMARY KEY, + vorname VARCHAR(50), + nachname VARCHAR(50), + straße VARCHAR(100), + hausnr VARCHAR(10), + postleitzahl VARCHAR(10), + ort VARCHAR(50), + land VARCHAR(50), + tel VARCHAR(20), + email VARCHAR(100) UNIQUE, + isAdmin BOOLEAN DEFAULT FALSE, + password VARCHAR(255) +); + + +CREATE TABLE Standort ( + standortid INT AUTO_INCREMENT PRIMARY KEY, + straße VARCHAR(100), + hausnr VARCHAR(10), + postleitzahl VARCHAR(10), + ort VARCHAR(50), + land VARCHAR(50), + tel VARCHAR(20), + email VARCHAR(100) +); + + +CREATE TABLE Ausstellung ( + austellungid INT AUTO_INCREMENT PRIMARY KEY, + standortid INT, + datum_von DATE, + datum_bis DATE, + name VARCHAR(100), + beschreibung TEXT, + max_tickets INT, + FOREIGN KEY (standortid) REFERENCES Standort(standortid) +); + + +CREATE TABLE Ticket ( + ticketid INT AUTO_INCREMENT PRIMARY KEY, + userid INT, + eventid INT, + kaufdatum DATE, + gültigkeitsdatum DATE, + preis DECIMAL(10,2), + FOREIGN KEY (userid) REFERENCES User(userid), + FOREIGN KEY (eventid) REFERENCES Ausstellung(austellungid) +); + + +CREATE TABLE Gutschein ( + gutscheinid INT AUTO_INCREMENT PRIMARY KEY, + code VARCHAR(50) UNIQUE, + rabatt INT CHECK (rabatt BETWEEN 0 AND 100), + eventid INT, + gültigkeit DATE, + FOREIGN KEY (eventid) REFERENCES Ausstellung(austellungid) +); + + +CREATE TABLE News ( + newsid INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(100), + beschreibung TEXT, + datum DATE +); + + + + +INSERT INTO User (vorname, nachname, straße, hausnr, postleitzahl, ort, land, tel, email, isAdmin, password) +VALUES +('Max', 'Muster', 'Musterstraße', '1', '12345', 'Musterstadt', 'Deutschland', '0123456789', 'max@muster.de', FALSE, 'passwort123'), +('Anna', 'Beispiel', 'Beispielweg', '5a', '54321', 'Beispielstadt', 'Deutschland', '0987654321', 'anna@beispiel.de', TRUE, 'adminpass'); + + +INSERT INTO Standort (straße, hausnr, postleitzahl, ort, land, tel, email) +VALUES +('Galeriestraße', '10', '10115', 'Berlin', 'Deutschland', '030123456', 'kontakt@galerie-berlin.de'), +('Kunstallee', '22b', '50667', 'Köln', 'Deutschland', '0221123456', 'info@kunst-koeln.de'); + + +INSERT INTO Ausstellung (standortid, datum_von, datum_bis, name, beschreibung, max_tickets) +VALUES +(1, '2025-07-01', '2025-08-31', 'Moderne Meisterwerke', 'Eine Sammlung moderner Kunstwerke aus Europa.', 200), +(2, '2025-09-10', '2025-10-20', 'Kunst der Antike', 'Ausstellung antiker Skulpturen und Gemälde.', 150); + + +INSERT INTO Gutschein (code, rabatt, eventid, gültigkeit) +VALUES +('SOMMER2025', 15, 1, '2025-08-31'), +('HERBST25', 25, 2, '2025-10-15'); + + +INSERT INTO Ticket (userid, eventid, kaufdatum, gültigkeitsdatum, preis) +VALUES +(1, 1, '2025-06-01', '2025-07-15', 12.50), +(2, 2, '2025-06-05', '2025-09-15', 10.00); + + +INSERT INTO News (name, beschreibung, datum) +VALUES +('Neuer Standort eröffnet', 'Unsere Galerie in Köln ist jetzt geöffnet!', '2025-06-01'), +('Frühbucher-Rabatt', 'Sichern Sie sich jetzt 15% Rabatt auf unsere Sommerausstellung.', '2025-05-20'); \ No newline at end of file diff --git a/contact.sql b/contact.sql deleted file mode 100644 index ff1ce98..0000000 --- a/contact.sql +++ /dev/null @@ -1,30 +0,0 @@ --- phpMyAdmin SQL Dump --- version 4.5.1 --- http://www.phpmyadmin.net --- --- Host: 127.0.0.1 --- Erstellungszeit: 24. Nov 2017 um 17:01 --- Server-Version: 10.1.16-MariaDB --- PHP-Version: 7.0.9 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - --- --- Datenbank: `blog` --- - --- -------------------------------------------------------- - -CREATE TABLE `contact` ( - `id` varchar(36) NOT NULL, - `topicCode` tinyint(2) NULL, - `name` varchar(200) NOT NULL, - `email` varchar(300) NOT NULL, - `phone` varchar(16) NULL, - `content` varchar(500) NOT NULL, - `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -ALTER TABLE `contact` - ADD PRIMARY KEY (`id`) From 6e3e3708b20b8650bb731754652b342b87afcfad Mon Sep 17 00:00:00 2001 From: Karsten Tlotzek Date: Mon, 16 Jun 2025 15:12:03 +0200 Subject: [PATCH 4/8] EventController, TicketController + Model + essenzielle Funktionen --- Controller/ContactController.php | 11 ++-- Controller/EventController.php | 52 +++++++++++++++++++ Controller/TicketController.php | 42 ++++++++++++++++ Model/EventModel.php | 86 ++++++++++++++++++++++++++++++++ Model/TicketModel.php | 31 ++++++++++++ Views/Event/createEvent.phtml | 12 +++++ Views/Event/updateEvent.phtml | 12 +++++ Views/Ticket/buyTicket.phtml | 12 +++++ 8 files changed, 251 insertions(+), 7 deletions(-) create mode 100644 Controller/EventController.php create mode 100644 Controller/TicketController.php create mode 100644 Model/EventModel.php create mode 100644 Model/TicketModel.php create mode 100644 Views/Event/createEvent.phtml create mode 100644 Views/Event/updateEvent.phtml create mode 100644 Views/Ticket/buyTicket.phtml diff --git a/Controller/ContactController.php b/Controller/ContactController.php index 7a24662..de3862e 100644 --- a/Controller/ContactController.php +++ b/Controller/ContactController.php @@ -13,14 +13,12 @@ class ContactController private $labels = array("name" => "Name", "email" => "E-Mail-Adresse", "content" => "Nachricht"); - public function __construct($view) - { + public function __construct($view) { $this->db = new ContactModel(); $this->view = $view; } - public function showContactForm() - { + public function showContactForm() { $this->view->setVars([ 'labels' => $this->labels, 'validData' => $this->validData, @@ -28,12 +26,11 @@ class ContactController ]); } - public function showConfirmation() - { + public function showConfirmation() { } - public function validateForm(){ + public function validateForm() { foreach ($this->labels as $index => $value) { if (!isset($_POST[$index]) || empty($_POST[$index])) { $this->errors[$index] = "Bitte " . $value . " angeben"; diff --git a/Controller/EventController.php b/Controller/EventController.php new file mode 100644 index 0000000..6c22d15 --- /dev/null +++ b/Controller/EventController.php @@ -0,0 +1,52 @@ +eventModel = new EventModel(); + $this->view = $view; + } + + public function updateEvent() { + $event = array( + "ausstellungid" => $_POST['ausstellungid'], + "standortid" => $_POST['standortid'], + "datum_von" => $_POST['datumVon'], + "datum_bis" => $_POST['datumBis'], + "name" => $_POST['name'], + "beschreibung" => $_POST['beschreibung'], + "max_tickets" => $_POST['max_tickets'], + "preis" => $_POST['preis'], + ); + + $this->eventModel->updateEvent($event); + $this->view->setVars([ + "ausstellungid" => $_POST['ausstellungid'], + ]); + } + + public function createEvent() { + $event = array( + "standortid" => $_POST['standortid'], + "datum_von" => $_POST['datumVon'], + "datum_bis" => $_POST['datumBis'], + "name" => $_POST['name'], + "beschreibung" => $_POST['beschreibung'], + "max_tickets" => $_POST['max_tickets'], + "preis" => $_POST['preis'], + ); + + $this->eventModel->createEvent($event); + $this->view->setVars([ + "name" => $_POST['name'], + ]); + } + +} \ No newline at end of file diff --git a/Controller/TicketController.php b/Controller/TicketController.php new file mode 100644 index 0000000..2294e8e --- /dev/null +++ b/Controller/TicketController.php @@ -0,0 +1,42 @@ +ticketModel = new TicketModel(); + $this->eventModel = new EventModel(); + $this->view = $view; + } + + public function buyTicket() { + $userId = $_POST['userId']; + $eventId = $_POST['eventId']; + $gueltigkeitsdatum = $_POST['gueltigkeitsdatum']; + + $values = array("userId" => $userId, + "eventId" => $eventId, + "gueltigkeitsdatum" => $gueltigkeitsdatum); + + $this->ticketModel->buyTicket($values); + $event = $this->eventModel->getEvent($eventId); + $this->view->setVars([ + "event" => $event[0] + ] + ); + } + + private function hasTicket($userId, $eventId, $gueltigkeitsdatum) { + + } + +} \ No newline at end of file diff --git a/Model/EventModel.php b/Model/EventModel.php new file mode 100644 index 0000000..e02fd0e --- /dev/null +++ b/Model/EventModel.php @@ -0,0 +1,86 @@ +linkDB(); + $sql = "UPDATE ausstellung SET + standortid = :standortid, + datum_von = :datum_von, + datum_bis = :datum_bis, + name = :name, + beschreibung = :beschreibung, + max_tickets = :max_tickets, + preis = :preis + WHERE ausstellungid = :ausstellungid;"; + + $params = array( + ":standortid" => $event['standortid'], + ":datum_von" => $event['datum_von'], + ":datum_bis" => $event['datum_bis'], + ":name" => $event['name'], + ":beschreibung" => $event['beschreibung'], + ":max_tickets" => $event['max_tickets'], + ":preis" => $event['preis'], + ":ausstellungid" => $event['ausstellungid'] + ); + + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Aktualisieren der Daten.", $e); + die; + } + } + + public function createEvent($event) { + $pdo = $this->linkDB(); + + $sql = "INSERT INTO ausstellung (`standortid`, `datum_von`, `datum_bis`, `name`, `beschreibung`, `max_tickets`, `preis`) VALUES ( + :standortid, :datum_von, :datum_bis, :name, :beschreibung, :max_tickets, :preis);"; + + $params = array( + ":standortid" => $event['standortid'], + ":datum_von" => $event['datum_von'], + ":datum_bis" => $event['datum_bis'], + ":name" => $event['name'], + ":beschreibung" => $event['beschreibung'], + ":max_tickets" => $event['max_tickets'], + ":preis" => $event['preis'] + ); + + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e); + die; + } + } + + public function getEvent($id) { + $pdo = $this->linkDB(); + $sql = "SELECT * FROM `ausstellung` WHERE `ausstellungid` = :eventId;"; + $params = array("eventId" => $id); + + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + $erg = $sth->fetchAll(\PDO::FETCH_ASSOC); + return $erg[0]; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e); + die; + } + } +} \ No newline at end of file diff --git a/Model/TicketModel.php b/Model/TicketModel.php new file mode 100644 index 0000000..1b0ac00 --- /dev/null +++ b/Model/TicketModel.php @@ -0,0 +1,31 @@ +linkDB(); + $params = array( + ":userId" => $values['userId'], + ":eventId" => $values['eventId'], + ":kaufdatum" => $values['kaufdatum'], + ":gueltigkeitsdatum" => $values['gueltigkeitsdatum'] + ); + + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e); + die; + } + + return true; + } +} \ No newline at end of file diff --git a/Views/Event/createEvent.phtml b/Views/Event/createEvent.phtml new file mode 100644 index 0000000..93a0db1 --- /dev/null +++ b/Views/Event/createEvent.phtml @@ -0,0 +1,12 @@ + + +
+

Das Event "" wurde erfolgreich erstellt!

+ Weiter +
+ + + + \ No newline at end of file diff --git a/Views/Event/updateEvent.phtml b/Views/Event/updateEvent.phtml new file mode 100644 index 0000000..48f2d78 --- /dev/null +++ b/Views/Event/updateEvent.phtml @@ -0,0 +1,12 @@ + + +
+

Das Event mit der ID "" wurde erfolgreich bearbeitet!

+ Weiter +
+ + + + \ No newline at end of file diff --git a/Views/Ticket/buyTicket.phtml b/Views/Ticket/buyTicket.phtml new file mode 100644 index 0000000..4cf930d --- /dev/null +++ b/Views/Ticket/buyTicket.phtml @@ -0,0 +1,12 @@ + + +
+

Ihr Ticket für das Event "" wurde erfolgreich gekauft!

+ Weiter +
+ + + + \ No newline at end of file From 1964cadd8c0c2b6e494b572d3ee05d5118481f62 Mon Sep 17 00:00:00 2001 From: Karsten Tlotzek Date: Mon, 23 Jun 2025 11:10:46 +0200 Subject: [PATCH 5/8] =?UTF-8?q?Standardmethoden=20f=C3=BCr=20Standort=20un?= =?UTF-8?q?d=20News.Events=20erweitert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controller/EventController.php | 15 +++++++++ Controller/NewsController.php | 43 ++++++++++++++++++++++++ Controller/StandortController.php | 24 ++++++++++++++ Model/EventModel.php | 17 ++++++++-- Model/NewsModel.php | 53 ++++++++++++++++++++++++++++++ Model/StandortModel.php | 22 +++++++++++++ Views/Event/showEvents.phtml | 32 ++++++++++++++++++ Views/News/showNews.phtml | 28 ++++++++++++++++ Views/Standort/showStandorte.phtml | 36 ++++++++++++++++++++ Views/Ticket/hasTicket.phtml | 11 +++++++ 10 files changed, 278 insertions(+), 3 deletions(-) create mode 100644 Controller/NewsController.php create mode 100644 Controller/StandortController.php create mode 100644 Model/NewsModel.php create mode 100644 Model/StandortModel.php create mode 100644 Views/Event/showEvents.phtml create mode 100644 Views/News/showNews.phtml create mode 100644 Views/Standort/showStandorte.phtml create mode 100644 Views/Ticket/hasTicket.phtml diff --git a/Controller/EventController.php b/Controller/EventController.php index 6c22d15..90fd27f 100644 --- a/Controller/EventController.php +++ b/Controller/EventController.php @@ -14,6 +14,21 @@ class EventController { $this->view = $view; } + public function showEvents() { + $events = $this->eventModel->getEvents(); + $this->view->setVars([ + "events" => $events + ]); + } + + public function getEvent() { + $ausstellungid = $_GET['ausstellungid']; + $event = $this->eventModel->getEvent($ausstellungid); + $this->view->setVars([ + "event" => $event + ]); + } + public function updateEvent() { $event = array( "ausstellungid" => $_POST['ausstellungid'], diff --git a/Controller/NewsController.php b/Controller/NewsController.php new file mode 100644 index 0000000..a7999a3 --- /dev/null +++ b/Controller/NewsController.php @@ -0,0 +1,43 @@ +newsModel = new NewsModel(); + $this->view = $view; + } + + public function showNews() { + $news = $this->newsModel->getNews(); + $this->view->setVars([ + "news" => $news + ]); + } + + public function createNews() { + $news = [ + "name" => $_POST['name'], + "beschreibung" => $_POST['beschreibung'], + "datum" => $_POST['datum'] + ]; + $this->newsModel->createNews($news); + $this->view->setVars([ + "name" => $_POST['name'] + ]); + } + + public function deleteNews() { + $newsId = $_POST['newsid']; + $this->newsModel->deleteNews($newsId); + $this->view->setVars([ + "deleted" => $newsId + ]); + } +} \ No newline at end of file diff --git a/Controller/StandortController.php b/Controller/StandortController.php new file mode 100644 index 0000000..13b6f6e --- /dev/null +++ b/Controller/StandortController.php @@ -0,0 +1,24 @@ +standortModel = new StandortModel(); + $this->view = $view; + } + + public function showStandorte() { + $this -> standortModel -> getStandorte(); + $this->view->setVars([ + "standorte" => $this->standortModel->getStandorte() + ]); + } + +} \ No newline at end of file diff --git a/Model/EventModel.php b/Model/EventModel.php index e02fd0e..1693528 100644 --- a/Model/EventModel.php +++ b/Model/EventModel.php @@ -6,8 +6,19 @@ use PDOException; class EventModel extends Database { - public function showEvents() { - + public function getEvents() { + $pdo = $this->linkDB(); + $sql = "SELECT * from ausstellung ORDER BY datum_von DESC;"; + + try { + $sth = $pdo->prepare($sql); + $sth->execute(); + $erg = $sth->fetchAll(\PDO::FETCH_ASSOC); + return $erg; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e); + die; + } } public function updateEvent($event) { @@ -77,7 +88,7 @@ class EventModel extends Database { $sth = $pdo->prepare($sql); $sth->execute($params); $erg = $sth->fetchAll(\PDO::FETCH_ASSOC); - return $erg[0]; + return $erg; } catch (PDOException $e) { new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e); die; diff --git a/Model/NewsModel.php b/Model/NewsModel.php new file mode 100644 index 0000000..da61f97 --- /dev/null +++ b/Model/NewsModel.php @@ -0,0 +1,53 @@ +linkDB(); + $sql = "SELECT * FROM news ORDER BY datum DESC;"; + try { + $sth = $pdo->prepare($sql); + $sth->execute(); + $erg = $sth->fetchAll(\PDO::FETCH_ASSOC); + return $erg; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen der News.", $e); + die; + } + } + + public function createNews($news) { + $pdo = $this->linkDB(); + $sql = "INSERT INTO news (`name`, `beschreibung`, `datum`) VALUES (:titel, :inhalt, :datum);"; + $params = [ + ":name" => $news['name'], + ":beschreibung" => $news['beschreibung'], + ":datum" => $news['datum'] + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Schreiben der News.", $e); + die; + } + } + + public function deleteNews($newsId) { + $pdo = $this->linkDB(); + $sql = "DELETE FROM news WHERE newsid = :newsid;"; + $params = [":newsid" => $newsId]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Löschen der News.", $e); + die; + } + } +} \ No newline at end of file diff --git a/Model/StandortModel.php b/Model/StandortModel.php new file mode 100644 index 0000000..c4f08d9 --- /dev/null +++ b/Model/StandortModel.php @@ -0,0 +1,22 @@ +linkDB(); + $sql = "SELECT * from standort ORDER BY ort;"; + + try { + $sth = $pdo->prepare($sql); + $sth->execute(); + return $sth->fetchAll(\PDO::FETCH_ASSOC); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e); + die; + } + } +} \ No newline at end of file diff --git a/Views/Event/showEvents.phtml b/Views/Event/showEvents.phtml new file mode 100644 index 0000000..55ab417 --- /dev/null +++ b/Views/Event/showEvents.phtml @@ -0,0 +1,32 @@ + + +

Alle Ausstellungen

+ + + + + + + + + + + + + + + + + + + + + + + +
NameBeschreibungVonBisMax. Tickets
+ +

Derzeit sind keine Ausstellungen verfügbar.

+ + + \ No newline at end of file diff --git a/Views/News/showNews.phtml b/Views/News/showNews.phtml new file mode 100644 index 0000000..5f71b89 --- /dev/null +++ b/Views/News/showNews.phtml @@ -0,0 +1,28 @@ + + +

Alle News

+ + + + + + + + + + + + + + + + + + + +
NameBeschreibungDatum
+ +

Derzeit sind keine News verfügbar.

+ + + \ No newline at end of file diff --git a/Views/Standort/showStandorte.phtml b/Views/Standort/showStandorte.phtml new file mode 100644 index 0000000..3ac6cdb --- /dev/null +++ b/Views/Standort/showStandorte.phtml @@ -0,0 +1,36 @@ + + +

Unsere Standorte

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
StraßeHausnr.PLZOrtLandTelefonEmail
+ +

Keine Standorte gefunden.

+ + + \ No newline at end of file diff --git a/Views/Ticket/hasTicket.phtml b/Views/Ticket/hasTicket.phtml new file mode 100644 index 0000000..c076676 --- /dev/null +++ b/Views/Ticket/hasTicket.phtml @@ -0,0 +1,11 @@ + + +
+

TEST

+
+ + + + \ No newline at end of file From 66ff531ba4d91d1dd1d1bd5fa5f852685cef9fa2 Mon Sep 17 00:00:00 2001 From: Karsten Tlotzek Date: Mon, 23 Jun 2025 11:11:18 +0200 Subject: [PATCH 6/8] Tickets erweitert --- Controller/TicketController.php | 10 ++++++---- Model/TicketModel.php | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Controller/TicketController.php b/Controller/TicketController.php index 2294e8e..f4017d5 100644 --- a/Controller/TicketController.php +++ b/Controller/TicketController.php @@ -11,8 +11,7 @@ class TicketController { protected $ticketModel; protected $eventModel; - public function __construct($view) - { + public function __construct($view) { $this->ticketModel = new TicketModel(); $this->eventModel = new EventModel(); $this->view = $view; @@ -35,8 +34,11 @@ class TicketController { ); } - private function hasTicket($userId, $eventId, $gueltigkeitsdatum) { - + public function hasTicket() { + $userId = $_GET["userId"]; + $eventId = $_GET["eventId"]; + $erg = $this->ticketModel->hasTicket($userId, $eventId); + echo json_encode($erg, JSON_UNESCAPED_UNICODE); } } \ No newline at end of file diff --git a/Model/TicketModel.php b/Model/TicketModel.php index 1b0ac00..e37628b 100644 --- a/Model/TicketModel.php +++ b/Model/TicketModel.php @@ -28,4 +28,24 @@ class TicketModel extends Database { return true; } + + public function hasTicket($userId, $eventId) { + $sql = "SELECT * FROM ticket WHERE userId = :userId AND eventId = :eventId"; + + $pdo = $this->linkDB(); + $params = array( + ":userId" => $userId, + ":eventId" => $eventId, + ); + + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->fetchAll(\PDO::FETCH_ASSOC); + + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e); + die; + } + } } \ No newline at end of file From d8865cbd27dbccecd932b3a3199a2249b35e02c6 Mon Sep 17 00:00:00 2001 From: Karsten Tlotzek Date: Mon, 23 Jun 2025 14:46:12 +0200 Subject: [PATCH 7/8] Controller und Tickets vereinheitlicht (CRUD) --- Controller/EventController.php | 85 ++++++++--------- Controller/GutscheinController.php | 57 +++++++++++ Controller/NewsController.php | 50 ++++++---- Controller/StandortController.php | 51 ++++++++-- Controller/TicketController.php | 47 +++++---- Model/EventModel.php | 131 ++++++++++++-------------- Model/GutscheinModel.php | 86 +++++++++++++++++ Model/NewsModel.php | 42 ++++++++- Model/StandortModel.php | 87 ++++++++++++++++- Model/TicketModel.php | 73 +++++++++----- Views/Event/createEvent.phtml | 2 +- Views/Event/deleteEvent.phtml | 12 +++ Views/Event/updateEvent.phtml | 2 +- Views/Gutschein/createGutschein.phtml | 1 + Views/Gutschein/showGutscheine.phtml | 35 +++++++ Views/Ticket/hasTicket.phtml | 11 --- 16 files changed, 559 insertions(+), 213 deletions(-) create mode 100644 Controller/GutscheinController.php create mode 100644 Model/GutscheinModel.php create mode 100644 Views/Event/deleteEvent.phtml create mode 100644 Views/Gutschein/createGutschein.phtml create mode 100644 Views/Gutschein/showGutscheine.phtml delete mode 100644 Views/Ticket/hasTicket.phtml diff --git a/Controller/EventController.php b/Controller/EventController.php index 90fd27f..fbe201d 100644 --- a/Controller/EventController.php +++ b/Controller/EventController.php @@ -6,62 +6,59 @@ use Blog\Model\EventModel; class EventController { - protected $view; - protected $eventModel; + private $model; + private $view; public function __construct($view) { - $this->eventModel = new EventModel(); + $this->model = new EventModel(); $this->view = $view; } public function showEvents() { - $events = $this->eventModel->getEvents(); + $events = $this->model->getEvents(); $this->view->setVars([ - "events" => $events - ]); - } - - public function getEvent() { - $ausstellungid = $_GET['ausstellungid']; - $event = $this->eventModel->getEvent($ausstellungid); - $this->view->setVars([ - "event" => $event - ]); - } - - public function updateEvent() { - $event = array( - "ausstellungid" => $_POST['ausstellungid'], - "standortid" => $_POST['standortid'], - "datum_von" => $_POST['datumVon'], - "datum_bis" => $_POST['datumBis'], - "name" => $_POST['name'], - "beschreibung" => $_POST['beschreibung'], - "max_tickets" => $_POST['max_tickets'], - "preis" => $_POST['preis'], - ); - - $this->eventModel->updateEvent($event); - $this->view->setVars([ - "ausstellungid" => $_POST['ausstellungid'], + 'events' => $events ]); } public function createEvent() { - $event = array( - "standortid" => $_POST['standortid'], - "datum_von" => $_POST['datumVon'], - "datum_bis" => $_POST['datumBis'], - "name" => $_POST['name'], - "beschreibung" => $_POST['beschreibung'], - "max_tickets" => $_POST['max_tickets'], - "preis" => $_POST['preis'], - ); + $data = [ + 'name' => $_POST['name'] ?? null, + 'beschreibung' => $_POST['beschreibung'] ?? null, + 'standortid' => $_POST['standortid'] ?? null, + 'datum_von' => $_POST['datum_von'] ?? null, + 'datum_bis' => $_POST['datum_bis'] ?? null, + 'max_tickets' => $_POST['max_tickets'] ?? null, + 'preis' => $_POST['preis'] ?? null + ]; - $this->eventModel->createEvent($event); - $this->view->setVars([ - "name" => $_POST['name'], - ]); + $this->model->createEvent($data); + $this->view->setVars(['event' => $data]); + exit; } + public function editEventForm() { + $id = $_GET['ausstellungid']; + $event = $this->model->getEvent($id); + $this->view->setVars(['event' => $event]); + } + + public function updateEvent($id, $data) { + $id = $_POST['ausstellungid']; + $data = [ + 'standortid' => $_POST['standortid'] ?? null, + 'datum_von' => $_POST['datum_von'] ?? null, + 'datum_bis' => $_POST['datum_bis'] ?? null, + 'name' => $_POST['name'] ?? null, + 'beschreibung' => $_POST['beschreibung'] ?? null, + 'max_tickets' => $_POST['max_tickets'] ?? null, + 'preis' => $_POST['preis'] ?? null + ]; + $this->model->updateEvent($id, $data); + } + + public function deleteEvent($id) { + $this->model->deleteEvent($id); + $this->view->setVars(['id' => $id]); + } } \ No newline at end of file diff --git a/Controller/GutscheinController.php b/Controller/GutscheinController.php new file mode 100644 index 0000000..859a3d1 --- /dev/null +++ b/Controller/GutscheinController.php @@ -0,0 +1,57 @@ +model = new GutscheinModel(); + $this->view = $view; + } + + public function showGutscheine() { + $gutscheine = $this->model->getGutscheine(); + $this->view->setVars(['gutscheine' => $gutscheine]); + } + + public function createGutschein() { + $data = [ + 'code' => $_POST['code'] ?? null, + 'rabatt' => $_POST['rabatt'] ?? null, + 'eventid' => $_POST['eventid'] ?? null, + 'gültigkeit' => $_POST['gültigkeit'] ?? null + ]; + $erg = $this->model->createGutschein($data); + $this->view->setVars(['gutschein' => $erg]); + exit; + } + + public function editGutscheinForm() { + $id = $_GET['gutscheinid']; + if ($id) { + $gutschein = $this->model->getGutschein($id); + $this->view->setVars(['gutschein' => $gutschein]); + } + } + + public function updateGutschein() { + $id = $_POST['gutscheinid']; + $data = [ + 'code' => $_POST['code'] ?? null, + 'rabatt' => $_POST['rabatt'] ?? null, + 'eventid' => $_POST['eventid'] ?? null, + 'gültigkeit' => $_POST['gültigkeit'] ?? null + ]; + $this->model->updateGutschein($id, $data); + } + + public function deleteGutschein() { + $id = $_GET['gutscheinid'] ?? null; + $this->model->deleteGutschein($id); + } +} \ No newline at end of file diff --git a/Controller/NewsController.php b/Controller/NewsController.php index a7999a3..a2c7620 100644 --- a/Controller/NewsController.php +++ b/Controller/NewsController.php @@ -6,38 +6,48 @@ use Blog\Model\NewsModel; class NewsController { - protected $view; - protected $newsModel; + private $model; + private $view; public function __construct($view) { - $this->newsModel = new NewsModel(); + $this->model = new NewsModel(); $this->view = $view; } public function showNews() { - $news = $this->newsModel->getNews(); - $this->view->setVars([ - "news" => $news - ]); + $news = $this->model->getNews(); + $this->view->setVars(['news' => $news]); } public function createNews() { - $news = [ - "name" => $_POST['name'], - "beschreibung" => $_POST['beschreibung'], - "datum" => $_POST['datum'] + $data = [ + 'name' => $_POST['name'], + 'beschreibung' => $_POST['beschreibung'], + 'datum' => $_POST['datum'], ]; - $this->newsModel->createNews($news); - $this->view->setVars([ - "name" => $_POST['name'] - ]); + $erg = $this->model->createNews($data); + $this->view->setVars(['news' => $erg]); + exit; + } + + public function editNewsForm() { + $id = $_GET['newsid']; + $news = $this->model->getNewsById($id); + $this->view->setVars(['news' => $news]); + } + + public function updateNews() { + $id = $_POST['newsid'] ?? null; + $data = [ + 'name' => $_POST['name'], + 'beschreibung' => $_POST['beschreibung'], + 'datum' => $_POST['datum'], + ]; + $this->model->updateNews($id, $data); } public function deleteNews() { - $newsId = $_POST['newsid']; - $this->newsModel->deleteNews($newsId); - $this->view->setVars([ - "deleted" => $newsId - ]); + $id = $_GET['newsid'] ?? null; + $this->model->deleteNews($id); } } \ No newline at end of file diff --git a/Controller/StandortController.php b/Controller/StandortController.php index 13b6f6e..9bbcaaa 100644 --- a/Controller/StandortController.php +++ b/Controller/StandortController.php @@ -6,19 +6,56 @@ use Blog\Model\StandortModel; class StandortController { - protected $view; - protected $standortModel; + private $model; + private $view; public function __construct($view) { - $this->standortModel = new StandortModel(); + $this->model = new StandortModel(); $this->view = $view; } public function showStandorte() { - $this -> standortModel -> getStandorte(); - $this->view->setVars([ - "standorte" => $this->standortModel->getStandorte() - ]); + $standorte = $this->model->getStandorte(); + $this->view->setVars(['standorte' => $standorte]); } + public function createStandort() { + $data = [ + 'straße' => $_POST['straße'], + 'hausnr' => $_POST['hausnr'], + 'postleitzahl' => $_POST['postleitzahl'], + 'ort' => $_POST['ort'], + 'land' => $_POST['land'], + 'tel' => $_POST['tel'], + 'email' => $_POST['email'] + ]; + $erg = $this->model->createStandort($data); + $this->view->setVars(['standort' => $erg]); + } + + public function editStandortForm() { + $id = $_GET['standortid']; + $standort = $this->model->getStandort($id); + $this->view->setVars(['standort' => $standort]); + } + + public function updateStandort() { + $id = $_POST['standortid']; + $data = [ + 'straße' => $_POST['straße'], + 'hausnr' => $_POST['hausnr'], + 'postleitzahl' => $_POST['postleitzahl'], + 'ort' => $_POST['ort'], + 'land' => $_POST['land'], + 'tel' => $_POST['tel'], + 'email' => $_POST['email'] + ]; + $erg = $this->model->updateStandort($id, $data); + $this->view->setVars(['standort' => $erg]); + } + + public function deleteStandort() { + $id = $_GET['standortid'] ?? null; + $this->model->deleteStandort($id); + } } \ No newline at end of file diff --git a/Controller/TicketController.php b/Controller/TicketController.php index f4017d5..8ed3023 100644 --- a/Controller/TicketController.php +++ b/Controller/TicketController.php @@ -2,43 +2,38 @@ namespace Blog\Controller; -use Blog\Model\EventModel; use Blog\Model\TicketModel; class TicketController { - protected $view; - protected $ticketModel; - protected $eventModel; + private $ticketModel; + private $view; public function __construct($view) { $this->ticketModel = new TicketModel(); - $this->eventModel = new EventModel(); $this->view = $view; } - + + public function showTickets() { + $tickets = $this->ticketModel->getTickets(); + $this->view->setVars(['tickets' => $tickets]); + } + public function buyTicket() { - $userId = $_POST['userId']; - $eventId = $_POST['eventId']; - $gueltigkeitsdatum = $_POST['gueltigkeitsdatum']; - - $values = array("userId" => $userId, - "eventId" => $eventId, - "gueltigkeitsdatum" => $gueltigkeitsdatum); - - $this->ticketModel->buyTicket($values); - $event = $this->eventModel->getEvent($eventId); - $this->view->setVars([ - "event" => $event[0] - ] - ); + $data = [ + 'userid' => $_POST['userid'], + 'eventid' => $_POST['eventid'], + 'kaufdatum' => date('Y-m-d'), + 'gültigkeitsdatum' => $_POST['gültigkeitsdatum'] + ]; + $erg = $this->ticketModel->buyTicket($data); + $this->view->setVars(['ticket' => $erg]); } - public function hasTicket() { - $userId = $_GET["userId"]; - $eventId = $_GET["eventId"]; - $erg = $this->ticketModel->hasTicket($userId, $eventId); - echo json_encode($erg, JSON_UNESCAPED_UNICODE); + public function deleteTicket() { + $ticketid = $_GET['ticketid'] ?? null; + if ($ticketid) { + $this->ticketModel->deleteTicket($ticketid); + } } - } \ No newline at end of file diff --git a/Model/EventModel.php b/Model/EventModel.php index 1693528..4e2ad48 100644 --- a/Model/EventModel.php +++ b/Model/EventModel.php @@ -8,89 +8,82 @@ class EventModel extends Database { public function getEvents() { $pdo = $this->linkDB(); - $sql = "SELECT * from ausstellung ORDER BY datum_von DESC;"; - + $sql = "SELECT * FROM ausstellung ORDER BY datum_von DESC;"; try { $sth = $pdo->prepare($sql); $sth->execute(); - $erg = $sth->fetchAll(\PDO::FETCH_ASSOC); - return $erg; + return $sth->fetchAll(\PDO::FETCH_ASSOC); } catch (PDOException $e) { - new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e); - die; - } - } - - public function updateEvent($event) { - $pdo = $this->linkDB(); - $sql = "UPDATE ausstellung SET - standortid = :standortid, - datum_von = :datum_von, - datum_bis = :datum_bis, - name = :name, - beschreibung = :beschreibung, - max_tickets = :max_tickets, - preis = :preis - WHERE ausstellungid = :ausstellungid;"; - - $params = array( - ":standortid" => $event['standortid'], - ":datum_von" => $event['datum_von'], - ":datum_bis" => $event['datum_bis'], - ":name" => $event['name'], - ":beschreibung" => $event['beschreibung'], - ":max_tickets" => $event['max_tickets'], - ":preis" => $event['preis'], - ":ausstellungid" => $event['ausstellungid'] - ); - - try { - $sth = $pdo->prepare($sql); - $sth->execute($params); - } catch (PDOException $e) { - new \Blog\Library\ErrorMsg("Fehler beim Aktualisieren der Daten.", $e); - die; - } - } - - public function createEvent($event) { - $pdo = $this->linkDB(); - - $sql = "INSERT INTO ausstellung (`standortid`, `datum_von`, `datum_bis`, `name`, `beschreibung`, `max_tickets`, `preis`) VALUES ( - :standortid, :datum_von, :datum_bis, :name, :beschreibung, :max_tickets, :preis);"; - - $params = array( - ":standortid" => $event['standortid'], - ":datum_von" => $event['datum_von'], - ":datum_bis" => $event['datum_bis'], - ":name" => $event['name'], - ":beschreibung" => $event['beschreibung'], - ":max_tickets" => $event['max_tickets'], - ":preis" => $event['preis'] - ); - - try { - $sth = $pdo->prepare($sql); - $sth->execute($params); - return $sth; - } catch (PDOException $e) { - new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e); + new \Blog\Library\ErrorMsg("Fehler beim Lesen der Events.", $e); die; } } public function getEvent($id) { $pdo = $this->linkDB(); - $sql = "SELECT * FROM `ausstellung` WHERE `ausstellungid` = :eventId;"; - $params = array("eventId" => $id); - + $sql = "SELECT * FROM ausstellung WHERE ausstellungid = :id;"; + try { + $sth = $pdo->prepare($sql); + $sth->execute([":id" => $id]); + return $sth->fetch(\PDO::FETCH_ASSOC); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen des Events.", $e); + die; + } + } + + public function updateEvent($id, $data) { + $pdo = $this->linkDB(); + $sql = "UPDATE ausstellung SET standortid = :standortid, datum_von = :datum_von, datum_bis = :datum_bis, name = :name, beschreibung = :beschreibung, max_tickets = :max_tickets, preis = :preis WHERE ausstellungid = :id;"; + $params = [ + ":standortid" => $data['standortid'], + ":datum_von" => $data['datum_von'], + ":datum_bis" => $data['datum_bis'], + ":name" => $data['name'], + ":beschreibung" => $data['beschreibung'], + ":max_tickets" => $data['max_tickets'], + ":preis" => $data['preis'], + ":id" => $id + ]; try { $sth = $pdo->prepare($sql); $sth->execute($params); - $erg = $sth->fetchAll(\PDO::FETCH_ASSOC); - return $erg; } catch (PDOException $e) { - new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e); + new \Blog\Library\ErrorMsg("Fehler beim Aktualisieren des Events.", $e); + die; + } + } + + public function createEvent($data) { + $pdo = $this->linkDB(); + $sql = "INSERT INTO ausstellung (standortid, datum_von, datum_bis, name, beschreibung, max_tickets, preis) VALUES (:standortid, :datum_von, :datum_bis, :name, :beschreibung, :max_tickets, :preis);"; + $params = [ + ":standortid" => $data['standortid'], + ":datum_von" => $data['datum_von'], + ":datum_bis" => $data['datum_bis'], + ":name" => $data['name'], + ":beschreibung" => $data['beschreibung'], + ":max_tickets" => $data['max_tickets'], + ":preis" => $data['preis'] + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Erstellen des Events.", $e); + die; + } + } + + public function deleteEvent($id) { + $pdo = $this->linkDB(); + $sql = "DELETE FROM ausstellung WHERE ausstellungid = :id;"; + try { + $sth = $pdo->prepare($sql); + $sth->execute([":id" => $id]); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Löschen des Events.", $e); die; } } diff --git a/Model/GutscheinModel.php b/Model/GutscheinModel.php new file mode 100644 index 0000000..e9ba8a5 --- /dev/null +++ b/Model/GutscheinModel.php @@ -0,0 +1,86 @@ +linkDB(); + $sql = "SELECT * FROM gutschein ORDER BY gültigkeit DESC;"; + try { + $sth = $pdo->prepare($sql); + $sth->execute(); + return $sth->fetchAll(\PDO::FETCH_ASSOC); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen der Gutscheine.", $e); + die; + } + } + + public function getGutschein($id) { + $pdo = $this->linkDB(); + $sql = "SELECT * FROM gutschein WHERE gutscheinid = :id;"; + $params = [":id" => $id]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->fetch(\PDO::FETCH_ASSOC); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen des Gutscheins.", $e); + die; + } + } + + public function createGutschein($data) { + $pdo = $this->linkDB(); + $sql = "INSERT INTO gutschein (code, rabatt, eventid, gültigkeit) VALUES (:code, :rabatt, :eventid, :gültigkeit);"; + $params = [ + ":code" => $data['code'], + ":rabatt" => $data['rabatt'], + ":eventid" => $data['eventid'], + ":gültigkeit" => $data['gültigkeit'] + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Erstellen des Gutscheins.", $e); + die; + } + } + + public function updateGutschein($id, $data) { + $pdo = $this->linkDB(); + $sql = "UPDATE gutschein SET code = :code, rabatt = :rabatt, eventid = :eventid, gültigkeit = :gültigkeit WHERE gutscheinid = :id;"; + $params = [ + ":code" => $data['code'], + ":rabatt" => $data['rabatt'], + ":eventid" => $data['eventid'], + ":gültigkeit" => $data['gültigkeit'], + ":id" => $id + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Aktualisieren des Gutscheins.", $e); + die; + } + } + + public function deleteGutschein($id) { + $pdo = $this->linkDB(); + $sql = "DELETE FROM gutschein WHERE gutscheinid = :id;"; + $params = [":id" => $id]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Löschen des Gutscheins.", $e); + die; + } + } +} \ No newline at end of file diff --git a/Model/NewsModel.php b/Model/NewsModel.php index da61f97..5d5833d 100644 --- a/Model/NewsModel.php +++ b/Model/NewsModel.php @@ -6,14 +6,46 @@ use PDOException; class NewsModel extends Database { + public function getNewsById($newsId) { + $pdo = $this->linkDB(); + $sql = "SELECT * FROM news WHERE newsid = :newsid;"; + $params = [":newsid" => $newsId]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->fetch(\PDO::FETCH_ASSOC); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen der News.", $e); + die; + } + } + + public function updateNews($newsId, $news) { + $pdo = $this->linkDB(); + $sql = "UPDATE news SET name = :name, beschreibung = :beschreibung, datum = :datum WHERE newsid = :newsid;"; + $params = [ + ":name" => $news['titel'], + ":beschreibung" => $news['inhalt'], + ":datum" => $news['datum'], + ":newsid" => $newsId + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth; + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Aktualisieren der News.", $e); + die; + } + } + public function getNews() { $pdo = $this->linkDB(); $sql = "SELECT * FROM news ORDER BY datum DESC;"; try { $sth = $pdo->prepare($sql); $sth->execute(); - $erg = $sth->fetchAll(\PDO::FETCH_ASSOC); - return $erg; + return $sth->fetchAll(\PDO::FETCH_ASSOC); } catch (PDOException $e) { new \Blog\Library\ErrorMsg("Fehler beim Lesen der News.", $e); die; @@ -22,10 +54,10 @@ class NewsModel extends Database { public function createNews($news) { $pdo = $this->linkDB(); - $sql = "INSERT INTO news (`name`, `beschreibung`, `datum`) VALUES (:titel, :inhalt, :datum);"; + $sql = "INSERT INTO news (name, beschreibung, datum) VALUES (:name, :beschreibung, :datum);"; $params = [ - ":name" => $news['name'], - ":beschreibung" => $news['beschreibung'], + ":name" => $news['titel'], + ":beschreibung" => $news['inhalt'], ":datum" => $news['datum'] ]; try { diff --git a/Model/StandortModel.php b/Model/StandortModel.php index c4f08d9..8bbce96 100644 --- a/Model/StandortModel.php +++ b/Model/StandortModel.php @@ -8,14 +8,95 @@ class StandortModel extends Database { public function getStandorte() { $pdo = $this->linkDB(); - $sql = "SELECT * from standort ORDER BY ort;"; - + $sql = "SELECT * FROM Standort ORDER BY standortid ASC;"; try { $sth = $pdo->prepare($sql); $sth->execute(); return $sth->fetchAll(\PDO::FETCH_ASSOC); } catch (PDOException $e) { - new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e); + new \Blog\Library\ErrorMsg("Fehler beim Lesen der Standorte.", $e); + die; + } + } + + public function getStandort($standortid) { + $pdo = $this->linkDB(); + $sql = "SELECT * FROM Standort WHERE standortid = :standortid;"; + $params = [":standortid" => $standortid]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->fetch(\PDO::FETCH_ASSOC); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Lesen des Standorts.", $e); + die; + } + } + + public function createStandort($data) { + $pdo = $this->linkDB(); + $sql = "INSERT INTO Standort (straße, hausnr, postleitzahl, ort, land, tel, email) + VALUES (:straße, :hausnr, :postleitzahl, :ort, :land, :tel, :email);"; + $params = [ + ":straße" => $data['straße'], + ":hausnr" => $data['hausnr'], + ":postleitzahl" => $data['postleitzahl'], + ":ort" => $data['ort'], + ":land" => $data['land'], + ":tel" => $data['tel'], + ":email" => $data['email'] + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $pdo->lastInsertId(); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Anlegen des Standorts.", $e); + die; + } + } + + public function updateStandort($standortid, $data) { + $pdo = $this->linkDB(); + $sql = "UPDATE Standort SET + straße = :straße, + hausnr = :hausnr, + postleitzahl = :postleitzahl, + ort = :ort, + land = :land, + tel = :tel, + email = :email + WHERE standortid = :standortid;"; + $params = [ + ":straße" => $data['straße'], + ":hausnr" => $data['hausnr'], + ":postleitzahl" => $data['postleitzahl'], + ":ort" => $data['ort'], + ":land" => $data['land'], + ":tel" => $data['tel'], + ":email" => $data['email'], + ":standortid" => $standortid + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->rowCount(); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Aktualisieren des Standorts.", $e); + die; + } + } + + public function deleteStandort($standortid) { + $pdo = $this->linkDB(); + $sql = "DELETE FROM Standort WHERE standortid = :standortid;"; + $params = [":standortid" => $standortid]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->rowCount(); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Löschen des Standorts.", $e); die; } } diff --git a/Model/TicketModel.php b/Model/TicketModel.php index e37628b..1d6f23a 100644 --- a/Model/TicketModel.php +++ b/Model/TicketModel.php @@ -6,45 +6,66 @@ use PDOException; class TicketModel extends Database { - public function buyTicket($values) { - $sql = "INSERT INTO ticket (`userId`, `eventId`, `kaufdatum`, `gueltigkeitsdatum`) VALUES ( - :userId, :eventId, :kaufdatum, :gueltigkeitsdatum);"; - + public function getTickets() { $pdo = $this->linkDB(); - $params = array( - ":userId" => $values['userId'], - ":eventId" => $values['eventId'], - ":kaufdatum" => $values['kaufdatum'], - ":gueltigkeitsdatum" => $values['gueltigkeitsdatum'] - ); - + $sql = "SELECT * FROM Ticket ORDER BY ticketid ASC;"; try { $sth = $pdo->prepare($sql); - $sth->execute($params); + $sth->execute(); + return $sth->fetchAll(\PDO::FETCH_ASSOC); } catch (PDOException $e) { - new \Blog\Library\ErrorMsg("Fehler beim Schreiben der Daten.", $e); + new \Blog\Library\ErrorMsg("Fehler beim Lesen der Tickets.", $e); die; } - - return true; } - public function hasTicket($userId, $eventId) { - $sql = "SELECT * FROM ticket WHERE userId = :userId AND eventId = :eventId"; - + public function buyTicket($data) { $pdo = $this->linkDB(); - $params = array( - ":userId" => $userId, - ":eventId" => $eventId, - ); - + $sql = "INSERT INTO Ticket (userid, eventid, kaufdatum, gültigkeitsdatum) + VALUES (:userid, :eventid, :kaufdatum, :gültigkeitsdatum);"; + $params = [ + ":userid" => $data['userid'], + ":eventid" => $data['eventid'], + ":kaufdatum" => $data['kaufdatum'], + ":gültigkeitsdatum" => $data['gültigkeitsdatum'] + ]; try { $sth = $pdo->prepare($sql); $sth->execute($params); - return $sth->fetchAll(\PDO::FETCH_ASSOC); - + return $pdo->lastInsertId(); } catch (PDOException $e) { - new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e); + new \Blog\Library\ErrorMsg("Fehler beim Kauf des Tickets.", $e); + die; + } + } + + public function hasTicket($userid, $eventid) { + $pdo = $this->linkDB(); + $sql = "SELECT COUNT(*) as count FROM Ticket WHERE userid = :userid AND eventid = :eventid;"; + $params = [ + ":userid" => $userid, + ":eventid" => $eventid + ]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->fetch(\PDO::FETCH_ASSOC); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler bei der Ticketprüfung.", $e); + die; + } + } + + public function deleteTicket($ticketid) { + $pdo = $this->linkDB(); + $sql = "DELETE FROM Ticket WHERE ticketid = :ticketid;"; + $params = [":ticketid" => $ticketid]; + try { + $sth = $pdo->prepare($sql); + $sth->execute($params); + return $sth->rowCount(); + } catch (PDOException $e) { + new \Blog\Library\ErrorMsg("Fehler beim Löschen des Tickets.", $e); die; } } diff --git a/Views/Event/createEvent.phtml b/Views/Event/createEvent.phtml index 93a0db1..b0376d4 100644 --- a/Views/Event/createEvent.phtml +++ b/Views/Event/createEvent.phtml @@ -4,7 +4,7 @@ include dirname(__DIR__).'/header.phtml';

Das Event "" wurde erfolgreich erstellt!

- Weiter + Weiter
diff --git a/Views/Event/deleteEvent.phtml b/Views/Event/deleteEvent.phtml new file mode 100644 index 0000000..4a7ce55 --- /dev/null +++ b/Views/Event/deleteEvent.phtml @@ -0,0 +1,12 @@ + + +
+

Das Event mit der id"" wurde erfolgreich gelöscht!

+ Weiter +
+ + + + \ No newline at end of file diff --git a/Views/Event/updateEvent.phtml b/Views/Event/updateEvent.phtml index 48f2d78..32c1acf 100644 --- a/Views/Event/updateEvent.phtml +++ b/Views/Event/updateEvent.phtml @@ -4,7 +4,7 @@ include dirname(__DIR__).'/header.phtml';

Das Event mit der ID "" wurde erfolgreich bearbeitet!

- Weiter + Weiter
diff --git a/Views/Gutschein/createGutschein.phtml b/Views/Gutschein/createGutschein.phtml new file mode 100644 index 0000000..6d85614 --- /dev/null +++ b/Views/Gutschein/createGutschein.phtml @@ -0,0 +1 @@ +echo "create gutschein" \ No newline at end of file diff --git a/Views/Gutschein/showGutscheine.phtml b/Views/Gutschein/showGutscheine.phtml new file mode 100644 index 0000000..6824976 --- /dev/null +++ b/Views/Gutschein/showGutscheine.phtml @@ -0,0 +1,35 @@ + + +

Alle Gutscheine

+ Neuen Gutschein anlegen + + + + + + + + + + + + + + + + + + + + + + +
CodeRabatt (%)Event-IDGültig bisAktionen
+ Bearbeiten | + Löschen +
+ +

Keine Gutscheine vorhanden.

+ + + \ No newline at end of file diff --git a/Views/Ticket/hasTicket.phtml b/Views/Ticket/hasTicket.phtml deleted file mode 100644 index c076676..0000000 --- a/Views/Ticket/hasTicket.phtml +++ /dev/null @@ -1,11 +0,0 @@ - - -
-

TEST

-
- - - - \ No newline at end of file From cbd7b0f8ccd6bdf856120b09bae3e0c46365f205 Mon Sep 17 00:00:00 2001 From: Karsten Tlotzek Date: Mon, 30 Jun 2025 10:13:36 +0200 Subject: [PATCH 8/8] Spaltennamen angepasst --- bibarts.sql | 62 ++++++++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/bibarts.sql b/bibarts.sql index 9392db8..ce10293 100644 --- a/bibarts.sql +++ b/bibarts.sql @@ -20,7 +20,7 @@ CREATE TABLE User ( userid INT AUTO_INCREMENT PRIMARY KEY, vorname VARCHAR(50), nachname VARCHAR(50), - straße VARCHAR(100), + strasse VARCHAR(100), hausnr VARCHAR(10), postleitzahl VARCHAR(10), ort VARCHAR(50), @@ -34,9 +34,9 @@ CREATE TABLE User ( CREATE TABLE Standort ( standortid INT AUTO_INCREMENT PRIMARY KEY, - straße VARCHAR(100), + strasse VARCHAR(100), hausnr VARCHAR(10), - postleitzahl VARCHAR(10), + plz VARCHAR(10), ort VARCHAR(50), land VARCHAR(50), tel VARCHAR(20), @@ -59,12 +59,12 @@ CREATE TABLE Ausstellung ( CREATE TABLE Ticket ( ticketid INT AUTO_INCREMENT PRIMARY KEY, userid INT, - eventid INT, + ausstellungid INT, kaufdatum DATE, - gültigkeitsdatum DATE, + gueltigkeit DATE, preis DECIMAL(10,2), FOREIGN KEY (userid) REFERENCES User(userid), - FOREIGN KEY (eventid) REFERENCES Ausstellung(austellungid) + FOREIGN KEY (ausstellungid) REFERENCES Ausstellung(austellungid) ); @@ -72,9 +72,9 @@ CREATE TABLE Gutschein ( gutscheinid INT AUTO_INCREMENT PRIMARY KEY, code VARCHAR(50) UNIQUE, rabatt INT CHECK (rabatt BETWEEN 0 AND 100), - eventid INT, - gültigkeit DATE, - FOREIGN KEY (eventid) REFERENCES Ausstellung(austellungid) + ausstellungid INT, + gueltigkeit DATE, + FOREIGN KEY (ausstellungid) REFERENCES Ausstellung(austellungid) ); @@ -87,38 +87,38 @@ CREATE TABLE News ( - -INSERT INTO User (vorname, nachname, straße, hausnr, postleitzahl, ort, land, tel, email, isAdmin, password) +-- User-Daten +INSERT INTO User (vorname, nachname, strasse, hausnr, postleitzahl, ort, land, tel, email, isAdmin, password) VALUES -('Max', 'Muster', 'Musterstraße', '1', '12345', 'Musterstadt', 'Deutschland', '0123456789', 'max@muster.de', FALSE, 'passwort123'), -('Anna', 'Beispiel', 'Beispielweg', '5a', '54321', 'Beispielstadt', 'Deutschland', '0987654321', 'anna@beispiel.de', TRUE, 'adminpass'); + ('Max', 'Muster', 'Musterstraße', '1', '12345', 'Musterstadt', 'Deutschland', '0123456789', 'max@muster.de', FALSE, 'passwort123'), + ('Anna', 'Beispiel', 'Beispielweg', '5a', '54321', 'Beispielstadt', 'Deutschland', '0987654321', 'anna@beispiel.de', TRUE, 'adminpass'); - -INSERT INTO Standort (straße, hausnr, postleitzahl, ort, land, tel, email) +-- Standort-Daten +INSERT INTO Standort (strasse, hausnr, plz, ort, land, tel, email) VALUES -('Galeriestraße', '10', '10115', 'Berlin', 'Deutschland', '030123456', 'kontakt@galerie-berlin.de'), -('Kunstallee', '22b', '50667', 'Köln', 'Deutschland', '0221123456', 'info@kunst-koeln.de'); - + ('Galeriestraße', '10', '10115', 'Berlin', 'Deutschland', '030123456', 'kontakt@galerie-berlin.de'), + ('Kunstallee', '22b', '50667', 'Köln', 'Deutschland', '0221123456', 'info@kunst-koeln.de'); +-- Ausstellung-Daten INSERT INTO Ausstellung (standortid, datum_von, datum_bis, name, beschreibung, max_tickets) VALUES -(1, '2025-07-01', '2025-08-31', 'Moderne Meisterwerke', 'Eine Sammlung moderner Kunstwerke aus Europa.', 200), -(2, '2025-09-10', '2025-10-20', 'Kunst der Antike', 'Ausstellung antiker Skulpturen und Gemälde.', 150); + (1, '2025-07-01', '2025-08-31', 'Moderne Meisterwerke', 'Eine Sammlung moderner Kunstwerke aus Europa.', 200), + (2, '2025-09-10', '2025-10-20', 'Kunst der Antike', 'Ausstellung antiker Skulpturen und Gemälde.', 150); - -INSERT INTO Gutschein (code, rabatt, eventid, gültigkeit) +-- Gutschein-Daten (Spaltennamen korrigiert) +INSERT INTO Gutschein (code, rabatt, ausstellungid, gueltigkeit) VALUES -('SOMMER2025', 15, 1, '2025-08-31'), -('HERBST25', 25, 2, '2025-10-15'); + ('SOMMER2025', 15, 1, '2025-08-31'), + ('HERBST25', 25, 2, '2025-10-15'); - -INSERT INTO Ticket (userid, eventid, kaufdatum, gültigkeitsdatum, preis) +-- Ticket-Daten (Spaltennamen korrigiert) +INSERT INTO Ticket (userid, ausstellungid, kaufdatum, gueltigkeit, preis) VALUES -(1, 1, '2025-06-01', '2025-07-15', 12.50), -(2, 2, '2025-06-05', '2025-09-15', 10.00); - + (1, 1, '2025-06-01', '2025-07-15', 12.50), + (2, 2, '2025-06-05', '2025-09-15', 10.00); +-- News-Daten INSERT INTO News (name, beschreibung, datum) VALUES -('Neuer Standort eröffnet', 'Unsere Galerie in Köln ist jetzt geöffnet!', '2025-06-01'), -('Frühbucher-Rabatt', 'Sichern Sie sich jetzt 15% Rabatt auf unsere Sommerausstellung.', '2025-05-20'); \ No newline at end of file + ('Neuer Standort eröffnet', 'Unsere Galerie in Köln ist jetzt geöffnet!', '2025-06-01'), + ('Frühbucher-Rabatt', 'Sichern Sie sich jetzt 15% Rabatt auf unsere Sommerausstellung.', '2025-05-20'); \ No newline at end of file