Wie man eine Access-Datenbank ins Internet bringt (5)

Was wir bis jetzt gebaut haben, könnte man auch als rudimentäres Frontend bezeichnen. Deine Seitenbesucher klopfen vorne (Front) auf deiner Seite an und können Bücher suchen und finden. Was aber, wenn du gern in der Lage wärst, auch mal ein Buch aus der Datenbank wieder zu löschen? Oder, wenn du einen Fehler in einem Feld bemerkt hast, den Bucheintrag zu korrigieren, das heißt zu ändern? Oder, zum dritten, was, wenn ein neues Buch hinzu soll, also die Datenbank um einen Datensatz erweitert werden soll? Das sind Backend-Aufgaben und deswegen werden wir in diesem Blog-Teil (5) ein kleines Backend bauen.

Der erste Schritt für unser Backend ist, einen separaten Ordner auf dem Webspace anzulegen. Dieser Ordner soll die Backend-Dateien aufnehmen. Und weil die Backend-Arbeit quasi eine datenbank-administrative Tätigkeit ist, nennen wir den Ordner „admin“. Öffne jetzt dein FTP-Programm, verbinde dich in der beschriebenen Weise mit deinem Webspace und steuere den Unterordner „meine_datenbank“ an. Im Unterordner angekommen, machst du einen Rechtsklick und wählst „Verzeichnis erstellen“. Nenne den Unterordner (der ein Unterunterordner ist) „admin“. Hier hinein werden wir später, wenn fertig, die PHP-Skripte action.php, admin.php und change.php hochladen. Diese Dreierkombi wird leisten, was gerade besprochen wurde, z.B. wird sie neue Bücher anlegen können.

Weil aber Sicherheit immer vorgeht, beginnen wir auch damit und spendieren unserem neuen Admin-Bereich als erstes einen .htaccess-Schutz. Ja, der Punkt vor dem „h“ ist schon korrekt. Das Verfahren dazu solltest du beherrschen, denn wir haben schon den Ordner „meine_datenbank“ geschützt. Nein? 🙂 Na gut, dann wiederhole ich es für dich, wenn auch kürzer. In Schaubildern zeige ich dir erst die Ordnerstruktur, wie ich sie meine.

Sieh als erstes den Ordner „admin“ im Ordner „meine_datenbank“ Bild 5-1 Sehr schön zu sehen hier auch die .htaccess und die .htpasswd. Diese beiden schützen den Ordner „meine_datenbank“.

Ordnerstruktur01

Bild 5-1

Sieh danach in den Ordner „admin“ hinein. Bild 5-2

Ordnerstruktur03

Bild 5-2

Sehr schön ist hier zu sehen, wie auch dieser Ordner noch mal mit einer .htaccess und einer .htpasswd geschützt ist. Was ist der Sinn dahinter? Der Sinn dahinter ist, dass ein Besucher deiner Seite bis zur „index.html“ gelangt und von ihr willkommen geheißen wird. Will er zur Datenbank, braucht er schon von dir die Login-Daten. Aber nur du selber sollst ins Backend gelangen können. Um das zu tun, gibst du in die Adresszeile deiner Browsers ein:

http://www.willi-heinz.de/meine_datenbank/admin/admin.php

Wobei willi-heinz für deine Webpräsenz steht, deine gemietete Domain.

Das System soll dich dann nach einem zweiten Login fragen, der den Zugang zum Backend gewährt. Diesen Login bauen wir jetzt, das heißt, wir bringen die .htaccess und die .htpasswd in den Ordner admin.

Wie über den letzten Schaubildern versprochen, wiederhole ich jetzt noch mal kurz das Schutz-Verfahren für dich: Logge dich am Portal deines Anbieters ein. Navigiere zum von dir gemieteten Paket. Suche den Bereich, auf dem die Software für Einstellungen an deinem Webspace läuft. Bei Greatnet und Alfahosting heißt sie z.B. Confixx.

Confixx-01

Bild 5-3

In Bild 5-3 erkennst du, wie das aussehen kann. „Jetzt in Confixx einloggen“ führt zur Software, die für Einstellungen auf deinem Webspace da ist. Klicke das. Dann suche einen Bereich, der z.B. „Tools“ heißt und darin einen Bereich, der „Passwortschutz“ oder so ähnlich heißt. Navigiere durch Linkklicken zum Unterunterordner „…/meine_datenbank/admin“. Schütze den Ordner „admin“, indem du auf „schützen“ klickst. Bild 5-4

