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.
|