Definieren der SQL-Tabelle

Damit ein Datensatz einer bestimmten Position in der Quelle zugeordnet werden kann, muss dieser einen einmaligen Schluessel enthalten. Im Falle unserer SQL-Datenbank benoetigt die Tabelle einen Primaerschluessel und admin_panel muss herausfinden koennen wie dieser heisst. Saemtliche Programme verwenden dazu die automatisch von Klasse application erzeugte Instanz von Klasse dbdepend, welche als Mitgliedsvariable 'def' der gemeinsam verwendeten Datenbankschnittstelle zur verfügung steht ($this->db->def).

dbdepend fasst auch ganze Beschreibungen von Tabellen und deren Felder, und bietet darauf basiernde und hilfreiche Funktionen, z.B. zur Tabellenerstellung oder zum manipulieren von Baumstrukturen. Diese wollen wir uns zunutze machen und definieren die Tabelle 'personen' zusaetzlich zum Primaerschluessel mit Feldnamen und Typen.

Wieder ist die init()-Funktion der beste Ort, um unsere Tabelle zu definieren. In der folgenden Version wird die Tabelle auch, zusammen mit einem ersten Eintrag, erstellt.


  function init ()
  {
    $db =& $this->db;
    $def =& $db->def;

    # Definiere Tabelle 'personen' mit Feldnamen und SQL-Typ.
    $def->define_table (
      'personen',
      array (array ('n' => 'id',
                    't' => 'INT NOT NULL AUTO_INCREMENT PRIMARY KEY'),
             array ('n' => 'name',
	            't' => 'VARCHAR(255) NOT NULL'),
             array ('n' => 'vorname',
	            't' => 'VARCHAR(255) NOT NULL'),
             array ('n' => 'email',
	            't' => 'VARCHAR(255) NOT NULL'),
             array ('n' => 'fon',
	            't' => 'VARCHAR(255) NOT NULL'),
             array ('n' => 'fax',
	            't' => 'VARCHAR(255) NOT NULL'))
    );
    # Name des Primaerschluessels angeben.
    $def->set_primary ('personen', 'id');

    # Leeren Personeneintrag mit ID 1 erstellen, falls dieser nicht existiert.
    $res = $db->select ('*', 'personen', 'id=1');
    if ($res->num_rows () < 1) {
      $db->create_tables (); # Vorsichtshalber Tabelle erstellen.
      $db->create_row ('personen');
    }

    # Funktion 'person_editieren' als View definieren.
    $this->add_view ($this, 'person_editieren');

    admin_panel::instnace (new admin_panel ($this, 'Personendatenbank'));
  }

  function defaultview ()
  {
    $ui =& admin-panel::instance ();

    $ui->link ('Link zum Formular des ersten Datensatzes',
               'person_editieren', array ('id' => 1));
  }

      

Beispielanwendung (Quelltext)