Python-82-結訓實作-5.登入功能-連結資料庫(Mysql上的資料)/查詢

  • 判斷空值錯誤
  • 帳號不存在(錯誤)
  • 密碼錯誤
  • 登入成功
  • 顯示介面登入成功介面

一開始帳號密碼可先寫死(程式沒問題後再連結資料庫上的資料)


連結資料庫上的資料

1.先在phpmyadmin上面,測試sql語法

2.程式:查詢帳號資訊


 

 

當使用者選擇1.登入時

要讓使用者輸入帳號、密碼,如下

所以這裡我們需要寫一個登入的功能:

功能需求需判斷:

  • 判斷空值錯誤(回起始介面)

  • 帳號不存在(錯誤)

  • 密碼錯誤

  • 登入成功
  • 顯示介面登入成功介面

提示:  可以使用 "" 來判斷空值錯誤

先把帳號、密碼寫死: 

例如:

帳號:aaa、密碼:ccc

參考程式碼:

def myindex2():
    print("請選擇您要做的項目")
    print("*-------------*")
    print("1.查詢所有員工的資料")
    print("2.修改員工資料")
    print("3.刪除員工的帳號")
    print("4.離開")  
def login_staff():
    while True:
        acc=input("請輸入帳號")
        if acc == "":break   
       
        staff_acc= 'aaa'    
        if (staff_acc!=acc):
            print("{}帳號不存在".format(acc))
            continue
        mypwd='ccc'
        pwd=input("請輸入密碼")
        if pwd=="": break  
        if (mypwd != pwd):
            print("密碼錯誤")
        else:
            print()
            print("登入成功")
            print()
            myindex2() #呼叫myindex2 (登入成功的介面)
            break

呼叫第二層介面後,先判斷使用者輸入的數字

輸入 1 時 :先印出  "讀取所有員工資訊" 

輸入 2時 :先印出  "讀取所有員工資訊" 

輸入 3時 :先印出  "修改資訊"

輸入 4時 :先印出  "離開" ,跳到第一層介面  

 

參考程式碼:

def mymenu2():        
    while True:
        myindex2()
        item=int(input("請輸入您執行的動作"))
        if item == 1 :
            print("讀取所有員工資訊")
        elif item == 2 :
            print("更新資料")
        elif item == 3 :
            print("刪除資料")
        elif item == 4 :
            break   

這時候使用者如果輸入4 時,break 跳離當下 while 迴圈,自然回到上一層的介面

連結資料庫上的資料
1.先在phpmyadmin上面,測試sql語法

SELECT sf_name,sf_account,sf_pwd FROM staff_info WHERE sf_account ='aaa' AND sf_del ='0'

2.程式:查詢帳號資訊

可以先開啟一個空的檔案練習

查詢SQL語言: 查詢帳號是否存在,並抓出該筆的密碼

import pymysql
conn = pymysql.connect(host='localhost',user='root',passwd='',db='my_python_db',charset='utf8')
cur = conn.cursor()

#帳號預設為'aaa'或者可讓使用者輸入 input()
acc='aaa'

#查詢sql語法
sql_1="SELECT sf_name,sf_account,sf_pwd FROM staff_info WHERE sf_account ='" + acc + "' AND sf_del ='0'"

#執行sql語法
cur.execute(sql_1)
#只抓一筆資料 
staff_acc= cur.fetchone()   

print(staff_acc) #印出 ('hibbb', 'aaa', 'ccc') (姓名,帳號,密碼)

 

這時你已經有使用者的帳號、密碼

請改寫剛剛的程式碼,把剛寫死的程式碼改成資料庫抓出來的帳號、密碼

判斷使用者

  • 帳號不存在(錯誤)
  • 密碼錯誤
  • 登入成功
  • 顯示介面登入成功介面

參考程式碼:

def login_staff():
    while True:
        acc=input("請輸入帳號")
        if acc == "":break   
        sql_1="SELECT sf_name,sf_account,sf_pwd FROM staff_info WHERE sf_account ='" + acc + "' AND sf_del ='0'"
        cur.execute(sql_1)
        staff_acc= cur.fetchone()   
        print(staff_acc)
        if (staff_acc==None):
            print("{}帳號不存在".format(acc))
            continue
        mypwd=staff_acc[2]
        print(mypwd)
        pwd=input("請輸入密碼")
        if pwd=="": break  
        if (mypwd != pwd):
            print("密碼錯誤")
        else:
            print()
            print("登入成功")
            print()
            mymenu2()
            break

目前完成進度(程式碼參考):

import pymysql
conn = pymysql.connect(host='localhost',user='root',passwd='',db='my_python_db',charset='utf8')
cur = conn.cursor()

def myindex():
    print("管理者登入系統")
    print("*----------------*")
    print("1.登入")
    print("2.註冊帳號")
    print("3.結束程式")
    
def myindex2():
    print("請選擇您要做的項目")
    print("*-------------*")
    print("1.查詢所有員工的資料")
    print("2.修改員工資料")
    print("3.刪除員工的帳號")
    print("4.離開")         

def login_staff():
    while True:
        acc=input("請輸入帳號")
        if acc == "":break   
        sql_1="SELECT sf_name,sf_account,sf_pwd FROM staff_info WHERE sf_account ='" + acc + "' AND sf_del ='0'"
        cur.execute(sql_1)
        staff_acc= cur.fetchone()   
        print(staff_acc)
        if (staff_acc==None):
            print("{}帳號不存在".format(acc))
            continue
        mypwd=staff_acc[2]
        print(mypwd)
        pwd=input("請輸入密碼")
        if pwd=="": break  
        if (mypwd != pwd):
            print("密碼錯誤")
        else:
            print()
            print("登入成功")
            print()
            mymenu2()
            break    

def mymenu2():        
    while True:
        myindex2()
        item=int(input("請輸入您執行的動作"))
        if item == 1 :
            print("查詢所有資料")
        elif item == 2 :
            print("更新資料")
        elif item == 3 :
            print("刪除資料")
        elif item == 4 :
            break            
    
def mymenu():
    while True:
        myindex() #呼叫起始介面
        num = int(input("請輸入您要執行的動作"))
        print()
        if num == 1 :
            login_staff()
        elif num == 2 :
            print("註冊功能")
            print("登入功能")
        elif num == 3 :
            break #離開迴圈

#主程式
mymenu()
  

#關閉資料庫連線
cur.close()
conn.close()

 

Yiru@Studio - 關於我 - 意如