baseportal
Suche: 
 Forum   Start 

get / get_next (Datenbank abfragen)

 
Baseportal stellt spezielle Befehle zur Behandlung von Datenbanken bereit. Sie erlauben den Abruf, das Hinzufügen, Ändern oder Löschen von Datensätzen. Da Sie diese Befehle in Templates einsetzen, die nur Sie verändern können, haben Sie mit diesen Befehlen immer Zugriff auf alle Ihre Datenbanken - unabhängig davon, wie die Rechte dieser Datenbanken gesetzt sind.

 

Definition:

 
    get <i>Abfrage</i>, <i>Datenbank</i>,
    <i>Ergebnis</i>;

Alle Felder sind optional. Ohne irgendeine Angabe werden die per URL übergebenen Parameter genommen, fehlen auch diese, wird die gleichnamige Datenbank (wie das Template) komplett gelesen. Die Abfrage entspricht den Datenbank-Abfragen bei "loop", "do" oder über die URL und kann als String oder Referenz auf eine Liste übergeben werden. Datenbank gibt den Namen der Datenbank an. Ergebnis bezeichnet einen "Hash" in dem die resultierenden Datensätze gespeichert werden sollen; standardmässig wird hier der Name der Datenbank genommen.

Der erste passende Eintrag wird in Variablen, mit den entsprechenden Feldnamen, gespeichert (genau wie bei loop).

Beispiele:

 

    get
    "KundenNr==32631", "adressen";<br>
    out "Name: $Name, Ort: $Ort, Telefon: $Telefon";


Holt alle Datensätze bei denen "KundenNr" den Wert "32631" besitzt aus der Datenbank "adressen" und gibt den ersten davon aus.

Hiermit lässt sich ein individueller Zugangsschutz sehr einfach realisieren:

 

    get
    "Name==!$namerein", "nutzer";<br>
    if($Passwort ne "" && $Passwort eq
    $passwortrein)<br>
    {<br>
      # Hier die Ausgabe der eigentlichen Datenbank<br>
      # z.B. mit get_next (s.unten)<br>
    } else<br>
    {<br>
      out "Zugang verboten!";<br>
    }


Holt aus der Datenbank "nutzer" den passenden Nutzer mit dem per URL oder Formular übergebenen "namerein". Der Wert des Feldes "Passwort" wird dann mit dem ebenfalls per URL oder Formular übergebenen "passwortrein" verglichen. Stimmen beide überein wird z.B. eine Datenbank ausgegeben, wenn nicht, erfolgt die Ausgabe "Zugang verboten!". Achten Sie darauf, dass die Datenbank "nutzer" keinerlei Rechte für Aussenstehende hat!

Um an mehrere passende Einträge zu kommen, benötigt man einen weiteren Befehl:

get_next

Definition:

 
    get_next <i>Ergebnis</i>;

Holt den nächsten Datensatz von Ergebnis und speichert ihn in Variablen, mit den entsprechenden Feldnamen. Ohne Angabe von Ergebnis wird die zuletzt abgerufene Datenbank genommen.

 

Beispiele:

 

    get;
    while(get_next)<br>
    {<br>
      out "Name: $Name - Auto: $Auto<br>";<br>
    }


Holt alle Datensätze der zum Template gehörigen oder per URL übergebenen Datenbank und gibt sie aus.

Mehrere Abrufe per "get" und "get_next" können verschachtelt werden:

 

    get "Id==*",
    "kunden";<br>
    while(get_next("kunden"))<br>
    {<br>
      out "Kunde: $Name<br>";<br>
      get "Name==$Auto", "autos";<br>
      out "Auto: $Name<br>";<br>
      out "Beschreibung: $Beschreibung<p>";<br>
    }


Hier wurde eine Relation zwischen den beiden Datenbanken "kunden" und "autos" hergestellt. Jeder Datensatz eines Kunden enthält ein Feld "Auto" mit dem Autonamen des Kunden. Dieser Wert wird verwendet, um den passenden Eintrag aus der Datenbank "autos" zu holen und die Beschreibung für dieses Auto auszugeben.

 

Sie können auch verschiedene Abfragen derselben Datenbank speichern. Zur Unterscheidung dient der "Ergebnis"-Parameter:

 

    get "Name~=a", "kunden";
    get "Name~=b", "kunden",
    "kmitb";<br>
    out "Alle Kunden mit a:<p>";<br>
    while(get_next("kunden"))<br>
    {<br>
      out "Kunde: $Name<br>";<br>
    }<br>
    out "<hr>Alle Kunden mit b:<p>";<br>
    while(get_next("kmitb"))<br>
    {<br>
      out "Kunde: $Name<br>";<br>
    }


Zuerst werden alle Datensätze, die mit "a" beginnen aus der Datenbank "kunden" geholt und im gleichnamigen Ergebnis gespeichert. Dann werden alle Datensätze, die mit "b" beginnen im Ergebnis "kmitb" gespeichert. Schliesslich werden beide Ergebnisse in entsprechenden Schleifen mit "get_next" ausgegeben.

 

Hinweis / Tipp

Wenn Sie mehrere Datenbankaufrufe auf einer Seite haben, dann muss zur Gewährleistung einer reibungslosen Funktion unbedingt die Angabe des Namens für die Ergebnismenge, der sogenannte Ergebnishash, angegeben werden.
Nur so kann Baseportal "wissen", welche Daten zu welcher Datenbank gehören.
Wenn Sie dies vergessen, werden Sie u.U. nicht reproduzierbare Fehlausgaben bzw. Fehlfunktionen hervorrufen.

(die bei Zusammentreffen mehrerer Faktoren sogar bis zum Datenverlust führen können, zumindest aber das Speichern/Ändern mittels put bzw. mod verhindern)

Es ist aus diesem Grund anzuraten, sich anzugewöhnen, den Ergebnishash in jedem Falle beim get, put bzw. mod mit anzugeben.

Beispiel:

Hier ist im get "autos" der Datenbankname, "roteautos" der Ergebnishashname
im mod der Datenbankname ebenfalls "autos" und der Ergebnishashname "andersrot";

Übrigens, dieser Scriptteil würde in jedem Datensatz der Datenbank "autos", bei dem im Datenbankfeld Namens "Farbe" der Wert "rot" oder "Rot" steht diesen in den Wert "dunkelrot" ändern

Letzte Änderung am 6.3.2006, 16:46 - Stichworte: get,Programmierung,Datenbankausgabe,Daten holenc - o - +

© baseportal GmbH. Alle Rechte vorbehalten.


powered in 0.02s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!