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