phpbar.de logo

Mailinglisten-Archive

Usereinstellungen speichern

Usereinstellungen speichern

Arash Yalpani mysql-de_(at)_lists.bttr.org
Mon, 18 Feb 2002 21:13:51 +0100


Hi Jens,

diesmal in der MySQL-Liste ;-)

>Wenn er Felder hinzufügen können will, dann muss er das sowieso im
>Frontend, in der Anwendung, in der Programmlogik und in der Datenbank
>machen - ob man den letzten Teil jetzt wegläßt oder nicht, ist doch
>ziemlich egal.

die Datenbank hätte ich bei meinem Ansatz vernachlässigen können. Darum
hätte sich dann die Businesslogik gekümmert (Also um neue Felder, deren
Verarbeitung usw.).

>Sonst leg doch deine DB-Klassen so aus, daß sie aus einem Array
>gefüttert werden und bei Bedarf neue Spalten automagisch hinzufügen.

Ich habe es jetzt so gelöst:

CREATE TABLE Setting (
  EntityType varchar(20) NOT NULL default '',
  EntityId int(10) unsigned NOT NULL default '0',
  EntitySettings text NOT NULL,
  PRIMARY KEY  (EntityType,EntityId)
) TYPE=MyISAM;

EntityType wäre so etwas wie "GROUP", "USER", usw. So bleibt das Ganze
flexibel und nicht nur auf User beschränkt.
EntityId wäre die Id der "GROUP", des "USERS", uws.
EntitySettings speichert dann die Eigenschaften (Email, Handy-Nummer, etc)
als String (serialisiertes Array).

Falls es interessiert: habe mir gerade eine Klasse dafür gebastelt:

<?php
// created on 18.02.2002 at 19:11

class SettingHandler {

  var $entityType;
  var $entityId;
  var $entitySettings;

  function SettingHandler($entityType, $entityId, $newEntitySettings =
array()) {
    $this->entityType     = $entityType;
    $this->entityId       = $entityId;
    if (!$this->load()) {
      $this->insert($newEntitySettings);
    }
  }

  function getSetting($name) {
    // not yet set? return false
    return defaultVal($this->entitySettings[$name], false);
  }

  function setSetting($name, $value) {
    $this->entitySettings[$name] = $value;
  }

  function getEntitySettings() {
    return $this->entitySettings;
  }

  function setEntitySettings($entitySettings) {
    $this->entitySettings = $entitySettings;
  }

  // load settings-array
  function load() {
    $db = new DbClass;
    $db->query("
      SELECT  EntitySettings
      FROM    Setting
      WHERE   EntityType = '". $this->entityType ."'
      AND     EntityId   = '". $this->entityId   ."'"
    );
    if (!$db->next_record()) {
      return false;
    }
    $this->entitySettings = unserialize($db->f('EntitySettings'));
    $db->free();
    return true;
  }

  // insert new entry for this entity-type/-id pair
  function insert($entitySettings = '') {
    $db = new DbClass;
    $db->query("
      INSERT INTO Setting (
        EntityType,
        EntityId,
        EntitySettings
      )
      VALUES (
        '". $this->entityType         ."',
        '". $this->entityId           ."',
        '". serialize($entitySettings) ."'
      )"
    );
    $db->free();
    $this->entitySettings = array();
  }

  // save/update this entity-type/-id pair
  function save() {
    $db = new DbClass;
    $db->query("
      UPDATE  Setting
      SET     EntitySettings = '".serialize($this->entitySettings)."'
      WHERE   EntityType     = '".$this->entityType."'
      AND     EntityId       = '".$this->entityId."'"
    );
    $db->free();
  }
}
?>

So lade/speichere ich Daten:
<?php
include(<alle.benötigten.include.dateien>);

$sh = new SettingHandler('USER', Std::sess('userId'));

// load user-settings
$settings = $sh->getEntitySettings();

// output user setting
echo $settings['Email'];

$settings['TonAn'] = 2;
$settings['Vollbild'] = 0;

// change settings
$sh->setEntitySettings($settings);

// save modifications
$sh->save();
?>

Grüsse, Arash


---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive