zur Gesamtnavigation A A A

Verwaltung von Datenbanktabellen

Bislang befinden sich die Skripte, mit denen Datenbanktabellen formularbsiert angelegt und strukturell verändert werden können, und die Skripte mit denen das zu einer derartigen Tabelle zugehörige Skript "pflegen.php" gespeichert und verändert werden können, erst in der Entwurfsphase. Daher sind die nachfolgenden Aussagen, die das formularbasierte Anlegen einer Tabelle und Verändern ihrer Struktur sowie das formularbasierte Erstellen und Verändern des Skriptes "pflegen.php" betreffen, nur Hinweise, wie diese Aktionen später einmal realisiert werden sollen. - Weil sich das Modul zur Anlage und Pflege von Datenbanktabellen noch in der Entwicklung befindet, sind auch die Informationen in diesem Skript nur vorläufig.

Realisiert ist schon das formularbasierte Einfügen, Verändern und Löschen von Datensätzen aus Datenbanktabellen mit dem Skript "__zac4web/_db/tabellen/_inc/db_tabelle_aendern.php". Es wird bereits genutzt von dem Systemskript "__zac4web/_systemdateien/db_tabellen/__personen_sex.php", mit denen die Datensätze in der Systemtabelle "__personen_sex" verändert werden können.
Die Funktionalität des Skriptes "__zac4web/_db/tabellen/_inc/db_tabelle_aendern.php" kann bereits jetzt auch für Tabellen genutzt werden, die zu den Bereichen eines "zac4web"-Projektes gehören. Allerdings müssen jeweils die Tabelle "xxx_tab" und das zugehörige Skript "pflegen.php" manuell erstellt werden. Der Name des Skriptes darf auch anders lauten und in einem anderen Verzeichnis gespeichert werden als hier benannt. Doch um von der zukünftigen Ergänzung von "zac4web" profitieren zu können, muss der Dateipfad und der Dateiname so lauten, wie in diesen Hinweisen angegeben.

Es ist vorgesehen, dass in Zukunft Datenbanktabellen formularbasiert angelegt und hinsichtlich der Struktur verändert werden können. Dabei sollen auch Fremdschlüsselbeziehungen zwischen Tabellen gebildet werden können, allerdings fast nur zwischen den Datenbanktabellen eines Bereichs. Lediglich die Datenbanktabellen des Kernbereichs ("home"), deren Namen mit "home_all_" beginnen, dürfen bereichsübergreifend ebenfalls referenziert werden. Außerdem darf in allen Bereichen die Systemdatenbanktabelle "__personen_sex" referenziert werden.

Vorbemerkung

