Hallöchen, ich zeige euch meinen selbst geschriebenen AutoIt Register/Login Script vor.
Erklärung: Wenn man sich registriert speichert er in den Ordner Spieler 2 Textdateien, ein mal Username und Passwort. Natürlich verschlüsselt es auch den Passwort damit es sicherer ist. Wenn man sich einloggt, fragt es ab ob eine Datei existiert mit den Username, und wenn ja fragt es ab ob alles genau gleich ist.
Wenn ihr den Script nicht downloaded sondern einfach kopiert, müsst ihr einen Ordner namens Spieler erstellen.
Natürlich müsst ihr noch was ändern, also wenn man sich eingeloggt hat soll ja was passieren, das müsst ihr ändern wie ihr es wollt!
Das ist mein erstes richtiges AutoIt Script
wenn es bugs gibt bitte melden
Hallo sezer :)
Die Idee von deinem Script ist gut, aber du setzt sie leider nicht richtig um.
Ist nichts schlimmes, man lernt ja aus Fehlern.
Hab mir deinen Script mal angeschaut und abgeändert und nun will ich dir zeigen was man besser machen kann:
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Switch $nMsg[1]
Case $Form1
Exit
Case $Form2
GUISetState(@SW_HIDE, $Form2)
Case $Form3
GUISetState(@SW_HIDE, $Form3)
Case $Form4
GUISetState(@SW_HIDE, $Form4)
EndSwitch
Case $Button1 ;LoginForm
GUISetState(@SW_SHOW, $Form2)
Case $Button2 ;RegisterForm
GUISetState(@SW_SHOW, $Form3)
Case $Button3 ;Login
$Username = GUICtrlRead($Input1)
$Passwort = GUICtrlRead($Input2)
$RegUsers = IniReadSectionNames(@ScriptDir & "/Spieler.ini")
If _ArraySearch($RegUsers, $Username) <> -1 Then
$sPasswort = _StringEncrypt(0, IniRead(@ScriptDir & "/Spieler.ini", $Username, "password", ""), "1337")
If $sPasswort = $Passwort Then
GUISetState(@SW_SHOW, $Form4)
Else
MsgBox(16, "", "Falsches Passwort")
EndIf
Else
MsgBox(16, "", "Benutzer existiert nicht")
EndIf
Case $Button4 ;Register
$Username = GUICtrlRead($Input3)
$Passwort = GUICtrlRead($Input4)
$RegUsers = IniReadSectionNames(@ScriptDir & "/Spieler.ini")
If _ArraySearch($RegUsers, $Username) = -1 Then
IniWrite(@ScriptDir & "/Spieler.ini", $Username, "password", _StringEncrypt(1, $Passwort, "1337"))
MsgBox(64, "", "Erfolgreich registriert")
Else
MsgBox(16, "", "Benutzer existiert bereits")
EndIf
EndSwitch
WEnd
Wenn du in einem Script mehrere GUIs benutzt, dann setz sie an den Anfang alle untereinander und benutze keine verschiedenen Funktionen dafür.
Der Grund dafür ist ganz einfach: wenn ich zwei Funktionen habe mit jeweils einer GUI und über die GUI in der Funktion1 die Funktion2 aufrufe, dann springe ich automatisch in die While-Schleife der zweiten GUI und kann somit keine Elemente mehr aus der ersten GUI benutzen.
Außerdem schließt sich der gesamte Script, wenn ich das Fenster schließen will.
Lösung: Eine erweiterte GUIGetMsg-Abfrage.
GUIGetMsg(1) gibt eine Array zurück, die unter anderem die Ereignis-ID ($nMsg[0]) und das Fenster-Handle der GUI beinhaltet, in welcher das Ereignis gemeldet wird ($nMsg[1]).
Beim Registrieren ist mir aufgefallen, dass ich mich mehrmals registrieren kann. Wenn der Benutzername schon existiert komm keine Fehlermeldung, sondern das alte Passwort wird einfach mit dem neuen Überschrieben und in der Username.txt stehen dann zwei Zeilen mit dem gleichen Namen.
Lösung: Alle Benutzer in eine Ini-Datei stecken.
Eine Ini-Datei bietet hier viele Vorteile. Einmal ist die Abfrage der Daten leichter und man kann ohne viele Dateien mehr Daten speichern (z.B. ob ein Benutzer gesperrt ist, oder schon eingeloggt).
Hier mal ein Beispiel:
Der Befehl IniReadSectionNames würde nun eine Array zurückgeben ($aBenutzer[3] = [2, "Benutzer1", "Benutzer2"]) und du musst mit _ArraySearch oder einer For-Schleife nurnoch überprüfen, ob der eingegebene Benutzername in der Array vorhanden ist.
Falls ja, wird das Passwort aus der Section des Benutzers ausgelesen und mit dem eingegebenen Passwort verglichen.
Falls du noch Fragen hast oder Hilfe benötigst, dann melde dich einfach bei mir!
Nunja, an sich eine ganz nette Idee, jedoch gibt es eine Menge zu bemengeln.
Die Verschlüsselung ist einfach nur **** und bietet null Sicherheit.
Das Speichern des Benutzernamen und Passwortes in einzelne .txt Dateien macht die Sache ziemlich umständlich und ist auch nicht die eleganteste Möglichkeit. Versuch doch mal das Passwort und den Benutzernamen in die registry mit einem eigenen Verschlüsslungsalgoritmus abzuspeichern. Das macht es um einiges einfacher und Daten aus der registry zu lesen ist schneller als die Textdokumente zu öffnen, lesen und anschließend wieder schließen. Desweitern bleiben die geöffneten Formen (Login, Register) immer im Hintergrund sichtbar, was sich sehr einfach beheben lässt.
Hoffe ich konnte dir soweit helfen, dass du es umsetzen kannst.
PS: Gib deinen Variablen ordentliche Namen - Stichwort: Ungarische Notation
Wenn du eine While Schleife mit der GUIGetMsg Abfrage hast, also:
PHP Code:
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Und jetzt etwas in deiner GUI machst, z.b. das rote X zum Schließen drückst, dann gibt GUIGetMsg die Ereignis-ID zurück.
Und je nach dem wie diese lautet schreibst du in die Cases für den Rückgabewert von GUIGetMsg Funktionen.
Wenn die Ereignis-ID $GUI_EVENT_CLOSE ist, dann wird das Programm geschlossen.
Benutzt du aber GUIGetMsg(1), also den Advanced Mode, dann erhälst du mehr als nur die Ereignis-ID.
Quote:
Originally Posted by AutoIt Hilfe
Wird der "advanced"-Parameter verwendet, werden die Informationen in einem Array zurückgegeben:
$array[0] = 0 oder Ereignis-ID oder Control-ID
$array[1] = Der Fenster-Handle des Fensters, von dem das Ereignis gemeldet wird
$array[2] = Der Control-Handle des Controls, von dem das Ereignis gemeldet wird (gegebenenfalls)
$array[3] = Die aktuelle X-Position des Mauszeigers (relativ zum GUI-Fenster)
$array[4] = Die aktuelle Y-Position des Mauszeigers (relativ zum GUI-Fenster)
Wenn die GUIOnEventMode-Option auf 1 gesetzt ist, ist der Rückgabewert von GUIGetMsg immer 0, und @error wurde auf 1 gesetzt.
Heißt, wenn wir mehrere GUIs haben können wir im Advanced Mode abfragen, aus welcher der GUIs das Event gesendet wird:
PHP Code:
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Switch $nMsg[1]
Case $Form1
Exit
Case $Form2
GUISetState(@SW_HIDE, $Form2)
EndSwitch
EndSwitch
WEnd
Wenn wir das rote X drücken (egal in welcher GUI), fragen wir in einer zweiten Switch-Anweisung ab, in welcher GUI das X gedrückt wurde.
Wenn es in $Form1 war wird der Script beendet, und wenn es in $Form2 war wird nur $Form2 unsichtbar gemacht.
autoit and mysql login/register forms 09/12/2012 - AutoIt - 1 Replies ive been trying to create login form in autoit with mysql... and it logins nomater what you enter...
$SQL = _MySQLConnect($Connection, $Connection, "mydb", $Connection)
If @error Then MsgBox(0, "", "failed")
$VerifyLoginInp = _Query($SQL, "SELECT username FROM accounts WHERE 'username' = '"&guictrlread($usernamelogin)&" '")
If GUICtrlRead($UsernameLogin) = $VerifyLoginInp Then
MsgBox(0, "", "KKKKKKKKKK")
;~ Exit
EndIf
login logout register script 10/08/2011 - General Coding - 2 Replies hallo
ich würde gerne wissen was man alles für Login Logout Register Script so braucht braucht wäre nett wen mir einer ein Guide zeigen könnte wie man so was macht
Danke schon mal im voraus
sorry wenn ich falsch bin
register,login und logout script 10/07/2011 - Main - 1 Replies hallo
ich würde gerne wissen was man alles für Login Logout Register Script so braucht wäre nett wen ich eine sinnvolle Antwort bekäme
danke schon mal im voraus
[AutoIT]Login Script 10/10/2010 - AutoIt - 9 Replies Hay Leuts Hatt Jemand Eventl Ein Login Script Das Mit Meiner DB Verbindet Und Dan Die Login Daten Überprüft?
Help with autoit login script 03/16/2008 - Cabal Online - 7 Replies I was wondering if there was a script to do the image verification when you login or to somehow bypass this screen.