Administratorfunktionen für eine Homepage, die mit php und MySQL aufgebaut ist.


Zur Zeit aktiv sind die Programme, die man mit dem Menü "Administrator Menü" aufrufen kann. Dieses Menü wurde deshalb gemacht, damit verschiedene Personen, die nur einen Teil der Homepage pflegen, einen Zugang zu "ihren" Daten haben.
Nachdem das System Musterhomepage mit PHP und MySQL eine Demonstrationsversion ist, entspricht natürlich dieses Administratormenü nicht der evt. kommenden Production-Version. Diese Demonstrationsversion steht auf meiner Homepage (Heinz-Wember.de), deshalb sind hier auch nur einige wenige Datenbanken für dieses System erstellt worden, damit man demonstrieren kann, wie es in Production laufen könnte. In Production wird es wohl ca 10 Datenbanken geben, die jeweils von einer (bzw. zwei) Personen einer Abteilung gepflegt werden z.B. Bergsteigerabteilung, Skiabteilung, Seniorenabteilung, Ausbildung, Geschäftsstelle etc. Diese Demonstrationsdatenbank hat nur die Datenbanken hpentw , TEST, ski, buecherei und huetten.
Die DB hpentw enthält also sehr viele Datenbanktabellen. Damit ein Verein, der sich für dieses kostenlose System interessiert, auch ein Gefühl bekommt, wie es zu pflegen ist, wurde die DB TEST erstellt, die tatsächlich nur Testdaten enthält, jedoch ist das Passwort für die Pflege dieser Datenbank TEST öffentlich, so kann jeder Interessent dies selbst testen. Die DB ski wurde von mir gepflegt, aber der Administrator für die Skiabteilung hat das Passwort für die Pflege der DB ski. Die DB buecherei ist im Entwurf fertig, die Daten werden zur Zeit aber überarbeitet, deshalb kann man sie abgesehen von Demonstrationsauswertungen noch nicht anschauen. Die DB huetten hat einen ganz anderen Aufbau, der speziell auf die Hütten der Sektion abgestimmt ist.

Nun zur technischen Verwirklichung:
Die Pflege einer DB geht über das System phpMyAdmin, das man vom Internet runterladen kann: http://www.phpmyadmin.net/  
Zur Zeit ist hier eine alte Version installiert, die es schon 2004 gegeben hat. Diese Version ist natürlich voll funktionsfähig, aber sie ist nur für die Pflege einer DB designed. Deshalb gibt es auf meiner Homepage (das dieses Demonstrationsmodell auch enthält) für jede der jetzt vorhanden DBs ein eigenes Administrator-Verzeichnis (phpMyAdmin-hp, phpMyAdmin-ski, phpMyAdmin-test). Jedes Verzeichnis ist bis auf die config-Datei gleich.
Die config-Datei steht als Muster hier config-Datei . Die Zeilen, auf die es ankommt und die auch geändert werden müssen, sind hier aufgeführt:

$cfg['Servers'][$i]['host']             = 'db1910.1und1.de'; // MySQL hostname or IP address
$cfg['Servers'][$i]['user']            = 'dbo285897188';      // MySQL user
$cfg['Servers'][$i]['password']  = 'falsch';          // MySQL password (only needed
$cfg['Servers'][$i]['only_db']      = 'db285897188';          // If set to a db-name, only

Die config-Datei für die anderen DBs hat die entsprechenden Werte, so wie man es bei der Webspace-Administratorfunktion (bei mir 1und1.de Untermenü MySQL-Datenbank) für die einzelnen DBs sehen kann.
Die Größe des Verzeichnisses phpMyAdmin-test ist etwa 11 MB.

Unabhängig von dieser phpMyAdmin-Funktion, die jeweils nur eine DB pflegen kann, hat der Webspace-Administrator natürlich die Möglichkeit als Administator einzuloggen. Dann hat es natürlich Zugriff auf alle DBs, die für diesen Webspace angelegt sind.



PHPMyAdmin 3.1.5. Administration mit mehreren Datenbanken

Die Absicht, die hinter diesem Konzept steht, ist, dass es mehrere Administratoren für die Pflege der Datenbanken gibt. Alle Tabellen, die ein bestimmter Teil-Administrator pflegen soll, stehen in einer separaten DB. Diese Teil-Administratoren sollen "ihre" Daten pflegen können, nicht jedoch das Domain-Admin-Passwort haben. Auch brauchen sie nicht die Rechte für einen ftp. Das Schreiben der Skripte, in denen die Tabellen mit select gelesen und entsprechend die Daten aufbereitet ausgegeben werden, macht der Haupt-Administrator.

Diese Version ist nun voll funktionsfähig, der Aufruf heißt Admin Version 3.1.5. Hier kann man alle zur Zeit vorhandenen DBs pflegen. Die DBs haben natürlich alle verschiedene Passwörter.

