| Hi, 
 gleich vorweg, das DB-layout ist nicht dabei, sollte Interesse bestehen, wie es genau funzt.. FRAGEN.
 
 Erklärung:
 - Wenn man es leid ist, das 2 oder mehr Benutzer ein und den selben Datensatz bearbeiten, dann kann man mit dieser CLASS
 Abhilfe schaffen.
 - Die Laufzeit des Scripts ist minimal.
 - Timeline-sperre
 - Absolute Konsistenz der DB geährleistet
 
 
 
        
            
                | 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 61:
 62:
 63:
 64:
 65:
 66:
 67:
 68:
 69:
 70:
 71:
 72:
 73:
 74:
 75:
 76:
 77:
 78:
 79:
 80:
 81:
 82:
 83:
 84:
 85:
 86:
 87:
 88:
 89:
 90:
 91:
 92:
 93:
 94:
 95:
 96:
 97:
 98:
 99:
 100:
 101:
 102:
 103:
 104:
 105:
 106:
 107:
 108:
 109:
 110:
 111:
 112:
 113:
 114:
 115:
 116:
 117:
 118:
 119:
 120:
 121:
 122:
 123:
 124:
 125:
 126:
 127:
 128:
 129:
 130:
 131:
 132:
 133:
 134:
 135:
 136:
 137:
 138:
 139:
 140:
 141:
 142:
 143:
 144:
 145:
 146:
 147:
 148:
 149:
 150:
 151:
 152:
 153:
 154:
 155:
 156:
 157:
 158:
 159:
 160:
 161:
 162:
 | 
<?php
 /**
 *
 * @desc block inserts in DB, there is take a record on other user
 * @version $Id$
 * @copyright 2008 by raiser
 */
 
 /**
 *
 *
 */
 class Lock{
 /**
 * Tabellenname welcher den zu lockenden Datensatz enthält
 * @var string
 * @access public
 * */
 var $tabelle;
 
 /**
 * Schlüssel, die für die zu lockende Tabelle gelten
 * @var array
 * @access public
 * */
 var $datensatz;
 
 var $lock=NULL;
 
 var $dbo;
 
 var $error=NULL;
 
 var $idmitarbeiter;
 
 var $locktime=NULL;
 
 /**
 * Constructor
 * @access protected
 * @param object $dbres Datenbankobjekt
 * @param string $tabelle   Optional Tabellenname zum locken
 * @param array  $datensatz Array der Schlüssel
 */
 function Lock($dbres,$tabelle=NULL,$datensatz=NULL){
 $this->dbo = $dbres;
 if($datensatz !== NULL && $tabelle == ''){
 $this->error = 'Lock::Lock(), Parameter $tabelle darf nicht leer sein. ';
 }
 
 elseif($datensatz !== NULL && !is_array($datensatz)){
 $this->error = 'Lock::Lock(), Parameter $datensatz muss ein Array sein.';
 }
 else{
 $this->tabelle = $tabelle;
 $this->datensatz = serialize($datensatz);
 }
 if($tabelle !== NULL && $tabelle != ''){
 $this->tabelle = $tabelle;
 }
 
 if($this->error !== NULL){
 echo $this->error;
 }
 }
 
 function checkLock($datensatz=NULL,$tabelle=NULL){
 if($datensatz !== NULL && !is_array($datensatz)){
 $this->error = 'Lock::checkLock(), Parameter $datensatz muss ein Array sein.';
 }
 else{
 $this->datensatz = serialize($datensatz);
 }
 
 if($tabelle !== NULL && $tabelle != ''){
 $this->tabelle = $tabelle;
 }
 else{
 $this->error = 'Lock:checkLock(), Parameter $tabelle darf nicht leer sein.';
 }
 if($datensatz === NULL && $tabelle === NULL && $this->lock !== NULL){
 return $this->lock;
 }
 $res =& $this->dbo->getRow('SELECT * FROM locks WHERE tabelle = ? AND
 datensatz = ?',array($this->tabelle,$this->datensatz),
 DB_FETCHMODE_ASSOC);
 if($res['uin']!= session_id() && $res['zeit']+ LOCKTIME > time()){
 $this->idmitarbeiter = $res['idmitarbeiter'];
 $this->locktime = $res['zeit'] + LOCKTIME;
 return  $this->lock = true;
 }
 else{
 if(count($res) > 0 && $res['zeit']+ LOCKTIME < time()){
 $this->unsetLock();
 }
 else{
 if(!empty($res['zeit']))
 $this->locktime = $res['zeit'] + LOCKTIME;
 }
 return $this->lock = false;
 }
 }
 
 function unsetLock($datensatz=NULL,$tabelle=NULL){
 
 $res =& $this->dbo->query('DELETE FROM locks WHERE tabelle = ? AND datensatz = ?',
 array($this->tabelle,$this->datensatz));
 $this->locktime=NULL;
 }
 
 function setLock($id){
 if($this->lock === NULL){
 exit('<p>Lock::setLock(), unerlaubter Zugriff</p>');
 }
 if($this->lock === false && $this->lock !== NULL){
 $this->dbo->query('INSERT INTO locks SET tabelle = ? , datensatz = ? ,
 uin = ? , zeit = ? , idmitarbeiter = ?',
 array($this->tabelle,$this->datensatz,
 session_id(),time(),$id));
 if($this->locktime === NULL){
 $this->locktime = time() + LOCKTIME;
 }
 }
 }
 
 function checkLockWrite($datensatz,$tabelle=NULL){
 
 if(!is_array($datensatz)){
 $this->error = 'Lock::checkLockWrite(), Parameter $datensatz muss ein Array sein.';
 return true;
 }
 
 if($tabelle !== NULL && $tabelle == ''){
 $this->error = 'Lock::checkLochWrite(), Parameter $tabelle darf nicht leer sein.';
 return true;
 }
 else{
 if($tabelle !== NULL){
 $this->tabelle = $tabelle;
 }
 }
 $this->datensatz = serialize($datensatz);
 $res =& $this->dbo->getRow('SELECT * FROM locks WHERE tabelle = ? AND
 datensatz = ?',array($this->tabelle,$this->datensatz),
 DB_FETCHMODE_ASSOC);
 if($res['uin'] != session_id()){
 $this->idmitarbeiter = $res['idmitarbeiter'];
 $this->locktime = $res['zeit'] + LOCKTIME;
 return true;
 }
 elseif($res['zeit']+ LOCKTIME < time()){
 return false;
 //echo $res['zeit']+ LOCKTIME,'nicht schreiben, stamp ';
 }
 else{
 //unsetLock($tabelle,$datensatz);
 return false;
 }
 }
 }
 ?>
 |  
 Bei Fragen.. einfach mal melden..
 
 
 Greez Hener
 Lieber einen Stehen und nicht sitzen können,
 als einen Sitzen und nicht stehen können.
 
 
 
  |