Für sämtliche Tabellen, deren Inhalt formularbasiert mit dem Skript "__zac4web/_db/tabellen/_inc/db_tabelle_aendern.php" angezeigt (und bei entsprechenden Zugriffsrechten auch verändert) werden kann, gilt Folgendes:

  • Die Systemskripte zur Pflege der Datenbanktabellen verlassen sich darauf, dass die Spaltennamen und Namen von Datenbanktabellen weder ein Zeichen aus der nachfolgenden Menge { . ` ' \ < > " $ }, noch das Leerzeichen oder ein Zeichen der Unicode-Positionen 0 - 31, 127 - 159 und >= 10000 enthalten.
  • Falls in einer tabellenspezifischen Funktion eine Variable benötigt wird, die in diesem Skript nicht genannt wird, sollte diese Variablen nur innerhalb einer Funktion deklariert werden, damit die Systemskripte den Wert/Typ dieser Variable nicht verändern. Wird eine Variable von verschiedenen Funktionen benötigt, und besitzt die Variable als Wert einen längeren String oder eine komplexere Struktur (Feld, Objekt), ist es sinnvoll die Variable innerhalb der Funktionen durch einen Funktionsaufruf bereitzustellen, die Deklaration der Variablen sollte also in eine eigenständige Funktion ausgelagert werden. Wenn der Name jener Funktion auf "_special" endet, sind Konflikte mit Systemfunktionen ausgeschlossen, da keine der Systemfunktionen auf "_special" endet/enden wird.
  • Nur wenn jemand das spezifische Redaktionsrecht "php" besitzt, darf er formularbasiert die booleschen Werte, deren Name auf "_standard" enden, verändern und die den Variablen zugeordneten Funktionen programmieren.
  • Bei der Ausgabe wird innerhalb des Abschnitts, der den seitenspezifischen Inhalt enthält, vor der Überschrift das <script>-Tag notiert, welches den Browser veranlasst, die Datei "__zac4web/__javascript/dom_manipulation.js" zu laden, wenn im Browser Javascript aktiviert ist. Dadurch werden bei der Standardausgabe der Formulare ($dsatz_formular_standard = true;) vom Browser für jedes Texteingabefeld die Schalter erzeugt, mit denen per Javascript-Funktion die Größe dieser Texteingabefelder leicht verändert werden kann.
  • Für Datenbanktabellen, die eine Auto-Increment-Spalte enthalten wird automatisch das Standardreservierungsverfahren angewendet. Die tabellenspezifischen Vorgaben für die Variablen $res_index_erstellen_standard, $reservieren_tabellen_standard, und $reservieren_dsatz_standard werden ignoriert.

Aus Gründen der leichteren Lesbarkeit wird im nachfolgenden Text meist nur der Dateiname "db_tabelle_aendern.php" und nicht der Dateipfad notiert, wenn ein Bezug zu dem Skript "__zac4web/_db/tabellen/_inc/db_tabelle_aendern.php" hergestellt werden soll.

zum Anfang

Ordner und Dateien in "_db_tabellen"

Wenn in einem Bereich "xxx" formularbasiert eine Datenbanktabelle mit dem Namen "tab" angelegt wird, erhält die Datenbanktabelle als vollständigen Namen die Bezeichnung "xxx_tab". Außerdem wird - sofern noch nicht vorhanden, der Ordner "xxx/_db_tabellen" angelegt - und in dem Ordner xxx/_db_tabellen ein Unterorder mit dem Namen "tab" (xxx/_db_tabellen/tab) erzeugt. Denn zusammen mit den Informationen, die für die Anlage der Tabelle benötigt werden, werden auch Informationen für das aufrufbare Skript "pflegen.php" gesammelt, mit dem diese Tabelle mit Hilfe des Skriptes "db_tabelle_aendern.php" gepflegt werden kann. Wird vom Aufrufer festgelegt, dass die Datei "pflegen.php" von jedermann aufgerufen werden darf, wird im Ordner "xxx/_db_tabellen/tab" der Unterordner "_offen" angelegt und die Datei dort gespeichert (xxx/_db_tabellen/tab/_offen/pflegen.php). Dürfen nur eingeloggte Mitglieder des Bereichs das Skript aufrufen, wird der Unterordner "_mb_" erzeugt und die Datei dort gespeichert (xxx/_db_tabellen/tab/_mb_/pflegen.php).

zum Anfang

Aufbau der Datei "pflegen.php"

Die Datei "pflegen.php" besteht aus bis zu drei großen php-Blöcken ("Kernkonstanten und Kopfvariablen", "weitere Variablen", "Funktionen").

Das Teilkapitel Kernkonstanten und Kopfvariablen erläutert die Variablen und Konstanten, die in dem gleichnamigen php-Block deklariert bzw. derfiniert werden und welche für die generelle Ausgabensteuerung erforderlich sind.

In dem Teilkapitel weitere Variablen werden die Variablen aus dem gleichnamigen php-Block beschrieben. Diese Variablen werden für die Pflege und die tabellenspezifische Ausgabe der Datensätze benötigt. Über einige der Variablen kann gesteuert werden, ob die Standardfunktionen aus "db_tabelle_aendern.php" für die Anzeige und die Bearbeitung von Datensätzen genutzt werden sollen, oder ob tabellenspezifische Funktionen angewendet werden soll. Bei einer formularbasierten Veränderung des Skriptes "pflegen.php" können die Werte dieser Variablen nur von Personen verändert werden, die das spezifische Redaktionsrecht "php" besitzen. Denn dieses Recht ist auch erforderlich um formularbasiert die Befehle in den Funktionen notieren und verändern zu können.

Der php-Block "Funktionen" ist bei der formularbasierten Erstellung/Veränderung der Datei "pflegen.php" nur dann enthalten, wenn mindestens eine tabellenspezifische Funktion für die Anzeige oder Pflege der Tabelle definiert ist, die in dieser Datei im gleichnamigen Abschnitt Funktionen beschrieben werden. Ob die in der Datei "pflegen.php" definierten Funktionen aktuell tatsächlich zur Anwendung kommen, hängt aber von dem Wert der zugehörigen Steuerungsvariablen aus dem php-Block "weitere Variablen" ab.

Das Teilkapitel Zuordnung von weiteren Variablen zu Funktionen zeigt tabellarisch die Zusammenhänge zwischen den Variablen und den Funktionen

Funktionen können wie im Teilkapitel Auslagern von Funktionen beschrieben, auch in andere Dateien ausgelagert werden.

Das Teilkapitel Ende der Datei "pflegen.php" beschreibt den Aufbau und Inhalt der letzten Zeilen der Datei.

zum Anfang

Kernkonstanten und Kopfvariablen

In diesem Abschnitt werden die grundlegenden Konstanten definiert und Variablen deklariert, die für die generelle Ausgabensteuerung benötigt werden.

Folgende Zeilen werden vom System bei der Erzeugung der Datei automatisch zugewiesen:

<?php // Kernkonstanten und Kopfvariablen
define('zac4web_bereich', 'xxx');
define('zac4web_pfad', '../../../../');
define('zac4web_seiten_autor', 'System');
define('zac4web_datei_datum', 'auto-wert');
$verfaellt_nach_sec = 0;
$formular = true
$ohne_nav_spalte = true;
$robots_no = true;
if(isset($_GET["Hinweise"]) )
{
ohne_nav_spalte=true;
}

Die Zeile <?php // Kernkonstanten und Kopfvariablen leitet mit der Zeichenfolge <?php den PHP-Abschnitt ein. Der Rest ist nur ein Zeilenkommentar, damit der Quellcode verständlicher ist.

In der Zeile define('zac4web_bereich', 'xxx'); wird statt der Zeichenfolge xxx der interne Name des Bereichs notiert, dem die Datenbanktabelle zugeordnet ist.

Die Zeichenfolge '../../../../' in der Zeile define('zac4web_pfad', '../../../../'); gibt an, dass im vollständigen Pfad der Datei "pflegen.php" ab dem Wurzelverzeichnis vier Verzeichnisebenen enthalten sind. Falls eine Datei verlagert wird, muss die Zeichenfolge angepasst werden. Allerdings wird die Datei nur dann mit den Systemskripten bearbeitet werden können, wenn sie unmittelbar in einem der beiden Verzeichnisse 'xxx/_db_tabellen/tab/_offen' und 'xxx/_db_tabellen/tab/_mb_' gespeichert ist.

Nach der Zeile mit der if-Anweisung stehen die folgenden Zeilen mit Variablendeklarationen.

$seiten_sprache = 'de';
$seiten_titel = 'Pflege der Tabelle "xxx_tab"';
$max_style = 2;
$pruefen_mitglied = 'verwalten';
$style_bereich = '';
Die Werte für die Variablen sind dateispezifisch festzulegen. Dabei sollten die nachfolgenden Hinweise beachtet werden.
  • $seiten_sprache
    Es sollte eines der zulässigen Sprachkürzel zugewiesen werden (z.B. 'de', wenn der Seiteninhalt vorwiegend in der Sprache "deutsch" geschrieben wurde).
  • $seiten_titel
    Es ist die Zeichenfolge einzutragen, die vom Browser als Name für den Browsertab angezeigt werden soll.
  • $max_style
    Es darf nur einer der drei Integerwerte 0, 1 und 2 zugewiesen werden. Beim Wert 0 kann der Aufrufer der Seite nicht mit Größenschaltern die Schriftgröße beeinflussen, bei 2 stehen ihm drei Schriftgrößen zur Wahl für die Anzeige des Seiteninhalts.
  • $pruefen_mitglied
    Wird die Datei "pflegen.php" im Unterverzeichnis "_offen" gespeichert, ist der boolesche Wert "true" zuzuordnen. Bei einer Speicherung der Datei im Unterverzeichnis "_mb_" ist die Bezeichnung des Rechtestatus zuzuweisen, den der Aufrufer im Bereich "xxx" mindestens besitzen mus, um das Skript aufrufen zu dürfen. Es sind nur Werte aus der Spalte "name" der Tabelle "_login_rechte" erlaubt, denen in der Spalte "rechte_ID" ein größerer Wert als 0 zugeordnet ist.
  • $style_bereich
    Mit dieser Variable können skriptspezifische css-Anweisungen für die Ausgabe definiert werden. Diese Variable darf fehlen.

Sofern in den tabellenspezifischen Ausgabefunktionen Formulierungen enthalten sind, mit denen der Aufrufer angeredet wird (z.B. "Du ...". "Markiere"), sollte darauf geachtet werden, dass bei der Ausgabe grundsätzlich entweder die Anredeform "Du" oder "Sie" verwendet wird und diese Anredeform mit derjenigen übereinstimmt, die von dem Skript "db_tabelle_aendern.php" für die Ausgabe genutzt wird. Am sichersten ist diese Übereinstimmung zu erreichen, wenn nach den Variablendefinitionen die optionale Konstantendefinition
define('zac4web_anrede_du', false);
folgt. Ist der boolesche Wert false zugeordnet, verwendet das Skript "db_tabelle_aendern.php" die Anredeform "Sie", anderenfalls "Du". Fehlt diese Zeile mit der Konstantendefinition, entscheidet das Skript "db_tabelle_aendern.php" anhand der Vorgaben für den Bereich oder des Systems, welche Anredeform bei der Ausgabe genutzt wird.

Der Abschnitt endet mit den Zeilen

include zac4web_pfad."__zac4web/_wm/html_anfang.php";
?$gt;

Die erste der beiden Zeilen darf nicht verändert werden, da nur dann gewährleistet wird, dass die korrekte Seitenstruktur ausgegeben wird. Die zweite Zeile beendet den php-Abschnitt.

zum Anfang

weitere Variablen

Auf den Abschnitt mit den Kopfvariablen folgt die Zeile
<?php // weitere Variablen
, die den PHP-Abschnitt beginnt, in welchem die Variablen deklariert werden, die für die Pflege der Datenbank benötigt werden.

Die weiteren Variablen lassen sich unterteilen, in jene, mit denen ...

zum Anfang

Datenbank und Name der Datenbanktabelle und Formularziele

Zu diesem Abschnitt gehören die folgenden Anweisungen

$database = 0;
$db_tabelle = "xxx_tab";
$form_action = zac4web_base_href_login."xxx/_db_tabellen/tab/_mb_/pflegen.php";
$seite_abbruch = zac4web_base_href_login."_mb_xxx/index.php";

Sofern in der Datei "__wm/kern/__variablen/datenbanken.php" im Feld $datenbanken nicht nur das Element [0] vorhanden ist, wird bei der Anlage einer Datenbanktabelle gewählt, in welcher der Datenbanken die Tabelle zu speichern ist. Ansonsten wird die Datei immer in der Datenbank mit der Kennziffer 0 gespeichert. Die Kennziffer der Datenbank wird der Variablen $database zugeordnet.

Der Name der Datenbanktabelle wird der Variablen $db_tabelle zugeordnet. Der Name beginnt immer mit dem Namen des Bereichs zu dem die Datenbanktabelle gehört, gefolgt von einem Unterstrich ("xxx_"). Lediglich die danach folgende Zeichenfolge, die mindestens ein Zeichen lang sein muss und höchstens 30 Zeichen lang sein darf, wird bei der Anlage der Datenbanktabelle frei gewählt (z.B. "tab").

Der bereichsunabhängige Teil des Names der Datenbanktabelle ("tab") wird vom System auch als Name für den Ordner verwendet, in dem die tabellenspezifischen php-Skripte gespeichert werden, also auch das Skript, in welchem die Angaben notiert werden, die hier erläutert werden. Der Dateipfad ("xxx/_db_tabellen/tab/_mb_/pflegen.php" oder "xxx/_db_tabellen/tab/_offen/pflegen.php") bildet zusammen mit der Konstanten zac4web_base_href_login den Wert für die Variable $form_action, also dem Wert, der von den Funktionen der Datei "db_tabelle_aendern.php" immer als Formularziel anzugeben ist, es sei denn, mit einem Schalter soll die Bearbeitung der Datenbanktabelle abgebrochen werden können. Für jene Schalter wird als Formularziel der Wert verwendet, der $seite_abbruch zugeordnet ist.

zum Anfang

Reservierung steuern und Reservierungsindex

Damit ein vorhandener Datensatz der Tabelle "xxx_tab" mit dem Skript "db_tabelle_aendern.php" verändert werden kann, muss der Datensatz innerhalb der Tabelle eindeutig identifizierbar sein. Die Identifizierung kann über den Wert einer einzigen Spalte (S1) erfolgen, wenn sämtliche Datensätze in dieser Spalte unterschiedliche Werte aufweisen müssen. Oder die Identifikation ist über die Kombination von Werten aus mehreren Spalten (S1, ..., SX) möglich, wobei dann jede Wertekombination in diesen Spalten nur einmal zulässig sein darf.

Bei der Erzeugung einer Datenbanktabelle, bzw. bei der Pflege der Struktur der Tabelle können für die Tabelle Indizes erzeugt werden. Durch die Erzeugung eines eindeutigen Index für die Spalte (S1) bzw. die Spaltenkombination (S1, ..., SX) im Rahmen der Tabellendefinition kann die Einhaltung der Vorgabe, dass sich alle Datensätze der Tabelle bzgl. des Wertes in der einen Spalte bzw. der Wertekombination der entsprechenden Spalten unterscheiden müssen, durch das zugrunde liegende Datenbank-Managementsystem erzwungen werden. Es verhindert dann, dass zwei oder mehr Datensätze der Tabelle identische Werte in der Spalte bzw. identische Wertekobminationen in den Spalten besitzen.

Im Skript sind für die Steuerung der Reservierung und des Reservierungsindex folgende Variablen vorhanden.

$dauer = reservieren_normal;
$reservieren_bis = time() + $dauer * 60;
$res_index_erstellen_standard = true;
$res_index_fix = false;
$res_index_pruefen_standard = true;
$reservieren_ganz = false;
$reservieren_tabellen_standard = true;
$reservieren_dsatz_standard = true;

Die Variable $dauer wird von dem Skript "db_tabelle_aendern.php" für die Information des Aufrufers über die Reservierungsdauer und die Berechnung des Wertes der Variablen $reservieren_bis benötigt. Die gewählte Dauer muss nur ausreichen für das einmalige Ausfüllen des Formulars inkl. der Transportzeiten zwischen dem Server und dem Gerät des Aufrufers. Denn bei jedem weiteren Aufruf wird die Reservierung verlängert. Bei der Erstellung/Pflege der Datei "pflegen.php" wird von dem Systemskript vor diesem Teilabschnitt der Befehl
include_once zac."__wm/__konstanten/reservierung.php";
notiert, weil per Auswahlliste der Variablen $dauer eine der drei Konstanten "reservieren_kurz", "reservieren_normal" und "reservieren_lang" zugeordnet werden kann. Weil die Integerwerte dieser drei Konstanten vom System als Minutenwerte interpretiert werden, wird für die Berechnung des Zeitstempels $reservieren_bis der Wert der Konstanten mit 60 multipliziert ($reservieren_bis = time() + $dauer * 60;)

Das Skript "db_tabelle_aendern.php" ermittelt bei jedem Aufruf, ob für die Tabelle "xxx_tab" eine Auto-Increment-Spalte vorhanden ist und welche Indizes für die Datenbanktabelle "xxx_tab" definiert sind.

Wenn eine Auto-Increment-Spalte vorhanden ist, wählt das Skript für die Tabelle "xxx_tab" immer das Standardreservierungsverfahren, unabhängig von den Vorgaben im Skript "pflegen.php" für die Variablen $res_index_erstellen_standard, $reservieren_tabellen_standard und $reservieren_dsatz_standard. Lediglich mit der Variablen $reservieren_ganz kann kann dann noch gesteuert werden, ob auf Tabellenebene oder Datensatzebene reserviert werden soll. Da der Auto-Increment-Spalte in der MySQL-Datenbank-Datenbanktabelle immer ein eindeutiger Index mit dem Namen "PRIMARY" zugeordnet ist, wählt das Skript "xxx_tab" auch immer diese Spalte als Reservierungsindex aus. Es weist dann der Variablen $key_name den Namen der Auto-Increment-Spalte zu und der Variablen $key_index die Zeichenfolge "PRIMARY".

Falls keine Auto-Increment-Spalte vorhanden ist und der Variablen $res_index_erstellen_standard der boolesche Wert false zugewiesen ist, muss mit der Funktion key_cols_erstellen_spezial() ein Reservierungsindex vorgegeben werden. Wenn allerdings in der Datei $res_index_erstellen_standard = true; notiert ist, ermittelt "zac4web", ob ein eindeutiger Index für die Tabelle definiert wurde. Ist ein Index mit dem Namen "PRIMARY" vorhanden, wählt das System immer diesen Index als Reservierungsindex aus. Besitzt kein Index der Datenbanktabelle den Namen "PRIMARY", wählt das System unter den vorhandenen eindeutigen Indizes denjenigen als Reservierungsindex aus, dessen Name lexikalisch gesehen an erster Stelle steht. Wenn das Skript "db_tabelle_aendern.php" feststellt, das kein Reservierungsname für die Datenbanktabelle "xxx_tab" definiert wurde, wird das Skript nur Datensätze bzw. die Suchformulare anzeigen.
Konnte ein Reservierungsindex ermittelt werden, wendet das Skript die Standardfunktion für das Reservieren eines Datensatzes an, wenn $reservieren_dsatz_standard der boolesche Wert true zugewiesen ist. Wenn der Wert dieser Variablen false ist, müssen die Funktionen reservieren_dsatz_spezial() und pruefen_reserviert_ist_dsatz_spezial() implementiert sein, es sei denn, der Variablen $reservieren_ganz ist der boolesche Wert true zugeordnet. Denn dann soll auf Tabellenebene reserviert werden. Falls auf Tabellenebene reserviert werden soll und die Variable $reservieren_tabellen_standard den Wert true aufweist, wird die Standardfunktion zum Reservieren der Tabelle angewendet, ansonsten müssen die Funktionen reservieren_tabellen_spezial() und pruefen_reserviert_ist_tabelle_spezial() implementiert sein.

Wird der Variablen $res_index_fix der boolesche Wert true zugewiesen, darf bei einem bereits gespeicherten Datensatz der Wert (/ die Wertekombination) in der (/ den) Reservierungsspalte(/n) nicht verändert werden. Wenn der Variablen "$res_index_fix" dageben der boolesche Wert false zugewiesen ist, darf er (/sie) prinzipiell verändert werden.

Möchte man sicherstellen, dass die Werte, die für den Reservierungsindex übermittelt werden, spezielle Bedingungen erfüllen, muss der Variablen $res_index_pruefen_standard der boolescher Wert false zugeordnet und die Funktion kann_res_key_sein_spezial() implementiert werden.

Wird auf Datensatzebene reserviert, erzeugt "zac4web" erst dann eine Reservierung, wenn ein Datensatz ausgewählt wurde. Das bedeutet dann, dass nur der ausgewählte Datensatz reserviert wird und von anderen Nutzern zeitgleich andere Datensätze der gleichen Tabelle verändert werden dürfen.

Die Reservierung mit der tabellenspezifischen Funktion reservieren_tabellen_spezial() ist auf jeden Fall dann erforderlich, wenn für eine Tabelle kein eindeutiger Index definiert wurde und die Ablaufsteuerung aus dem Skript "db_tabelle_aendern.php" genutzt werden soll, um Datensätze aus der Tabelle zu verändern bzw. Datensätze in die Tabelle einzufügen. Die tabellenspezifischen Funktionen können aber auch genutzt werden, wenn aufgrund von Vorgaben, die nicht über Fremdschlüsselbeziehungen zwischen Tabellen hergestellt werden können, ein Datensatz in einer anderen Datenbanktabelle reserviert werden muss, wie es z.B. in der Datei Personen-, Adress- und Organisationskonten für die Veränderungen an Personenkonten beschrieben ist.

Da bei einer exklusiven Reservierung - die z.B. bei der Kombination $reservieren_ganz = true; $reservieren_tabellen_standard = true; immer versucht wird - die Wahrscheinlichkeit von Reservierungskonflikten höher ist, sollte die exklusive Reservierung für eine Tabelle nur dann gewählt werden, wenn es erforderlich ist.

zum Anfang

Bearbeitungsrechte steuern

Zu diesem Variablenblock gehören die folgenden Anweisungen:

$recht_insert = "admin";
$insert_von = false;
$col_von = "";
$insert_einen = false;
$recht_show = "admin";
$recht_change = "admin";
$recht_delete = "admin";
$recht_hinweise = "admin";

Mit der Kopfvariablen $pruefen_mitglied wird zwar festgelegt, welches Zugriffsrecht im Bereich der Datenbanktabelle "xxx_tab" ein Aufrufer des Skripts "pflegen.php" mindestens haben muss, damit das Skript nicht vorzeitig mit der Meldung beendet wird, dass das Skript dem Aufrufer nicht angezeigt werden darf. Der Aufrufer, der diese erste Hürde überwunden hat, darf mindestens die Datensätze sehen, ändern und löschen, die er selber zuvor in die Datenbanktabelle eingebeben hat.

Ein Aufrufer darf allerdings nur dann Datensätze einfügen, wenn er mindestens den Rechtestatus besitzt, den die Variable $recht_insert vorschreibt.

Solange nicht bei jedem Datensatz automatisch erfasst werden soll ($insert_von = false;), wer den Datensatz eingefügt hat, kann jeder, der einen Datensatz in die Datenbanktabelle einfügen darf, auch alle vorhandenen Datensätze verändern und löschen. Nur bei $insert_von = true; können die Bearbeitungsrechte differenzierter festgelegt werden.

Wenn der Wert von booleschen Variablen $insert_von erstmalig von false zu true wechselt, muss der Variable $col_von der Name jener Spalte zugewiesen werden, in der beim Einfügen des Datensatzes automatisch die Identifikationsnummer des Aufrufers gespeichert werden soll. Es darf für $col_von dann kein Name einer Spalte eingetragen werden, die schon vorhanden ist. Außerdem muss der Spaltentyp "int" und der NULL-Wert der Standardwert für diese Spalte sein. Die Spalte mit dem Namen $col_von wird von den Systemskripten automatisch zur Datenbanktabelle hinzugefügt, wenn sie noch nicht vorhanden ist. Die Spalte wird dann automatisch auch indiziert und nutzt als Fremdschlüssel die Spalte "person_ID" aus der Datenbanktabelle "__personen". In der Spalte sind NULL-Wert zugelassen und für die Verknüpfungsregeln gelten "ON UPDATE CASCADE" und "ON DELETE SET NULL".
Sind schon Datensätze in der Datenbanktabelle vorhanden und wechselt erstmalig der Wert von $insert_von von false zu true wird die Spalte $col_von angelegt und allen vorhandenen Datensätzen in dieser Spalte der Wert NULL zugeordnet. Wird der Wert für $insert_von von true zu false geändert, kann gewählt werden, ob die Spalte $von gelöscht werden oder erhalten bleiben soll. Wird die Spalte nicht gelöscht, muss der Variablen $col_von der Name der Spalte zugeordnet bleiben. Wenn die Spalte nicht gelöscht wird, wird - solange $insert_von = false; gilt - bei der Neuanlage eines Datensatzes in der Spalte $col_von für den Datensatz der Wert NULL eingetragen.

Jedesmal wenn $insert_von von false zu true wechselt und die Spalte mit dem Namen $col_von noch nicht vorhanden ist, werden folgende SQL-Befehle ausgeführt, um die Spalte $col_von und die Fremschlüsselbeziehung zu erzeugen.

  • ALTER TABLE `tabelle`
    ADD `col_von` int(11) DEFAULT NULL;
  • ALTER TABLE `tabelle`
    ADD KEY `col_von` (`col_von`) USING BTREE;
  • ALTER TABLE `tabelle`
    ADD CONSTRAINT `tabelle_col_von` FOREIGN KEY (`col_von`) REFERENCES `__personen` (`person_ID`) ON DELETE SET NULL ON UPDATE CASCADE;

Nur wenn $insert_von = true; gilt, kann mit $insert_einen = true; gesteuert werden, dass jedes Mitglied nur dann einen Datensatz einfügen darf, solange noch kein Datensatz mit seiner Identifikationsnummer in $col_von gespeichert ist. Diese Regel gilt auch für die Administratoren des Bereichs. Bei $insert_einen = true; gilt für den von den Systemskripten verwalteten Indizes für die Spalte $col_von, dass dieser nicht nur "KEY" sondern "UNIQUE KEY" ist.

Sofern $insert_von = true; ist kann mit den Variablen $recht_show, $recht_change, und $recht_delete gesteuert werden, welches Recht mindestens erforderlich ist, um auch jene Datensätze sehen / verändern / löschen zu dürfen, für die in $col_von nicht die eigene Identifikationsnummer eingetragen ist. Die Datensätze mit der eigenen Identifikationsnummer dürfen dagegen jederzeit geändert oder gelöscht werden, solange eine Person das Recht besitzt, einen Datensatz neu einfügen zu dürfen.

Mit der Variablen $recht_hinweise legen Sie fest, welches Recht mindestens erforderlich ist, um die detaillierten Strukturhinweise zu Datenbanktabelle aufrufen zu dürfen. Die Beschränkung wirkt sich aber nur dann aus, wenn der Rechtestatus von $recht_hinweise höher ist als derjenige, der $pruefen_mitglied zugeordnet ist. Wenn die Pflegeseite von jedermann aufgerufen werden darf, weil jedermann Datensätze einfügen darf, ist es aus Sicherheitsgründen sinnvoll für $recht_hinweise mindestens das Recht "mitglied" festzulegen, damit nicht jedermann Informationen über die Struktur der Datenbank abrufen kann.

zum Anfang

Ausgabe der Datensätze beeinflussen

Dieser Block beginnt mit den drei Variablendeklarationen:

$dsatz_zeigen_standard = true;
$db_tabelle_show_standard = true;
$db_dsatz_show_standard = true;

Nur wenn $dsatz_zeigen_standard der Wert false zugeordnet ist, wird von dem Skript "db_tabelle_aendern.php" für die Umwandlung zwischen ausgelesenem/erhaltenem Datensatz und der Ausgabe des Datensatzes die optionale Funktion dsatz_zeigen_bilden_spezial() aufgerufen.

Ob für die Ausgabe des Tabelleninhalts die Standardfunktionen verwendet werden oder nicht, wird mit den beiden Variablen $db_tabelle_show_standard und $db_dsatz_show_standard gesteuert. Wenn $db_tabelle_show_standard der boolesche Wert false zugewiesen wird, müssen für die Tabelle innerhalb der Funktionen db_tabelle_show_spezial() und db_tabellen_show_kopf_spezial() Anweisungen stehen, wie die Struktur und die Inhalte der Datenbanktabbelle anzuzeigen sind. Und wenn $db_dsatz_show_standard == false gilt, müssen innerhalb der Funktion db_tabelle_show_dsatz_spezial() Anweisungen stehen, wie die Struktur und der Inhalte des Datensatzes anzuzeigen ist.

Zu diesem Block gehört aber auch die Variable $show_dsatz. Mit dieser Feldvariablen wird festgelegt, welche Informationen zu den Datensätzen für die Anzeige in den Tabellen und Formularen ermittelt werden sollen.

$show_dsatz = array();
$show_dsatz[0] = array();
$show_dsatz[0]["db"] = $database;
$show_dsatz[0]["tabelle"] = $db_tabelle;
$show_dsatz[0]["spalten"] = array();
$show_dsatz[0]["spalten"][0] = array();
$show_dsatz[0]["spalten"][0]["name"] = "kurz";
$show_dsatz[0]["spalten"][0]["as"] = "";
$show_dsatz[0]["spalten"][1] = array();
$show_dsatz[0]["spalten"][1]["name"] = "lang";
$show_dsatz[0]["spalten"][1]["as"] = "";

Wenn nur die Informationen aus Spalten von $db_tabelle in der Auswahlliste angezeigt werden sollen, besitzt $show_dsatz auf der ersten numerischen Ebene nur das Element mit der Indexnummer [0]. Sind dagegen Spalten von $db_tabelle per Fremdschlüssel mit Spalten aus anderen Tabellen verknüpft und sollen in den Auswahllisten für jeden auswählbaren Datensatz auch die zugehörigen Werte aus den Spalten jener Tabellen angezeigt werden, muss das Feld $show_dsatz auch für jene Tabellen ein Element auf der 1. numerischen Ebene besitzen.
In jedem Fall muss das Element mit der Indexnummer [0] immer die Angaben zu der Datenbanktabelle $db_tabelle enthalten.
Für jede der Tabellen darf nur genau ein Element in $show_dsatz enthalten sein.

Für jede dieser Tabellen muss in $show_dsatz ein Element auf der 1. numerischen Ebene mit den drei assoziativen Elementen "db", "tabelle" und "spalten" enthalten sein. Dem Element " db" ist die Indexziffer aus dem Feld $datenbanken für die Datenbank zuzuordnen, in dem die Datenbanktabelle gespeichert ist, deren Name in dem Teilelement "tabelle" notiert ist. Das Element "spalten" muss jeweils ein zweidimensionales Feld (numerisch/assoziativ) sein. Für jede Spalte, deren Wert angezeigt werden soll, muss auf der numerischen Ebene ein Element mit den assoziativen Elementen "name" und "as" vorhanden sein. Falls aber $insert_von = true; notiert ist, darf für die Spalte $col_von kein Element in "spalten" vorhanden sein, da die Spalte $col_von in diesem Fall vom Systemskript automatisch hinzugefügt wird. Der Wert im Teilelement "name" muss identisch sein mit dem Namen der Spalte in der Datenbanktabelle.
In $show_dsatz muss im Element "spalten" für jede Spalte, die zum Primärindex der Tabelle $db_tabelle gehört ein Element vorhanden sein. Für diese Spalten ist dem Teilelement "as" immer die leere Zeichenfolge zuzuordnen.
Für alle anderen Spalten, die in $show_dsatz genannt werden, kann für "as" eine andere Zeichenfolge als die leere Zeichenkette angegeben werden. Sofern in $show_dsatz zwei Spalten den gleichen Wert in "name" enthalten, ist für mindestens eine dieser Spalten im Teilelement ein anderer Wert für "as" als die leere Zeichenfolge anzugeben, damit die Namen aller Spalten im Abfrageergebnis eindeutig bezeichnet sind. Für "as" kann aber auch dann eine Zeichenfolge eingegeben werden, wenn für die Anzeige ein Wert von "name" in einen "verständlicheren" Spaltennamen für die Ausgabe "übersetzt" werden soll. Jeder Wert für "as", der nicht die leere Zeichenfolge ist, muss ein Unikat sein und darf nicht identisch sein mit einem Wert für "name" in $show_dsatz.

Zu diesem Block gehört auch die Variable $hide_cols. Mit dieser Feldvariablen wird festgelegt, welche der Spalten, die in $show_dsatz aufgeführt werden, bei der Ausgabe der Tabelle unterdrückt werden sollen. Eingeführt wurde das Feld, um die Primärschlüsselspalte zu unterdrücken, deren Werte per auto-increment zugeordnet werden und nicht vom Aufrufer verändert werden dürfen. In $show_dsatz darf die Spalte nicht fehlen, weil sonst für die Erstellung der Auswahllisten der Index-Wert für die Datensätze nicht mit ausgelesen würde.
Auch andere Spalten deren Werte vom System automatisch zugewiesen werden, können durch die Aufnahme in $hide_cols ausgeblendet werden. In $form_felder muss dann für diese Spalten zwar ein Element des Typs "it" vorhanden sein. Der Wert, der für diese Spalte beim Senden des Formulars übermittelt wird, wird serverseitig vollkommen ignoriert. Die Funktion pruefen_info_erhalten_spezial() braucht dann keine Prüfung des erhaltenen Wertes auszuführen und weist stattdessen den automatisch vorgesehen Wert zu. So etwas ist sinnvoll, wenn in einer Spalte der hash-Wert für den Wert aus einer varchar-Spalte, eingetragen werden soll, damit dieser für die Indizierung der u.U. sehr langen Zeichenfolgen aus der varchar-Spalte genutzt werden soll, um SELECT-Abfragen zu optimieren.

$hide_cols = array();
$hide_cols["nr"] = true;

Wenn alle Spalten, die in $show_dsatz enthalten sind, ausgegeben werden sollen, ist $hide_cols ein leeres Feld.
Sollen Spalten in der Ausgabe unterdrückt werden, ist der Name der Spalte, so wie er als Spaltenname in der Tabelle verwendet wird, als Index zu verwenden. Es sei denn es wird in $show_dsatz über das Element "as" der Spalte eine andere Zeichenkette zugeordnet, die nicht die leere Zeichenkette ist. In solchen Fällen ist die Zeichenfolge des Elements "as" in dem Feld $hide_cols als Index einzusetzen.

Wenn $show_dsatz auf der ersten numerischen Ebene zwei oder mehr Elemente besitzt, wird das Feld $tabellen_beziehung benötigt, um den Zusammenhang zwischen den Informationen aus den verschiedenen Datenbanktabellen herstellen zu können.

$tabellen_beziehung = array();
$tabellen_beziehung[0] = array();
$tabellen_beziehung[0]["db_vor"] = "";
$tabellen_beziehung[0]["tabelle_vor"] = "";
$tabellen_beziehung[0]["spalte_vor"] = "";
$tabellen_beziehung[0]["db_nach"] = "";
$tabellen_beziehung[0]["tabelle_nach"] = "";
$tabellen_beziehung[0]["spalte_nach"] = "";

Für jede Verknüpfung, die für den Abruf der Daten benötigt wird, muss es auf der numerischen Ebene ein Element geben mit den Elementen "db_vor", "tabelle_vor", "spalte_vor", " db_nach", tabelle_nach" und "spalte_nach". Für "db_X" ist jeweils die zu der Datenbank zugehörige Indexziffer aus dem Feld $datenbanken einzutragen. Für "tabelle_X" und "spalte_X" jeweils der Name der Tabelle bzw. Spalte. "X_vor" bedeutet, die Idendifizierer werden vor dem Gleichheitszeichen notiert, und "X_nach" bedeutet, die Identifizierer werden nach dem Gleichheitszeichen notiert. Wenn auf der numerischen Ebene mehr als ein Element vorhanden ist, werden die verschiedenenen Tabellenbeziehungen für die SQL-Befehle mit AND verknüpft.

Mit der Variablen $order_by kann die Reihenfolge der Datensätze gesteuert werden, wenn mehr als ein Datensatz beim Aufruf des Tabelleninhalts oder aufgrund einer Suchanfrage ermittelt wurden. Ist eine Sortierung gewünscht, muss diese Variable ein zweidimensionales Feld (numerisch/assoziativ) sein, wobei die Indizes auf der numerischen Ebene fortlaufend sein müssen. Jedes Element auf der numerischen Ebene muss die vier assoziativen Elemente "db", "tabelle", "spalte" und "DESC" besitzen. Mit den drei Elementen "db", "tabelle" und "spalte" wird festgelegt, welche der Spalten aus der Suchabfrage für die Sortierung berücksichtigt werden soll und mit dem booleschen Wert für "DESC" wird gesteuert, ob die Datensätze bezüglich des Wertes aus der Spalte absteigend (true) oder aufsteigend (false) angeordnet werden sollen.

$order_by = array();
$order_by[0] = array();
$order_by[0]["db"] = $database;
$order_by[0]["tabelle"] = $db_tabelle;
$order_by[0]["spalte"] = "abc";
$order_by[0]["DESC"] = false;

Die Variable $order_by wird für die Sortierung ignoriert, wenn sie ein leeres Feld oder ein leerer String ist.

Den Übergang zu den Variablen, mit denen die Suche gesteuert wird, bildet die Variable $limit. Ist dieser Variablen der Integerwert 0 zugeordnet, werden jeweils alle vorhandenen Datensätze, die der Aufrufer sehen darf, angezeigt. Dann ist eine Suche nicht zwingend erforderlich. Wird dagegen $limit eine positive ganze Zahl zugewisen, wird das Suchformular automatisch angeboten, wenn bei einer Abfrage mehr Datensätze gefunden wurden, als mit $limit festgelegt ist.

zum Anfang

Suche der Datensätze beeinflussen

Neben der Variablen $limit, wird mit den beiden Variablendefinitionen

$anzahl_suchen_bedingung = 4;
$suchen_col_von = true;

und dem Feld $suchen_dsatz die Suche beeinflusst.

Mit der Variablen $anzahl_suchen_bedingung (positive ganze Zahl) wird gesteuert, wie viele Spaltenbedingungen in einer Suchanfrage maximal formuliert werden können. Der Wert sollte mindestens 2 betragen. Je größer der Wert ist, desto differenzierter kann gesucht werden. Bei hohen Werten ist allerdings das Risiko, dass eine Abfrage fehlerhaft formuliert wird recht hoch.

Wird in einer Datenbank jeweils erfasst, welches Mitglied den Datensatz eingefügt hat, so kann mit $suchen_col_von = true; auch die Spalte, in denen die Identifikationsnummern der Mitglieder erfasst werden, im Suchformular zur Auswahl angeboten werden.

Mit der Variablen $suchen_dsatz kann gesteuert werden, welche Spalten im Suchformular zur Auswahl stehen. Die Struktur von $suchen_dsatz muss identisch sein wie jene von $show_dsatz, darf aber weniger Elemente auf den numerischen Ebenen aufweisen.

$suchen_dsatz = array(); $suchen_dsatz[0] = array();
$suchen_dsatz[0]["db"] = $database;
$suchen_dsatz[0]["tabelle"] = $db_tabelle;
$suchen_dsatz[0]["spalten"] = array();
$suchen_dsatz[0]["spalten"][0] = array();
$suchen_dsatz[0]["spalten"][0]["name"] = "kurz";
$suchen_dsatz[0]["spalten"][0]["as"] = "";

Weil mit der Variablen $suchen_col_von schon gesteuert wird, ob die Spalte mit der Identifikationsnummer zur Auswahl angeboten werden soll, sollte für die Spalte $col_von kein Element in $suchen_dsatz enthalten sein.

Fehlt das Element mit dem Index 0 in $suchen_dsatz, wird das Feld $show_dsatz zur Bildung der Optionen für die Auswahlfelder im Suchformular verwendet.

zum Anfang

Eingabe / Ändern von Datensätzen beeinflussen

Zu diesem Teilblock gehören die vier einfachen Variablen

$dsatz_formular_standard = true;
$dsatz_POST_standard = true;
$dsatz_pruefen_standard = false;
$show_aendern = true;

und die beiden Feldvariablen

$form_felder = array();
$select_spalten = array();

Wenn der Variablen $dsatz_formular_standard der boolesche Wert true zugewiesen ist, werden die Standardfunktionen für die Ausgabe der Formulare zum Einfügen und Ändern von Datensätzen ausgegeben. In diesem Fall stimmen die Werte für das Attribut "name" der Eingabefelder in den Formularen mit den zugeordneten Spaltennamen in der Tabelle $db_tabelle überein. Außerdem wird dann anhand der in $form_felder enthaltenen Elemente "bedingungen" das Feld $bedingungen erstellt, welches bei der Ausgabe der Hinweise zur Datenbanktabelle benötigt wird. Wird dagegen $dsatz_formular_standard der boolesche Wert false zugeordnet, müssen die Funktionen feld_bedingungen_erstellen_spezial(), schreiben_insert_spezial() und schreiben_change_spezial() implementiert werden.

Mit $dsatz_POST_standard = true; wird angezeigt, dass die per Formular übermittelten Daten für die Prüfung, ob die Werte zulässig sind, einfach aus dem Feld $_POST ausgelesen werden können. Müssen einzelne Daten aufbereitet werden, z.B. weil sie für das Formular zu einem Wert zusammengefasst wurden, muss die Funktion infos_ermitteln_aus_POST_spezial() implementiert werden.

Die Variable $dsatz_pruefen_standard darf nur dann den booleschen Wert true besitzen, wenn auch der Variablen $dsatz_POST_standard der Wert true zugewiesen ist. Falls die erhaltenen Werte nach dem Standardverfahren geprüft werden sollen, muss in $form_felder für die Eingabefelder vom Typ "it" (einzeiliges Texteingabefeld) und "ta" (mehrzeiliges Texteingabefeld) jeweils das assoziative Element "pruefen" vorhanden sein. Innerhalb des Feldes können dann die Prüfbedingungen notiert werden. Für die Eingabefelder vom Typ "ir" (Radiobuttons) und "se" (Auswahlliste) würde im Standardverfahren geprüft, ob eine der im Formular ausgegebenen Optionen gewählt wurde, und für Eingabefelder des Typs "ic" (Checkboxen) nur, ob sie in $_POST vorhanden sind. Es kann jedes Eingabefeld nur für sich geprüft werden beim Standardverfahren. Soll dagegen der Wert eines Eingabefeldes in Abhängigkeit von dem Wert eines anderen Eingabefeldes geprüft werden, muss $dsatz_pruefen_standard der boolesche Wert false zugewiesen werden und die Funktion pruefen_info_erhalten_spezial() implementiert werden. Die Funktion pruefen_info_erhalten_spezial() kann man auch nutzen, wenn z.B. darauf verzichtet wird in $form_felder die Prüfbedingungen zu erfassen.

Der Variablen $show_aendern ist der boolesche Wert true zuzuweisen, falls auch die Tabelle mit den Datenbankinhalten und ein Hinweis darauf ausgegeben werden sollen, wenn Nutzer seine Eingaben ändern möchte oder korrigieren muss. Da für die Ausgabe der Datenbankinhalte u.U. viele Daten transportiert werden, sollte gründlich geprüft werden, ob es die Ausgabe der Tabelleninhalte bei diesen Bearbeitungsschritten stattfinden soll.

zum Anfang

Das Feld $form_felder

Das Feld $form_felder ist ein mehrdimensionales Feld, das auf der ersten Ebene numerisch und auf der zweiten Ebene assoziativ ist. Für jede Spalte aus der Tabelle $db_tabelle, für das im Formular ein Eingabefeld enthalten sein soll, muss auf der numerischen Ebene ein Element vorhanden sein. Dieses Element muss in jedem Fall das assoziative Element "spalte" besitzen.

Wenn alle vier Variablen $dsatz_formular_standard, $res_index_pruefen_standard, $dsatz_POST_standard oder $dsatz_pruefen_standard den booleschen Wert false besitzen, reicht es aus, wenn das Feld $form_felder wie folgt aufgebaut ist. (Die Spaltenwerte müssen natürlich kontextabhängig gewählt werden.)

$form_felder = array();
$form_felder[0] = array();
$form_felder[0]["spalte"] = "id";
$form_felder[1] = array();
$form_felder[1]["spalte"] = "Nachname";
...

Es könnte aber auch wie folgt aussehen.

$form_felder = array();
$form_felder[0] = array();
$form_felder[0]["spalte"] = "id";
$form_felder[0]["label"] = "Nummer";
$form_felder[1] = array();
$form_felder[1]["spalte"] = "Nachname";
$form_felder[1]["bedingung"] = "Nur ... zulässig";
...

Das assoziative Element "label" ist optional. Fehlt dieses oder besitzt es die leere Zeichenkette als Wert wird bei der Ausgabe stattdessen der Wert des Elements "spalte" verwendet.

Das assoziative Element "bedingung" ist ebenfalls optional. Dieses Feld sollte eine für Nutzer leicht verständliche Beschreibung der Anforderungen enthalten, die an die Werte in der jeweiligen Spalte gestellt werden.

Wenn mindestens eine der Variablen $dsatz_formular_standard, $res_index_pruefen_standard, $dsatz_POST_standard oder $dsatz_pruefen_standard den booleschen Wert true besitzt, sind immer die assoziativen Elemente "typ" und "vorgabe" erforderlich.
Im Element "typ" muss eine der Angaben "hi", "it", "ic", "ir", "ta" oder "se" stehen. Dieses kennzeichnet die Art des Eingabefeldes und damit welche weiteren Elemente für die Ausgabensteuerung und Prüfung erforderlich sind bzw. vorhanden sein können.
Im Element "vorgabe" ist der Wert zu notieren, der bei einem neuem Datensatz in das Eingabefeld einzutragen ist. Dieser Wert wird auch verwendet, wenn der mit diesem Eingabefeld übermittelte Wert gegen die Regeln für das Element verstößt.

Texteingabefeld (input type="text")

Für Eingabefelder mit "typ" = "it" (==> $lt;input type="text">) müsste das Element (inkl. der beiden optionalen Felder) wie folgt aufgebaut sein:

AnweisungHinweise
$form_felder[0] = array();
$form_felder[0]["spalte"] = "geb";
$form_felder[0]["label"] = "Geburtsjahr";optionales Element
$form_felder[0]["typ"] = "it";
$form_felder[0]["vorgabe"] = "";
$form_felder[0]["text_rechts"] = false;false => die Zeichen im Eingabefeld werden linksbündig notiert. Bei true werden die Eingaben in dem Feld rechtsbündig angeordnet. true kann dann sinnvoll sein, wenn Zahlen eingegeben werden sollen.
$form_felder[0]["size"] = 4; Es muss ein Integerwert > 0 gewählt werden. Der Integerwert gibt an, wie viele Zeichen gleichzeitig im Eingabefeld maximal sichtbar sein sollen. Der Wert darf größer oder auch kleiner sein als der Wert von $form_felder[0]["pruefen"]["zeichen_max"]
$form_felder[0]["pruefen"] = array();Diese Anweisung muss deklariert werden. Wenn keine Teilelemente hinzugefügt werden, bedeutet dieses, bei der Standardprüfung, dass bis auf die verbotenen Steuerzeichen alle Zeichen erlaubt sind und die Zeichenkette beliebig lang sein darf.
$form_felder[0]["pruefen"]["zeichensatz"] = zahlen;Der Wert kann entweder aus dem Namen einer Konstanten oder einer Reihung der Konstantennamen aus __zac4web/__konstanten/zeichenvorraete.php, ggf. ergänzt um einen String mit weiteren Zeichen bestehen (z.B.:zahlen, abc_klein.zahlen."- /"). Oder es wird nur einen String mit Zeichen (z.B.: "01") oder die leere Zeichenkette zugewiesen.
Die leere Zeichenkette ist allerdings nur dann sinnvoll, wenn das Element $form_felder[0]["pruefen"]["zeichen_weitere"] vorhanden ist und diesem nicht die leere Zeichenkette zugeordnet ist.
$form_felder[0]["pruefen"]["zeichen_weitere"] = "";Wenn dieses Element vorhanden ist und nicht die leere Zeichenkette als Wert zugeordnet wird, muss es eine Zeichenfolge sein, die von der Funktion hp_zeichenkette_eintrag_erlaubt() aus der Datei "__wm/_admin/__funktionen/zeichenketten.php" als Bezeichner für eine Zeichenmenge akzeptiert wird.
$form_felder[0]["pruefen"]["zeichen_max"] = 4;Es muss 0 oder ein Integerwert > 0 zugeordnet werden. Falls der Wert 0 ist, bedeutet dieses, dass die eingegebene Zeichendkette beliebig lang sein darf. Falls ein Wert > 0 zugeordnet wird, wird die Zahl als Wert für das Attribut maxlength verwendet und beschränkt damit bei den meisten Browsern die Anzahl der Zeichen, die in das Eingabefeld eingegeben werden können.
$form_felder[0]["pruefen"]["zeichen_min"] = 4;Es muss 0 oder ein Integerwert > 0 zugeordnet werden. Die Zahl gibt an, wie viele Zeichen mindestens in das Eingabefeld eingegeben werden müssen.
$form_felder[0]["pruefen"]["min_wert"] = 1920;Gibt die Untergrenze an. Bei Zeichensätzen, die nicht nur Zahlen enthalten, würde mit einem Wert wie "De" erzwungen, dass alle Werte, die mit lexikalisch gesehen vor "De" stehen, nicht akzeptiert würden.
$form_felder[0]["pruefen"]["max_wert"] = 2010;Gibt die Obergrenze an. Bei Zeichensätzen, die nicht nur Zahlen enthalten, würde mit einem Wert wie "K" erzwungen, dass alle Werte, die mit dem Buchstaben "K" beginnen oder lexikalisch gesehen nach "K" stehen, nicht akzeptiert würden.
$form_felder[0]["bedingung"] = "Die Jahresangabe muss vierstellig eingetragen werden.";Bei dem Hinweis ist darauf zu achten, dass er so präzise wie nötig ist und nicht in Widerspruch zu den den Prüfbedingungen steht. Im Beispiel wurde auf die Angabe der Grenzen verzichtet, weil davon ausgegangen wird, dass diese aufgrund des Tabellenkontexts bekannt sind.

zum Anfang

verstecktes Eingabefeld (input type="text" hidden readonly)

Eingabefelder mit "typ" = "hi" (==> $lt;input type="text"> hidden readonly) werden eher selten eingesetzt.

  • Sie sind dann sinnvoll, wenn ein Spaltenwert für einen Datensatz automatisch vergeben wird und dieser vom Nutzer nicht verändert werden darf.
    Der Typ "hi" darf aber nicht für die Spalte verwendet werden, in welcher der Wert notiert wird, mit dem der Datensatz eindeutig identifiziert wird.
  • Bei der Verwendung dieses Eingabefeldes muss die Variable $dsatz_pruefen_standard den booleschen Wert false besitzen, damit über die Prüffunktion pruefen_info_erhalten_spezial() die automatische Zuordnung eines Wertes für diese Spalte erfolgen kann.
  • Obwohl der Aufrufer den Spaltenwert nicht verändern kann, muss für die Spalte im Formular ein Element vorhanden sein. Die Zeile wird - wenn die CSS-Vorgaben für ".hide_print" und ".hide_screen" nicht verändert wurden, unsichtbar ausgegeben, damit der Aufrufer nicht durch die Werte in der Zeile irritiert wird.

Das Element (inkl. der beiden optionalen Felder) muss wie folgt aufgebaut sein:

AnweisungHinweise
$form_felder[2] = array();
$form_felder[2]["spalte"] = "hash_index";
$form_felder[2]["label"] = "-";Sinnvoll ist es, wenn das optionale Element "label" vorhanden und diesem möglichst ein einzelnes druckbares Zeichen aus dem ASCII-Zeichensatz zugeordnet ist. Denn sonst wird der (vermutlich längere) Spaltenname im Formular unsichtbar ausgegeben
$form_felder[2]["typ"] = "hi";
$form_felder[2]["vorgabe"] = "";Weil der Wert vom System automatisch zugeordnet werden soll, ist es sinnvoll hier die leere Zeichenkette zuzuordnen. Über die Prüffunktion
$form_felder[2]["bedingung"] = "wird automatisch vergeben und daher im Formular nur versteckt ausgegeben.";Der zugeordnete Text kann beliebig gewählt werden. Doch ist es sinnvoll, wenn ein Text gewählt wird, der von der Aussage her mit dem hier zugeordneten Text übereinstimmt. Denn beim Aufruf der Hinweise zu der Tabelle wird dieser Hinweis ausgegeben. So kann der Aufrufer dann ableiten, warum er für diese Spalte im Formular keine Zeile sieht.

zum Anfang

Texteingabebereich (textarea)

["typ"] = "ta" -> Für Eingabefelder des Typs $lt;textarea> müsste das Element wie folgt aufgebaut sein:

int > 10;
AnweisungHinweise
$form_felder[1] = array();
$form_felder[1]["spalte"] = "";
$form_felder[1]["label"] = "";
$form_felder[1]["vorgabe"] = "";
$form_felder[1]["bedingung"] = "";
$form_felder[1]["typ"] = "ta";
$form_felder[1]["cols"] = 20;
$form_felder[1]["rows"] = 2;int > 1;
$form_felder[1]["maxlength"] = 00 oder int > 0, wenn 0, dann keine Beschränkung
$form_felder[1]["pruefen"] = array(); es können die gleichen Teilelemente wie bei typ = it genutzt werden

zum Anfang

Radiobuttons (input type="radio")

Für Eingabefelder mit "typ" = "ir" (==> $lt;input type="radio">) müsste das Element wie folgt aufgebaut sein:

AnweisungHinweise
$form_felder[2] = array();
$form_felder[2]["spalte"] = "";
$form_felder[2]["label"] = "";
$form_felder[2]["vorgabe"] = 0;int > -1. - Die Ziffer kennzeichnet über die Index-Nummer die Option die markiert sein soll, wenn das Formular zum Einfügen eines Datensatzes ausgegeben wird.
$form_felder[2]["typ"] = "ir";
$form_felder[2]["optionen"] = array();muss mindestens zwei Elemente auf der numerischen Ebene besitzen mit jeweils den assoziativen Elementen "value" und "zeigen", wobei der Wert der "value" zugeordnet ist, jener ist, der bei markierter Option in die Datenbank eingetragen ist/wird. Dem Element "zeigen" ist die textuelle Beschreibung zuzuordnen, die im Formular hinter dem Radiobutton für die Option ausgegeben werden soll
$form_felder[2]["optionen"][0] = array();
$form_felder[2]["optionen"][0]["value"] = "";
$form_felder[2]["optionen"][0]["zeigen"] = "";
$form_felder[2]["optionen"][1] = array();
$form_felder[2]["optionen"][1]["value"] = "";
$form_felder[2]["optionen"][1]["zeigen"] = "";

zum Anfang

Auswahlliste (select)

["typ"] = "se" -> Für Eingabefelder des Typs $lt;select>

Für Eingabefelder mit "typ" = "se" (==> $lt;select>) kann das Element entweder wie nachfolgend in der Tabelle mit dem Element "fk" aufgebaut sein. Oder es ist statt des Elements "fk" das Element "optionen" wie bei typ="ir" vorhanden.

Mit dem Element "fk" ist es möglich, die Daten zu Datensätzen, die in einer anderen Tabelle enthalten sind, im Auswahlfeld anzubieten, wenn über die Spalte, für die mit dem Eingabefeld der Wert erfasst werden soll, eine Verknüpfung zu einem Datensatz in einer anderen Tabelle hergestellt werden soll. Die Spalte, die als erstes im Element "spalten" notiert ist, muss einen eindeutigen Index besitzen, damit die Verknüpfung möglich ist. Der Wert aus der Spalte, die als erstes Element in "spalten" notiert ist, wird für den neuen Datensatz im Element "spalte" übernommen.

AnweisungHinweise
$form_felder[3] = array();
$form_felder[3]["spalte"] = "";
$form_felder[3]["label"] = "";
$form_felder[3]["vorgabe"] = 0; int >= 0, kennzeichnet die Option die markiert sein soll, wenn das Formular zum Einfügen eines Datensatzes ausgegeben wird
$form_felder[3]["typ"] = "se";
$form_felder[3]["fk"] = array();
$form_felder[3]["fk"]["db"] = 0;int >= 0, Index der Datenbank in $datenbanken, welche die verknüpfte Tabelle enthält
$form_felder[3]["fk"]["tabelle"] = "";Name der verknüpften Tabelle
$form_felder[3]["fk"]["spalte"] = ""; Name der verknüpften Spalte
$form_felder[3]["fk"]["zeigen"] = array();
$form_felder[3]["fk"]["zeigen"]["spalten"] = array();eindimensionales Feld (numerisch), Namen der Spalten, deren Werte in der Auswahlliste anzuzeigen ist, die erste Spalte enthält die Werte, die übernommen werden können
$form_felder[3]["fk"]["zeigen"]["erg"] = array();eindimensionales Feld (numerisch), maximal so viele Elemente (Typ: String) wie in "spalten", die enthaltene Zeichenfolge folgt bei der Ausgabe der Option in der Auswahlliste jeweils dem Wert, welches in "spalten" den gleichen Index besitzt.
$form_felder[3]["fk"]["zeigen"]["where"] = "";wenn nicht leere Zeichenfolge muss es eine korrekt formulierte WHERE-Bedingung sein, allerdings ohne das einleitende WHERE
$form_felder[3]["fk"]["zeigen"]["order_by"] = "";wenn nicht leere Zeichenfolge muss es eine korrekt formulierte ORDER BY-Bedingung sein, allerdings ohne das einleitende ORDER BY

zum Anfang

Checkbox (input type="checkbox")

Für Eingabefelder mit "typ" = "ic" (==> $lt;input type="checkbox">) müsste das Element wie folgt aufgebaut sein:

AnweisungHinweise
$form_felder[4] = array();
$form_felder[4]["spalte"] = "cb";statt "cb" ist der Name der Spalte in der Tabelle zu notieren
$form_felder[4]["label"] = "Checkbox";statt "Checkbox" ist die Zeichenfolge zu notieren, die im Fomular in der Spalte vor der Checkbox ausgegeben werden soll
$form_felder[3]["vorgabe"] = "";wenn die Vorgabe die leere Zeichenkette ist, ist die Checkbox beim Aufruf des Formulars zum Einfügen eines neuen Datensatzes nicht markiert. Wenn aber die Zeichenfolge "on" zugeordnet ist, wenn Checkbox markiert sein soll
$form_felder[4]["typ"] = "ic";
$form_felder[4]["text"] = "";die Aussage, die für den Datensatz gelten soll, wenn die Checkbox markiert ist. Der Text wird im Formular hinter der Checkbox notiert.

zum Anfang

Das Feld $select_spalten

Für die Formulare, in denen der Aufrufer einen Datensatz anhand einer Auswahlliste auswählen kann, wird eine verkürzte Darstellung der Datensätze benötigt, da in einer Auswahlliste je auswählbarem Datensatz nur eine Zeile mit einer zusammenhängenden Zeichenfolge möglich ist. Weil oftmals der Wert für dem Reservierungsindex eines Datensatzes für Menschen nicht besonders aussagekräftig ist, muss mit dem Feld $select_spalten für jeden Datensatz eine Wertekombination aus verschiedenen Spalten zusammengestellt werden.
Für jede Spalte, deren Wert für die Auswahlliste benötigt wird, ist ein Element erforderlich.
In dessem Teilfeld "col" ist der Spaltenname zu notieren, der im Abfrageergebnis für die Spalte verwendet wird (im Regelfall wird dieses der Spaltenname aus der Tabelle sein. Es sei denn der Spalte wurde in dem Teilelement "as" von $show_dsatz ein anderer Wert als die leere Zeichenkette zugeordnet. Dann ist jene Zeichenfolge zu verwenden.
Außerdem muss für jede der in $select_spalten enthalten Spalten das Teilelement "show" vorhanden sein, dem jeweils ein boolescher Wert zuzuordnet ist. Nur wenn der Wert true zugeordnet ist, werden die Zeichenfolgen, die den Datensätzen in der Spalte zugeordnet sind, sichtbar in der Auswahlliste angezeigt. Der boolesche Wert "false" für eine Spalte kann dann sinnvoll sein, wenn der Reservierungsindex wenig aussagekräftig ist und die übrigen angezeigten Zeichenfolgen die einzelnen Datensätzen aus menschlicher Sicht jeweils eindeutig identifizieren.
Mit dem optionalen Teilfeld "erg" kann einer Spalte, der für "show" der boolesche Wert true zugeordnet ist, eine Zeichenfolge zugeordnet werden, die in der Auswahlliste hinter der Zeichenfolge aus dieser Spalte notiert werden soll. Damit kann die Ausgabe optisch strukturiert werden, falls in der Auswahlliste für jeden Datensatz die Werte aus mehreren Spalten angezeigt werden sollen.

$select_spalten = array();
$select_spalten[0] = array();
$select_spalten[0]["col"] = "kurz";
$select_spalten[0]["show"] = "true";
$select_spalten[0]["erg"] = " - "; $select_spalten[1] = array();
$select_spalten[1]["col"] = "lang";
$select_spalten[1]["show"] = "true";

Beim Einfügen eines Datensatzes in die Datenbanktabelle und beim Ändern des Datensatzes werden für den Datensatz nur Werte in die Datenbanktabelle $db_tabelle in $database eingetragen. Wenn die Datenbanktabelle über einen Fremdschlüssel mit einer anderen Datenbanktabelle verknüpft ist, kann also nur der ausgewählte Fremdschlüsselwert in die entsprechende Spalte von $db_tabelle eingetragen werden, aber keine Werte innerhalb der verknüpften Datenbanktabelle eingetragen oder geändert werden. Daher enthält das Feld $form_felder für die Teilelemente auf der 1. numerischen Ebene im Gegensatz zu den beiden Feldern $show_dsatz und $suchen_dsatz nicht die assoziativen Elemente "db" und "tabelle".

zum Anfang

Funktionen

Sofern derjenige, der die Tabelle erzeugt oder bearbeitet, das Recht besitzt PHP-Code zu schreiben, kann er für einzelne Vorgaben einstellen, dass nicht die Standardfunktionen zu verwenden sind, sondern diejenigen, deren Inhalt er für die Tabelle jeweils selber notiert.

Nachfolgend sind die tabellenspezifischen Funktionen notiert, die ggf. aufgerufen werden.

function reservieren_tabellen_spezial($con, $con_spez, $reservieren_bis)

Funktion wird aufgerufen, bevor ein Datensatz ausgewählt worden ist, daher können keine Angaben zu einem Datensatz übermittelt werden. Es werden lediglich die vorhandenen Verbindungsdaten für den Datenbankzugriff und der Zeitstempel $reservieren_bis, der das Ende der grundlegenden Reservierung für den Bearbeitungsvorgang kennzeichnet beim Aufruf übermittelt. Der Rückgabewert dieser Funktion muss vom Typ boolean sein. Nur wenn true zurückgegeben wird, wird der Vorgang weiter fortgesetzt. Ansonsten werden alle Reservierungen, die für den Bearbeitungsvorgang eingetragen sind, gelöscht.

zum Anfang

function pruefen_reserviert_ist_tabelle_spezial($con, $con_spez, $aktion, $post_schritt, $key_wert, $key_feld)

Die Funktion soll prüfen, ob die benötigten Reservierungen von Tabellen vorhanden sind. Sie darf auch nicht vorhandene Reservierungen erzeugen. Es werden die vorhandenen Verbindungdaten für den Datenbankzugriff übermittelt. Damit die Prüfung der Reservierung / Erzeugungen der Reservierungen aktionsabhängig erfolgen können, werden die beiden Parameter $aktion und $post_schritt übermittelt. Sofern per Formular keine Angabe zu $post_schritt übermittelt worden ist, wurde $post_schritt die leere Zeichenkette zugeordnet. /** Funktion erzeugt tabellen_spezifische zusätzliche Reservierungen bzw. prüft deren Vorhandensein * Die Funktion wird nur dann benötigt und aufgerufen, wenn die Variable $reservieren_tabellen_standard * den Wert true false. Der Rückgabewert der Funktion muss vom Typ boolean sein, wobei true * anzeigt, dass alle benötigten dateispezifischen Reservierungen erzeugt wurden / vorhanden sind. * Wenn der Rückgabewert der Funktion false ist, kann kein Datensatz der Datei bearbeitet / * angezeigt werden. Die Datei _inc/db_tabelle_aendern.php löscht sämtliche Reservierungen, die * zum Bearbeitungsvorgang gehören, wenn diese Funktion false zurückgibt. Auch werden alle * Reservierungen für Datenbanktabellen und Datensätze gelöscht, sobald der Aufrufer die * Bearbeitung eines Datensatzes beendet. * * optionale Parameter * $key_wert (String) - Wert, welcher den Datensatz kennzeichnet - oder NULL,wenn kein * Datensatz für die Bearbeitung ausgewählt ist * $key_feld eindimensionales Feld (assoziativ), wenn * $aktion (String) - Name der Aktion ("show", "change", "insert", "delete"), falls * sich das Formular selber aufgerufen hat * $post_schritt (String) - ergänzender Hinweis zu den Aktionen * "change": "gewaehlt", "eingegeben", "bestaetigt", "korrigieren" * "delete": "gewaehlt", "bestaetigt" * "insert": "eingegeben", "bestaetigt", "korrigieren", "korrigiert" * * Rückgabewert * $bearbeiten_erlaubt (boolean) - true, wenn die dateispezifischen Reservierungen * erzeugt wurden oder vorhanden sind */ function reservieren_tabellen_spezial($key_wert = NULL, $key_feld = NULL, $aktion = NULL, $post_schritt = NULL) { // Rückgabewert initialisieren $bearbeiten_erlaubt = false; // abhängig von der Aktion und dem Schritt können unterschiedliche Reservierungen erzeugt und geprüft werden switch($aktion) { case "update": { break; } case "delete": { break; } case "insert": { break; } default: ; return $bearbeiten_erlaubt; } }

zum Anfang

function reservieren_dsatz_spezial($con, $con_spez, $reservieren_bis, $aktion, $key_name, $key_wert)

Diese Funktion wird nur aufgerufen, wenn eine Reservierung für den Bearbeitungsvorgang erzeugt werden konnte und sowohl "$reservieren_ganz = false," als auch "$reservieren_dsatz_standard = false;" gilt. Sie wird erst aufgerufen, wenn der Wert für $key_wert vorhanden ist, anhand dessen ein Datensatz aus "xxx_tab" eindeutig identifiziert werden kann, also nachdem ein Datensatz ausgewählt worden ist oder das Formular zum Einfügen eines neuen Datensatzes abgeschickt wurde.

Beschreibung Mit dieser Funktion können nach der Auswahl eines vorhandenen Datensatzes bzw. nach dem Erhalt der Informationen für einen neuen Datensatz, die erforderlichen tabellenspezifischen Reservierungen erzeugt werden. Ob auf Tabellenebene und/oder Datensatzebene reserviert wird, und wie viele Reservierungensbefehle ausgeführt werden, welche Tabelle und/oder welcher Datensatz aus welcher Tabelle ereserviert wird, wird alleine durch die Befehle innerhalb der Funktion bestimmt, desgleichen, ob die Reservierung an Bedingungen geknüpft sein soll. Damit aktionsabhängig reserviert oder geprüft werden kann, wird der Name der Aktion mit dem Parameter $aktion beim Funktionsaufruf übergeben. Benötigte Variablen, die nicht als Parameter übergeben werden, könnnen bei Bedarf als globale Variablen inkludiert werden.
Wenn die aufrufende Stelle im Skript "db_tabelle_aendern.php" den booleschen Rückgabewert "true" erhält, geht das System davon aus, dass es keinen Hinderungsgrund für die gewünschte Aktion gibt und bietet dann im Rahmen der Ausgabe das Formular an, mit dem die Aktion fortgesetzt werden kann.
Referenz-
objekte
keine
Parameter Sämtliche der hier genannten Parameter werden bei jedem Funktionsaufruf übergeben.
$con Verbindungsdaten für den Zugriff auf die Datenbank am Index 0 von $datenbanken.
Die Reservierungstabellen befinden sich immer in der Datenbank mit dem Index 0. Beim Aufruf einer Reservierungsfunktion ist immer dieser Wert für die Verbindungsdaten zu übergeben.
$con_spez Verbindungsdaten für den Zugriff auf die Datenbank $database.
Wenn $database = 0, ist der Wert identisch mit $con.
Der Wert wird an die Funktion übergeben, für den Fall, dass eine Datenbankabfrage auf der Datenbank $database innerhalb der Funktion erforderlich ist.
$reservieren_bis (int)
Der Wert gibt in Form eines Zeitstempel in UNIX-Notation an, bis wann die eingetragene Reservierung für den Bearbeitungsvorgang gültig ist.
$aktion (String) - einer der drei Werte "change", "delete" und "insert"
kennzeichnet die Aktion, deren Start den Aufruf der Funktion auslöst.
$key_name (String)
wenn $res_index_erstellen_standard = true; gilt, dann ist es die Zeichenfolge, die aus den Namen der Spalten gebildet wurde, die zum Reservierungsindex gehören, ansonsten der Wert des gleichnamigen Referenzobjektes der Funktion "key_cols_erstellen_spezial()
$key_wert (String)
wird anhand der Informationen, die vom Aufrufer per Formular für den Datensatz übermitttelt wurden gebildet.
Bei einem vorhandenen Datensatz ist es immer der versteckt übermittelte Wert für die Identifikationsnummer des Datensatzes.
Wird ein neuer Datensatz eingefügt, ist es bei $res_index_erstellen_standard = true; der Rückgabewert der Funktion key_wert_bilden() aus "db_tabelle_aendern.php", ansonsten der Rückgabewert der Funktion key_wert_bilden_spezial($infos, $key_feld);
Rückgabe-
wert
(boolean)
Nur wenn der Wert true ist, wird "db_tabelle_aendern.php" die gewünschte Aktion fortsetzen.
Vorschläge für Befehle

$tabelle = "abc" // Name der Datenbank, aus der ein Datensatz reserviert werden soll
$db = X; // X (int) - identifiziert die Datenbank, zu der $tabelle gehört

$erlaubt = reservieren_dsatz_ms($con, $db, $tabelle, $spalte, $wert, $reservieren_bis);

return $erlaubt;

zum Anfang

function pruefen_reserviert_ist_dsatz_spezial($con, $con_spez, $aktion, $post_schritt, $key_name, $key_wert)

Nur wenn der Wert der booleschen Variablen $reservieren_ganz false und der Wert der booleschen Variablen $reservieren_dsatz_standard false ist, wird diese Funktion aufgerufen. Die Funktion soll prüfen, ob die Reservierungen, die zur Berabeitung des ausgewählten Datensatzes benötigt werden, weiterhin vorhanden sind. Sie darf auch nicht vorhandene Reservierungen erzeugen. Es werden die vorhandenen Verbindungdaten für den Datenbankzugriff übermittelt. Damit die Prüfung der Reservierung / Erzeugungen der Reservierungen aktionsabhängig erfolgen können, werden die beiden Parameter $aktion und $post_schritt übermittelt. Der Rückgabewert dieser Funktion muss vom Typ boolean sein. Nur wenn true zurückgegeben wird, wird der Vorgang weiter fortgesetzt. Ansonsten werden alle Reservierungen, die für den Bearbeitungsvorgang eingetragen sind, gelöscht. Die von dieser Funktion ggf. erzeugten Reservierungen werden außerdem gelöscht, sobald der Aufrufer die Bearbeitung eines Datensatzes abbricht oder erfolgreich beendet. * obligatorische Parameter * $key_wert (String) - Wert, welcher den Datensatz kennzeichnet - oder NULL,wenn kein * Datensatz für die Bearbeitung ausgewählt ist * $key_feld eindimensionales Feld (assoziativ), wenn * $aktion (String) - Name der Aktion ("show", "change", "insert", "delete") * $post_schritt (String) - ergänzender Hinweis bei den Aktionen * "change": "gewaehlt", "eingegeben", "bestaetigt", "korrigieren" * "delete": "gewaehlt", "bestaetigt" * "insert": "eingegeben", "bestaetigt", "korrigieren", "korrigiert" * * Rückgabewert * $bearbeiten_erlaubt (boolean) - true, wenn die dateispezifischen Reservierungen * erzeugt wurden oder vorhanden sind */ { // Rückgabewert initialisieren $bearbeiten_erlaubt = false; // abhängig von der Aktion und dem Schritt können unterschiedliche Reservierungen erzeugt und geprüft werden switch($aktion) { case "update": { break; } case "delete": { break; } case "insert": { break; } default: ; return $bearbeiten_erlaubt; } }

zum Anfang

function key_cols_erstellen_spezial(&$key_cols, &$key_name)

Diese Funktion wird niemals aufgerufen, wenn in einer Datenbank eine Auto-Increment-Spalte vorhanden ist, weil in diesem Fall für vorhandene Datensätze der Wert aus der Auto-Increment-Spalte als Reservierungsindex ($key_wert) für einen Datensatz verwendet werden muss und für neu einzufügende Datensätze die Zeichenfolge "NEU" erforderlich ist. Der Name des Reservierungsindex ($key_name) ist dann immer identisch mit der Auto-Increment-Spalte. das Element $key_cols enthält dann automatisch immer genau ein Element auf der numerischen Ebene und dessen assoziativem Element "col_name" wurde automatisch der Name der Auto-Increment-Spalte zugewiesen.

Falls für "xxx_tab" kein einziger eindeutiger Index deklariert wurde, kann das System für die Tabelle keinen Reservierungsindex ermitteln. Ein Reservierungsindex ist aber erforderlich, damit mit dem Skript "db_tabelle_aendern.php" Datensätze in die Tabelle "xxx_tab" eingefügt, verändert und gelöscht werden können. Daher kann - für den Fall, dass es keinen eindeutigen Index in $db_tabelle gibt, mit dieser Funktion angeben werden, aus welchen Spalten von $db_tabelle das Skript einen Reservierungsindex erstellen soll. Es ist darauf zu achten, dass in allen Skripten, in denen eine Reservierung von einzelnen Datensätzen der Tabelle erfolgen soll, die gleiche Spalte oder die gleichen Spalten ausgewählt werden. Werden mehrere Spalten ausgewählt, ist auch auf die gleiche Reihenfolge der Spalten zu achten, weil ansonsten durch die erzeugte Reservierung kein wirksamer Schutz gegenüber konkurrierenden Aktionen erzielt wird. Außerdem ist auch in den anderen Skripten für die Reservierung sowohl zwischen den Spaltennamen als auch zwischen den Spaltenwerten eines Datensatzes mit der Funktion "chr(26)" die Bitfolge für das Steuerzeichen  einzufügen. Dieses Zeichen, das an der Code-Position 26 der ASCII-Code-Tabelle steht, wird von den Systemen sonst nur verwendet, wenn eine Bitfolge, die ein Zeichen repräsentieren soll, innerhalb des anzuwendenden Zeichensatzes unbekannt ist. Das bedeutet aber auch, dass dieses Zeichen oder diese Bitfolge weder in einem Spaltennamen noch in einem der Werte enthalten sein darf, die in den Reservierungsspalten gespeichert sind, da ansonsten das Aufsplitten der Zeichenfolgen in den Spalten "spalte" und "wert" der Tabelle "_reservieren_datensaetze" im Skript "db_tabelle_aendern.php" falsche Werte liefert und evtl. die Bearbeitung der Tabelle verhindert.

Beschreibung Der Rückgabewert dieser Funktion muss ein zweidimensionales Feld (numerisch/assoziativ) mit mindestens einem Element auf der numerischen Ebene sein. Jedes Element auf der numerischen Ebene muss mindestens das assoziative Teilelement "col_name" enthalten.
Das Skript "db_tabelle_aendern.php" verwendet das Feld $key_cols in der Funktion select_vorbereiten(). An die Funktion select_vorbereiten() muss auch ein zweidimensionales Feld ($tabellen_inhalt, numerisch/assoziativ) mit ermittelten Datensätze übergeben werden. Das Feld $tabellen_inhalt muss für jedes Teilelement auf der assoziativen Ebene als Bezeichner mindestens alle Werte der Teilelemente "col_name" aus dem Rückgabewert dieser Funktion hier enthalten. Das heißt, es dürfen nur Namen der Spalten im Rückgabewert dieser Funktion auftauchen, die auch in der Variablen $show_dsatz enthalten sind. Denn die Funktion, welche $tabellen_inhalt als Rückgabewert enthält, nutzt für die Erstellung des Rückgabewertes immer die tabellenspezifische Variable $show_dsatz.
Das Skript "db_tabelle_aendern.php" nutzt die Werte aller assoziativen Elemente "col_name" der zweiten Felddimension des Rückgabewertes außerdem zur Bildung des Wertes für die Variable $key_name. Des weiteren werden die Werte aller Teilelemente "col_name" zu den Bezeichnern des eindimensionalen assoziativen Feldes $key_feld, wenn die Standardfunktionen key_name_splitten() und key_wert_aus_POST_erstellen() genutzt werden sollen.
Referenz-
objekte
&$key_cols zweidimensionales Feld (numerisch/assoziativ) mit fortlaufenden Indizes auf der numerischen Ebene beginnend mit 0 und auf der assoziativen Ebene jeweils mindestens mit dem Element "col_name", welches einen Spaltennamen enthält, der in $show_dsatz enthalten ist.
Nur dann ist es möglich ist, mit dem Skript einzelne Datensätze aus der Tabelle zu bearbeiten.
Weicht &$key_cols von diesen Vorgaben ab, können mit dem Skript nur die Datensätze aus der Tabelle abgerufen werden.
&$key_name (String)
Es darf kein anderer Typ zugewiesen werden.
Wenn der Wert von &$key_name beim Ende der Funktion weiterhin die leere Zeichenkette ist, lässt das Skript "db_tabelle_aendern.php" nur die Anzeige und die Suche nach Datensätzen zu.
Nur wenn dem Referenzobjekt durch die Funktion eine andere Zeichenfolge als die leere Zeichenfolge zugewiesen wird, erzeugt "db_tabelle_aendern.php" eine Reservierungsnummer für einen Bearbeitungsvorgang. Diese Reservierungsnummer wird benötigt, wenn in die Datenbanktabelle ein Datensatz eingefügt werden soll oder ein vorhandener Datensatz verändert oder gelöscht werden soll.
Wenn $reservieren_ganz = false und $reservieren_dsatz_standard = true; ist, wird der Wert von $key_name an die Reservierungsfunktionen (reservieren_dsatz_ms($con, $db, $tabelle, $spalte, $wert, $reservieren_bis) und pruefen_reserviert_ist_dsatz($con, $db, $tabelle, $spalte, $wert) ) als Wert für den Parameter $spalte übergeben.
Parameter obligatorische
keine
optionale
keine
Rückgabe-
wert
Die Rückgabe erfolgt durch die Veränderung der beiden erhaltenen Referenzobjekte.
Vorschläge für Befehle

$auto_increment = false;

$key_name = "";

$key_cols[0] = array();
$key_cols[0]["col_name"] = "";

zum Anfang

function key_wert_bilden_spezial($infos, $key_feld)

Beschreibung Funktion erzeugt anhand der beiden Parameter $infos und $key_feld den Rückgabewert $key_wert, der laut $infos der datensatzspezifische Reservierungswert für den zu $infos gehörenden Datensatz ist.
Referenz-
objekte
keine
Parameter
obligatorische
$infos eindimensionales Feld (assoziativ)
das Ergebnis der Funktion pruefen_info_erhalten()
$key_feld eindimensionales Feld (assoziativ)
Die Bezeichner sind die Namen der Spalten aus dem Reservierungsindex. Die Werte sind jene, die für den Bearbeitungsvorgang verwendet wurden.
optionale
keine
Rückgabe-
wert
$key_wert (String)
Die Zeichenfolge, die laut $infos der datensatzspezifische Reservierungswert ist.

zum Anfang

function key_name_splitten_spezial($wert)

/** Funktion splittet einen Wert, der als Identifikationswert für den ausgewählten Datensatz * übermittelt wurde, anhand des Zeichens an der ASCII-Code-Positon 26 in die Einzelteile auf. * Sofern dabei mindestens so viele Einzelteile entstanden sind, wie die globale Variable * $key_cols an Elementen auf der numerischen Ebene enthält, wird ein Feld für die Rückgabe erzeugt. * Anderenfalls wird der Wert -1 zurückgegeben. * * benötigte Parameter * $wert (String) - Wert der als Identifikationswert für einen Datensatz erhalten * wurde * * Rückgabewert * -1 wenn $wert von der Funktion in weniger Teile aufgespalten wird, als $key_cols * auf der numerischen Ebene an Elementen enthält * oder * $key_feld eindimensionales Feld (assoziativ) - mit so vielen Elementen, wie $key_cols * auf der numerischen Ebene enthält. Als Indizes werden die Werte aus den * Teilelementen "col_name" von $key_cols verwendet. Als Werte werden fort- * laufend die Teilstücke aus $wert zugeordnet. Falls $wert in mehr Teil- * stücke zerlegt wird, als $key_cols Elemente auf der numerischen Ebene * enthält, werden diese Teilstücke aus $wert ignoriert. Sie sind also * im Rückgabewert nicht mehr enthalten */
Beschreibung
Referenz-
objekte
Parameter
obligatorische
optionale
Rückgabe-
wert

zum Anfang

function key_wert_aus_POST_erstellen_spezial(&$fehler, &$key_feld, &$key_wert, $key_cols)

/** Funktion weist den Referenzobjekten $key_feld und $key_wert anhand von $key_cols und den * per POST erhaltenen Parametern Werte zu. Falls allerdings in POST erwartete Elemente * fehlen wird der Wert des Referenzobjektes $fehler zu -5 verändert. * * benötigte Referenzobjekte * &$fehler - wird zum Integerwert -5 verändert, wenn ein erwartetes Element für den * Reservierungsindex in $_POST fehlt, da dann Datenmanipulation * vermutet wird * &$key_feld - wird zunächst von der Funktion als leeres Feld neu initialisiert. Für * jedes Element aus dem Reservierungsindex, welches von der Funktion * untersucht wird, wird ein assoziatives Element eingefügt, dessen * Bezeichner der Name der Spalte aus dem Reservierungsindex ist und * dessen Wert aus dem gleichnamigen Element aus $_POST stammt. * $key_wert - wird zu einem String, wenn für die erste Spalte aus dem Reservierungs- * Index in $_POST ein Element enthalten ist. Die in $_POST enthaltenen * Werte für die Spalten aus dem Reservierungsindex werden zu einem * String zusammengefügt, wobei zwischen den einzelnen Werten als * Trennzeichen jeweils mit chr(26) die Bitfolge für das Steuerzeichen * an der ASCII-Code-Positon 26 (= unbekanntes / fehlerhaftes Zeichen) * eingefügt wird. * * Parameter * $key_cols zweidimensionales Feld (numerisch/assoziativ) - für jede Spalte aus dem Reservierungsindex ein Element auf der numerischen Ebene. Jedes Element enthält das assoziative Teilelement ("col_name"). Die Reihenfolge der Spalten innerhalb von $key_cols entspricht der Reihenfolge der Spalten innerhalb des Reservierungsindex * * Rückgabe: erfolgt nur über die Referenzobjekte */ function {
Beschreibung
Referenz-
objekte
Parameter
obligatorische
optionale
Rückgabe-
wert

zum Anfang

function kann_res_key_sein_spezial($key_feld)

Beschreibung Funktion muss prüfen, ob die in $key_feld enthaltenen Werte den Regeln entsprechen, die für die Spalten festgelegt wurden, die den Primärindex der Tabelle $db_tabelle bilden.
Die Funktion wird nur dann von dem Skript __zac4web/_db/tabellen/_inc/db_tabelle_aendern.php aufgerufen, wenn es mit der Funktion enthaelt_verbotenes_steuerzeichen($wert, true, true) festgestellt hat, dass in dem Wert, der für den Primärschlüssel übermittelt wurde, keines der ASCII-Zeichen enthalten ist, die an den Code-Positionen 0 - 31 stehen.
Das aufrufende Skript hat die Konstanten für die Zeichenvorräte inkludiert, ebenso die Funktionen zum Testen von Zeichenfolgen (__zac4web/__funktionen/zeichenketten.php). Diese können von der Funktion kann_res_key_sein_spezial($key_feld) daher genutzt werden. Das aufrufende Skript führt selber keinerlei Prüfung für die Werte durch. Für das Einfügen der Werte in die Datenbank werden Apostrophs und Backslashs maskiert und für die Ausgabe auf dem Monitor einige Zeichen durch HTML-Entities ersetzt.
Referenz-
objekte
keine
Parameter obligatorische
$key_feld eindimensionales Feld (assoziativ)
Das Feld enthält für jede Spalte, die zum Primärindex gehört ein Element. Die Namen der Elemente entsprechen den Namen der Spalten des Reservierungsindex. Die Werte in den Elementen sind vom Typ String und sollen zusammen genau einen Datensatz identifizieren.
optionale
keine
Rückgabe-
wert
$key_erlaubt (boolean)
Beim Rückgabewert true geht das aufrufende Skript davon aus, dass alle in $key_feld enthaltenen Zeichenfolgen für die Idenfizierung des Datensatzes zulässig sind. Beim Rückgabewert false bricht das Skript die Bearbeitung ab. Wenn der nicht zulässige Wert vom Aufrufer eingegeben wurde, wird er aufgefordert den Wert zu ändern. Wurde der fehlerhafte Wert allerdings mit den Formularen versteckt übermittelt, wird eine Datenmanipualtion vermutet und der Aufrufer ausgeloggt.

zum Anfang

function schreiben_insert_spezial($info_erhalten = NULL, $fehler = NULL)

/** gibt die Tabelle mit den Eingabefeldern aus, * die vom Nutzer ausgefüllt werden dürfen/müssen, * wenn ein neuer Datensatz eingefügt werden soll * Die optionalen Parameter sind dann vorhanden, wenn der Nutzer zuvor das * Formular schon ausgefüllt hatte und Fehler festgestellt wurden oder der * Nutzer selber wünscht, seine Eingaben zu korrigieren * * WICHTIG: Diese Funktion muss für jede Datenbanktabelle individuell * geschrieben werden, damit die Art der Formularfelder an den zulässigen * Inhalt der Tabellenspalten angepasst werden kann und weil u.U. per * SELECT-Feld die zulässigen Fremdschlüsselwerte eingelesen werden müssen * oder zu speichernde Werte in der Eingabe auf mehrere Eingabefelder * verteilt eingegeben werden sollen, um Fehleingaben zu verhindern * * benötigte Parameter: keine * * optionale Parameter * $info_erhalten die vom Nutzer eingetragenen Werte im Eingabeformular * $fehler ein assoziatives Feld mit Angaben zu den * vorhandenen Fehlern in $info_ermittelt * * kein Rückgabewert */

zum Anfang

function schreiben_change_spezial($info_ist, $info_erhalten = NULL, $fehler = NULL, $insert = false)

/** gibt die Tabelle mit den IST-Werten und den Eingabefeldern aus, * die vom Nutzer ausgefüllt werden dürfen/müssen, * wenn ein Datensatz verändert werden soll * Die optionalen Parameter sind dann vorhanden, wenn der Nutzer zuvor das * Formular schon ausgefüllt hatte und Fehler festgestellt wurden oder der * Nutzer selber wünscht, seine Eingaben zu korrigieren * * WICHTIG: Diese Funktion muss für jede Datenbanktabelle individuell * geschrieben werden, damit die Art der Formularfelder an den zulässigen * Inhalt der Tabellenspalten angepasst werden kann und weil u.U. per * SELECT-Feld die zulässigen Fremdschlüsselwerte eingelesen werden müssen * oder zu speichernde Werte in der Eingabe auf mehrere Eingabefelder * verteilt eingegeben werden sollen, um Fehleingaben zu verhindern * * benötigte Parameter: * $info_ist die für das Eingabeformular aufbereiteten * Informationen, die zum Datensatz gepeichert sind * * optionale Parameter * $info_erhalten die vom Nutzer eingetragenen Werte * für das Eingabeformular * $fehler ein assoziatives Feld mit Angaben zu den * vorhandenen Fehlern in $info_ermittelt * * kein Rückgabewert */

zum Anfang

function pruefen_info_erhalten_spezial(&$info_erhalten, $key_feld, $aktion, $post_schritt)

/** Prüfen, ob die in $info_erhalten" enthaltenen Daten * den Anforderungen entsprechen, * Prüf-Ergebnis in ein assoziatives Feld eintragen * * benötigte Referenzobjekte * &$info_erhalten eindimensionales Feld (assoziativ) mit den per Post erhaltenen Werten * für den Datensatz. Die Zeichen aus den Werten von $info_erhalten * (und ggf. auch die Bezeichner der Teilelemente) sind von der Funktion - soweit erforderlich - umzuwandeln. Wenn im Rückgabewert $fehler_feld das Element "#".chr(26)."#" den booleschen Wert false besitzt, die Daten also eingetragen werden dürfen weil kein Fehler entdeckt wurde, wird aus &$info_erhalten der SQL-Befehls für das Eintragen der Werte in die Datenbank formuliert. Sollte dann in &$info_erhalten ein Bezeichner vorhanden sein, zu dem es keine gleichnamige Spalte in der Datenbanktabelle gibt, scheitert der SQL-Befehl auf jeden Fall. * * benötigte Parameter * $key_feld eindimensionales Feld (assoziativ) - die Elementnamen sind die Namen der * Spalten die zum Reservierungsindex gehören und die Werte sind diejenigen * des ausgewählten Datensatzes in diesen Spalten * $aktion (String) - damit abhängig von der Aktion die Prüfung und * Umsetzung durchgeführt werden kann. * $post_schritt (String) - damit abhängig von dem Teilschritt innerhalb der * Aktion die Prüfung und Umsetzung durchgeführt werden kann. * * Rückgabewert * $fehler_feld eindimensionales Feld (assoziativ) mit den Ergebnissen der Fehlerprüfung * Das Feld enthält auf jeden Fall das boolesche Feld, dessen Namen * die Zeichenfolge "#".chr(26)."#" ist. Der Wert dieses Elements ist * nur dann false, wenn kein Fehler entdeckt wurde. * Für jede Spalte, in der ein Fehler entdeckt wurde, enthält $fehler_feld * außerdem ein Element, dessen Name identisch ist mit dem Spaltennamen. */

zum Anfang

function feld_bedingungen_erstellen_spezial()

Die Funktion wird aufgerufen wenn $dsatz_formular_standard = false; notiert ist. Sie muss entweder ein leeres Feld oder ein eindimensionales Feld (assoziativ) zurückgeben. Der Rückgabewert dieser Funktion wird benötigt, wenn der Aufrufer sich die Hinweise zur Datei anzeigen lässt.Sofern der Rückgabewert nicht das leere Feld ist, werden die Angaben aus dem Rückgabewert auf der Übersichtsseite mit den Hinweisen unter der Überschrift "Bedingungen an die Eingaben" in einer Tabelle ausgegeben. Für jedes Element aus dem assoziativen Feld wird der Indexwert in der Spalte "Formularzeile / Eingabefeld" und der zugeordnert Wert in der Spalte "Bedingung" ausgegeben. Parameter: keine Rückgabewert: leeres Feld oder eindimensionales Feld (assoziativ) - vgl. Funktionsbeschreibung

zum Anfang

function infos_ermitteln_aus_POST_spezial()

/** die per $_POST-Feld erhaltenen Informationen auslesen, soweit die Werte * der assoziativen Elemente "spalte" auf der zweiten Ebene von $form_felder * in $_POST enthalten sind. * Wurde ein Wert als String übergeben wurde, wird er unverändert * dem zugehörigen Element im Rückgabewert als Wert zugeordnet. * Ist die Variable vorhanden und wird kein String übergeben, ist der Wert * der entsprechenden Variable im Rückgabewert der Integerwert 1, weil es sich * bei dem Element im Formular um eine angekreuzte Checkbox * handelte. * Fehlt zu einem Element aus $form_felder ein gleichnamiges Element in $_POST, * wird es in $infos nicht ergänzt * * Rückgabewert * $infos eindimensionales Feld (vgl Funktionsbeschreibung), als * Bezeichner für die Elemente wird jeweils der Name * der zugehörigen Spalte in der Datenbanktabelle verwendet. */ {

zum Anfang

function db_tabelle_show_spezial($tabellen_inhalt, $anzahl)

/** legt fest, wie die Datenbankinhalte anzuzeigen sind, wenn die Variable * $db_tabelle_show_standard den Wert false aufweist. * * benötigte Parameter * $tabellen_inhalt zweidimensionales Feld mit dem Inhalt der Datenbanktabelle * $anzahl (int) - Anzahl der Elemente auf der ersten Ebene von $tabellen_inhalt * * kein Rückgabewert */

zum Anfang

function db_tabelle_show_dsatz_spezial($tabellen_inhalt, $anzahl)

/** Funktion gibt den Datensatz aus mit einem spezifischen Text darüber, * wird von db_tabelle_aendern.php aufgerufen, wenn die Variable $db_dsatz_show_standard * den Wert false aufweist * * benötigte Parameter * $dsatz eindimensionales Feld (assoziative) mit den erhaltene oder aus der * Datenbank ermittelten ermittelten Informationen für einen Datensatz. * $text (String) - Hinweis zu der auszuführenden Aktion * $info_ist abhängig von der Aktion entweder der Wert NULL * oder die bisher eingetragenen Informationen für den Datensatz */

zum Anfang

function db_tabellen_show_kopf_spezial($spalten_inhalt)

/** legt fest, wie die Datenbankstruktur bei leerer Datenbanktabelle * anzuzeigen ist, wenn die Variable $db_tabelle_show_standard den Wert false aufweist * * benötigte Parameter * $spalten_namen eindimensionales Feld(numerisch) mit den Spaltennamen der * Datenbanktabelle * * kein Rückgabewert */

zum Anfang

function dsatz_zeigen_bilden_spezial($show_dsatz, $info, $neu, $con_spez)

/** Funktion wird aufgerufen, wenn dsatz_zeigen_standard == false ist. Die Funktion bereitet die Daten aus $infos für die Anzeige auf. Falls keine Aufbereitung * erforderlich ist, weil $infos alle Elemente enthält, die angezeigt werden sollen, reicht es den Wert $infos unverändert zurückzugeben. * * erhaltene Parameter * $show_dsatz (siehe Variablendeklaration $show_dsatz. ) * $infos eindimensionales assoziatives Feld, * entweder Referenzobjekt der Funktion pruefen_info_erhalten() oder pruefen_info_erhalten_spezial() * mit den vom Nutzer erhaltenen Informationen zum Datensatz * oder das Feld an der Indexposition 0 des Rückgabewertes der * Funktion dsatz_select(0) * $neu kennzeichnet, ob $infos mit pruefen_info_erhalten() oder * dsaetze_select() erstellt/veränder wurde. * $con_spez Verbindungsdaten für die Datenbank $database, in der sich $db_tabelle befindet * * Rückgabewert * $dsatz wenn $db_dsatz_show_standard == true; ist, muss der Rückgabewert ein eindimensionales assoziatives Feld mit den Informationen sein, die für den Datensatz anzuzeigen sind. Bei $db_dsatz_show_standard == false muss er die Struktur besitzten, die für den Parameter $dsatz der Funktion db_tabelle_show_dsatz_spezial gefordert wird. */

zum Anfang

function dsaetze_select_spezial(&$zuviele, $con_spez, $limit, $where_von, $where, $insert_von, $col_von)

/** Funktion wird zur Ermittlung der auszugebenden Datensätze aufgerufen, wenn * $db_tabelle_show_standard == false ist * * benötigte Referenzobjekte * &$zuviele (boolean) - sollte den Wert true erhalten, wenn mehr als * $limit Datensätze gefunden wurden, wenn $limit > 0, * wenn &$zuviele == true, wird der Rückgabewert * $tabellen_inhalt von db_tabelle_aendern.php ignoriert * * benötigte Parameter * $con_spez Verbindungdaten für den Zugriff auf die Datenbanktabelle db_tabelle * $limit (int) - falls > 0 gibt diese an, wie viele Datensätze maximal im Rückgabewert enthalten sein dürfen * $where_von (String) - entweder leere Zeichenkette oder die Teilbedingung für WHERE, * dass nur die eigenen Datensätze im Abfrageergebnis enthalten sein * dürfen ("`".$col_von."` = ".aufrufer_ID) * $where (String) - leere Zeichenkette oder die Suchbedingung, welche der * Aufrufer eingegeben hat, allerdings ohne das einleitende WHERE * $insert_von (boolen) - wenn true, wird für die Datensätze jeweils in der Spalte * $col_von erfasst, wer den Datensatz eingefügt hat * $col_von (String) - Name der Spalte von $db_tabelle, in welcher bei jedem Datensatz die Identifikationsnummer der Person gespeichert werden soll, die den Datensatz eingegeben hat * * Rückgabewert * $tabellen_inhalt zweidimensionales Feld (numerisch/assoziativ) mit den Informationen zu * den Datensätzen in db_tabelle , die für die Ausgabe benötigt werden, * . In diesem Rückgabewert muss als Spaltenbezeichner $col_von und die Werte aus dieser Spalte * enthalten sein, falls $insert_von == true ist. */

zum Anfang

Zuordnung von weiteren Variablen zu Funktionen

Folgende Zuordnung besteht in dem Skript "__zac4web/_db/tabellen/_inc/db_tabelle_aendern.php" zwischen den Variablen und den Funktionen:

Variable muss implementiert sein bei "false" Hinweise
$reservieren_tabellen_standard reservieren_tabellen_spezial()
pruefen_reserviert_ist_tabelle_spezial()
  • Wenn das Skript "db_tabelle_aendern.php" feststellt, dass die Tabelle "xxx_tab" eine Auto-Increment-Spalte besitzt, wird der Variablen $reservieren_tabellen_standard intern immer der boolesche Wert "true" zugewiesen, weil dann das Standardverfahren für die Reservierung genutzt werden muss.
$reservieren_dsatz_standard reservieren_dsatz_spezial()
pruefen_reserviert_ist_dsatz_spezial()
  • Wenn das Skript "db_tabelle_aendern.php" feststellt, dass die Tabelle "xxx_tab" eine Auto-Increment-Spalte besitzt, wird der Variablen $reservieren_dsatz_standard intern immer fahren für die Reservierung genutzt werden muss.
$res_index_erstellen_standard key_cols_erstellen_spezial()
key_wert_bilden_spezial()
key_name_splitten_spezial()
key_wert_aus_POST_erstellen_spezial()
  • Wenn das Skript "db_tabelle_aendern.php" feststellt, dass die Tabelle "xxx_tab" eine Auto-Increment-Spalte besitzt, wird der Variablen $res_index_erstellen_standard intern immer der boolesche Wert "true" zugewiesen, weil dann das Standardverfahren für die Reservierung genutzt werden muss.
  • Wenn die Variable den Wert "true" besizt, dürfen die Namen der Spalten, die zum Reservierungsindex gehören, nicht das Zeichen an der Position 26 der ASCII-Code-Tabelle enthalten. Denn beim Standardverfahren wird dieses Zeichen von dem Skript "db_tabelle_aendern.php" bei einem mehrspaltigen Primärindex als Trennzeichen zwischen den Spaltennamen und zwischen den Werten eingesetzt.
$res_index_pruefen_standard kann_res_key_sein_spezial() Wenn die Variable den Wert "true" besizt, dürfen die Werte in den Spalten, die den Reservierungsindex enthalten, keines der Zeichen an den Unicode-Positionen 0-31 und 127-159 enthalten.
$dsatz_formular_standard feld_bedingungen_erstellen_spezial()
schreiben_insert_spezial()
schreiben_change_spezial()
$dsatz_POST_standard infos_ermitteln_aus_POST_spezial()
$dsatz_pruefen_standard pruefen_info_erhalten_spezial()
$dsatz_zeigen_standard dsatz_zeigen_bilden_spezial()
db_dsatz_show_standard db_tabelle_show_dsatz_spezial()
$db_tabelle_show_standard dsaetze_select_spezial()
db_tabelle_show_spezial
db_tabellen_show_kopf_spezial

zum Anfang

Ende der Datei "pflegen.php"

Die letzten beiden Befehle innerhalb der Datei "pflegen" müssen die beiden Befehle "include zac4web_pfad."__zac4web/_db/tabellen/_inc/db_tabelle_aendern.php";" und "include zac4web_pfad."__zac4web/_wm/html_ende.php";" sein.
Das Skript "db_tabelle_aendern.php" enthält die Befehle, die benötigt werden, um die tabellenspezifischen Inhalte anzeigen und verändern zu können. Das Skript "__zac4web/_wm/html_ende.php" muss eingebunden werden, um die Ausgabe für die Seite korrekt zu beenden.

Wenn die formularbasierte Veränderung in Zukunft möglich sein soll, müssen die beiden Befehle in einem eigenständigen php-Block, der aus genau vier Zeilen besteht, notiert werden. Nach diesen vier Zeilen darf keine weitere Zeile folgen.

<?php

include zac4web_pfad."__zac4web/_db/tabellen/_inc/db_tabelle_aendern.php";

include zac4web_pfad."__zac4web/_wm/html_ende.php";

?>

Bei der formularbasierten Erstellung/Bearbeitung der Datei "pflegen.php" wird zwar hinter "<?php" der Kommentar " // Ende des Skripts - darf nicht verändert werden" notiert. Um die Datei formularbasiert verändern zu können, braucht dieser Kommentar aber nicht vorhanden zu sein und darf auch völlig anders lauten.

zum Anfang

 

© zacher-info.de

- Seite zuletzt geändert: 03.11.2023 - Elisabeth Zacher