Quelltext der Datei bdb.php

<?php
/* bdb.php - Modul zum Zugriff auf die ASCII-Datenbank von Robert Bienert

Copyright (C) 2002, 2003 Robert Bienert <robertbienert@gmx.net>

Zum Datei-Format:
 *    Eine Zeile der Textdatei entspricht einer Datenbankzeile
 *    Kommentare sind jeweils von Zeilenanfang bis Zeilenende und beginnen
    mit einer Raute '#'. Ich empfehle Kommentare NUR am Anfang der Datei.
 *    Die einzelnen Spalten werden durch den senkrechten Strich '|'
    voneinander getrennt.
 *    Die Namen der Spalten werden in einer Zeile, die mit '!' beginnt, im
    gleichen Format wie normale Spalten definiert. Diese Zeile MUSS vor den
    Datensätzen stehen:
    !ID|Nachname|Vorname|Straße|...
 *    Die erste Spalte stellt den Primärschlüssel dar (in diesem Beispiel ID).

Zugriff auf die Datenbank:
--------------------------

    $db = ladeBDB($dbfile);

Lädt die Datenbank von der Datei $dbfile in das zweidimensionales Array
$db. Der Zugriff darauf erfolgt mit den folgenden Funktionen:

    holeBDBZelle($db, $zeile, $spalte);

Gibt den Wert der Zelle wieder, die die Koordinaten $zeile,$spalte hat.
$db ist die gleiche Variable, wie sie ladeBDB zurückgibt.

    $db = setzeBDBZelle($db, $zeile, $spalte, $wert);

Gibt die neue Datenbank als zweidimensionales Array in $db zurück. Die
Funktion setzt den Wert der Zelle $zeile,$spalte auf $wert, es erfolgt
also ein Eintrag in eine Zelle.

Abschließend sollten wir unsere Änderungen an der Datenbank auch
speichern:

    schreibeBDB($db, $dbfile);

Schreibt den Inhalt von $db nach $dbfile. Am zweckmäßigsten sind dies
die gleichen Variablen wie oben.
*/

function ladeBDB ($dbfile) {
    
$db file($dbfile);
    
$schluessel = array();
    
$datenbank = array();
    for (
$i 0$i count($db); ++$i) {
    
// durchlaufe die Datenbankdatei bis zum Dateiende
        
if (preg_match("/^#/"$db[$i])) continue;
        
// Kommentarzeilen beginnen mit einer Raute '#'
        
if (preg_match("/\!/"$db[$i])) {
            
$schluessel preg_split("/\|/"substr(chop($db[$i]), 1));
            continue;
        }
        
/* Die Namen der Zellen. $schluessel[0] enthält den  Namen des
         * Primärschlüssels. Der Wert dieses Schlüssels (ist eher für
         * uns wichtig) steht in $datei[0] (siehe unten). */
        
if (preg_match("/^\s/"$db[$i])) continue;
        
// Zeilen mit einem Space am Anfang werden ignoriert
        
$datei preg_split("/\|/"chop($db[$i]));
        
/* VORSICHT: $datei ist ein Array! $datei enthält eine Zeile als
         * ungeordnetes Array. Dies wird nun behoben: */

        
for ($a 0$a count($schluessel); ++$a) {
            
$key $schluessel[$a];    // ein String
            
$datensatz[$key] = $datei[$a];
        }
        
$primaerS $datei[0];    // Wert des Primärschlüssels
        
$datenbank[$primaerS] = $datensatz;
    }
    return(
$datenbank);
}

function 
schreibeBDB($datenbank$dbfile) {
    
$ersterEintrag each($datenbank);
    
/* Bei einem assoziativen Array kann ich nicht über die Indexzahlen
     * zugreifen. Deshalb hole ich mir mit each() das erstbeste Paar aus
     * Primärschlüssel und zugehörigem Datensatz. Der Array muss nicht
     * zurpckgesetzt werden, da dies von foreach erledigt wird. */
    
$kopfZeile '!';
    foreach(
$ersterEintrag[1] as $key => $value) {
        
$kopfZeile .= "$key|";    // Klappt jetzt
    
}
    
$fh fopen($dbfile'w');
    
fwrite($fhsubstr($kopfZeile0, -1) . "\n");
    
// entferne ein '|' zuviel und hänge "\n" an
    
foreach($datenbank as $primaerS => $datensatz) {
        
$zeile '';
        foreach(
$datensatz as $value) {
            
$zeile .= "$value|";
        }
        
fwrite($fhsubstr($zeile0, -1) . "\n");
    }
    
fclose($fh);
}

function 
holeBDBZelle($datenbank$primaerS$spalte) {
    
$datensatz $datenbank[$primaerS];
    return (
$datensatz[$spalte]);
}

function 
setzeBDBZelle($datenbank$primaerS$spalte$wert) {
    
$datensatz $datenbank[$primaerS];    // hole einen Datensatz
    
$datensatz[$spalte] = $wert;        // Setze Wert einer Zelle
    
$datenbank[$primaerS] = $datensatz;    // Zurückschreiben
    
return($datenbank);
}
?>


Copyright © 2001 - 2024 Robert Bienert - Impressum