Hallo zusammen,
Was ich am Programmieren ja so liebe, ist die Fehlersuche und die anschließende Korrektur. So wie bei meinem aktuellen Problem:
Da ich viel mit MySQL arbeite und auch oft Login Daten abfragen will, hab ich mir eine kleine Funktion geschrieben (login()). Nun Tritt aber immer folgender Fehler auf:
ZitatLine 48 (File "C:\[...]\login.au3";):
With $row_connect
With ^ ERRORError: Only Object-type variables allowed in an "With" statement.
Der code sieht wiefolgt aus:
C
#include <GUIConstants.au3>
#include <string.au3>
#include <C:\Programme\AutoIt3\Include\mysql.au3>
Func login($username,$password,$server,$db_name,$db_user,$db_password)
$connect = _MySQLConnect($db_name, $db_user, $db_password, $server)
$ping_error = 0
$password_hash = StringHash($password)
$popup_loading = GUICreate("Loading...", 250, 60, @DesktopWidth/2-175, @DesktopHeight/2-30, 0x80000200)
$login_progress_bar = GUICtrlCreateProgress(0, 0, 250, 60)
;Pingt den Server an, ob er denn auch da ist
Ping($server)
Select
Case @error = 1
MsgBox(16, "Error", "Server is offline.")
$ping_error = 1
Case @error = 2
MsgBox(16, "Error", "Cannot reach Server.")
$ping_error = 1
Case @error = 3
MsgBox(16, "Error", "Wrong address.")
$ping_error = 1
Case @error = 4
MsgBox(16, "Error", "The connection to the server has caused an unknown error.")
$ping_error = 1
Case @error = 0
$ping_error = 0
EndSelect
$login_ping_error = $ping_error
; Wenn er den Host erfolgreich gefunden hat, macht er weiter
If $login_ping_error = 0 Then
GUICtrlSetData($login_progress_bar, "25")
; Connectet zur DB:
$row_connect = _Query($connect, "SELECT * FROM" & $db_name)
;Ruft Daten ab:
With $row_connect
If .Fields($db_user).value = $username Then
$connect_check_username = 1
GUICtrlSetData($login_progress_bar, "50")
Else
MsgBox(16, "Error", "Wrong Username")
GUICtrlSetData($login_progress_bar, "0")
$status = 0
EndIf
; Checkt erst weiter, wenn der Username korrekt war...
If $connect_check_username = 1 AND .Fields($db_password).value = $password_hash Then
GUICtrlSetData($login_progress_bar, "75")
$connect_check_password = 1
ElseIf $connect_check_username = 1 Then
GUICtrlSetData($login_progress_bar, "0")
MsgBox(16, "Error", "Wrong Password")
$status = 0
EndIf
EndWith
; Fertig mit den Daten checken. Jetzt muss nurnoch $status verändert werden:
If $connect_check_username = 1 AND $connect_check_password = 1 Then
$status = 1
GUICtrlSetData($login_progress_bar, "100")
Sleep(1000)
EndIf
Else
$status = 0
EndIf
GUIDelete($popup_loading)
EndFunc
Alles anzeigen
Wo liegt der Fehler ?
Und noch eine Frage: Gibt es ausser der Deklaration als Globale Variable noch eine andere Möglichkeit, weine Variable aus einer Funktion ins Hauptprogramm zu übergeben? Oder zumindestens irgendwie einen Status (sowas wie @error)?
Gruß und Danke,
Chris