Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step02:start [20.06.2021 15:02] – angelegt sbel | faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step02:start [24.06.2021 09:42] (aktuell) – sbel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Neue Klassen mit Datenbankzugriff ====== | ====== Neue Klassen mit Datenbankzugriff ====== | ||
+ | Wir wollen unserem Projekt nun weitere Klassen hinzufügen, | ||
+ | |||
+ | Um dieses Ziel zu erreichen, // | ||
+ | |||
+ | ===== Die neue DB Klasse ===== | ||
+ | |||
+ | Passe die Datenbank Klasse in der Datei '' | ||
+ | |||
+ | <code php> | ||
+ | class mysqldb { | ||
+ | |||
+ | static public $connection = null; | ||
+ | private $dbobject; | ||
+ | |||
+ | /** | ||
+ | * Constructor - connect to db, set handle attribute | ||
+ | * | ||
+ | * @param string | ||
+ | * @param string | ||
+ | * @param string | ||
+ | * @param string | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | private function __construct($dbusername, | ||
+ | |||
+ | try { | ||
+ | self:: | ||
+ | self:: | ||
+ | |||
+ | } catch ( PDOException $e ) { | ||
+ | echo ' | ||
+ | exit(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | public static function getConnection($dbusername, | ||
+ | // Wenn das Objekt noch keine PDO-Instanz hat | ||
+ | // wird eine erzeugt | ||
+ | if(self:: | ||
+ | $dbobject = new mysqldb($dbusername, | ||
+ | } | ||
+ | |||
+ | //Und das PDO-Objekt zurückgeben | ||
+ | | ||
+ | } | ||
+ | | ||
+ | // Das Klonen dieser Instanz verhindern. | ||
+ | private final function __clone () {} | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Anmerkungen: | ||
+ | |||
+ | * Die Schreibweise mit dem Doppel-Doppelpunkt ermöglicht den Zugriff auf statische Methoden und Felder, ohne ein Objekt der Klasse zu besitzen. Das benutzen wir, um in weiteren Klassen ein Datenbank-Handle zu erhalten. | ||
+ | * Die Klasse selbst ist so konstruiert, | ||
+ | * Außerdem verhindern wir, dass die Instanz geklont werden kann. | ||
+ | |||
+ | ===== Benutzer ===== | ||
+ | |||
+ | Nun wenden wir uns der Benutzer-Klasse zu. Diese hat zunächst vor allem die Aufgabe, zu überprüfen, | ||
+ | |||
+ | Erstelle im Unterverzeichnis '' | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | |||
+ | class bloguser { | ||
+ | |||
+ | protected $db; // Das DB-Handle | ||
+ | |||
+ | |||
+ | // | ||
+ | public function __construct ($dbusername, | ||
+ | { | ||
+ | // PDO Connection erzeugen/ | ||
+ | // Objektattribut " | ||
+ | | ||
+ | } | ||
+ | | ||
+ | public function checkBlogUser ($dwusername) { | ||
+ | print " | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | Das ganze kann man dann etwa so in der '' | ||
+ | |||
+ | <code php> | ||
+ | [...] | ||
+ | public function render($mode, | ||
+ | { | ||
+ | // Wir rendern nur HTML, sonst nix! | ||
+ | if ($mode !== ' | ||
+ | return false; | ||
+ | } | ||
+ | |||
+ | // Breche die Verarbeitung ab, wenn der Benutzer nicht angemeldet ist. | ||
+ | if ( ! isset($_SERVER[' | ||
+ | $renderer-> | ||
+ | return true; | ||
+ | } | ||
+ | // get settings | ||
+ | $dbusername = $this-> | ||
+ | $dbname = $this-> | ||
+ | $dbhost = $this-> | ||
+ | $dbpasswd = $this-> | ||
+ | // Create bloguser Object | ||
+ | $bloguser = new bloguser($dbusername, | ||
+ | // Prüfe, ob es den angemeldeten Benutzer schon in der DB gibt, lege ihn an wenn | ||
+ | // nicht. | ||
+ | $bloguser-> | ||
+ | |||
+ | [...] | ||
+ | </ | ||
+ | |||
+ | ==== Aufgaben ==== | ||
+ | |||
+ | |||
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | Füge die Codebestandteile von oben so in dein Projekt ein, dass diese dort funktionieren. Als angemeldeter Benutzer solltest du also die Ausgabe erhalten, dass es den Benutzer noch nicht gibt und dieser angelegt werden sollte. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | Ergänze die Klasse '' | ||
+ | |||
+ | Implementiere in der Methode '' | ||
+ | |||
+ | ++++ Hilfe Stufe 1 | | ||
+ | <code php> | ||
+ | public function checkBlogUser ($dwusername) { | ||
+ | print " | ||
+ | |||
+ | // Datenbankabfrage wie bisher, das DBO Handle ist in $this-> | ||
+ | // $statement= $this-> | ||
+ | // $statement-> | ||
+ | // $treffer = $statement-> | ||
+ | // (Erklärung: | ||
+ | / versuchen es zu speichern. Wenn es das nullte Element nicht gibt, ist | ||
+ | // $treffer nicht gesetzt, das kann man mit ' | ||
+ | | ||
+ | // TODO: Abfrage ergänzen, um zu prüfen obs den Benutzer gibt | ||
+ | | ||
+ | if ( ! isset($treffer) ) { | ||
+ | print "Nein, nicht gefunden, muss angelegt werden."; | ||
+ | // TODO: Abfrage, die den User anlegt. | ||
+ | } | ||
+ | |||
+ | // Wert der Felder setzen | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ++++ Hilfe Stufe 2 | | ||
+ | <code php> | ||
+ | public function checkBlogUser ($dwusername) { | ||
+ | print " | ||
+ | |||
+ | $statement= $this-> | ||
+ | $statement-> | ||
+ | $treffer = $statement-> | ||
+ | | ||
+ | if ( ! isset($treffer) ) { | ||
+ | print "Nein, nicht gefunden, muss angelegt werden."; | ||
+ | // TODO: Insert Statement vorbereiten und ausführen | ||
+ | // $statement= $this-> | ||
+ | // $statement-> | ||
+ | |||
+ | // TODO: Nochmal die ID abfragen (die es jetzt hoffentlich gibt) | ||
+ | // .... | ||
+ | $treffer = $statement-> | ||
+ | } | ||
+ | |||
+ | // Wert der Felder setzen | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | Ergänze eine Getter-Methode, | ||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A3) === | ||
+ | |||
+ | Verifiziere, | ||
+ | |||
+ | Lege weitere Benutzer in DokuWiki an und prüfe, ob diese ebenfalls angelegt werden. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | [[{}..: | ||