
    ####
     B #  Datenbankfunktionen
    ####

    Interssanter ist die function_sql.php, wo eine Vielzahl an Layouts in den Funktionen enthalten sind, die über die Style 
    Einstellungen der css Datei gesteuert werden können. Ausserdem sind hier Möglichkeiten, die Ausgaben zu manipulieren und 
    z.B. Voreinstellungen für die Sortierung etc zu machen.

    Nutzen Sie diese Funktionen, wird ein mysqli-Wrapper automatisch geladen und Sie brauchen sich keine Gedanken machen, 
    ob die alte mysql-extension geladen wurde oder nicht.

    -------------------------------------------------------------------------------------------------------------------------

     * dbconnect($db_host, $db_user, $db_pass, $db_name)

       Verbindet sich zu einer beliebigen Datenbank und übergibt die Parameter wie User und Passwort. Soll immer die aktuelle 
       Datenbank verwendet werden, ist es einfacher, die Datei connect.php per require_once("connect.php"); aufzurufen, da hier
       die Parameter bereits eingestellt sind und nicht an die Funktion übergeben werden müssen. dbconnct() wird automatisch 
       aufgerufen.

    -------------------------------------------------------------------------------------------------------------------------


    * function myfetch_all($sql)

      Manchmal braucht man für Scripte nur die Inhalte einer Tabelle und will diese in der Folge selber auswerten oder weiter 
      verarbeiten. Die funcion_sql.php stellt für diese Zwecke Funktionen zur verfügung.

      $werte = myfetch_all($sql) liefert bei einem gültigen sql-Statement ein Array zurück, dass ausgewertet werden kann. 
      Dabei berücksichtigt die Funktion, dass Spalten von Tabellen ja auch Namen tragen und gibt auch diese Namen der Spalten 
      zurück.

      Als ergebnis bekommt man ein 2 dimensionales Array mit z.B. folgendem Inhalt.

        $werte[0][0] = Name der Spalte 1
        $werte[0][1] = Name der Spalte 2
        $werte[0][2] = Name der Spalte 3

        und so weiter

        $werte[1][0] = Inhalte Datensatz 1, Spalte 1
        $werte[1][1] = Inhalte Datensatz 1, Spalte 2
        $werte[1][2] = Inhalte Datensatz 1, Spalte 3

        $werte[2][0] = Inhalte Datensatz 2, Spalte 1
        $werte[2][1] = Inhalte Datensatz 2, Spalte 2
        $werte[2][2] = Inhalte Datensatz 2, Spalte 3

    -------------------------------------------------------------------------------------------------------------------------

    * function myfetch_wert($sql)

    funktioniert genauso wie myfetch_all, setzt als ersten Index allerdings die ID des Datensatzes der ausgelesen wird. Das 
    mehrdimensionale Array seiht also so aus:

        $werte[ID][0] = Inhalte Datensatz ID, Spalte 1
        $werte[ID][1] = Inhalte Datensatz ID, Spalte 2
        $werte[ID][2] = Inhalte Datensatz ID, Spalte 3

    Die ID kann also direkt über den Index adressiert werden.

    -------------------------------------------------------------------------------------------------------------------------

    * function myfetch_all_field($sql)

    funktioniert wie myfetch_all($sql) setzt nur den Spaltennamen als ersten Index. Das Array sieht also z.B. so aus:

        $werte['name1'][0] = Inhalte Datensatz ID, Spalte 1
        $werte['name2'][1] = Inhalte Datensatz ID, Spalte 2
        $werte['name3'][2] = Inhalte Datensatz ID, Spalte 3

    -------------------------------------------------------------------------------------------------------------------------

    * function dbquery($query)

    Die Funktion macht eigentlich im Wesentlichen nichts anderes als mysql_query, allerdings wird hier kontrolliert, ob ein
    SQL-Statement eines der Schlüsselwörter für das Triggern enthällt und logged gegebenenfalls den SQL-Befehl mit.
    Alle eigenen Queries sollten durch diese Funktion geleitet werden, damit sie gelogged werden.

    Welche Befehle gelogged werden, steht in der Datei /vars/.htprotokoll

    -------------------------------------------------------------------------------------------------------------------------

    * function myfetch_table($sql, $field=0, $href="", $bold=0, $idfield=0, $id="id")

    Die wohl umfangreichtste Funktion. Sie ermöglicht es, eine Tabelle komplett generieren zu lassen und setzt Sortierlinks 
    automatisch in der Kopfzeile. Es können ganze Tabellen oder auch nur einzlene Spalten ausgegeben werden, dazu sind aber 
    Parameter notwendig, die über Sessions gesetzt werden können und die das Aussehen und die Anzeige verändern.

    Im vorliegenden Script unterscheide ich ausserdem, ob es sich um die Termine-Tabelle, die Adress-Tabelle oder eine andere 
    Tabelle handelt, der Kalender bekommt einige besondere Eigenschaften mit (z.B. die Spalte, in der man Termine verschieben 
    kann).
    Steuern kann man das über eine Variable $_SESSION['adr_table'] die man z.B. auf 'kalender' setzen kann und die Spalte wird 
    hinzugefügt.

    Vor dem Aufruf der Funktion ist ein SQL-Statement zu erstellen, dass die Daten aus der Datenbank holt. Ein Query ist nicht 
    notwendig, die Funktion erledigt das selbständig. Sehen wir uns ein Beispiel an:

    Die Termintabelle hat folgenden Aufbau:

     0  |   1   |  2  |   3    |    4   |        5        |  6 |     7     |    8    |   9    |    10     |   11    |     12
   jahr | monat | tag | stunde | minute |      ymdhm      | id | Info-Text | user_id | zusatz | Adress_id | geb.tag | wiederholen


    Sagen Wir, wir haben einen Datensatz mit folgendem Aussehen (Zur Info, ymdhm wird aus Jahr, Monat, Tag, Stunde und Minute zu-
    sammengesetzt, es wird also 201105131751 ergeben).

       2011 |   05  |  13 |   17   |   51   |   201105131751  | 99 |   Info    |    17   |        |    10     |    0    |     0

       Wir haben für die Verbindung zur Datenbank gesorgt und natürlich die function_sql.php verfügbar gemacht. Die Variable

          $_SESSION['show_collumn'] = 0; wird gesetzt (welche Spalten sollen angezeigt werden, 0=alle, aber darauf komme ich noch)

       Ein SQL-Statement zum abfragen der Tabelle wurde zusammengebaut und übergeben

          $sql = "SELECT * FROM `termine` WHERE `jahr` LIKE '2011' AND `monat` LIKE '5' ORDER BY `ymdhm` DESC LIMIT 0 , 23";

       In der Datei kal_uebersicht.tpl (Verzeichnis templates/termine) ist ein Aufruf wie folgt:

          <b>myfetch_table($sql,8,"index.php?todo=detail",0,6,"kalid");</b>

       Sehen wir uns den Aufruf der Funktion nun Schritt für Schritt genauer an und analysieren wir die einzelnen Parameter die 
       beim Aufruf gesetzt werden:

          myfetch_table(<b><font color="red">$sql</font></b>)

          Parameter 1 ist also das SQL-Statement

       Der Aufruf würde mir nun die Einträge der gesamten kalender-Tabelle ausgeben. Das LIMIT 0,23 würde dafür sorgen, dass die 
       ersten 23 Einträge der Tabelle angezeigt werden (siehe MYSQL-Handbuch LIMIT)

            $_SESSION['show_collumn'] = 0; sorgt dafür, dass alle Spalten angezeigt werden. Mit dieser Variablen kann man die
            Spaltenanzeige und ihre Reihenfolge festlegen.

            $_SESSION['show_collumn'] = '3,9,1,5'; würde nur die Spalte 3,9,1 und 5 anzeigen und zwar in genau dieser Reihenfolge
            (ACHTUNG, ich zähle hier nicht bei 0 beginnend).

       Die folgenden beiden Parameter der Funktion ($field=0 und $href="") legen nun einen Link auf einen der Einträge. Die beiden 
       Parameter sind nur in Kombination gültig. Dabei haben die Parameter folgende Bedeutung:

            myfetch_table($sql,<b><font color="red">8</font></b>,<b><font color="red">"index.php?todo=detail"</font></b>) legt auf den Eintrag der Spalte 8 einen Link mit der URL
            index.php?todo=detail

            Parameter 2 legt fest, auf welche Spalte der Tabelle ein Link gesetzt werden soll
            Parameter 3 übergibt den Link, der gesetzt werden soll

       myfetch_table($sql,8,"index.php?todo=detail",<b><font color="red">1</font></b>) würde den Link Fett darstellen. der 4'te Parameter der Funktion legt also fest,
       ob der Link Fett oder normal ausgegeben werden soll.

            Parameter 4 übergibt also 1=bold, 0=normal

       An die URL wird von der Funktion automatisch die ID des Datensatzes angehängt. Standardmässig geht die Funktion davon aus, 
       dass die ID in der  ersten Spalte  der Tabelle zu finden ist. (ACHTUNG, die Zählung beginnt auch hier bei 0). Es würde also 
       das Jahr als ID übergeben. Die Ausgabe der URL sähe nun so aus:

            index.php?todo=detail&id=2011

       Nun liegt die ID des Termineintrages aber nicht in Feld 0 sondern in Feld 6, die URL wäre als nicht korrekt.
       Möchte man ein anderes Feld als ID übergeben, gibt man in der Funktion noch die Feldnummer an, in der die ID zu finden ist.

            myfetch_table($sql,8,"index.php?todo=detail",0,<b><font color="red">3</font></b>)

            Parameter 5 legt das Feld fest, in dem die eindeutige ID zu finden ist

       Obiges Besipiel würde nun das 4'te Feld (oder eben der Index 3, die Zählung beginnt ja bei 0) als id an die URL anhängen.
       Das 4'te Feld in der Termintabelle ist die Stunde. Unsere URL würde also folgendes Ergebnis haben:

            index.php?todo=detail&id=17

       Unsere ID liegt tatsächlich in Feld 6 daher ist also der korrekte Aufruf der Funktion folgender:

            myfetch_table($sql,8,"index.php?todo=detail",0,6), ergibt dann
            index.php?todo=detail&id=99

       Da an die URL die $_GET Variable "id" angehängt wird, könnte das Probleme ergeben, wenn man die Variable id bereits vergeben hat.
       Soll statt id eine andere Variable benutzt werden, lässt sich das über die Funktion mit dem letzten Parameter regeln.

            myfetch_table($sql,8,"index.php?todo=detail",0,6,<b><font color="red">"kalid"</font></b>);

       hängt an die URL nicht id= an sondern kalid=. Unsere fertige URL sieht also nun so aus:

            index.php?todo=detail&kalid=99

       myfetch_table($sql,8,"index.php?todo=detail",0,6,"gnubbel"); würde also folgende URL ergeben:

            index.php?todo=detail&gnubbel=99



       Zurück zum Template kal_uebersicht.php

            $_SESSION['adr_table'] = 'kalender';
            $_SESSION['show_collumn'] = '6,8';

            $sql = "SELECT * FROM `termine` WHERE `jahr` LIKE '2011' AND `monat` LIKE '5' ORDER BY `ymdhm` DESC";
            myfetch_table($sql,8,"index.php?todo=detail",0,6,"kalid");

    Diese 3 Zeilen erzeugen eine komplette Ausgabe der Termintabelle, wobei nur die Spalten 6 und 8 ausgegeben werden.
    Auf der Spalte 8 der Ausgabetabelle wird je Datensatz ein Link <b>index.php?todo=detail&kalid=ID_DES_DATENSATZES</b> erzeugt.
    Die Tabelle ist in der Kopfzeile mit einer Sortiermöglichkeit versehen, so dass nach jeder Spalte sortiert werden kann.
    Die Sessionsvar $_SESSION['adr_table'] = 'kalender' sorgt dafür, dass eine zusätzliche Spalte zum verschieben der Termine 
    in die Ausgabe-Tabelle eingefügt wird.

    -------------------------------------------------------------------------------------------------------------------------
