Könntest du die Datenbank eventuell zur Verfügung stellen?
MySQL Registersystem [BlueG R8+ (R26)]
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
-
-
@Andrzejxy': Hab mal schnell drüber geschaut einfach den Code als Query einmal ausführen lassen und die Tabelle ist da, müssten die richtigen Spalten sein falls nicht melde dich nochmal.
-
-
Du musst User zu Name machen hatte das vertauscht mit dem Tabellen Namen:
-
-
Könnte mir mal einer helfen was von r5 aufs neue zu bringen würd auch was spenden
-
Tut mir leid hatte vergessen das LastLogin ein String ist:
-
Yawoll es funktioniert nun ! Ich danke dir vielmals !
Eine Sache wäre da noch, wenn ich was neues hinzufüge wo muss ich das beim Speichern hinzufügen?
Sagen wir ich will einen int speichern.mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %d,`Leben` = %.1f,`LastLogin` = '%e' WHERE `Name` = '%e'",User[playerid][Geld],User[playerid][Leben],User[playerid][LastLogin],User[playerid][Username]);
-
Wenn du eine neue Variable Speichern willst musst du einerseits in der Tabelle eine neue Spalte erstellen und hier einfach um eins erweitern z.B.:
mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %d,`Leben` = %.1f,`LastLogin` = '%e',`VarName` = '%i' WHERE `Name` = '%e'",User[playerid][Geld],User[playerid][Leben],User[playerid][LastLogin],User[playerid][DeineVar],User[playerid][Username]);
Wenn es ein Integer ist %i beutzen
Bei einem String (in mysql_format) %e benutzen das escapet dann automatisch den String
Und bei einer Float %f benutzenDu musst beachten das wenn du jetzt VarName benutzt es genauso (Groß- Kleinschreibung) in der Tabelle stehen muss
-
Kann mir einmal Jemand erklären wieso ich folgenden MySQL Fehler bekomme ?
cache_set_active(User[playerid][LoginDataCacheID]);
new UserPassword[64];
cache_get_field_content(0, "Passwort", UserPassword);
if(strcmp(UserPassword, inputtext) == 0) { //[Passwort richtig]
User[playerid][Geld] = cache_get_field_content_int(0,"Geld");
User[playerid][Leben] = cache_get_field_content_float(0,"Leben");
cache_get_field_content(0,"LastLogin",User[playerid][LastLogin], 11); //[ganz böse, wenn man Strings abrufen will die in ein enum-Array gespeichert werden sollen, immer selbst die Länge angeben!]
User[playerid][Logged] = true;
SpawnPlayer(playerid);
cache_delete(User[playerid][LoginDataCacheID]);
User[playerid][LoginDataCacheID] = 0;Zitat[19:26:44] [ERROR] "cache_get_field_content" - invalid connection handle. (ID = 11).
[19:32:55] [ERROR] "cache_get_field_content" - invalid connection handle. (ID = 11).Vielen Dank !
//Edit... Fixxed...
Von:
cache_get_field_content(0,"LastLogin",User[playerid][LastLogin], 11);
zu:
cache_get_field_content(0,"LastLogin",User[playerid][LastLogin],1);
geändert Fehler behoben !
-
Zitat
[19:26:44] [ERROR] "cache_get_field_content" - invalid connection handle. (ID = 11).
[19:32:55] [ERROR] "cache_get_field_content" - invalid connection handle. (ID = 11).Er will auf die Tabelle User zugreifen.
Die existiert nicht, heißt also das du die erstellen musst. -
Soll ich noch mehr Tabellen vom User anlegen ? Sie ist das erste was ich erstellt habe !
-
Bei mir speichert er die Variable Team nicht, was mach ich falsch?
Im enum Team hingeschrieben.
Speichern: stock SavePlayerData(playerid){
new query[150 + MAX_PLAYER_NAME],day,month,year; getdate(year,month,day);
format(User[playerid][LetzerLogin],11,"%d/%d/%d",day,month,year);
mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Team` = '%e',`LetzerLogin` = '%e' WHERE `Name` = '%e'",User[playerid][Team],User[playerid][LetzerLogin],User[playerid][Username]);
mysql_tquery(mycon,query,"","");
return 1;
}Und in der Datenbank:
Wo liegt jetzt der Fehler?
-
kann man beim R8 eig auch so abspeichern wie bei maddins tut fürs R5 also in so nem "großen" stock?
-
Ich empfehle die Weise wie im Tutorial, so spart man Resourcen.
Und was meinst du mit Großer Stock? -
so in der art
etPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
SetPlayerScore(playerid,mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]));
GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]));
SpielerInfo[playerid][Adminlevel] = mysql_GetInt("accounts", "Adminlevel", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][respekt] = mysql_GetInt("accounts", "respekt", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][Bank] = mysql_GetInt("accounts", "Bank", "Name", SpielerInfo[playerid][pName]);
weil so anders blick ich nich dahinter, also wenn mehr sachen reinkommen -
Diese Methode ist nicht sehr empfehlenswert.
Sieh am Besten das Tutorial noch mal durch und eigne dir die Methode zum Sparen von Resourcen an.
Das Laden und Speichern sind nur eine Seite der Medaille.MfG
-
-
habe das selbe problem mit adminlevel,
mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %d,`pAdmin` = %d,`Leben` = %.1f,`LastLogin` = '%e',`Geld` = %d, WHERE `Name` = '%e'",User[playerid][Geld],User[playerid][pAdmin],User[playerid][Leben],User[playerid][LastLogin],User[playerid][Username]); -
Sehr unsicher umgesetzt, folgendes Beispiel:
- Ein Spieler will sich einloggen und die mysql_query wird abgesendet (Threaded: Also arbeitet das ganze im Hintergrund, während der SA-MP Server weiter arbeitet)
- Der Spieler geht nun Offline (Beispiel: ID = 5)
- Ein anderer Spieler kommt online ( ID = 5 )
- mysql_query vom ERSTEN Punkt wird nun fertig gestellt und ruft das Callback in PAWN für ID = 5 auf (zur Verarbeitung des Ergebnisses)
- KABOOM ID = 5 ist ein ganz anderer Spieler! Du hast keine Überprüfung dafür, ob es sich noch um den selben Spieler nach Fertigstellung der Abfrage handelt
- Account wurde erfolgreich gehackt
Kann schnell passieren, sobald der mysql Server mal etwas langsamer reagiert