Wert wird nicht aus Datenbank geladen, warum nicht. Bangrund bei TBan?

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,
    Ich habe ein klein bisschen am Bansystem gemacht, ich wollte, dass er den Bangrund angezeigt bekommt, wenn der Spieler wieder auf dem Server kommt .
    Es wird richtig in die Datenbank eingespeichert, nur falsch ausgegeben, da werden nur Zahlen wiedergegeben. Woran liegt das? In die Datenbank wird der Bangrund richtig gesetzt. Nur warum klappt das beim ausgeben nicht? So sieht das im Script aus.



    mysql_fetch_field("Timeban",data,mysql_load);
    if(gettime()<strval(data))
    {
    new timebanned=strval(data)-gettime();
    ErrorMsg(playerid,"Verbindung zum Server unterbrochen...");
    mysql_fetch_field("Banedgrund",data,mysql_load);
    strmid(SpielerInfo[playerid][pBangrund],data,0,35,35);
    if(floatround(timebanned/86400)>0)
    {
    format(query,sizeof(query),"%s, du wurdest temporär vom Server gebannt.\nFalls du zu unrecht gebannt wurdest, wende dich an die Admins.\n\nDauer: %i Tage.\nGrund: %s",SpielerName(playerid),timebanned/86400,SpielerInfo[playerid][pBangrund]);
    }
    else if(floatround(timebanned/3600)>0)
    {
    format(query,sizeof(query),"%s, du wurdest temporär vom Server gebannt.\nFalls du zu unrecht gebannt wurdest, wende dich an die Admins.\n\nDauer: %i Stunden.\nGrund: %s",SpielerName(playerid),timebanned/3600,SpielerInfo[playerid][pBangrund]);
    }
    else if(floatround(timebanned/60)>0||floatround(timebanned%60)>0)
    {
    format(query,sizeof(query),"%s, du wurdest temporär vom Server gebannt.\nFalls du zu unrecht gebannt wurdest, wende dich an die Admins.\n\nDauer: %i:%02d Minuten.\nGrund: %s",SpielerName(playerid),timebanned/60,timebanned%60,SpielerInfo[playerid][pBangrund]);
    }
    ShowPlayerDialog(playerid,DIALOG_INFO,DIALOG_STYLE_MSGBOX,"Life of Econemy: Verbannung",query,"Ok","");
    SendClientMessage(playerid,COLOR_BRIGHTRED,"Komm später wieder oder wende dich an die Admins.");
    mysql_free_result(mysql_load);
    SpielerInfo[playerid][kicken]=1;
    return 1;
    }


    Und wie es auf dem Server aussieht, das könnt ihr hier sehen, auf dem Bild.

  • Das liegt schlicht weg daran, dass Banedgrund keinen Inhalt hat. Die Zahl die er nämlich zurück gibt, ist dein Timestamp. Das kann zwei Ursachen haben:

    • Der Spaltenname ist falsch, sprich du versuchst aus einer Spalte einen Wert zu extrahieren, die unter dieser Bezeichnung nicht existiert oder in der selektierten Tabelle nicht existiert.
    • Du sprichst diese Spalte in deinem Query nicht an.


    Überprüfe die beiden potenziellen Fehlerquellen und ich bin mir recht sicher, dass deine dabei sein wird. :)

  • @Pr0x : Also das hat geholfen, ich habe es mal so gemacht, wie du es da geschriben hast, nun steht als Banedgrund "NON" , da, obwohl was anderes eingespeichert wurden ist. Wie kann das sein? Es wurde alles richtig gespeichert.


    @Douq : Ich habe die Fehlerquelle gefunden, beim Banen geht alles, kommen keine Error's. Alles läuft nach Plan. Und nur beim ausgeben, beim Laden funktioniert es nicht, die Namen sind alle gleich, nichts ist anders, dennoch spukt die Serverlog mir diesen Fehler aus:
    [22:33:39] [MySQL] Error (3): Function: mysql_fetch_field could not find field name: "Banedgrund".
    [22:33:39] Bangrund: NON


    Aber häh? Beim Speichern gab es diesen Error nicht, das Feld gibt es und ist auch genauso benannt. Sonst würde es ja auch nicht speichern, das habe ich gescheckt.

  • Sorry, ich war die letzten Tage in Berlin und konmte nicht antworten. Falls noch aktuell: zeig uns doch mal deinen Query, denn wie vermutet, kann er die Spalte nicht zu ordnen wodurch du keinen Wert zurück bekommst.