skip_columns[]="inventory_uid"; } public function getInstance () { static $object; if (!$object) { $object = new self (); } return $object; } public function setVars ($varset) { foreach ($varset as $var => $value) { $this->vars[$var]=$value; } return true; } public function getAllVars () { return $this->vars; } public function load ($inventory_uid) { $querystr=" SELECT * FROM inventory WHERE inventory_uid='".$inventory_uid."'"; $db=DB::getInstance (); if (!$db->query ($querystr)) die ("Failed to query inventory item"); $this->vars=$db->fetchRow (); $this->orig_vars=$this->vars; $this->is_new=false; return true; } public function update () { // check to see if were a new inventory item (not loaded from the database) if ($this->is_new) { // Yep, ok, then insert all the data. $querystr=" INSERT INTO inventory SET ("; $values=" VALUES ("; // Loop over all the vars and pupulate the $querystr and $values strings. $some=false; foreach ($this->vars as $var => $value) { // skip columns that we dont want to insert/update in the db (let the db do the work). if (in_array ($var, $this->skip_columns)) continue; // If we have some columns already on there, then we need to add a ',' if ($some) { $querystr.=", "; $values.=", "; } // add the $var (or column name) to the $querystr $querystr.=$var; $values.="'".$value."'"; $some=true; } // close and combine the strings $querystr.=") ".$values.")"; // send query to the db to insert the data. $db=DB::getInstance (); if (!$db->query ($querystr)) die ("Failed to insert the inventory item."); // now we need to get the ID back from the db that it just created for that row $querystr="SELECT LAST_INSERT_ID() AS inventory_uid"; if (!$db->query ($querystr)) die ("Failed to get the last inventory item uid."); $row=$db->fetchRow (); $this->vars['inventory_uid']=$row['inventory_uid']; // mirror the vars onto the orig_vars $this->orig_vars=$this->vars; // mark this no longer new $this->is_new=false; return true; } // not new, so we need to get the differences between the vars we loaded and the vars we changed $diff=array_difference_assoc ($this->orig_vars, $this->vars); // if there are no differences, then theres nothing to do. if (!$diff || !count ($diff)) return true; // start the update $querystr=" UPDATE inventory SET "; // loop over the changed vars and add them to the update query $some=false; foreach ($diff as $var => $value) { // skip columns we dont want to send. if (in_array ($var, $this->skip_columns)) continue; // if we appended some then we need to seperate by a ',' if ($some) $querystr.=", "; // append var (column name) and value $querystr.=$var."='".$value."'"; $some=true; } // specify what row were updating $querystr.="WHERE inventory_uid='".$this->vars['inventory_uid']."'"; // send query to the db $db=DB::getInstance (); if (!$db->query ($querystr)) die ("Failed to update user."); // mirror the vars onto the orig_vars for later updates $this->orig_vars=$this->vars; return true; } } ?>