首页 > 解决方案 > Python 和 mysql 登录表单

问题描述

 import tkinter as tk
 from tkinter import *
 import os
 from tkinter import messagebox
 from PIL import ImageTk , Image
 import mysql.connector
     mydb=mysql.connector.connect(host="localhost",user="root",passwd="welcome123456",database="moonsun_hospital")
 cursor=mydb.cursor()
 cursor.execute("create database if not exists moonsun_hospital")
 cursor.execute("use moonsun_hospital")
#cursor.execute("create table if not exists login_table(username varchar(15),password varchar(30))")




 

def login():
  global login
  login_screen=Toplevel()
  login_screen.maxsize(450,300)
  login_screen.title('Account Login')
  login_screen.config(bg="white")
  login_screen.iconbitmap(r"C:\Users\Dell\Desktop\Moonsun hospital\background\hospital-2_icon-    icons.com_66067.ico")
  login_screen_img =ImageTk.PhotoImage(Image.open(r"C:\Users\Dell\Desktop\Moonsun     hospital\background\background.jpeg"))
  lb2 = Label(login_screen,image =login_screen_img)
  lb2.image =login_screen_img
  lb2.pack()
  Label(login_screen, text="USERNAME").place(x=210,y=100)
  username_login_entry = Entry(login_screen, textvariable="username")
  username_login_entry.place(x=180,y=125)
  Label(login_screen, text="PASSWORD").place(x=210,y=150)
  password__login_entry = Entry(login_screen, textvariable="password", show= '*')
  password__login_entry.place(x=180,y=175)
  def OK():
    username=username_login_entry.get()
    password=password__login_entry.get()
    mydb=mysql.connector.connect(host="localhost",user="root",passwd="welcome123456",database="moonsun_hospital")
    cursor=mydb.cursor()
    savequery="select * from Login_table"
    cursor.execute(savequery)
    myresult=cursor.fetchall()
    for i in myresult:
      if username in i and password in i:
        messagebox.showinfo("LOGIN",'LOGIN SUCCESSFUL')
        #moonsun_main.py()
      else:
        messagebox.showerror("LOGIN ERROR","LOGIN ERROR")
        mydb.commit()
      cursor.close()
      mydb.close()
        #moonsun_register.py()
  Button(login_screen,text="Login", height=1, width=6,bg="#AFF8DB",command=OK).place(x=215 , y = 200 )

我认为能够执行它....很多错误登录算法没有以正确的方式工作请给我一些想法我尝试了很多算法但我不知道它有什么问题我希望能尽快得到答复或以后

标签: pythonmysqlauthenticationmysql-python

解决方案


您可能应该让MySQL查询检查登录,这样更容易:

def OK():
    username = username_login_entry.get()
    password = password__login_entry.get()
    
    mydb = mysql.connector.connect(host="localhost",user="root",passwd="welcome123456",database="moonsun_hospital")
    cursor = mydb.cursor()
    
    savequery = "SELECT * FROM Login_table WHERE username=%s AND password=%s" # Get the records with these username and password ONLY
    cursor.execute(savequery,(username,password)) 
    myresult = cursor.fetchall() 
    
    if myresult: # If there is such a record, then success
        messagebox.showinfo("LOGIN",'LOGIN SUCCESSFUL')
        # Whatever you want to do after user is authentic
        new = Toplevel() # To open new window

    else: # Wrong password
        messagebox.showerror("LOGIN ERROR","LOGIN ERROR")
    cursor.close()
    mydb.close()

这样您就不必使用太多iffor循环。这里%s称为参数,您在执行查询时用usernameandpassword代替它的值,所以查询字面意思是:

SELECT * FROM Login_table WHERE username='John' AND password='123123'; -- If username is john and password is 123123

推荐阅读