如何将数据库中的值与python输入进行比较

2024-06-17 08:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我尝试创建一个登录系统,有点像普通的python终端。我做了一个注册功能,但我正在努力与登录一个。我正在尝试将我的输入与用户名和密码进行比较,完成后,我将添加id。但我怎么能做到,我什么都试过了

当我运行代码并输入正确的详细信息时,它告诉我“登录失败,用户名或密码错误”,这意味着我的if语句有问题

    import mysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password=""
)
mycursor = mydb.cursor(buffered=True)

def login():
    mycursor.execute("USE logintest")
    login_username = input("Please enter your username or email: ")
    login_password = input("Please enter your password: ")
    
    check_login = f"SELECT username FROM users WHERE username = '{login_username}'"
    check_password = f"SELECT password FROM users WHERE password = '{login_password}'"

    mycursor.execute(check_login)
    username_result = mycursor.fetchall()

    mycursor.execute(check_password)
    password_result = mycursor.fetchall()

    passwordr = password_result
    usernamer = username_result

    print(usernamer)
    print(passwordr)

    if login_password == passwordr and login_username == usernamer:
        print("Logged in successfully")
    else: 
        print("Login failed, wrong username or password")
        
        
    
def register():
    mycursor.execute("USE logintest")
    new_username = input("please pick a username: ")
    new_email = input("please enter your email: ")
    new_password = input("please pick a password: ")
    insert_new_user = "INSERT INTO users (username, email, password) VALUES (%s, %s, %s)"
    new_user = (new_username, new_email, new_password)
    mycursor.execute(insert_new_user, new_user)
    mydb.commit()
    print("User successfully created! insert id:", mycursor.lastrowid)
    

def options():
    print("1. login")
    print("2. register")
    options = input("please pick 1 or 2: ")
    if "1" in options:
        login()
    elif "2" in options:
        register()
    else: 
        print("please only select 1 or 2")
        options()

options()

Tags: ornewinputexecuteemailcheckusernamelogin
2条回答

您应该创建一个用于验证登录详细信息的函数。这是如何验证登录详细信息的,它应该位于函数内部:

         try:
        username = input("your username")
        password = input("your password")

        conn = (your connection code);
        result = conn.execute("SELECT * FROM yourTable WHERE usernameColumnOfYourTable = ? AND passwordColumnOFyourTable = ?", (username, password))
        print("connected to database")
        if (len(result.fetchall()) > 0):
            print("user found")

        else:
            print("user not found")

    except Exception as err:
        print("couldn't connect")
        print("General error :: ", err)

注:?是pyodbc模块的参数标记,如果使用mysql连接器,请替换?用%s签名

但是,如果您使用的是散列(salt)密码,则格式会有所不同

将此逻辑应用于代码:

 def login():
connection = (establish your database connection here)
login_username = input("Please enter your username or email: ")
login_password = input("Please enter your password: ")

result = connection.execute("SELECT username FROM users WHERE username = ? AND password = ?",(login_username, login_password) )"

if (len(result.fetchall()) > 0):

    print("Logged in successfully")
else: 
    print("Login failed, wrong username or password")
    
    

通常,当您从python中的数据库获取数据时,它会返回一个数据列表,python中的输入是一个字符串,所以换句话说,您将一个字符串和一个始终为false的列表进行比较

相关问题 更多 >