Weiß nicht wie ich den Fehler beheben soll

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
  • Moin Leute!


    Ich habe mal heute an einem Ban-System gearbeitet.



    Ich bekomme folgenden Error:
    \script.pwn(318) : error 035: argument type mismatch (argument 2)



    die fehlerhafte Zeile: mysql_escape_string(grund,bangrund,dbhandle);


    Kann mir bitte jemand behilflich sein? Komme da echt nicht weiter... :thumbdown:

  • Nutz am einfachsten einfach %q im format.


    Man sieht nicht wie du bangrund deklariert hast...eventuell meinst du nur grund?


    Zudem müsste das wenn dann so aussehen:


    mysql_escape_string(bangrund,grund,sizeof(grund),dbhandle);


    //Es würde aber folgendes reichen:
    mysql_escape_string(bangrund,grund);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ich möchte den Grund des Banns in der Datenbank speichern. Dazu habe in MySQL eine Spalte namens bangrund hinzugefügt(natürlich vom Typ varchar). Ich habe dann bangrund auch in mein playerInfo Enum und in meine Funktion saveplayer eingefügt. Ist also eine normale Zeichenkette, welche ich versuche in der Datenbank zu speichern. Leider hat dein Vorschlag das Problem nicht gelöst, trotzdem danke.

  • Also um dir das mal zu erklären:

    C
    enum test
    {
        bangrund[32],
        level
    };
    new Variable[test];

    So du kannst nirgends direkt bangrund verwenden.


    Sondern immer nur Variable[bangrund].


    Also müsste es bei dir so aussehen:


    mysql_escape_string(grund, sInfo[playerid][bangrund]);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Es funktioniert semi. Also das Speichern in der Datenbank klappt. Aber das Problem ist dabei, dass der Grund automatisch in einer neuen Zeile gespeichert wird, das ist ja nicht Sinn der Sache...
    Geldcheat einfach als Test
    danke schon mal für deine bisherige Hilfe, könntest du mir bitte sagen wie ich das behebe?

  • Du hast beim speichern was durcheinander gebracht und nicht ein UPDATE Query genutzt, sondern ein INSERT INTO was hier nicht richtig ist.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Funktion sieht so aus:


    mysql_escape_string(grund, sInfo[playerid][bangrund]);
    format(query,sizeof(query),"UPDATE user SET bangrund='%s'",grund);
    mysql_function_query(dbhandle,query,false,"","");


    mysql Logdatei : [21:44:10] [ERROR] mysql_escape_string - destination size is too small (must be at least as big as source)


    Jetzt wird gar kein Grund gespeichert... Sry wenn ich euch langsam nerve aber bin echt noch ein Amateur wenns ums Programmieren geht..

  • Du hast das WHERE vergessen im Query.


    bangrund muss die selbe Länge wie grund haben :)
    In dem Fall also [128]

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Call me a stupid noob:


    mysql_escape_string(grund, sInfo[playerid][bangrund]);
    format(query,sizeof(query),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");


    mysql log : [22:02:24] [ERROR] mysql_escape_string - destination size is too small (must be at least as big as source)


    es geht immer noch nicht..

    • Offizieller Beitrag

    Mal davon abgesehen das du im Format immer noch die Variable grund verwendest anstatt sInfo[playerid][bangrund],
    du musst doch einfach lesen was da Steht. Im Grunde:
    Die Variable sInfo[playerid][bangrund] ist zu klein, sie muss mindestens so groß sein wie grund.


    Am besten Kalibers Tipp in betracht ziehen.

  • Ich verstehe nicht warum hier so ein Zirkus darum gemacht wird und dann nicht weiter geholfen wird.
    Es könnte so einfach sein.


    Sorry aber jetzt peil ich das irgendwie gar nicht mehr...

    So sollte es aussehen:
    Einfach die Variable sich selbst wieder zuweisen (grund in grund schreiben), dann gibt es keine Probleme.
    mysql_escape_string(grund, grund);
    format(query,sizeof(query),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");


    Den Grund zusätzlich ins Spieler-Array zu schreiben ist nicht notwendig, da der Spieler im selben Moment den Server verlässt, somit ist das nicht mehr notwendig.


  • Ich sehe grade noch, dass hier die pID hin muss:
    format(query,sizeof(query),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[playerid][id]);
    Zu
    format(query,sizeof(query),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[pID][id]);


    Sollte das auch nicht klappen, lass dir das Query per Print ausgeben und poste es dann bitte mal.

  • Beitrag von Marschl ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Jeffry war schneller ().