Das Verzeichnis phpMyAdmin hat aus Sicherheitsgründen ein Passwort.
Das Passwort wurde mit der Admin-Routine von 1und1 <geschützte Verzeichnisse> erstellt. Nach einigen Minuten ist die entsprechende Datei .htaccess erstellt. Diese wird nun auf den PC mittels ftp runtergeladen.
Damit das Programm phpMyAdmin Version 3.1.5 laufen kann (es benötigt php 5.2), muss die Datei .htaccess  modifiziert werden um diese beiden Parameter:

AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

Achtung: Wenn durch Benützung der Routine <geschütze Verzeichnisse> Änderungen bei der Datei .htaccess gemacht werden (neue Benutzer etc), verschwinden die beiden Parameter Add... aus der Datei .htaccess. Es muss also wieder manuell modifziert werden.

Damit werden alle Skripte, die als Endung php haben, als php5 interpretiert. Damit man sich die Benutzercodes der einzelnen DBs leichter merken kann, habe ich noch eine Funktion geschrieben, die alle Daten (außer den Passwörtern) zeigt, die man pflegen kann.
Diese Funktion lautet so:
<table style="width: 88%; text-align: left; margin-left: left; margin-right: auto;" border="1" cellpadding="2" cellspacing="2">
  <tbody>
<?php include "zugriff-dbmysql.inc.php"
 ?>
<?php mysql_select_db(MYSQL_DATENBANK) or die(mysql_error());
$abfrage = "SELECT
  `Host` , `Db` ,  `User` , description FROM  `db` order by `description`";
 
$ergebnis = mysql_query($abfrage);
 ?>
<?php while($row = mysql_fetch_object($ergebnis))
  {
     echo  "<tr><td style=width: 20%; >$row->Host  </td>";
     echo  " <td style=width: 20%; > $row->Db </td>";
     echo  " <td style=width: 20%; > $row->User </td>";
     echo  " <td style=width: 20%; > $row->description </td></tr>";
  }

 ?>
  </tbody>
</table>

Die config-Datei wird folgendermaßen eingestellt:
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost:/tmp/mysql5.sock';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['only_db'] = array('dbo289108550', 'db288897792 ', 'db288936898', 'db288969739', 'db288916665');

/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';

/* User for advanced features */
// $cfg['Servers'][$i]['controluser'] = 'dbo289108550';
// $cfg['Servers'][$i]['controlpass'] = 'pw';

Alle anderen Parameter bleiben unverändert.

Die DB mit dem Benutzercode dbo289108550 enthält nur eine Tabelle und zwar die Tabelle db:

localhost:/tmp/mysql5.sock db288897792 dbo288897792 Buecherei
localhost:/tmp/mysql5.sock db288913217 dbo288913217 TEST
localhost:/tmp/mysql5.sock db288936898 dbo288936898 hpentw
localhost:/tmp/mysql5.sock db288969739 dbo288969739 huetten
localhost:/tmp/mysql5.sock db289108550 dbo289108550 mysql
localhost:/tmp/mysql5.sock db288916665 dbo288916665 ski

In dieser DB mysql sind auch bei der Tabelle db die Rechte zu vergeben, was man tun darf: select, insert, update, delete, siehe Bild:

DB privileges


Die Rechte, neue Tabellen erstellen, ändern oder löschen habe ich bewusst nicht gegeben, damit die Administratoren für die Pflege einer Datenbank diese Änderungen nicht machen können. (Wenn man neue Felder aufnimmt, ändert sich natürlich auch das Programm, in dem der Select für diese Tabelle vorkommt. Diese Programme soll nur der Hauptadministrator ändern und mit ftp freigeben können.
Nach dem Einloggen in die DB mysql kommen alle Benutzercodes für die  im Parameter only_db genannten Datenbanken.
Nach dem Auswählen der betreffenden DB kommt der Login-Screen, wo man den Benutzercode der gewünschten DB eingeben muss, also wenn man die DB huetten haben will, muss man als Benutzercode dbo288969739 und das dazugehörige Passwort eingeben. Damit man sich die Benutzercodes leichter merken kann, habe ich die Funktion <Verfügbare Datenbanken> geschrieben, wo neben den benötigten Parametern auch die Beschreibung  (z.B. huetten) dabeisteht.

Bei der DB, die man ausgewählt hat, stehen in Klammern die Anzahl der Tabellen dabei, die man pflegen kann. In diesem Beispiel war es de DB ski, die zur Zeit 10 Tabellen hat.

Beispiel PHPMyAdmin

Nachdem man auf die DB db288916665 (10) geklickt hat, hat man Zugriff auf die DB ski, siehe Bild:

DB ski



Dokumentation: Beispiel-Homepage mit PHP und MySQL  

Heinz Wember
Änderungsstand: 30-Apr-2010 21:15