MySQL -> GetString

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


    ich habe bei ein Problem bei der "GetString" abfrage (beim Laden der Spielerdaten)


    Der Error ist dieser
    error 006: must be assigned to an array
    Code:
    //SpielerInfo[playerid][pEmail] = mysql_GetInt("accounts", "Email", "Name", SpielerInfo[playerid][pName]);//SO war es vorher aber ich möchte ja einen String auslesen keinen Intreger
    SpielerInfo[playerid][pEmail] = mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]);


    MFG

  • und wie Soll ichs formatieren?
    So ja bestimmt nicht ^^
    format(string,sizeof string,"accounts", "Email", "Name", SpielerInfo[playerid][pName]"


    muss ich dann 3(oder 4) mal formatieren und dann z.b.
    SpielerInfo[playerid][pEmail] = mysql_GetString(string1, string2, string3, SpielerInfo[playerid][pName]);


    oder wie?

  • format(string,sizeof string,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]););
    so sollst du das machen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich versuch dir mal den Fehler zu erklären.
    Die Funktion mysql_GetString gibt ein Array der Größe 128 zurück ( Schau dir die Funktion mal an ).
    Damit das zuweisen durch die Funktion mysql_GetString direkt funktioniert,muss das zugewiesene Array die gleich Größe haben,also auch 128.
    Ist pEmail ein Array der Größe 128,dann funktioniert es so direkt:
    SpielerInfo[playerid][pEmail] = mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]);


    Hier hast du aber genau das gleiche Probleme,wenn string und pEmail nicht gleich Groß sind.
    format(string,sizeof string,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));
    SpielerInfo[playerid][pEmail] = string;
    Was BlackAce eigentlich meinte,ist anstatt string direkt SpielerInfo[playerid][pEmail] zu verwenden.


    format( SpielerInfo[playerid][pEmail] , ??? ,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));
    size ( ??? ) musst du manuell angeben.Man kann es sich zwar auch ausgeben lassen,dass ist aber ein Anderes Thema ;). Ist nämlich nicht einfach über "sizeof( SpielerInfo[playerid][pEmail] ) auslesbar".


    //Edit: Hier findest n' Anleitung wie es geht
    http://forum.sa-mp.de/san-andr…%C3%9Fes-enum/#post977309

  • Ich hab das
    format( SpielerInfo[playerid][pEmail] , ??? ,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));

    nicht wirklich verstanden was du mir damit schreiben möchtest ^^ (hab nicht wirklich ahnung von MySQL und formatieren hab ich bisher nur mit diesem "format(string,sizeof string,..." gemacht
    also ich habs jetz so
    format(SpielerInfo[playerid][pEmail], 128,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));
    SpielerInfo[playerid][pEmail] = string;//Was muss ich hier jetz angeben? muss ich "128" oder einfach SpielerInfo[playerid][pEmail] angeben?


    p.s. mit dem Link kann ich nicht wirklich was anfangen da ich das nicht verstehe 8|


    MFG

  • Oh man,du stellst dich mehr als ungeschickt an ...


    format( SpielerInfo[playerid][pEmail] , ??? ,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));
    size ( ??? ) musst du manuell angeben.Man kann es sich zwar auch ausgeben lassen,dass ist aber ein Anderes Thema ;). Ist nämlich nicht einfach über "sizeof( SpielerInfo[playerid][pEmail] ) auslesbar".


    Du sollst lediglich anstatt ??? eine Zahl eintragen. Die Zahl ist die Zahl,die hinter pEmail in den [ - ] steht.
    enum irgendwas {
    pEmail[24],
    pSonstwas
    }
    Hier wäre es die 24. Kannst auch einfach 2000 eintragen,ist aber keine Gute Idee ;).


    Zitat

    (hab nicht wirklich ahnung von MySQL und formatieren hab ich bisher nur mit diesem "format(string,sizeof string,..." gemacht


    Da bist du nicht der Einzige, deswegen empfehle ich auch nie MySQL zu verwenden wenn man eh keine Ahnung davon hat. In diesem Fall spielt MySQL aber keine Rolle.

  • Du hast definitiv nicht verstanden,wie format funktioniert.
    format( SpielerInfo[playerid][pEmail] , ??? ,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));
    Wenn du für ??? jetzt was sinnvolles eingesetzt hast,dann hast du doch schon in der Variable SpielerInfo[playerid][pEmail] den Wert den du haben wolltest.
    Was ist denn daran so schwer zu verstehen :/ ?


    SpielerInfo[playerid][pEmail] = 50;// (?) oder muss ich statt 50 "SpielerInfo[playerid][pEmail]" hinschreiben (was ich aber eher weniger denke)
    Das ist totaler Quatsch. Glaube auch,dass es nicht mal kompilieren wird ohne das eine Fehlermeldung erscheint.Selbst der Kommentar mach keinen Sinn,denn dann wäre es ja :
    SpielerInfo[playerid][pEmail] = SpielerInfo[playerid][pEmail];
    Das ist natürlich Quatsch und bringt nichts.

  • Also ich habs nun hinbekommen ^^ (danke)
    nur es gibt ein einziges Problem:
    wen ich z.b. jetzt ingame "/email email@emailer.de" eingebe wird es zwar gespeichert und ausgelesen aber es wird so gespeichert(nachh einem Serverrestart) "2email@emailer.de" (also da wird IMMER eine 2 vor gesetzt)


    Ausgelesen wirds nun so
    format(SpielerInfo[playerid][pEmail], 50,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));
    SpielerInfo[playerid][pEmail] = 50;
    Gespeichert so
    mysql_SetString("accounts", "Email",SpielerInfo[playerid][pEmail],"Name",SpielerInfo[playerid][pName]);


    CMD zum auslesen und setzen
    ocmd:email(playerid,params[])
    {
    new email[50];
    if(sscanf(params,"s",email))return SendClientMessage(playerid,WEIß,"Nutze: /Email [Addresse]");
    SpielerInfo[playerid][pEmail]=email;SavePlayer(playerid);
    return 1;
    }
    if(strcmp(cmd,"/test",true)==0){
    format(string,sizeof string,"Email Addresse: %s",SpielerInfo[playerid][pEmail]);
    SendClientMessage(playerid,WEIß,string);
    return 1;
    }


    MFG

  • Ich zitiere mich mal.

    Zitat

    Das ist totaler Quatsch. Glaube auch,dass es nicht mal kompilieren wird ohne das eine Fehlermeldung erscheint.Selbst der Kommentar mach keinen Sinn,denn dann wäre es ja


    Ganz ehrlich, lass es lieber mit dem Scripten. So kommst du nicht weit.
    format(SpielerInfo[playerid][pEmail], 50,mysql_GetString("accounts", "Email", "Name", SpielerInfo[playerid][pName]));
    SpielerInfo[playerid][pEmail] = 50;
    Ich habe doch geschrieben,dass diese Zeile nichts bringt:
    SpielerInfo[playerid][pEmail] = 50;
    Lösch die,die macht gar keinen Sinn. Die 2 am Anfang kommt nämlich durch die 50. 50 ist nämlich der ASCII - Wert für das Zeichen 2.
    Ich glaube du hast nicht mal selber verstanden,was du dort machst 0o.