anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Di 10 Jun, 2025 10:40

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fehler in der saveuser()?
BeitragVerfasst: So 13 Apr, 2008 18:54 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Okay, ich hab irgend ein Problem mit der saveuser(). Es ist natürlich nur eine Vermutung von mir, aber es könnte schon stimmen.

Willkürlich, immer wenn das System es mal wieder für zeitig befinde, kommt jener Fehler:

PHP:
UPDATE accounts SET acctid='1', name='`]D`1n`%e`$v`Qn`poj `QD`$o`%z`1o`]r `]D`1ra`%z`$a`Q´`pa`qr', sex='0',
blablabla, sehr viel code
gebt='0', spendendps='0', WHERE acctid = 1

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
'WHERE acctid = 1' at line 1

Gut, also liegt der Fehler daran, dass (in diesem Fall) das letzte Feldchen "spendendps" eingetragen wird, dann aber das , nicht entfernt wird. Eine sehr bedauerliche Sache natürlich, die ich so nicht gut heiße^^
Also mal einen Blick in die common.php geworfen:

PHP:
$sql="UPDATE accounts SET ";
reset($session[user]);
while(list($key,$val)=each($session[user])){
if (is_array($val)){
$sql.="$key='".addslashes(serialize($val))."', ";
}
else{
$sql.="$key='".addslashes($val)."', ";
}
}
$sql = substr($sql,0,strlen($sql)-2);
$sql.=" WHERE acctid = ".$session[user][acctid];


Bildet den $sql String, also das Query. So wie ICH das sehe wird in der vorletzten Zeile eigentlich korrekterweise das , und das Leerzeichen danach entfernt. Aber wenn es das täte, hätte ich oben den Fehler nicht!!!
Aber der Fehler kommt ja auch nicht immer, sondern immer mal wieder, wenn er Lust hat. Das ist vor allem lustig, wenn man gerade nen 30 Zeilen Post losschickt, was schon mal passieren kann bei uns ;)

Wenn jemand ne Lösung weiß, oder die Adresse von dem, den ich verklagen muss, bitte melden^^

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: So 13 Apr, 2008 19:50 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Wurde hier im Forum schon einige Male durchgesprochen. Soweit ich weiss, wusste aber bisher niemand einen Grund oder eine Lösung.

Mein Vorschlag: Bevor der Befehl ausgeführt wird, lass noch eine letzte Kontrolle darüber laufen, ob im String ein , WHERE acctid vorkommt. Falls ja, entfernen und dann ausführen, falls nein, sofort ausführen.
Falls der Fehler danach immer noch auftritt, wirds wohl an der MySQL-Version liegen, denke ich mal.

Irgend sowas:
$this->bbcode_second_pass_code('', '$sql = str_replace( ', WHERE acctid' , ' WHERE acctid' , $sql );')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mo 14 Apr, 2008 01:26 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
bababa.... ich bin manchmal echt dämlich. Danke, denke, dass das funktionieren wird^^

Auf sowas könnte ich auch echt selbst kommen^^

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mo 14 Apr, 2008 11:47 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
:( böser hack, lieber ursachen forschen

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mo 14 Apr, 2008 12:09 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Warum nicht beides verbinden?
PHP:
if(strpos($sql, ', WHERE acctid' !== false) {
debuglog("Überzähliges Komma im saveuser-String: ".$sql);
$sql = str_replace( ', WHERE acctid' , ' WHERE acctid' , $sql );
}

Dem Log-Eintrag kann natürlich noch weiteres hinzugefügt werden.
Allerdings hast du so wahscheinlich sehr schnell eine volle Log-Tabelle, also VORSICHTIG verwenden!

Auric

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mo 14 Apr, 2008 12:12 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
$this->bbcode_second_pass_code('', 'if(strpos($sql, ', WHERE acctid' ) !== false) {
debuglog("Überzähliges Komma im saveuser-String: ".$sql);
$sql = str_replace( ', WHERE acctid' , ' WHERE acctid' , $sql );
}')

Du hattest übrigens eine Klammer vergessen ;-).
Man müsste mal die Daten der diversen Server mit diesem Problem vergleichen. Obs an der PHP-Version liegen könnte. MySQL-Version. Oder sonst etwas. ;-)

Natürlich ist es ein böser Hack. Aber solange man keine Lösung hat, sollte man zumindest die Auswirkungen beheben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mo 14 Apr, 2008 17:23 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Hab's schon eingebaut gehabt, danke trotzdem^^
Die Debugmeldung lass ich mal raus, das dürfte sonst nen overkill geben :D
Hab bis jetzt keine Probleme, funzt alles perfekt. Wenn es wieder zum Fehler kommt, sag ich bescheid.


Ja, Nightborn, ich bin normal nicht der Typ, der nen Fehler einfach stehen lässt und übermalt, aber ich habe keine Ahnung, woran es liegen könnte. Und solch ein Fehler kann viele Spieler kosten. Ein Server mit über 1000 Spieler muss so etwas nicht interessieren, aber bei Vinestra ist das nicht gesund ;)

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mi 28 Mai, 2008 16:11 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Ok, ich habe den Teil jetzt schon eine ganze Weile eingebaut, allerdings ohne Erfolg. Es kommt der gleiche Fehler (Komma vor WHERE) noch immer. Anscheinend will mich das Teil verarschen. Warum weiß ich nicht, ich bin mit meinem Latein am Ende. Es kommt durch die SubStr und wird auch durch strpos und str_replace net aufgehalten... Dieses Komma ist mächtiger als ich. Hat vielleicht noch wer ne Idee, was ich machen könnte? Der Fehler nervt wirklich sehr, vor allem da er unregelmäßig kommt und unberechenbar ist. Mal einen Post nicht gespeichert und man darf noch einmal schreiben, im Notfall :/

MfG
Draz

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mi 28 Mai, 2008 17:09 
Offline
Held
Held
Benutzeravatar

Registriert: Mo 17 Apr, 2006 08:39
Beiträge: 290
Wohnort: Lübeck
Geschlecht: Männlich
LoGD: http://antara-rosadrache.de
Skype: eichi-san
debugge das ganze doch mal für ein paar Minuten, das ist ja nicht weiter schlimm..

LG, Eichi

Mir kommt da schon eine Idee.. aber ich würd ganz gern erstmal einen kleinen Debug-Report sehen ^^

Benutz auch mal diese Funktion dafür, hoffe es geht:

PHP:
if(strpos($sql, ', WHERE acctid' ) !== false) {
debuglog("Überzähliges Komma im saveuser-String: {$sql} In der Datei: ".__FILE__." Zeile: ".__LINE__);
$sql = str_replace( ', WHERE acctid' , ' WHERE acctid' , $sql );
}

_________________
Ist es nicht die Weisheit, die ein Mensch zu erlangen sucht?!
Der Knochen kommt nicht von alleine zum Hund, schön wärs ._.

Schokopudding, der sich von alleine kochen kann.......


BLUBBBEL!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fehler in der saveuser()?
BeitragVerfasst: Mi 28 Mai, 2008 23:12 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 11 Feb, 2006 19:39
Beiträge: 596
Wohnort: Stuttgart - Waiblingen
Geschlecht: Männlich
LoGD: http://logd.legend-of-vinestra.de/source
Skype: da-chosen-one
Die ganze $sql variable? Uiuiui^^

Na ich hab eh nix mehr zu verlieren *reinhau*

€: Mir ist gerade aufgefallen, dass zwischen dem , und WHERE zwei Leerzeichen sind... (ist ja eigentlich auch logisch). Ich ändere es mal in
$this->bbcode_second_pass_code('', 'if(strpos($sql, ', WHERE acctid') !== false)')
und
$this->bbcode_second_pass_code('', 'str_replace(', WHERE acctid', ' WHERE acctid', $sql);')

Baue den Debug trotzdem ein.

_________________
$this->bbcode_second_pass_code('', '(define-record-procedures choco-cookie
make-choco-cookie choco-cookie?
(choco-cookie-choco
choco-cookie-cookie))

(define Prinzenrolle
(make-choco-cookie choco-cookie-choco-standard (* 2 choco-cookie-cookie-standard)))')


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum