anpera.net https://anpera.homeip.net/phpbb3/ |
|
Fehler in der saveuser()? https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=4469 |
Seite 1 von 1 |
Autor: | Drazaar [ So 13 Apr, 2008 18:54 ] |
Betreff des Beitrags: | Fehler in der saveuser()? |
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^^ |
Autor: | Harthas [ So 13 Apr, 2008 19:50 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
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 );') |
Autor: | Drazaar [ Mo 14 Apr, 2008 01:26 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
bababa.... ich bin manchmal echt dämlich. Danke, denke, dass das funktionieren wird^^ Auf sowas könnte ich auch echt selbst kommen^^ |
Autor: | Nightborn [ Mo 14 Apr, 2008 11:47 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
![]() |
Autor: | Auric [ Mo 14 Apr, 2008 12:09 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
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 |
Autor: | Harthas [ Mo 14 Apr, 2008 12:12 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
$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. |
Autor: | Drazaar [ Mo 14 Apr, 2008 17:23 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
Hab's schon eingebaut gehabt, danke trotzdem^^ Die Debugmeldung lass ich mal raus, das dürfte sonst nen overkill geben ![]() 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 ![]() |
Autor: | Drazaar [ Mi 28 Mai, 2008 16:11 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
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 |
Autor: | Eichi [ Mi 28 Mai, 2008 17:09 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
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 ); } |
Autor: | Drazaar [ Mi 28 Mai, 2008 23:12 ] |
Betreff des Beitrags: | Re: Fehler in der saveuser()? |
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. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |