MySQL auslese Fehler

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
  • Jo,
    Irgentwie mag er das nicht auslesen:


    stock mysql_ip(playerid)
    {
    new bool:result, query[128];
    format(query,sizeof(query),"SELECT * FROM ips WHERE IP=MD5('%s')",getPlayerIP(playerid));
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() > 0) {result = true;}
    else result=false;
    mysql_free_result();
    return result;
    }


    Erstellt wird alles:



    getPlayerIP(playerid) {
    new ip[16];GetPlayerIp(playerid, ip, 16);return ip;
    }


    if(newkeys == KEY_YES)
    {
    if(mysql_ip(playerid) == 0){SendClientMessage(playerid, Rot, "Deine IP ist nicht in der DB Gefunden worden");}
    else SendClientMessage(playerid, Rot, "Deine IP wurde in der Datenbank gefunden!");
    return 1;
    }



    Danke fürs lesen

  • kann es sein das du die } falsch gesetzt hast
    if(mysql_ip(playerid) == 0){SendClientMessage(playerid, Rot, "Deine IP ist nicht in der DB Gefunden worden");}
    if(mysql_ip(playerid) == 0){SendClientMessage(playerid, Rot, "Deine IP ist nicht in der DB Gefunden worden")};
    :?:


    müssen die klammern nicht immer vor dem ; sein :?:

  • Nein, velängert würde das alles so aussehen:
    if(mysql_ip(playerid) == 0)
    {
    SendClientMessage(playerid,Rot,"Deine IP ist nicht in der DB Gefunden worden");
    }


    if(mysql_ip(playerid) == 0)
    {
    SendClientMessage(playerid,Rot,"Deine IP ist nicht in der DB Gefunden worden")
    };
    Das obere ist richtig, also liegt da kein Fehler drin ;)

  • ok ich wusste es ja nicht wollte nur helfen ;)


    if(newkeys == KEY_YES)
    {
    if(mysql_ip(playerid) == 0){SendClientMessage(playerid, Rot, "Deine IP ist nicht in der DB Gefunden worden");}
    else SendClientMessage(playerid, Rot, "Deine IP wurde in der Datenbank gefunden!");
    return 1;
    }

    aber schau mal zeile 3 das ist doch falsch oder );} ?

  • Teste mal den Code hier
    stock mysql_ip(playerid)
    {
    new query[60];
    format(query,sizeof(query),"SELECT * FROM `ips` WHERE `IP`=MD5('%s');",getPlayerIP(playerid));
    mysql_query(query);
    mysql_store_result();
    new rows = mysql_num_rows();
    mysql_free_result();
    return ((!rows)?(false):(true));
    }
    if(newkeys == KEY_YES)
    {
    if(!mysql_ip(playerid) )return SendClientMessage(playerid, Rot, "Deine IP ist nicht in der DB Gefunden worden");
    SendClientMessage(playerid, Rot, "Deine IP wurde in der Datenbank gefunden!");
    return 1;
    }


    Und beim INSERT auch drauf achten das du den MD5 hash nutzt

    All in all it's just another brick in the wall

  • Beavis


    stock mysql_ip(playerid) { new query[60]; format(query,sizeof(query),"SELECT * FROM `ips` WHERE `IP`=MD5('%s');",getPlayerIP(playerid)); mysql_query(query); mysql_store_result(); new rows = mysql_num_rows(); mysql_free_result(); return ((!rows)?(false):(true)); }


    Also wenn du ihm schon hier eine variante anbietest welche besser umgesetzt ist als seine kannst du bei dem Query gleich noch LIMIT 1 und den Stern gegen eine Eins ersetzen. Jedoch wird das dieses Problem auch nicht lösen.

    SQL
    SELECT 1 FROM `ips` WHERE `IP`=MD5('%s') LIMIT 1;


    Zudem decrypted er den string wenn er in per INSERT einträgt dazu musst du nur den screen anschauen.


    MrPawn


    Einen Fehler kann ich hier nicht direkt erkennen. Es könnte sein das du einen zu geringen wert für die zu speichernden Zeichen verwendet hast bei der ip 127.0.0.1. Da die decrypted ip so auszusehen hat:

    SQL
    f528764d624db129b32c21fbca0cb8d6


    es könnte auch sein das nur dein screen abgschnitten ist, dies weiß ich leider nicht.


    Sollte das auch nicht der fehler sein spuckt die MySQL-log den etwas aus.

  • Hast Du mehrere MySQL-Verbindungen offen? - Wenn ja, dann übergeben zusätzlich die Verbindungsidentifikationsnummer.
    Hast Du Dir den MySQL-Query mal ausgeben lassen und hast diesen manuell ausgeführt? - Welches Ergebnis kommt dabei rum?
    Sind die beiden Hashes gleich? - Immer die gleiche Methode nutzen.

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • Dein query wird vernünftig ausgeführt das einzige was mich auffält ist das du den speicher nicht wieder frei gibst bei den anderen select queries hier musst du aufpassen das kann zu memory-leaks führen.
    Ebenfalls wird hier kein Eintrag gefunden nun nochmal die Frage auf welche größe hast du den datentyp varchar oder char bei der spalte IP in der Tabelle ips gesetzt.


    Zusätzlich ist zu erwähnen du brauchst nicht so große strings, da die ip nicht in dem query gehasht wird, sondern vom mysql-server, wenn dieser den befehl ausführt und den gpci braucht man auch nicht wirklich hashen da dieser schon ein hash deines San Andreas installations pfades ist.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen