MySQL Problems -
Adamrcook - 10.04.2010
Alright, I can usually mess around and figure out stuff when I'm scripting. However, mysql has me stumped. I thought I was doing it right from what I learned in the three hours I was doing it. I have the following in my script:
Код:
public OnPlayerConnect(playerid)
{
PlayerConnection(playerid);
return 1;
}
stock ResetPlayerVariables( playerid )
{
Account[playerid][AccID] = 0;
//Account[playerid][PosX] = 0.00;
return 1;
}
stock PlayerConnection(playerid)
{
ResetPlayerVariables(playerid);
new Query[128], Name[MAX_PLAYER_NAME], Name2[MAX_PLAYER_NAME];
mysql_real_escape_string(Name,Name2);
#pragma unused Name
format(Query,sizeof(Query), "SELECT `UserID` FROM `Accounts` WHERE `Username` = '%s'", Name2);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() >= 1 )
{
if(mysql_num_rows() >= 2 )
{
mysql_free_result();
SendClientMessage(playerid, COLOR_LIGHTRED, "** [Error]: Two Accounts found, please contact a 1337 Admin");
Kick(playerid);
}
else
{
Account[playerid][AccID] = mysql_fetch_int();
mysql_free_result();
ShowPlayerDialog( playerid, 1, DIALOG_STYLE_INPUT, "Login Process", "Welcome to SF-RP!\nPlease enter your password to continue.", "Login", "Cancel" );
SendClientMessage( playerid, COLOR_YELLOW, "** Your account has been recovered, please enter your password to proceed." );
}
}
else
{
mysql_free_result();
SendClientMessage( playerid, COLOR_YELLOW, "** Your account does not yet exist, enter a password to register one!" );
ShowPlayerDialog( playerid, 2, DIALOG_STYLE_INPUT, "Registration Process", "Welcome to SF-RP\nPlease enter a password to register.", "Register", "Cancel" );
}
}
Код:
switch( dialogid )
{
case 1:
{
GetFromAccount(Account[playerid][AccID], "Password", Account[playerid][Pass]);
if( strcmp( inputtext, Account[playerid][Pass], true ) == 0 )
{
new String[ 128 ], Name[ MAX_PLAYER_NAME ];
GetPlayerName( playerid, Name, sizeof( Name ) );
format( String, sizeof( String ), "** Thank you for logging in, %s.", Name );
SendClientMessage( playerid, COLOR_YELLOW, String );
LoadAccount(playerid);
}
else
{
SendClientMessage( playerid, COLOR_LIGHTRED, "** [Error]: Incorrect password. Please try again!" );
ShowPlayerDialog( playerid, 1, DIALOG_STYLE_INPUT, "Login Process", "Welcome to SF-RP!\nPlease enter your password to authenticate.", "Login", "Cancel" );
}
}
case 2:
{
if( strlen(inputtext) >= 30 )
{
ShowPlayerDialog( playerid, 2, DIALOG_STYLE_INPUT, "Registration Process", "Welcome to SF-RP!\nPlease enter a password to register.", "Authenticate", "Cancel" );
SendClientMessage( playerid, COLOR_LIGHTRED, "** [Error]: You must use a shorter password - has to be less than 30 characters." );
}
else
{
if( strlen(inputtext) >= 1 )
{
new EscapedPassword[30], Query[128], Name[ MAX_PLAYER_NAME ], EscapedName[ MAX_PLAYER_NAME ];
GetPlayerName( playerid, Name, sizeof( Name ) );
mysql_real_escape_string( Name, EscapedName );
mysql_real_escape_string( inputtext, EscapedPassword );
#pragma unused Name
format( Query, sizeof( Query ), "INSERT INTO `Accounts` (UserID, Username, Pass) VALUES('%d', '%s', '%s')", Account[playerid][AccID],EscapedName, EscapedPassword );
mysql_query(Query);
RegAccount(playerid);
SendClientMessage( playerid, COLOR_YELLOW, "** Now, please login with the password you've just entered to proceed." );
PlayerConnection(playerid);
}
else
{
ShowPlayerDialog( playerid, 2, DIALOG_STYLE_INPUT, "Registration Process", "Welcome to SF-RP!\nPlease enter a password to register.", "Authenticate", "Cancel" );
SendClientMessage( playerid, COLOR_LIGHTRED, "** [Error]: Your password must be longer than 1 character..." );
}
}
}
}
Код:
stock SaveAccount(playerid)
{
new String[350];
format( String, sizeof( String ), "UPDATE `Accounts` SET `Blah` = '%d', WHERE `UserID` = '%d'",Account[playerid][Blah],Account[playerid][AccID]);
mysql_query( String );
return 1;
}
stock RegAccount(playerid)
{
new String[350];
format( String, sizeof( String ), "UPDATE `Accounts` SET `Blah` = '%d', WHERE `UserID` = '%d'",Account[playerid][Blah],Account[playerid][AccID]);
mysql_query( String );
return 1;
}
stock LoadAccount(playerid)
{
if( IsPlayerConnected(playerid))
{
new DataString[128], Query[128];
format( Query, sizeof( Query ), "SELECT * FROM `Accounts` WHERE `UserID` = '%d'", Account[playerid][AccID]);
mysql_query(Query);
mysql_store_result();
mysql_fetch_field( "Blah", DataString );
Account[playerid][Blah] = strval( DataString );
mysql_free_result();
}
}
stock GetFromAccount( dbid, obtaining[], holdingvar[] )
{
new Query[128];
format( Query, sizeof( Query ), "SELECT `%s` FROM `Accounts` WHERE `UserID` = '%d'", obtaining, dbid );
mysql_query( Query );
mysql_store_result();
if( mysql_fetch_row( holdingvar ) == 1 )
{
mysql_free_result();
}
return 1;
}
At first, the server crashed when I connected but I fixed that. Now I can connect, register and it'll send the "Login now" message. But then it goes right back to the "You don't have an account" dialog.
The Server Log also says:
Код:
[16:45:09] [join] DeLuca has joined the server (0:192.168.2.2)
[16:45:17] MySQL Error (0): Could not execute query. 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 'WHERE `UserID` = '0'' at line 1.
[16:45:17] MySQL Error (0): Could not execute query. 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 'WHERE `UserID` = '0'' at line 1.
[16:45:18] MySQL Error (0): Could not execute query. 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 'WHERE `UserID` = '0'' at line 1.
Any help is appreciated.