import sqlite3
from tkinter import *
def clear_fields():
enter1.delete(0, END)
enter2.delete(0, END)
conn = sqlite3.connect("main.db")
c = conn.cursor()
c.execute(
"""CREATE TABLE IF NOT EXISTS admins(
admin_id INTEGER PRIMARY KEY,
name text,
password text
)"""
)
conn.commit()
def pass_check():
c.execute("SELECT * FROM admins")
chck = c.fetchall()
for i in chck:
if i[(1)] == enter1.get() and i[(2)] == enter2.get():
break
print("login sucess")
else:
print("Accses Denied")
root = Tk()
root.geometry("250x180+550+200")
root.resizable(False, False)
root.title("Admin Login")
root.iconbitmap("login.ico")
labl1 = Label(text="User name: ")
labl1.place(x=10, y=10)
labl2 = Label(text="Password: ")
labl2.place(x=10, y=70)
usr = ""
pas = ""
enter1 = Entry()
enter1.place(x=80, y=10)
enter2 = Entry(show="*")
enter2.config()
enter2.place(x=80, y=70)
ok_btn = Button(text="Login", width=6, height=1, command=pass_check)
ok_btn.place(x=150, y=100)
clear_btn = Button(text="Clear", width=6, height=1, command=clear_fields)
clear_btn.place(x=80, y=100)
root.mainloop()
在我的终端,如果我输入正确的用户名和密码,我得到登录成功访问被拒绝
如果我输入了错误的凭据,我会得到拒绝访问拒绝访问我在数据库的管理表中只有2个管理员,我认为问题出在for循环语句中,但我似乎不知道是什么。
1条答案
按热度按时间kq4fsx7k1#
我想知道为什么你会因为
break
语句而得到“login success”,你需要在print(...)
之后调用break
,而且你需要在for
的else
块中调用print("Access Denied")
:但是,您不需要从数据库表中获取所有记录,只需使用SQL直接检查凭据的有效性: