Ich möchte, dass mein Code eine if-Anweisung verwendet, um zu überprüfen, in welcher Benutzergruppe sich ein Benutzer befindet, und verschiedene Funktionen für jeden Benutzer aufzurufen. Meine aktuellen Code ist wie folgt:SQLite3-Datensatzüberprüfung
c.execute('SELECT * from users WHERE username=? AND password =?',
(username_input, password_input))
if c.fetchone() is not None:
c.execute('SELECT usergroup from users WHERE username=? AND password=?',
(username_input, password_input))
user_group = c.fetchone()
for (usergroup,) in c:
if user_group == 1:
App.admin_login_successful(self)
elif user_group == 2:
App.user_login_successful(self)
else:
App.user_login_successful(self)
# This shouldn't happen, as all records should theoretically contain a value for usergroup.
Was soll ich den Vergleich der Arbeit tun, um, wie meine Platten einen Wert enthalten, die entweder 1 oder 2 ist, aber die Validierung nicht funktioniert.
Was Sie von 'print (user_group) erhalte' 'vor für (Benutzergruppe,) in c:'? Ich bin mir nicht sicher, warum du ein Tupel in deiner For-Schleife machst. – roganjosh
Ich habe für (Benutzergruppe,) in c: aus der Empfehlung eines anderen Benutzers hier auf SQL-Injektion zu verhindern, aber seine Antwort war nicht super klar. Wenn ich drucke, bekomme ich ('2',) –
Sie sind _retrieving_ etwas aus Ihrer Datenbank, also wenn es zur SQL-Injektion ging, wäre es bereits geschehen; Ich bin mir nicht sicher, ob diese Empfehlung sinnvoll ist oder ob sie aus dem Zusammenhang gerissen wurde. Befreien Sie sich von der 'for'-Schleife (Sie benutzen 'fetchone()', so dass Sie nur 1 Ergebnis erhalten) und ändern Sie die 'if' /' elif' Checks in 'if int (user_group [0]) == 1:' etc . – roganjosh