anpera.net
http://anpera.homeip.net/phpbb3/

Transferbugverminderung - Verhindert manchen Transferbug
http://anpera.homeip.net/phpbb3/viewtopic.php?f=43&t=2590
Seite 1 von 1

Autor:  Eliwood [ Fr 26 Mai, 2006 16:42 ]
Betreff des Beitrags:  Transferbugverminderung - Verhindert manchen Transferbug

Als Antwort auf Kevz veröffentlichung seiner Antitransferbugmethode meine schon länger tadellos funktionierende Methode, um den Transferbug deutlich zu verringern!

Wie funktioniert er?
Es wird ein BackUp der Userdaten gemacht. Kurz vor dem speichern werden diese mit den geänderten verglichen, und alle Werte die keinen anderen Wert haben werden nicht in die Datenbank geschrieben!

Verhindert er den Transferbug zu 100%?
Nein!!

Benötige ich etwas zusätzliches?
Ja! Unbedingt ein BackUp!
Mehr nicht =)

Anleitung?
Hier:
Ersetze die gesammte Funktion "saveuser" mit dieser hier (normal: common.php):
$this->bbcode_second_pass_code('', 'function saveuser() {
global $session,$userbackup,$dbqueriesthishit,$REQUEST_URI;
if ($session['loggedin'] && $session['user']['acctid']!="") {
$session['user']['output'] = $session['output'];
$session['user']['allowednavs'] = serialize($session['allowednavs']);
$session['user']['bufflist'] = serialize($session['bufflist']);

$sql = 'UPDATE `accounts` SET ';
reset($session['user']);

while(list($key,$val) = each($session['user'])) {
if(!isset($userbackup[$key]) || $val != $userbackup[$key]) {
if (is_array($val))
$val = serialize($val);

$val = addslashes($val);
$sql.='`'.$key.'` = "'.$val.'", ';
}
}

$sql = substr($sql,0,strlen($sql)-2);
$sql.= ' WHERE `acctid` = '.$session['user']['acctid'];
db_query($sql);
}
}')

Suche (common.php, login.php):

$this->bbcode_second_pass_code('', '$session[user]=db_fetch_assoc($result);')

Füge danach ein:

$this->bbcode_second_pass_code('', '$userbackup = $session['code'];
unset($userbackup['output'],$userbackup['allowednavs']); // This field changes every hit =)')


Der Transferbug wird nicht (vollständig) verhindert!
PS: InnoDB wird nicht gebraucht ;)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/