PHP-Code:
db_query("UPDATE ".$db_prefix."_userdaten SET a_free='".$_POST['a_free']."' WHERE uid='".$_POST['uid']."'"); 
das steht wahrscheinlich an der falsche stelle, jedenfalls dem kommentar
// Daten einlesen
nach zu urteilen...

zu dem upgrade teil:
werden die eingestellten änderungen in der datenbank gespeichert? (manuell nachschauen)
wenn ja, ist es nur ein fehler im auslesen der einstellungen, wenn nein, ein fehler bei setzen der einstellungen, musst halt ganz genau alle verwendeten bezeichungen für formular felder etc überprüfen, oft liegt es daran.