MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel)
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
-
-
es wird einfach nicht gelöscht obwohl ich den code drinne habe
else if(PlayerInfo[giveplayerid][pFrakSperre] == 1)
{
new year, month,day;
getdate(year, month, day);
format(query, sizeof(query), "DELETE FROM `test` WHERE `Wer` = '%s'", giveplayer);
mysql_query(query);
format(string, sizeof(string), "AdmCmd: %s hat von %s die Fraktionsperre aufgehoben! Grund: %s (%d-%d-%d)", giveplayer, sendername,(result),month,day,year);
SperreLog(string);
format(string, sizeof(string), "AdmCmd: Deine FraktionsSperre wurde von %s aufgehoben! Grund: %s",giveplayer,(result));
SendClientMessage(giveplayerid,COLOR_LIGHTRED,string);
PlayerInfo[giveplayerid][pFrakSperre] = 0;
} -
JUHUUUUUU DANKE
-
so es klappt doch ich hatte nur die falsche datenbank ausgewählt danke die mir geholfen haben
-
Und wie speichert man die Position?
-
ich glaube so hier
new query[128];
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
format(query, sizeof(query), "INSERT INTO Tabellenname (XPosition,YPosition,ZPosition) VALUES ('%d', '%d', ''%d)", X,Y,Z);
mysql_query(query);
und bei der tabelle machste nicht varchar oder so sondern int -
-
Ist das dann so richtig?
Spieler[playerid][Values] = mysql_SetInt("accounts", "Values ('%f', '%f', '%f')" "Name", Spieler[playerid][Name]);
//EDIT:
Ich habe insgesamt 7 errors:
ZitatC:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1143) : error 017: undefined symbol "mysql_CheckAccount"
C:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1149) : error 017: undefined symbol "mysql_CheckAccount"
C:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1185) : error 033: array must be indexed (variable "name")
C:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1186) : warning 215: expression has no effect
C:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1186) : error 001: expected token: ";", but found "-identifier-"
C:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1186) : error 076: syntax error in the expression, or invalid function call
C:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1186) : error 017: undefined symbol "mysql_GetInt"
C:\Users\Dennis\Desktop\Server\gamemodes\saartdenninho.pwn(1186) : fatal error 107: too many error messages on one line
public OnPlayerRequestClass(playerid, classid)
{if(GetPVarInt(playerid,"Eingeloggt") == 0)
{
if(mysql_CheckAccount(playerid) == 0) /1143
{
SendClientMessage(playerid, 0xFFFFFFFF,"________-> Willkommen auf auf MyReallifeNetwork <-________");
SendClientMessage(playerid, 0xFFFFFFFF,"Bevor es los geht,musst du dich registrieren!");
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Bitte Gib ein Passwort an:","Register","Exit");
}
else if(mysql_CheckAccount(playerid) == 1)/1149
{
SendClientMessage(playerid, 0xFFFFFFFF,"________-> Willkommen auf auf MyReallifeNetwork <-________");
SendClientMessage(playerid, 0xFFFFFFFF,"Bitte Log dich nun ein!");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Bitte gib dein Passwort ein:","Login","Abbrechen");
}
}
return 1;
}
public OnPlayerConnect(playerid)
{SetPlayerColor(playerid,0xFFFFFFAA);
Ping1[playerid] = 0;
SetTimerEx("Ping2", 1000*10, false, "%d", playerid);
GangZoneShowForPlayer(playerid, gz3, -16777017);
GangZoneShowForPlayer(playerid, gz5, -2147418167);
GangZoneShowForPlayer(playerid, gz6, -8388424);
GangZoneShowForPlayer(playerid, gz4, -65332);
GangZoneShowForPlayer(playerid, gz1, -8388424);
GangZoneShowForPlayer(playerid, gz2, -2147418167);
GangZoneShowForPlayer(playerid, GroveStreet, 16711888);
GangZoneShowForPlayer(playerid, MS13, 1538909898);
GangZoneShowForPlayer(playerid, gz7, -66);
GangZoneShowForPlayer(playerid, fafzone, Grau);
GangZoneShowForPlayer(playerid, damialgazone, 0xFFFF0096);
GangZoneShowForPlayer(playerid, hazone, Rot);
new pName [MAX_PLAYER_NAME] ;
new string [48];
new name[128];
GetPlayerName(playerid, pName, sizeof(pName) ) ;
format(string, sizeof(string), "%s hat den Server betreten ", pName) ;
SendClientMessageToAll (0xAAAAAAAA, string);
GetPlayerName(playerid, Spieler[playerid][name], MAX_PLAYER_NAME);
Spieler[playerid]GetPlayerMoney = mysql_GetInt("accounts", "geld" "Name", Spieler[playerid][name]); //1186
Spieler[playerid]GetPlayerWantedLevel = mysql_GetInt("accounts", "wanted" "Name", Spieler[playerid][name]);
Spieler[playerid][bankgeld] = mysql_GetInt("accounts", "bankgeld" "Name", Spieler[playerid][name]); -
haste
stock mysql_CheckAccount(playerid)
{
new Query[128],Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
mysql_real_escape_string(Name, Name);
format(Query, sizeof(Query), "SELECT * FROM accounts WHERE Name = '%s'", Name);
mysql_query(Query);
mysql_store_result();
return mysql_num_rows();
}im script?
-
Kann das sein, dass bei GetFloat ein Fehler ist? Denn immer wenn ich das benutze kommt Warning : tag mismatch.
Ein GetFloat sieht zum Beispiel so aus:
SpielerInfo[playerid][lastx] = mysql_GetFloat("accounts", "x", "Name", SpielerInfo[playerid][pName]); -
Hast du lastx auch als float definiert?
-
Ja.
enum SpielerDaten
{
pName[MAX_PLAYER_NAME],
pLevel,
pGeld,
pKills,
pTode,
Float:pHealth,
pAdminlevel,
Float:lastx,Float:lasty,Float:lastz,
}
new SpielerInfo[MAX_PLAYERS][SpielerDaten]; -
Versuch mal obs geht wenn du die funktion durch die hier ersetzt.
stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
{
new query[128], Float:sqlfloat;
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Is, Is);
format(query, 128, "SELECT %s FROM %s WHERE %s = '%s'", Field, Table, Where, Is);
mysql_query(query);
mysql_store_result();
mysql_fetch_float(sqlfloat);
mysql_free_result();
return sqlfloat;
} -
Hat sich nichts geändert.
-
@ Maddin: Hast du den Beitrag vielleicht übersehen? Er stellt ein Problem für die Entwickler hier dar.
-
@Martez
Im normalfall wird auch bei SAMP nicht zwischen Groß- und Kleinschreibung unterschieden. Sprich wenn du dir nen Account mit Martez erstellst kannst du dich auch mit MaRtEz einloggen. Sollte also, meiner meinung nach, kein Problem darstellen.@Denninho
Du kannst immer nur einen Wert abfragen. Das heisst du musst, wenn du z.b X,Y und Z Position abfragen willst, drei abfragen machen. Zumal du GetFloat benutzen musst um einen Float Wert aus der Datenbank zu bekommen.
So wäre es richtig:
Spieler[playerid][Pos_X] = mysql_GetFloat("accounts", "XPos", "Name", Spieler[playerid][Name]);
Spieler[playerid][Pos_Y] = mysql_GetFloat("accounts", "YPos", "Name", Spieler[playerid][Name]);
Spieler[playerid][Pos_Z] = mysql_GetFloat("accounts", "ZPos", "Name", Spieler[playerid][Name]);Zitaterror 017: undefined symbol "mysql_CheckAccount"
error 017: undefined symbol "mysql_CheckAccount"
Bedeutet warscheinlich das die funktion "mysql_CheckAccount" nicht existiert.Die anderen Fehler kommen, weil du die Variablen falsch benutzt hast.
Spieler[playerid][pGeld] = mysql_GetInt("accounts", "geld" "Name", Spieler[playerid][name]); //1186
Spieler[playerid][pWanted] = mysql_GetInt("accounts", "wanted" "Name", Spieler[playerid][name]);
Spieler[playerid][bankgeld] = mysql_GetInt("accounts", "bankgeld" "Name", Spieler[playerid][name]); -
Hi!
Erstmal respekt dafür,das Du soviel geschrieben hast!
Ich finde Du hast mal so ein richtiges Vorbild-Tutorial geschrieben!
So,zu meinem Problem:
Also mein Server startet ohne Probleme!
Jedoch wird der Account nicht erstellt wenn ich mich registriere..Die Daten die ich im Script angegeben habe sind 100% richtig!Auch auf Groß/Kleinschreibung habe ich geachtet.
Dennoch wird der Account nicht erstellt.Ich habe einen Server bei samp4you.com und habe bisher mit jedem MySQL-Tutorial bzw. Script Probleme dort gehabt.
In der Server-Log steht nur das der Server geladen wurde bla bla bla und das ich connected und disconnectet bin..
Disconnect war natürlich absicht!Ich hoffe Du hast evtl. eine Lösung für mein Problem.
Mfg, Hardcore
P.s
Nochmal vielen Dank für das Tutorial!;) -
Sehr sehr gutes Tutorial und hast dir sehr viel Mühe gegeben! Auf jeden fall 10/10
-
@Pizzarand:
Danke@[FoR]Hardcore:
Schreib mal
mysql_debug(1);
unter OnGameModeInit und starte dann den server. Wenn ein fehler bei MySQL vorliegt wird er dir dann in der mysql_log.txt ausgegeben. Kannst den Log ja hier Posten falls dir das so nicht weiter Hilft.Mfg.
-
So,habs mal gemacht..
Hier der Text aus der Log:Zitat[13:43:45] ---------------------------
[13:43:45] MySQL Debugging activated (02/26/11)
[13:43:45] ---------------------------
[13:43:45]
[13:43:45] >> mysql_connect( )
[13:43:45] CMySQLHandler::CMySQLHandler() - constructor called.
[13:43:45] -- Connecting to "127.0.0.1" | DB: "samp_5566" | Username: "samp_5566" ...
[13:43:45] CMySQLHandler::Connect() - Connection was successful.
[13:43:45] >> mysql_ping( Connection handle: 75204 )
[13:43:45] >> mysql_ping() - Invalid connection handle. (You set: 75204, Highest connection handle ID is 1).
[13:43:45] >> mysql_connect( )
[13:43:45] CMySQLHandler::Ping() - Connection is still alive.
[13:43:45] >> mysql_ping( Connection handle: 75204 )
[13:43:45] >> mysql_ping() - Invalid connection handle. (You set: 75204, Highest connection handle ID is 1).
[13:43:45] CMySQLHandler::~CMySQLHandler() - deconstructor called.
[13:43:45] CMySQLHandler::FreeResult() - The result is already empty.
[13:43:45] CMySQLHandler:Disconnect() - Connection was closed.
[Mon Apr 11 21:31:54 2011] -------------------------
[Mon Apr 11 21:31:54 2011] Logging Started
[Mon Apr 11 21:31:54 2011] -------------------------
[Mon Apr 11 21:35:47 2011] -------------------------
[Mon Apr 11 21:35:47 2011] Logging Ended
[Mon Apr 11 21:35:47 2011] -------------------------
[Mon Apr 11 21:35:52 2011] -------------------------
[Mon Apr 11 21:35:52 2011] Logging Started
[Mon Apr 11 21:35:52 2011] -------------------------Ich hoffe Du kannst anhand der Log einen Fehler erkennen und mir sagen wie ich diesen behebe.
Mfg, Hardcore
//Edit:
Ich habe jetzt mal Manuell einen Account in die Datenbank eingetragen und dann auf den Server connectet!
Der Account wurde aber komischerweise nicht gefunden..Ich habe erneut die Daten die ich angegeben habe überprüft und konnte keinerlei Schreibfehler entdecken!
Die Daten sind zu 100% korrekt!Hat zufällig einer von Euch auch einen Server bei samp4you und diese Probleme mit MySQL?
//Edit2:
Okay..
Dir ist beim Muster-Script ein kleiner Fehler unterlaufen!
Du hast unter OnGameModeInit()
Connect_To_Database();
Vergessen einzutragen!Bei mir funzt nun alles perfekt und schneller denn je!
Vielen vielen Dank für ein umfangreiches Tutorial! -