faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:probeprojekt:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:probeprojekt:start [09.06.2021 17:54] sbelfaecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:probeprojekt:start [22.05.2023 16:25] (aktuell) – [Aufgaben] Frank Schiebel
Zeile 1: Zeile 1:
 ====== Probeprojekt: Adresslistenabfrage ====== ====== Probeprojekt: Adresslistenabfrage ======
 +
 +===== Vertiefung Datenbank-Klasse =====
 +
 +Zunächst machen wir uns noch ein paar Gedanken darüber, wie wir die Datenbank Klasse erweitern können, so dass diese nicht nur "Objekte mit Datenbankverbindung" instanziieren kann, sondern mit dieser Datenbankverbindung auch noch was anfangen kann, beispielsweise eine Abfrage ausführen.
 +
 +Beispielsweise könnte man eine "Getter"-Methode implementieren, die das Datenbankhandle zurückliefert, so dass man dieses in anderen Klassen (die es noch nicht gibt) weiter verwenden könnte. Eventuell wäre aber auch Vererbung besser geeignet, das überlegen wir uns zu gegebener Zeit - schaden tuts ja erst man nichts? Also los...
 +
 +Hilfreich ist vielleicht auch ein Attribut, das die abzufragende Tabelle(n) beinhaltet, ein passender Setter wäre da auch günstig.
 +
 +
 +
 +<code php>
 +class mysqldb {
 +
 +    /**
 +     * Connect to db, set connection attribute to pdo object
 +     *
 +     * @param string        $dbusername   DB username
 +     * @param string        $dbpassword   DB password
 +     * @param string        $dbname       Database to connect to
 +     * @param string        $host         Database host to connect to (optional)
 +     */
 +    function __construct($dbusername, $dbpassword, $dbname, $host="localhost" ) {
 +
 +    try {
 +        $pdo = new PDO("mysql:host=$host;dbname=$dbname", "$dbusername", "$dbpassword");
 +        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 +
 +    } catch ( PDOException $e ) {
 +        echo 'Verbindung zur Datenbank fehlgeschlagen: ' . $e->getMessage();
 +        exit();
 +    }
 +
 +    $this->connection = $pdo;
 +
 +    }
 +    
 +    /**
 +    * Get pdo object for usage in other classes
 +    */
 +    function getConnection() {
 +        return $this->connection;
 +    }
 +    
 +    /**
 +    * Set attribute query table to given value
 +    *
 +    * @param string        $tables   Tables
 +    */
 +    function setQueryTable($tables) {
 +        $this->qtable = $tables;
 +    }
 +    
 +    /**
 +     * Make query, return array with results
 +     *
 +     * @param string        $searchnane  Name to search
 +     *
 +     * @return array        Query result 
 +     */
 +    function searchName($searchname) {
 +        $statement= $this->connection->prepare("SELECT * FROM $this->qtable WHERE Nachname LIKE :nachname");
 +        //$statement->execute(array($table,$searchname)); 
 +        $statement->execute(array('nachname' => "%$searchname%")); 
 +        
 +        // Besonderheit, weil wir ein Array wollen - Kapselung!
 +        // $statement->fetch() liefert das Ergebnis der Abfrage zeilenweise
 +        // https://www.php.net/manual/de/pdostatement.fetch.php
 +        // Für uns ist es meist besser ein assoziatives Array 
 +        // mit den Ergebnissen zurückzugeben das dann gerendert werden
 +        // kann
 +        // Leeres Array definieren
 +        $resultArray = array();
 +        while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
 +            // Die Zeilen an das Array anhängen (Push)
 +            $resultArray[] = $row;
 +        }
 +
 +        // For Debugging
 +        // print_r($resultArray);
 +        
 +        // Ergebnisarray zurückgeben
 +        return $resultArray;
 +    }
 +</code>
 +
 +===== Aufgaben =====
 +
  
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
Zeile 18: Zeile 106:
 === (A2) === === (A2) ===
  
-Erweitere dein Plugin um ein Formular, mit dem ein neuer Datensatz an die Tabelle angefügt werden kann. +Ergänze bei deinem Plugin ein Formular, mit dem ein neuer Datensatz an die Tabelle angefügt werden kann. Erweitere deine DB Klasse um eine entsprechende Methode. Hinweise zur Datenmanipulation mit Prepared Statements findest du z.B. [[https://www.php-einfach.de/mysql-tutorial/daten-einfuegen/|hier]]
  
 (1) Welches der Formulare angezeigt werden soll, kann z.B. durch den Parameter nach dem ''>'' gesteuert werden: (1) Welches der Formulare angezeigt werden soll, kann z.B. durch den Parameter nach dem ''>'' gesteuert werden:
Zeile 26: Zeile 114:
      
 (2) Beachte Sicherheitsaspekte und führe eine Eingabeüberprüfung durch, bevor du die Eingabedaten an deine Abfrage übergibst. (2) Beachte Sicherheitsaspekte und führe eine Eingabeüberprüfung durch, bevor du die Eingabedaten an deine Abfrage übergibst.
 +
 +
 +----
 +Du hängst fest? -> [[.hilfestellung|Hilfestellung]] 
 +
  • faecher/informatik/oberstufe/datenbanken/projekt/dokuwiki_plugin/probeprojekt/start.1623261270.txt.gz
  • Zuletzt geändert: 09.06.2021 17:54
  • von sbel