MySQL: Strafakte auslesen und wiedergeben

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
  • Huhuu,


    habe mir einen kleinen Command gebastelt, wobei die Strafakte eines Users aus der MySQL-Datenbank ausgelesen werden soll.
    Soweit bin ich bereits:

    Befehl
    ocmd:act(playerid,params[])
    {
    if(isPlayerAnAdmin(playerid,4))
    {
    new pID;
    if(sscanf(params,"u",pID))return SCM(playerid,COLOR_GREY,"Benutze: /act [Spieler-ID]");
    {
    new query[128];
    GetPlayerName(pID, usedname, sizeof(usedname));
    format(query,sizeof(query),"SELECT * from `Strafen` WHERE `Spielername` = '%s'",usedname);
    mysql_store_result();
    }
    }
    return 1;
    }


    Wie mache ich es so, dass jede Strafe danach im Dialog aufgelistet werden kann?


    Hier auch einmal die Tabellenstruktur (der SQL-Befehl):

    SQL
    CREATE TABLE IF NOT EXISTS `Strafen` (	`Spielername` varchar(24) NOT NULL,	`Verwarnungen` int(2) NOT NULL,	`AdminName` varchar(24) NOT NULL,	`Grund` varchar(64) NOT NULL,	`IP-Adresse` varchar(24) NOT NULL,	`Datum` varchar(10) NOT NULL,	`Uhrzeit` varchar(10) NOT NULL);


    Ich wäre jedem helfenden sehr verbunden!


    lg
    Zinne

  • format(query,sizeof(query),"SELECT * from `Strafen` WHERE `Spielername` = '%s'",usedname);
    mysql_query(query); // hast du vergessen
    mysql_store_result();


    new datta[256], feldnamen_variable_im_stringformat[256];


    while (mysql_fetch_row(data)){ // geht die ganze Tabelle nach dem oben gesendeten Query durch.
    mysql_fetch_field("Feldname", feldnamen_variable_im_stringformat);
    }


    Dann haste die einzelnen Felder ausgelesen.


  • Hier macht es sinn sscanf zu nutzen da er nicht nur zur nächsten reihe springt sondern auch den inhalt der reihen ausließt dies ist im string data dann gespeichert und diesen kann man mit sscanf dann splitten sonst würde nur in der while -schleife mysql_retrieve_row sinn machen aber nur sofern das MySQL Plugin von BlueG genutzt wird die r5 - r6 Version

  • Hier macht es sinn sscanf zu nutzen da er nicht nur zur nächsten reihe springt sondern auch den inhalt der reihen ausließt dies ist im string data dann gespeichert und diesen kann man mit sscanf dann splitten sonst würde nur in der while -schleife mysql_retrieve_row sinn machen aber nur sofern das MySQL Plugin von BlueG genutzt wird die r5 - r6 Version


    Ich benutze die R5 von BlueG (G-STylezzzzzzzzzzzzzzzzzzzzzz wasweissich wieviele Z).
    Könntest du mir vielleicht ein Beispiel geben?

  • Bin kein MySQL Genie aber:



    new Name[30], Verwarnungen, Admin[30], Grund[128], Ip[30];
    format(query,sizeof(query),"SELECT * from `Strafen` WHERE `Spielername` = '%s'",usedname);
    mysql_query(query);
    mysql_store_result();
    sscanf(query, "sisssss", Name, Verwarnungen, Admin, Grund, Ip...)
    mysql_free_result();



    Müsste eigentlich so in etwa gehen :D

  • Und wenn ein Spieler 2x in der Datenbank steht?
    Es sollen die einträge, wenns mehrere sind aufgelistet werden


    n
    ew query[128],ALLSTRING[500];
    GetPlayerName(pID, usedname, sizeof(usedname));
    format(query,128,"SELECT * from `Strafen` WHERE `Spielername` = '%s'",usedname);
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(query)){
    sscanf(query,"p<|>...",....);
    format(query,128,"%s Strafe: \n",usedname,...);
    strcat(ALLSTRING,query);
    }
    mysql_free_result();


    ... da musst du selbst hand anlegen ich weiß ja nicht was du alles dort speicherst , die specifer müssen der reihenfolge der ausgelesen daten angepasst werden
    hier im Forum gibts dazu auch ein tutorial siehe sscanf 2.0 oder schau im englischen Forum nach einfach in google samp sscanf 2.8.1 eingeben

  • Also:


    In der Datenbank stehen folgende Einträge (angenommen):
    Jim_Street 2 Zinne Sinnloses Deathmatch 92.864.135.321 04.08.2013 01:16:20
    Puniica 4 Zinne Beleidigung(H****sohn) 91.984.531.497 04.08.2013 01:19:36
    Jim_Street 1 Zinne Carsurfing 92.864.135.321 04.08.2013 01:26:42
    Puniica 1 Zinne Beleidigung(Pe***pirat) 91.984.531.497 04.08.2013 01:28:59


    (Name, Verwarnungen, Adminname, Grund, IP-Adresse, Datum, Uhrzeit


    Wie mache ich es so, dass erst die erste Strafe (z.B. Sinnloses DM, 2 Warns, etc) und dann die zweite ausgewählt werden, sodass ich nur die Strafen von Jim_Street auslese, und dann untereinander in einen Dialog stecken kann.


    Beispiel:

    Zitat

    TITEL DES DIALOGS: Strafen von Jim_Street
    INHALT:
    2 Verwarnungen, Sinnloses Deathmatch, 92.864.135.321, 04.08.2013, 01:16:20\n<= Nextline
    1 Verwarnung, Carsurfing, 92.864.135.321, 04.08.2013, 01:26:42


    /e also so, dass nur das Rot gekennzeichnete da drin steht

    Einmal editiert, zuletzt von Zinne ()

  • Vielleicht hilft dir das Beispiel?

    format(query,500,"SELECT * FROM `warnings` WHERE `name` = '%s';", playerName(fromPlayer));
    mysql_query(query);
    mysql_store_result();
    new string[255];
    while ( mysql_retrieve_row() ) {
    mysql_get_field("warnID", data); // warnID ist hier der Spaltenname
    format(string,sizeof string, "%sID: %d\t", strval(data), string);
    mysql_get_field("warnReason", data); // warnReason ist hier der Spaltenname
    format(string,sizeof string, "%sGrund: %d\t", string, strval(data));
    mysql_get_field("warnBy", data); // warnBy ist hier der Spaltenname
    format(string,sizeof string, "%sGewarnt von: %s\t", string, data);
    //...... das führst du so weiter
    // Beim letzten Spaltennamen am ende \n nicht vergessen... Beim letzten statt \t \n nutzen.
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOGID,DIALOG_STYLE_MSGBOX,"Userakte",string,"", "Okay");


    Vielleicht kannst du damit ja was anfangen.


    // Edit: Hatte noch was vergessen...

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