Benutzer-Werkzeuge

Webseiten-Werkzeuge


db:webdatenbanken

Webdatenbanken

Damit in Datenbanken vorgehaltene Informationen für einen normalen Anwender zugänglich werden, benötigt man immer eine Anwendungslogik und eine Präsentationsschicht. Die Präsentationsschicht ist die Webseite, über die mit dem Anwender interagiert wird. In der Anwendungslogik werden Probleme gelöst und es wird entschieden, welche Daten gezeigt oder manipuliert werden.

Voraussetzungen

Datenbankserver

Zur Bereitstellung der Datenbanken kommen spezielle Datenbankserver zum Einsatz, die meist mehrere Benutzer und Datenbanken verwalten können. Für uns bedeutend ist der relationale Open-Source-Datenbankserver MySQL.

Unser Datenbankserver ist erreichbar über http://luo-darmstadt.de/phpMyAdmin. Jede Projektgruppe erhält auf diesem Datenbankserver eine eigene Datenbank und ein eigenes Konto.

Für den Zugriff auf den Server benutzen wir <i>phpMyAdmin</i>. Nach der Anmeldung kann man in seiner Datenbank Tabellen anlegen und mit Daten füllen.

Anwendungslogik

Um eine Anwendungslogik bereitzustellen, benötigen wir eine Programmiersprache. Im Zusammenhang mit MySQL wird oft die Skriptsprache PHP verwendet, da sie einfach zu erlernen und weit verbreitet ist.

Einen Einstieg in PHP bietet das Handbuch auf PHP.net.

Die PHP-Skripte werden auf dem Server ausgeführt und müssen deshalb auch dort vorhanden sein. Zum Übertragen der Skripte setzen wir das SFTP-Protokoll ein, ein sicheres FTP-Protokoll. Mit dem Programm WinSCP kann man eine Verbindung zum Schulserver herstellen.

Nach erfolgreicher Anmeldung kann man seine PHP-Skripte in den Webbereich des Schulservers hochladen.

Präsentationsschicht

Zur Präsentation kommt für das Web die Auszeichnungssprache HTML zum Einsatz. Damit die einzelnen Seiten auch dynamisch verändert werden können, wie wir dies bei Datenbanken benötigen, erweitert man die statischen HTML-Seiten um dynamische Passagen in PHP.

Webserver

Damit der Anwender über das Web auf unsere Präsentationsschicht zugreifen kann, benötigt man einen Webserver. Dieser Webserver sorgt speziell dafür, dass die PHP-Skripte, also Anwendungslogik und dynamischen HTML-Seiten abgearbeitet werden und das Ergebnis die Ausgabe wieder an den Anwender übertragen wird.

Der Zugriff auf die dynamischen Webseiten erfolgt über die Adresse

http://www.luo-darmstadt.de/users/~<benutzername>/<pfad>/<skript>.php

Im Beispiel haben wir die Adresse

http://www.luo-darmstadt.de/users/~inflk2009/loesung/eintrag_verfassen.php

XAMPP

Eine fertige Kombination aus Datenbankserver und Webserver mit einem bereits konfigurierten PHP-Modul bezeichnet man als LAMPP (Linux Apache MySQL PHP Perl) oder WAMPP (Windows Apache MySQL PHP Perl). Apache steht für den „Apache HTTPD“, ein Webserver der Apache Software Foundation und Perl für eine weitere verfügbare Skriptsprache, auf die an dieser Stelle nicht weiter eingegangen werden soll.

Diese Kombinationen bietet das XAMPP-Projekt zum Download an.

Editor

Zum Bearbeiten von PHP-Dateien empfiehlt sich ein Editor der Syntaxhighlighting unterstützt. Ein guter, kostenloser Editor ist bspw. Notepad++. Zur fortgeschrittenen Nutzung und besonders für große Projekte existieren auch die Eclipse-basierenden PHP Development Tools.

PHP

PHP ähnelt von seiner Syntax her der Programmiersprache C, an die sich auch Java anlehnt. PHP ist jedoch im Gegensatz zu Java noch sehr stark prozedural und weniger objektorientiert ausgelegt. Zum Konzept gehört außerdem eine schwache, dynamische und implizite Typisierung von Variablen.

Ein Vergleich zwischen der einfachen Ausgabe einer Multiplikation und der Länge eines Strings verdeutlicht diese beiden Aspekte.

Beispiel: Typisierung von Variablen

PHP

 <?php
 $a = 2; // wird automatisch als Integer angesehen
 $b = "2"; // wird automatisch als String angesehen
 $c = $a * $b // $c = 4
 
 $d = "Hallo Welt";
 echo strlen($d); // gibt die Länge eines Strings aus, dazu wird die Prozedur strlen verwendet
 ?>

Java

 public class Beispiel {
   public static void main(String[] args) {
     int a, c;
     String b;
 
     a = 2;
     b = "2";
     c = a * Integer.parseInt(b); // ein Vorgehen wie bei PHP würde zu einer Exception führen
 
     String d;
     d = "Hallo Welt";
     System.out.println(d.length); 
     // gibt die Länge eines Strings aus, dazu wird auf die Eigenschaft 
     // length des String-Objekts zurückgegriffen
   }
 }

Funktionen in PHP

Funktionen in PHP und in Java sind sich sehr ähnlich. Anders als in Java müssen wir in PHP allerdings keinen Rückgabewert definieren. Zudem steht vor dem Funktionsnamen in PHP immer „function“.

Java

 int xy() {
   return 1;
 }

PHP

 function xy(){
   return 1;
 }

