Mailinglisten-Archive |
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