<?php declare(strict_types=1); // UTF-8 marker äöüÄÖÜ߀ /** * Class Page for the exercises of the EWA lecture * Demonstrates use of PHP including class and OO. * Implements Zend coding standards. * Generate documentation with Doxygen or phpdoc * * PHP Version 7.4 * * @file Page.php * @package Page Templates * @author Bernhard Kreling, <bernhard.kreling@h-da.de> * @author Ralf Hahn, <ralf.hahn@h-da.de> * @version 3.1 */ /** * This abstract class is a common base class for all * HTML-pages to be created. * It manages access to the database and provides operations * for outputting header and footer of a page. * Specific pages have to inherit from that class. * Each derived class can use these operations for accessing the database * and for creating the generic parts of a HTML-page. * * @author Bernhard Kreling, <bernhard.kreling@h-da.de> * @author Ralf Hahn, <ralf.hahn@h-da.de> */ abstract class Page { // --- ATTRIBUTES --- /** * Reference to the MySQLi-Database that can be used * by all operations of the class or inherited classes. */ protected MySQLi $_database; // --- OPERATIONS --- /** * Connects to DB and stores * the connection in member $_database. * Needs name of DB, user, password. */ protected function __construct() { error_reporting(E_ALL); $host = "localhost"; /********************************************/ // This code switches from the the local installation (XAMPP) to the docker installation if (gethostbyname('mariadb') != "mariadb") { // mariadb is known? $host = "mariadb"; } /********************************************/ $this->_database = new MySQLi($host, "public", "public", "pizzaservice"); if ($this->_database->connect_errno) { throw new Exception("Connect failed: " . $this->_database->connect_errno); } // set charset to UTF8!! if (!$this->_database->set_charset("utf8")) { throw new Exception($this->_database->error); } } public function __destruct() // Closes the DB connection { $this->_database->close(); } /** * Generates the header section of the page. * i.e. starting from the content type up to the body-tag. * Takes care that all strings passed from outside * are converted to safe HTML by htmlspecialchars. * * @param string $title $title is the text to be used as title of the page * @param string $jsFile path to a java script file to be included, default is "" i.e. no java script file * @param bool $autoreload true: auto reload the page every 5 s, false: not auto reload * @return void */ protected function generatePageHeader(string $title = "", string $jsFile = "", bool $autoreload = false):void { $title = htmlspecialchars($title); header("Content-type: text/html; charset=UTF-8"); //-------------------------------- if ($autoreload) { header("Refresh: 10;"); } //------------------------------------- echo <<< HTML <!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{$title}</title> <link rel="stylesheet" href="./CSS/test.css"> </head> <body> HTML; if (is_file($jsFile)) { echo "<script src='{$jsFile}'></script>\n"; } } /** * Outputs the end of the HTML-file i.e. </body> etc. * @return void */ protected function generatePageFooter():void { echo <<< HTML </body> </html> HTML; } /** * Processes the data that comes in via GET or POST. * If every derived page is supposed to do something common * with submitted data do it here. * E.g. checking the settings of PHP that * influence passing the parameters (e.g. magic_quotes). * @return void */ protected function processReceivedData():void { } } // end of class // Zend standard does not like closing php-tag! // PHP doesn't require the closing tag (it is assumed when the file ends). // Not specifying the closing ? > helps to prevent accidents // like additional whitespace which will cause session // initialization to fail ("headers already sent"). //? >