/unban auf MySQL basis

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
  • Hallo Communuty,


    ich möchte gerne einen Unban befehl machen.
    ich kann den spieler schon bannen und auch wird er beim nächsten login vom server geschmissen wenn er gebannt ist nun ist die frage.
    wie unbanne ich ihn also ich möchte ja alle namen abrufen die im (inputtext) eingegeben wurden also /unban [XYNAME] wenn dieser existiert soll dieser unbanned werden ansonsten soll kommen dieser spieler existiert nicht und wenn er nicht gebannt ist. dieser spieler ist nicht gebannt
    habe mal angefangen komme aber nicht ganz weiter...
    ocmd:unban(playerid,params[])
    {
    if(sInfo[playerid][alevel]>=5)
    {
    new name[128];
    if(sscanf(params,"s",name))return SendClientMessage(playerid,CL_HGRÜN,"Info: /unban [SpielerName] versuche es erneut.");
    {
    //hier alle namen abrufen die eingegeben wurden=1 name
    return 1;
    }

    }
    //Ansonsten
    return 1;
    }


    mal schauen ob ihr mir helfen könnt


    MFG Nils




    PS: rechtschreibung kostet geld also entschuldigt bitte

  • Das kannst du so machen


    SELECT %s FROM `tabelle` WHERE `Name`='%s'
    Und bei %s halt dann den Namen eintragen.
    Und dann kannst du mit mysql_num_rows abfragen ob es ein Ergebnis gibt, also ob es den User in der Datenbank gibt.
    Wenn das der Fall sein sollte, dann mit UPDATE den Ban entfernen.

  • So ein Quatsch. Du brauchst da absolut gar keinen SELECT Query und somit unnötige Ressourcen verballern.


    SQL
    DELETE FROM `tabelle` WHERE `Name` = 'DerName' LIMIT 1


    Falls für die Bans eine eigene Tabelle angelegt ist


    SQL
    UPDATE `tabelle` SET `isBanned` = '0' WHERE `Name` = 'DerName' AND `isBanned` = 1 LIMIT 1


    Falls der Ban beispielsweise über die normale Userdatenbank geregelt wird.


    mysql_num_rows gibt dann 0 (kein Eintrag geändert) und 1 (Eintrag geändert bzw gelöscht) aus. So weißt du also, ob der Spieler vorher gebannt war oder nicht.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • danke erstmal habe es jetzt mal so probiert aber fraglich ob das funktioniert


    ocmd:unban(playerid,params[])
    {
    if(sInfo[playerid][alevel]>=5)
    {
    new name[128],query[128],wert;

    if(sscanf(params,"s",name))return SendClientMessage(playerid,CL_HGRÜN,"Info: /unban [SpielerName] versuche es erneut.");
    {
    format(query,sizeof(query),"SELECT 'BANED' FROM `Benutzer` WHERE `Name`='%s'",name);
    mysql_function_query(dbhandle,query,true,"BANED","is",wert,name);
    //hier alle namen abrufen die eingegeben wurden=1 name
    return 1;
    }
    }
    //Ansonsten
    return 1;
    }





    forward BANED(playerid,wert,name);
    public BANED(playerid,wert,name)
    {
    new num_rows;
    if(num_rows==1)
    {
    new query[128];
    if(wert==0)return SendClientMessage(playerid,CL_KNALLROT,"Der Spieler ist nicht gebannt.");
    format(query,sizeof(query),"UPDATE 'BANED'='0' FROM `Benutzer` WHERE `Name`='%s'",name);
    mysql_function_query(dbhandle,query,false,"","");

    return 1;
    }
    else if(num_rows==0)
    {
    SendClientMessage(playerid,CL_KNALLROT,"Der Spieler existiert nicht");
    return 1;
    }
    return 1;
    }


    danke schonmal für die erste hilfe


    MFG Nils


    edit aktueller code ohne funktion bzw wir bekommen gar keine meldung...

    Einmal editiert, zuletzt von Nils24 ()

  • Wie T4125Gamer schon meinte, selecten lassen, dann jeweils mit mysql_num_rows() abfragen ob ein Eintrag vorhanden ist, wenn ja dann einen UPDATE command ausführen lassen


    Manchmal frage ich mich hier, ob hier wirklich nur dem Nutzer geholfen oder einfach der Postcounter hochgepushed werden will...
    Die effektivste Lösung wurde bereits gepostet, aber weil das hier eh kaum jemand rafft, eben nochmal zitiert:

    UPDATE `tabelle` SET `isBanned` = '0' WHERE `Name` = 'DerName' AND `isBanned` = 1 LIMIT 1


    Alles Andere wäre(n) a) serverlastiger und b) unnötige Codezeilen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das wurde dir jetzt schon mehrfach gesagt einfach das was Leijat gepostet hat an deiner datenbank struktur anpassen mit mysql_num_rows abfragen ob der wert 0 oder 1 ist (sieht Leijats Beitrag) fertig

  • Das wurde dir jetzt schon mehrfach gesagt einfach das was Leijat gepostet hat an deiner datenbank struktur anpassen mit mysql_num_rows abfragen ob der wert 0 oder 1 ist (sieht Leijats Beitrag) fertig


    .. So habe ich das auch gemeint..
    Vielleicht will er auch eine Fehlermeldung ausgeben wenn der Spieler nicht vorhanden ist, also das ist das kein Unsinn was T4125Gamer geschrieben hat :thumbup:

  • Vielleicht will er auch eine Fehlermeldung ausgeben wenn der Spieler nicht vorhanden ist, also das ist das kein Unsinn was T4125Gamer geschrieben hat

    Doch, auch dann ist es Unsinn. Meine Güte hört doch bitte auf den Neulingen so einen Schund beizubringen. Wenn ihr selber keine Ahnung davon habt, dann diskutiert doch BITTE nicht groß rum nur um euer Recht zu behalten, sondern haltet einfach den Sabbel.


    Nils24: Richte dich nach meinem Query von oben.
    Ist der Spieler nicht vorhanden, gibt mysql_num_rows() ne 0 aus
    Ist der Spieler nicht gebannt, gibt mysql_num_rows() ne 0 aus
    Ist der Spieler gebannt und der Wert wurde erfolgreich geändert, gibt mysql_num_rows() ne 1 aus


    Daraus kannst du super deine Fehlermeldung ableiten, ohne unnötig viele Queries zu verballern. Wenn du noch zwischen nicht vorhanden und gebannt differenzieren willst, musste halt noch mehr mit SQL arbeiten, aber das mute ich dir, bei aller liebe, nicht zu, wenn dich ein einfacher Query momentan noch überfordert. Das solltest du dann lieber etwas zurückstellen und überarbeiten, wenn du mit SQL vertrauter geworden bist.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • habe das mal nach vielem hin und her umgesetzt.


    möchte dem Admin der versucht zu unbannen eine Nachricht senden wenn der Spieler nicht Existiert oder nicht gebannt ist wie mache ich das jetzt?


    danke für eure hilfe


    der jetzige CODE

    Spoiler anzeigen
    ocmd:unban(playerid,params[])
    {
    if(sInfo[playerid][alevel]>=5)
    {
    new name[128],query[128],string[128];
    if(sscanf(params,"s",name))return SendClientMessage(playerid,CL_HGRÜN,"Info: /unban [SpielerName] versuche es erneut.");
    {

    format(query,sizeof(query),"UPDATE `Benutzer` SET `BANED` = '0' WHERE `Name` = '%s' AND `BANED` = 1 LIMIT 1 ",name);
    mysql_function_query(dbhandle,query,false,"","");
    format(string,sizeof(string),"Der Spieler %s wurde von %s geunbannt!",name,SpielerName(playerid));
    SendAdminAnsage(string);
    //hier alle namen abrufen die eingegeben wurden=1 name
    return 1;
    }
    }
    //Ansonsten
    return 1;
    }


    DANKE DANKE

    Einmal editiert, zuletzt von Nils24 ()