Passwortschutz_htaccess02

Bild 5-4

Vergib eine sichere Kombination aus Benutzername und Passwort. Diese sind jetzt nur für dich, denn nur du sollst Backend-Zugang haben. Logge dich aus. Warte 15 Minuten, danach hat das Portal deine Befehle sicherlich umgesetzt. Bleib in dieser Zeit auch mit deinem FTP-Programm offline. Geh dann mit deinem FTP-Programm wieder online. Im Idealfall sollte der Ordner „admin“ jetzt aussehen, wie Bild 5-2.

So, der Schutz für den Ordner „admin“ bzw. dein neues Backend wäre geschafft. Dann können wir uns jetzt ja in aller Ruhe mit den drei neuen PHP-Skripten bzw. den Dateien admin.php, action.php und change.php auseinandersetzen.

Als erstes liefere ich dir das Skript admin.php in seiner ganzen Länge und Pracht. Hab keine Angst! Wir gehen wieder in kleinen und kleinsten Schritten vor, damit du gut folgen kannst.


<?php
// No Cache
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// MySQL Zugangsdaten
$database="XXXXXXX";
$host="localhost";
$user="XXXXXXX";
$password="XXXXXXX";
$table="BUECHER_GEL";

// Verbindung zur Datenbank herstellen
mysql_connect($host,$user,$password);
mysql_select_db($database) or die( "Unable to select database");

// POST Variable in eine eigene Variable ueberfuehren.
$rawdata = $_POST;

// Abfrage aller verfuegbaren Einrichtungen
$query = "select id,Titel from $table ORDER by Titel";

// und die Abfrage starten
$result=mysql_query($query);

// Auf Fehler pruefen
if (!$result)
{
$message  = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query:   ' . $query;
die($message);
}

// HTML "Kopf"
echo '
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Buecher Admin GUI</title>
</head>
<body>
<form action = "action.php" method = "post">
<p>
<fieldset>
<legend>Buecher</legend>
<table>
';

// Ergebnis liefern, Ausgabe als HTML Tabelle
while ($row = mysql_fetch_assoc($result))
{
$id = $row['id'];
$Titel = $row['Titel'];

echo "<tr>";
echo "<td><input type=radio name=\"id\" value=\"$id\" /></td>";
echo "<td>$Titel</td>";
echo "</tr>";

}

// HTML sauber wieder schliessen
echo '
</table>
</fieldset>
<p>
<fieldset>
<legend>Aktion?</legend>
<label> <input type=radio name=action value="delete"> DELETE | </label>
<label> <input type=radio name=action value="modify"> MODIFY | </label>
<label> <input type=radio name=action value="view">   VIEW   | </label>
<label> <input type=radio name=action value="create"> CREATE  </label>
</fieldset>

<p><input type="submit" />
<input type="reset" />
</p>
</form>

</body>
</html>
';
// Verbindung schliessen
mysql_close();
?>

Benutze wieder den Quer-Scrollbalken, um bis ans Ende der Zeilen sehen zu können. Markiere den ganzen Code hier im Blog. Wähle „kopieren“ oder drücke STRG+C. Kreiere mit Notepad++ oder wie dein Editor heißt, eine admin.php. Füge den Code mit „einfügen“ oder STRG+V in das neue Skript ein. Speichere. Genieße die Aussicht des Syntaxhighlightings mit verschiedenfarbigen Elementen.

Kommen wir zur Erklärung des Codes. Zeile 1 beinhaltet wieder ein öffnendes

<?php

Alle PHP-Skripte beginnen so.

// No Cache
header(„Cache-Control: no-cache, must-revalidate“);
header(„Expires: Mon, 26 Jul 1997 05:00:00 GMT“);

Diese Zeilen bewirken, dass der Browser die Seite nicht zwischenspeichert, da das Ablaufdatum auf jeden Fall in der Vergangenheit liegt. Anders herum könntest du so den Browser dazu bewegen, bestimmte Seiten bzw. Inhalte länger zu speichern. Das macht bei großen Portalen Sinn, die damit eine Menge Datenvolumen einsparen.

Als nächstes stehen im Skript die Zugangsdaten zur MySQL-Datenbank. Das Verfahren kennst du schon; es wurde in diesem Blog bereits erläutert. Kurze Wiederholung: Folgende Zugangsdaten benötigt der Apache-Server.

  1. Name der Datenbank
  2. Host
  3. Benutzername
  4. Passwort
  5. Tabellenname

Im Skript selber, das du hier im Blog siehst, sind anstelle der Zugangsdaten sieben Xe gepostet. Ich säubere geposteten Code immer von verräterischen Elementen. Schlag in diesem Blog weiter oben nach, wenn du dir nicht (mehr) sicher bist, was diese Zugangsdaten sind und bedeuten.

Als nächstes im Skript:

// Verbindung zur Datenbank herstellen
mysql_connect($host,$user,$password);
mysql_select_db($database) or die( „Unable to select database“);

mysql_connect und mysql_select_db sind PHP-Funktionen, die als Parameter die Zugangsdaten erwarten und dann die Verbindung zur Datenbank herstellen.

Dann:

// POST Variable in eine eigene Variable ueberfuehren.
$rawdata = $_POST;

Hier wird alles, was per POST-Methode an das Skript übergeben wurde, in die Variable $rawdata überführt. Momentan allerdings ist das nichts. Dieser Code-Abschnitt ist an dieser Stelle überflüssig.

Es folgt:

// Abfrage aller verfuegbaren Einrichtungen
$query = „select id, Titel from $table ORDER by Titel“;

Hier wird die Variable $query mit einem String belegt. Dieser String enthält eine SQL-Abfrage. Über SQL (Structured Query Language) haben wir in diesem Blog schon gesprochen. Es ist dies eine extra Sprache zur Abfrage von SQL-Datenbanken. Was bedeutet dieser SQL-String bzw. -Befehl? Er bedeutet versprachlicht:

Wähle aus der Datenbank die Felder id und Titel aus der Tabelle BUECHER_GEL und ordne sie alphabetisch nach Titel. Das Skript admin.php hat die Aufgabe, alle Bücher anzuzeigen und dem Datenbank-Administrator, also dir, die Optionen

  1. Löschen (DELETE)
  2. Modifizieren/aktualisieren (MODIFY)
  3. Angucken (VIEW)
  4. Erzeugen (CREATE)

zu geben. Der oben angegebene SQL-Befehl wird dazu als erster Schritt gebraucht.

Im Skript heißt es als nächstes:

// und die Abfrage starten
$result=mysql_query($query);

// Auf Fehler pruefen
if (!$result)
{
$message  = ‚Invalid query: ‚ . mysql_error() . „\n“;
$message .= ‚Whole query:   ‚ . $query;
die($message);
}

Die Abfrage wird ausgeführt und das Ergebnis gleichzeitig in der Variablen $result gespeichert. Es folgt eine IF-Struktur, die dafür sorgt, dass, wenn hierbei etwas schiefgeht, wir teilweise erfahren, was schiefgegangen ist.

Übrigens bedeuten zwei Slashs am Anfang, dass es sich um eine Kommentarzeile handelt, die vom Parser/Interpreter/Apache-Server nicht interpretiert wird.

Als nächstes wird vom Skript (wir sind immer noch im admin.php) ein HTML-Kopf gebaut. Damit der PHP-Teil des Skripts nicht zuerst mit

?>

geschlossen werden muss, hilft man sich hier mit einem

echo ‚

also dem PHP-Ausgabebefehl und einem einfachen Anführungszeichen. Du findest es auf deiner PC-Tastatur, indem du UMSCHALT+# drückst. Der HTML-Teil kann beginnen. Dessen DOCTYPE-Unter-Teil kennst du schon zur Genüge aus diesem Blog. <html> und <head> leiten in üblicher Weise ein. Der im Browsertab anzuzeigende Titel ist „Buecher Admin GUI“. GUI steht dabei für Graphical User Interface, das heißt grafische Benutzerschnittstelle; nichts anderes ist nämlich unsere Datenbankpräsenz: Du als Datenbank-Administrator und Backend-Nutzer kann nachher schon rein optisch die Datenbank bedienen. Interessant ist die Zeile

<form action = „action.php“ method = „post“>

Was passiert hier? Antwort: Es wird ein Formular eingeleitet, in das deine Seitenbesucher später etwas eintragen können. Mit der Methode POST werden die vom Datenbank-Administrator und Backend-Nutzer, also dir, eingetragenen Daten an eine action.php gesendet. Danach werden mit

<fieldset>

die Elemente des Formulars besser gruppiert. Außerdem wird mit

<legend>

der Formularelementgruppe noch eine Überschrift verpasst: „Buecher“. Außerdem wird noch eine Tabelle gestartet <table>.

Damit du besser verstehen kannst, was hier im Code alles geschieht, zeige ich dir jetzt einen Ausschnitt dessen, was die admin.php im Browser anzeigen wird Bild 5-5:

var_dump-01

Bild 5-5

Die Kreischen sind sogenannte Radio-Buttons (runde Knöpfe). Alle 196 Bücher werden angezeigt, eins kann ausgewählt werden. Und dann noch vier Radio-Buttons für die gewünschte Aktion. Löschen? Modifizieren/aktualisieren? Angucken? Erzeugen? Eine Aktion kann in Verbindung mit dem Buch ausgewählt werden. Nie mehr, als ein Buch. Nie mehr, als eine Aktion mit diesem Buch.

Doch zurück zum Code. Der HTML-Teil wird mit

‚;

abgeschlossen. Das ist das beendende einfache Anführungszeichen und das den PHP-Befehl beendende Semikolon. So! 🙂

Du erinnerst dich? Wir haben in $result das Abfrage-Ergebnis von

select id, Titel from $table ORDER by Titel

also die Buch-ID und den Titel. Indes ist $result nicht etwa ein einfaches Array, sondern ein Objekt. Und als solches kann es auch nur mit

while ($row = mysql_fetch_assoc($result))
{
$id             = $row[‚id‘];
$Titel  = $row[‚Titel‘];

echo „<tr>“;
echo „<td><input type=radio name=\“id\“ value=\“$id\“ /></td>“;
echo „<td>$Titel</td>“;
echo „</tr>“;

}

ausgelesen werden. Du erinnerst dich wieder? Eine While-Schleife. Sie sagt versprachlicht: Solange du, Parser/Interpreter/Apache-Webserver, Zeilen aus dem Objekt herausholen kannst (fetch), gib sie aus in Verbindung mit einem Radio-Button namens id und weise dem Wert des Radio-Buttons die id zu. Dann schreibe daneben den Buchtitel des aktuellen Datensatzes bzw. der aktuellen Objektzeile. Die Schleife öffnet außerdem bei jedem Durchlauf eine Tabellenreihe <tr>. Dann wird bei jedem Durchlauf als Tabledata <td> ausgegeben: Der Radio-Button mit dem Namen id und der zur jeweiligen id gehörende Buch-Titel. Beide Tabellendaten werden an ihrem Ende wieder geschlossen </td> </td>.  Am Ende eines Schleifendurchlaufs wird auch die Tabellenreihe wieder geschlossen </tr>. Und das macht die Schleife jetzt 196 mal, nämlich für jedes Buch einmal.

Zum Ende dieses Skripts admin.php werden noch die vier Aktions-Radio-Buttons ausgegeben. Sie haben alle den Namen action (sie gehören ja auch zusammen) und die vier Werte delete, modify, view und create. Dann müssen noch Schaltflächen zum Formularabsenden und zum Zurücksetzen bei Usertippfehlern gemacht werden:

<input type=“submit“ />
<input type=“reset“ />

Dann wird so einiges geschlossen:

</p>
</form>
</body>
</html>
‚;
mysql_close();
?>

Der Absatz (Paragraph), das Formular, der HTML-Körper des HTML-Dokuments, das HTML-Dokument, der HTML-Teil, die MySQL-Verbindung und das PHP-Skript. Fertig! 🙂 Du hast admin.php begriffen. Wenn nein, wie immer: googeln, Foren, hier kommentieren.

Navigiere nun bitte zum nächsten Eintrag von streethawk68: Wie man eine Access-Datenbank ins Internet bringt (6)

 

Advertisements

Über streethawk68

43 years old IT-Fan
Dieser Beitrag wurde unter Uncategorized abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s