MySQL gibt immer true zurück

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
  • Ich hab ein Befehl wo er überprüfen soll ob der Spieler einen Key hat.
    Wenn Ja dann soll er das Auto aufsperren, wenn Nein soll er die Fehlermeldung bringen.
    Er sperrt es aber auf obwohl der Spieler keinen Key hat.


    Abfrage:
    stock Key(vehicleid,playerid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM gtari_vehiclekeys WHERE VehicleID = '%i' && userid = '%i'",vehicleid,sInfo[playerid][id]);
    return mysql_function_query(serverdbhandle,query,true,"CheckKey","");
    }


    forward CheckKey();
    public CheckKey()
    {
    new rows,fields;
    cache_get_data(rows,fields,serverdbhandle);
    if(rows)
    {
    return true;
    }
    else
    {
    return false;
    }
    }


    Meldung:
    if(VehInfo[i][Besitzer] != sInfo[playerid][id] && !Key(VehInfo[i][VehicleID],playerid))return SendClientMessage(playerid,COLOR_RED,"Du darfst diesen Befehl nicht ausführen! Grund: Du hast keinen Fahrzeugkey");

  • format(query,sizeof(query),"SELECT * FROM gtari_vehiclekeys WHERE VehicleID = '%i' && userid = '%i'",vehicleid,sInfo[playerid][id]);
    zu:
    format(query,sizeof(query),"SELECT * FROM gtari_vehiclekeys WHERE VehicleID = '%i' AND userid = '%i'",vehicleid,sInfo[playerid][id]);


    && muss AND sein.

  • Ist immer noch :/
    Noch eine Idee?


    Das Problem das Callback hat nix mit den rückgabe werten zu tun.


    1 wird zurückgegeben wenn das Query erfolgreich ausgeführt werden konnte, falls dem nicht so sei so wird 0 zurückgegeben.


    Was du jedoch machen könntest wäre cache_save zu nutzen um den ganzen Tabelleninhalt zwischen zu speichern. So kannst du in einer extra Funktion auf das ganze zurückgreifen.

  • Ich will ja die Funktion immer wieder aufrufen, wenn jemand /carinfo eingibt.

  • Habs jetzt so gemacht

    ocmd:test(playerid,params[])
    {
    CheckKey();
    return 1;
    }
    {/pwn]


    Oder was meinst du?


    [quote='CIBERKILLER','index.php?page=Thread&postID=1955585#post1955585'][quote='Nico_98','index.php?page=Thread&postID=1955584#post1955584'][quote='CIBERKILLER','index.php?page=Thread&postID=1955578#post1955578']Du lässt den ausgeführten Query übergeben!
    Benutze mal
    [pwn]CheckKey()
    um das Ergebnis zu bekommen![/quote]
    Wie meinst du das?[/quote]


    Naja du kannst mit einer Funktion,Callback ein Ergebnis zurückgeben lassen![/quote]


  • Du musst die Fehlermeldung dann in dem Callback CheckKey ausgeben lassen!

  • Habs jz so gemacht:



    forward CheckKey();
    public CheckKey()
    {
    new rows,fields;
    cache_get_data(rows,fields,serverdbhandle);
    if(rows==1)
    {
    return SendClientMessageToAll(COLOR_RED,"Test");
    }
    else
    {
    return SendClientMessageToAll(COLOR_RED,"Du darfst diesen Befehl nicht ausführen! Grund: Du hast keinen Schlüssel für das Auto!");
    }
    }


    Er gibt das nach else aus, Sperrt das Auto aber trotzdem auf


  • Aber so ungefähr kannst du das aufbauen, musst es halt nur ein bisschen umschreiben ;)


    Kannst ja das ganze ins Checkkey Callback verschieben!

  • Ich mach das extra so, nur warum sperrt er das Auto auf?


    //Liegt es vieleicht am !Key(VehInfo[i][VehicleID],playerid)

  • Das liegt daran, dass das true bzw false nicht an deine Key Funktion übergeben wird, da mysql_function_query den Wert vom aufgerufenen public nicht zurück gibt.


    Du musst also den Teil der das Auto öffnet auch in das public schreiben, mit dem du den Cache prüfst.