Habe mich ans Register/login System gesetzt so wie im Tutorial von Jeffry.
jetzt will der die daten nicht in die db packen.
Mysql_Log:
SQL
[21:14:13] [plugins/mysql] error #1064 while executing query "SELECT id From accounts WHRE name = 'teso'": You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'name = 'teso'' at line 1
Mein Code sieht so aus:
Code
#include <a_samp>
#include <a_mysql>
//Datenbankinformation
#define MYSQL_HOST "127.0.0.1" //IP Adresse des MYSQL Server
#define MYSQL_USER "root" //Benutzername dder angemelet wird
#define MYSQL_PASS "" //password des benutzers
#define MYSQL_DBSE "samp" //Name der Dantenbank
new MySQL:handle; //Die Connection-Handlem über die wir später auf die Tabellen der Datenbank zugreiffen
//FORWARD:
forward OnUserCheck(playerid);
forward OnUserRegister(playerid);
forward OnUserLogin(playerid);
//DIALOGE:
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
//ENUM:
enum pDataEnum
{
p_id,
bool:pLoggedIn,
pName[MAX_PLAYER_NAME],
pAdminlevel,
pMoney,
pFraktion,
pFrank
}
new PlayerInfo[MAX_PLAYERS][pDataEnum];
public OnGameModeInit()
{
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
MySQL_SetupConnection();
mysql_log();
return 1;
}
public OnGameModeExit()
{
mysql_close(handle);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
if(!PlayerInfo[playerid][pLoggedIn])
{
new query[127];
mysql_format(handle,query,sizeof(query), "SELECT id From accounts WHRE name = '%e'",PlayerInfo[playerid][pName]);
mysql_pquery(handle,query, "OnUserCheck","d",playerid);
}
return 1;
}
public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][p_id] =0;
PlayerInfo[playerid][pLoggedIn] = false;
PlayerInfo[playerid][pAdminlevel] = 0;
PlayerInfo[playerid][pMoney] = 0;
PlayerInfo[playerid][pFraktion] =0;
PlayerInfo[playerid][pFrank] = 0;
GetPlayerName(playerid, PlayerInfo[playerid][pName],MAX_PLAYER_NAME);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//Speichere den Spieler wenn er der Server verlässt
SaveUserStats(playerid);
return 1;
}
public OnUserCheck(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registraiton", "Bitte registriere dich:","Ok","Abbrechen");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung","Bitte Logge dich ein:", "Ok", "Abbrechen");
}
return 1;
}
public OnUserRegister(playerid)
{
//Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
PlayerInfo[playerid][p_id] = cache_insert_id();
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
return 1;
}
public OnUserLogin(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
//Der Spieler hat ein falsches Passwort eingegeben
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
}
else
{
//Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
//Wir lesen nun die erste Zeile des Caches aus (ID 0)
cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
cache_get_value_name_int(0, "Adminlevel", PlayerInfo[playerid][pAdminlevel]);
cache_get_value_name_int(0, "Money", PlayerInfo[playerid][pMoney]);
cache_get_value_name_int(0, "Fraktion", PlayerInfo[playerid][pFraktion]);
cache_get_value_name_int(0, "Frank", PlayerInfo[playerid][pFrank]);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
return 1;
}
return 0;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_REGISTER)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird der Spieler in der Datenbank angelegt
//Als Verschlüsselung für das Passwort wird MD5 verwendet
new query[256];
mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
//Das Query wird abgesendet und die playerid an OnUserRegister übergeben
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
return 1;
}
if(dialogid == DIALOG_LOGIN)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird die Datenbank ausgelesen
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);
//Das Query wird abgesendet und die playerid an OnUserLogin übergeben
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
return 1;
}
return 0;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
stock MySQL_SetupConnection(ttl = 3)
{
print("[MySQL] Verbindungsaufbau...");
//mysql_log(); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
//Prüfen und gegebenenfalls wiederholen
if(mysql_errno(handle) != 0)
{
//Fehler im Verbindungsaufbau, prüfe ob ein weiterer Versuch gestartet werden soll
if(ttl > 1)
{
//Versuche erneut eine Verbindung aufzubauen
print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
return MySQL_SetupConnection(ttl-1);
}
else
{
//Abbrechen und Server schließen
print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
print("[MySQL] Der Server wird heruntergefahren.");
return SendRconCommand("exit");
}
}
printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
return 1;
}
stock SaveUserStats(playerid)
{
//Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
if(!PlayerInfo[playerid][pLoggedIn]) return 1;
//Ansonsten speichere sie
new query[256];
mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pAdminlevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pFraktion], PlayerInfo[playerid][pFrank], PlayerInfo[playerid][p_id]);
//Das Query wird abgesendet
mysql_pquery(handle, query);
return 1;
}
Alles anzeigen