[MySQL/Strickenkid] Gibt Float falsch aus.

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • //update:


    Hey Leute.


    Ich benutze das MySQL Plugin von Strickenkid.....
    Ich hab das hier ja schon fast gelöst, ein Problem bleibt allerdings.
    Ich habe diese Funktion:


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    sqlfloat = mysql_fetch_float(connection);
    mysql_free_result();
    return sqlfloat;
    }


    Allerdings failt diese Funktion fatalst.... In dieser Benutzung:


    printf("%f",mysql_GetFloat("accounts", "AuslogPosX", "Name", name));


    Steht im Log folgendes:


    -./,),(-*,(.((((((


    Kann jemand helfen?
    Mit freundlichen Grüßen!

  • Zitat

    Ich hab dann einfach mal beim Einloggen des Spielers folgende Zeile hinzugefügt:


    printf("%s",mysql_GetInt("accounts", "Money", "Name", PlayerName(playerid)));

    Deine Funktion an sich sollte so weit funktionieren, allerdings hast du in deinem 'printf()' Aufruf die falsche Formatierung verwendet. Für ganze Zahlen bzw. Integers musst du entweder '%d' oder '%i' verwenden. Dasselbe gilt für Gleitkommazahlen für die du '%f' verwenden musst. Solltest du immer noch falsche Werte bekommen würde ich an deiner Stelle einfach mal probieren die formatierte SQL-Anfrage im Server via printf() auszugeben.

  • Deine Funktion an sich sollte so weit funktionieren, allerdings hast du in deinem 'printf()' Aufruf die falsche Formatierung verwendet. Für ganze Zahlen bzw. Integers musst du entweder '%d' oder '%i' verwenden. Dasselbe gilt für Gleitkommazahlen für die du '%f' verwenden musst. Solltest du immer noch falsche Werte bekommen würde ich an deiner Stelle einfach mal probieren die formatierte SQL-Anfrage im Server via printf() auszugeben.

    *facepalm*
    WIE KANN ICH NUR SO SAUDOOF SEIN -.- Danke BlueG :)


    //edit:


    Die Ints läd er also richtig...
    Aber das war ja nicht das Problem. Das Problem ist, dass er trotz allem die Floats nicht richtig ausliest. Beim Ausloggen speichere ich die aktuellen Koordinaten in der DB.
    Lade ich sie kommt dieses typische "Stay within the worlds boundaries" und der Bildschirm wird weiß. Eigentlich kann es ja nur an den Floats hängen, denn er liest das Passwort, will den
    Spieler dort hin setzen und schnipp, server schmiert ab. Oder er versucht die virtual world oder den Interior auf sqltest1 zu setzen, kann meines Wissens nach doch auch den Server crashen.
    Fakt ist: Auch mit %d statt %s (ich schäme mich immer noch für den Fehler ^.^) liest er das Passwort aus.


    //e2:


    Es liegt DEFINITIV am Laden der Floats. Beim ausloggen wird x,y,z,int, und world in die DB geschrieben, die stimmen dann auch.
    Beim Laden des Accounts werden mit folgenden 3 Zeilen x,y,z geladen:

    SetPVarFloat(playerid,"AuslogPosX",mysql_GetFloat("accounts", "AuslogPosX", "Name", name));
    SetPVarFloat(playerid,"AuslogPosY",mysql_GetFloat("accounts", "AuslogPosY", "Name", name));
    SetPVarFloat(playerid,"AuslogPosZ",mysql_GetFloat("accounts", "AuslogPosZ", "Name", name));


    Dann wird der User dort hin gesetzt und der Bildschirm wird langsam weiß und flackert usw. Es liegt nicht an der Struktur des Scripts,
    vorher basierte es auf Dini und es funktionierte....


    //e3:


    Ich habe beim Laden des Accounts folgende Zeile eingefügt:


    printf("%f | %f | %f",mysql_GetFloat("accounts", "AuslogPosX", "Name", name),mysql_GetFloat("accounts", "AuslogPosY", "Name", name),mysql_GetFloat("accounts", "AuslogPosZ", "Name", name));


    Das Resultat:


    [17:48:29] -./,),(-*,(.(((((( | -./,),(-*,(.(((((( | -./,),(-*,(.((((((


    Hier der Stock der die Floats lädt:


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    sqlfloat = mysql_fetch_float(connection);
    mysql_free_result();
    return sqlfloat;
    }

  • Ich vermute einfach mal, dass die Funktion mysql_fetch_float() nicht ganz einwandfrei funktioniert. Ich würde dir dann empfehlen die Funktion leicht um zu strukturieren:



    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], szReturn[10];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s' LIMIT 1", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(szReturn);
    mysql_free_result();
    return floatstr(szReturn);
    }

  • Das bedeutet, das maximal ein Ergebnis rauskommt.


    BTW:
    BlueG = der aus dem englischem Forum?

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski