- Achte auf meine Details: mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext); Ich übergebe hier den Inputtext an diese Funktion. Du musst den Callback entsprechend anpassen.
- Keine Ahnung, was dein ShowCaracter da noch macht?
- Die Frage mit dem Register verstehe ich nicht ganz. Denn so wie du es bis jetzt hast, wird er ja dann registriert...
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
-
-
1. Wo genau meinst du? Der Error wegei nputtext kommt immer noch.
2. ShowCharakter zeigt die Charakteruaswahl.
3. Ich meine, wie ich da den Dialog machen soll? Oder ist dieser DIALOG_PW_CHECK für die Registration?
-
- Wie wo genau meine ich? Na an der Funktion, du musst den Inputtext übergeben und auch natürlich oben in den Funktions-Header packen: FUNCTION AccountLogin(playerid, inputtext[])
- Ja, das solltest du dann an das Ende von OnPasswordChecked packen. Denn das soll ja erst kommen, wenn er erfolgreich eingeloggt ist
- Nein, DIALOG_PW_CHECK ist für den Login. Das wird angezeigt, falls er das Passwort falsch eingegeben hat. Für das Registrieren musst doch einfach nur ein ShowPlayerDialog(playerid,DIALOG_REGISTRATION,DIALOG_STYLE_INPUT,"Registration","Bitte gib ein Passwort für deinen Account an:","Bestätigen","Abbrechen"); machen. Oder so ähnlich natürlich...es muss doch vorher eine Prüfung geben, ob der User bereits einen Account hat oder nicht...das müsste doch nur angepasst werden
-
Ist es möglich 2 Mysql Version zu Verwenden wen ich ein Script in eine Akuellerere Version Schreiben möchte um das ganze zu testen? Wen ja Wie?
-
2 Versionen gleichzeitig? Das ist nicht möglich
-
Das heißt ich muss alle Funktionen die derzeit auf der alten Version sind sofort in die neue Version umwandeln. Huch ok
-
Ich hab jetzt alles so gemacht wie du sagtest, jedoch sagt er mir jetzt immer das das PW falsch iost obwohl es richtig ist.
-
Wie sieht denn nun dein Code aus, poste die entsprechenden Felder.
Nächstes mal kannst du btw ruhig einen eigenen Thread erstellen, falls Leute ähnliche Probleme haben, wäre das sehr hilfreich gewesen. (Hier geht das ja unter und ist nur für kleine Fragen gedacht).
(Darfst auch gerne etwas debuggen, wird in der Datenbank alles richtig gespeichert?)
-
C
Alles anzeigenstock logindialog(playerid, dialogid, response, inputtext[]) { switch(dialogid) { case DIALOG_LOGIN: { new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name` = '%e' LIMIT 1", AccountInfo[playerid][account_Name]); mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext); } case DIALOG_PW_CHECK: { if(!response) return Kick(playerid); if(!inputtext[0]) return ShowPlayerDialog(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen"); bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid); } } return 1; } FUNCTION AccountLogin(playerid, inputtext[]) { new rows; cache_get_row_count(rows); if(rows) { cache_get_value_name_int(0, "ID", AccountInfo[playerid][account_ID]); cache_get_value_name_int(0, "Slot1", AccountInfo[playerid][account_Slot][0]); cache_get_value_name_int(0, "Slot2", AccountInfo[playerid][account_Slot][1]); cache_get_value_name_int(0, "Slot3", AccountInfo[playerid][account_Slot][2]); cache_get_value_name_int(0, "Slot4", AccountInfo[playerid][account_Slot][3]); cache_get_value_name_int(0, "Admin", AccountInfo[playerid][account_Admin]); cache_get_value_name_int(0, "Mapper", AccountInfo[playerid][account_Mapper]); cache_get_value_name_int(0, "Scripter", AccountInfo[playerid][account_Scripter]); cache_get_value_name_int(0, "Maintenance", AccountInfo[playerid][account_Maintenance]); cache_get_value_name_int(0, "Interact", AccountInfo[playerid][account_Interact]); bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid); } return 1; } FUNCTION OnPasswordChecked(playerid) { new bool:match = bcrypt_is_equal(), query[256],string[128],inputtext; if(!match) return ShowPlayerDialog(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen"); mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext); mysql_format(handle, string, sizeof(string), "SELECT * FROM `character` WHERE `AccountID` = '%d'", AccountInfo[playerid][account_ID]); mysql_tquery(handle, string, "ShowCharacter", "d", playerid); return 1; }Was nutzt eigentlich das LIMIT im SELECT?
-
Was nutzt eigentlich das LIMIT im SELECT?
Das sagt deiner Datenbank, dass es nur 1 Statement gibt, was zurückgegeben werden muss.
Das ist performant das mit anzugeben, da er dann genau weiß, ah ich hab eins gefunden, jetzt kann ich aufhören und muss nicht noch alle anderen nach dem Namen durchsuchen

Wie mir auffällt, lädst du dort gar nicht das Passwort, also unter AccountLogin?

Das musst du dort laden, also das AccountInfo[playerid][account_Password]...sonst geht das natürlich nicht.
Wie mir auffällt lädst du dort generell nix über den User so wirklich?!

Da stimmt doch was nicht xD
-
Habs jetzt dort mal reingeschrieben aber geht trotzem nicht. Soll ich dme Passowrt ne Länge dazuschreiben wie zb AccountInfo[playerid][account_Password][255]?
Du meinst dort muss auch AccountInfo[playerid][account_Name] rein? Mehr gibts nicht zu laden. -
Du hast da stehen:
new bool:match = bcrypt_is_equal(), query[256],string[128],inputtext;
Wieso dieses inputtext? Bitte nirgends so deklarieren....schau mal wie ich das gemacht habe...
Und die String Länge sollte BCRYPT_HASH_LENGTH sein

#Handy...bin nu unterwegs
-
Habs jetzt geändert so wie du sagtest, nur leider funktioniert es immer noch nicht.
-
Dann zeige bitte nochmal deinen ganzen Code

-
C
Alles anzeigenstock logindialog(playerid, dialogid, response, inputtext[]) { switch(dialogid) { case DIALOG_LOGIN: { new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name` = '%e' LIMIT 1", AccountInfo[playerid][account_Name]); mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext); } case DIALOG_PW_CHECK: { if(!response) return Kick(playerid); if(!inputtext[0]) return ShowPlayerDialog(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen"); bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid); } } return 1; } FUNCTION AccountLogin(playerid, inputtext[]) { new rows; cache_get_row_count(rows); if(rows) { cache_get_value_name_int(0, "ID", AccountInfo[playerid][account_ID]); cache_get_value_name(0, "Name", AccountInfo[playerid][account_Name]); cache_get_value_name(0, "Password", AccountInfo[playerid][account_Password]); cache_get_value_name_int(0, "Slot1", AccountInfo[playerid][account_Slot][0]); cache_get_value_name_int(0, "Slot2", AccountInfo[playerid][account_Slot][1]); cache_get_value_name_int(0, "Slot3", AccountInfo[playerid][account_Slot][2]); cache_get_value_name_int(0, "Slot4", AccountInfo[playerid][account_Slot][3]); cache_get_value_name_int(0, "Admin", AccountInfo[playerid][account_Admin]); cache_get_value_name_int(0, "Mapper", AccountInfo[playerid][account_Mapper]); cache_get_value_name_int(0, "Scripter", AccountInfo[playerid][account_Scripter]); cache_get_value_name_int(0, "Maintenance", AccountInfo[playerid][account_Maintenance]); cache_get_value_name_int(0, "Interact", AccountInfo[playerid][account_Interact]); bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid); } return 1; } FUNCTION OnPasswordChecked(playerid) { new bool:match = bcrypt_is_equal(); new string[128]; if(!match) return ShowPlayerDialog(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen"); //mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext); mysql_format(handle, string, sizeof(string), "SELECT * FROM `character` WHERE `AccountID` = '%d'", AccountInfo[playerid][account_ID]); mysql_tquery(handle, string, "ShowCharacter", "d", playerid); return 1; }Das benutze ich bei Login.
-
Okay, sieht gut aus

Dann leg mal einen neuen Account an...und schau, ob alles richtig ein- & ausgelesen wird

(Mit print Statements Werte vergleichen)
Ansonsten probiere ich es die Tage selbst mal aus...
-
Ich hab jetzt mal Prints gesetzt, AccountLogin ruft er auf.
Beim Registrieren ruft er anscheinend nichts auf.
Edit: Das sind die Funktionen für die Registrierung.
C
Alles anzeigenstock registerdialog(playerid, dialogid, inputtext[]) { switch(dialogid) { case DIALOG_REGISTER: { if(strlen(inputtext) < 6 || strlen(inputtext) > 24) { ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Bitte gib ein Passwort für deinen Account an:","Bestätigen","Abbrechen"); bcrypt_hash(inputtext, BCRYPT_COST, "OnPasswordHashed", "d", playerid); } return 1; } } return 1; } FUNCTION AccountRegister(playerid) { printf("ACR"); new string [512]; AccountInfo[playerid][account_ID] = cache_insert_id(); AccountInfo[playerid][account_Eingeloggt] = true; mysql_format(handle, string, sizeof(string), "SELECT * FROM `character` WHERE `AccountID` = '%d'", AccountInfo[playerid][account_ID]); mysql_tquery(handle, string, "ShowCharacter", "d", playerid); return 1; } FUNCTION AccountCheck(playerid) { printf("ACC"); new rows,string[255]; cache_get_row_count(rows); if(rows) { format(string,sizeof(string),"{FFFFFF}Der Account {E8BD1A}%s {FFFFFF}wurde gefunden\nBitte melde dich an",AccountInfo[playerid][account_Name]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{FFFFFF}Anmelden",string, "{FFFFFF}Weiter", ""); //SetTimerEx("KickPlayer", 100, false, "i", playerid); } else { format(string,sizeof(string),"{FFFFFF}Der Account {E8BD1A}%s {FFFFFF}wurde nicht gefunden\nBitte erstelle dir einen Account",AccountInfo[playerid][account_Name]); ShowPlayerDialog(playerid, DIALOG_INFO, DIALOG_STYLE_PASSWORD, "{FFFFFF}Fehler",string, "{FFFFFF}Weiter", ""); //SetTimerEx("KickPlayer", 100, false, "i", playerid); } return 1; } FUNCTION OnPasswordHashed(playerid) { printf("OPWH"); new hash[BCRYPT_HASH_LENGTH],query[256]; bcrypt_get_hash(hash); mysql_format(handle, query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Password`) VALUES ('%e', '%e')", AccountInfo[playerid][account_Name], hash); mysql_pquery(handle, query, "AccountRegister", "d", playerid); return 1; } -
Hallo gibt es hier die ein oder anderen die sich mit Scripten auskennen und mir mal eine Private Nachricht hinterlassen können?
-
Hallo gibt es hier die ein oder anderen die sich mit Scripten auskennen und mir mal eine Private Nachricht hinterlassen können?
Nein. Entweder du stellst die Frage direkt hier oder du wirst keine Hilfe erhalten.
Dein Problem in einer privaten Nachricht zu klären, ist nicht der Sinn eines Forums.
-
Beim Registrieren ruft er anscheinend nichts auf.
Edit: Das sind die Funktionen für die Registrierung.
Das liegt an dieser Abfrage:
if(strlen(inputtext) < 6
strlen(inputtext) > 24)Das ändere mal zu:
6 <= strlen(inputtext) <= 24
Schließlich soll das Passwort zwischen 6 und 24 Zeichen liegen..und nicht kleiner 6 oder größer 24...
Du musst lernen solche Fehler aufgrund der vorliegenden logischen Schlüsse zu ziehen