Zugriff auf Variablen innerhalb von Funktionen

Wenn man in PHP eine neue Variable einführt und daraufhin in einer Funktion auf diese zugreifen möchte, so kann das häufig zu Problemen führen. Schuld daran ist, dass die Funktion diese Variable nicht „kennt“, man muss sie ihr erst bekannt machen indem man sie mit global $meineVariable; der Funktion bekannt macht. Ausgenommen davon sind „superglobale“ Variablen wie zB. $_POST und $_GET.

 $meinString = "hallo";
 echoMeinString();
 
 function echoMeinString() {
   global $meinString;
   echo "Das ist meinString: ".$meinString;
 }

Zugriff auf GET/POST

Einer der wichtigsten Aspekte einer dynamischen Webseite ist die Interaktion mit dem Anwender. Die einzige Möglichkeit des Anwenders Informationen an das PHP-Skript zu übermitteln, besteht in den HTTP-Request-Methoden GET und POST. Bei beiden Methoden können mehrere Schlüssel-Wertpaare an den Webserver übertragen werden, die dann aus dem PHP-Skript abrufbar sind. Bei GET werden die Daten in der URL (http://www.luo-darmstadt.de?schlüssel=wert&schlüssel2=wert), bei POST in den Header-Informationen, also für den Anwender unsichtbar, transportiert. Die POST-Methode ist aus HTML-Dokumenten nur über Formulare nutzbar.

Der Zugriff in PHP erfolgt über die globalen Variablen $_GET und $_POST, welche ein assoziatives Array darstellen. Auf den Wert des Schlüssels „name“ greifen wir beispielsweise über den Ausdruck $_GET[„name“], wenn dieser per GET übermittelt wurde, zu.

Beispiel: Umgang mit einem GET-Parameter

Hier ein Beispiel, wie man per GET übertragene Daten auswerten kann:

 <?php
 $besucherName = $_GET["Name"];
 
 if (empty($besucherName)) {
  echo "Bitte gib einen Namen an!";
 } else {
  echo "Hallo " . $besucherName . "<br />";
  echo "Ihr Name hat " . strlen($besucherName) . " Buchstaben.";
 }
 ?>

$_POST

Das selbe Beispiel kann man auch für die POST Methode verwenden. Hierzu muss man nur die erste Zeile des obigen Codes folgendermaßen umändern:

 $besucherName = $_POST["Name"];
 ...

$_REQUEST

Weiß man nicht, ob die gesendeten Daten über GET oder POST verfügbar sind, so kann man auch $_REQUEST benutzen was die Daten aus beiden Methoden enthält.

 $besucherName = $_REQUEST["Name"];
 ...

Fehlersuche

Für die Fehlersuche kann man die Ausgabeanweisung echo benutzen. Beispiele:

  echo $Anzahl;   // gibt den Wert der Variablen $Anzahl aus.
  echo "Anzahl: " . $Anzahl;  // beschriftet die Ausgabe der Anzahl

Detailliertere Informationen zu einer Variablen erhält man mit var_dump().

  var_dump($Anzahl);

Die Variablen $_GET, $_POST, $_REQUEST, usw. sind Felder (arrays), deren Inhalt man sich auch mit print_r() ausgeben lassen kann. Beispiel:

print_r($_GET);

Zugriff auf eine MySQL-Datenbank

PHP stellt derzeit drei Schnittstellen zum Zugriff auf MySQL/MariaDB-Datenbanken bereit:

  1. mysql - eine veraltete prozedurale Schnittstelle, nicht mehr in PHP 7 vorhanden
  2. mysqli - eine objektorientierte Schnittstelle ab PHP 5.0
  3. PDO_MySQL - eine streng objektorientierte Schnittstelle ab PHP 5.1

Der MySQL-Datenbankserver pflegt eine eigene Benutzer- und Rechteverwaltung. Wir müssen uns also zunächst verbinden und authentifizieren. Dazu erzeugen wir ein Objekt der mysqli-Klasse, dessen Konstruktor wir den Datenbankserver, den Benutzernamen, das Passwort und die Datenbank als Parameter übergeben:

  $mysqli = @new mysqli($Datenbankserver, $Benutzer, $Passwort, $Datenbank);

Über das $mysqli-Objekt können wir jetzt SQL Abfragen durchführen.

 $result = $mysqli->query("SELECT * FROM gaestebuch");
 
 while ($entry = mysql_fetch_assoc($result)) {
   echo "Eintrag von " . $entry["absendername"];
 }
 

Aufgaben

Ziel der u.g. Aufgaben ist ein sehr einfaches Gästebuch auf PHP-Basis mit Nutzung einer MySQL-Datenbank zum Speichern der Einträge.

Aufgabe 1
Nachdem der Benutzer das Formular abgeschickt hat, soll überprüft werden, ob er alle Formularfelder auch ausgefüllt hat. Ist dies der Fall, werden ihm seine Eingaben zur Bestätigung ausgegeben. Andernfalls bekommt er eine Fehlermeldung angezeigt.

Folgende Informationen könnten hierfür nützlich sein:

Aufgabe 2
Bestehende Einträge anzuzeigen ist eine der Hauptaufgaben eines Gästebuchs. Die Einträge sollen nun auf der Startseite aufgelistet werden. Wir verzichten hierbei darauf, die Einträge auf mehrere Seiten zu verteilen, alle Einträge sollen auf einer einzelnen Seite gezeigt werden. (eintraege.php)

db/webdatenbanken.txt · Zuletzt geändert: 2016/11/22 20:44 von roehner