· 9 years ago · Jan 30, 2017, 02:56 PM
1from tkinter import *
2import tkinter.messagebox
3import pymysql
4
5# käytetään alla olevaa MYSQL-tietokantaa ja yhtä taulua
6"""
7CREATE DATABASE koekanta1;
8
9CREATE TABLE IF NOT EXISTS `koekanta1`.`Tunnustaulu` (
10 `tunnusID` INT NOT NULL AUTO_INCREMENT,
11 `tunnus` VARCHAR(8) NOT NULL,
12 `salasana` VARCHAR(24) NOT NULL,
13 PRIMARY KEY (`tunnusID`),
14 UNIQUE INDEX `tunnus_UNIQUE` (`tunnus` ASC));
15"""
16
17# MySQL-palvelimen kirjautumistiedot
18PALVELIN='192.168.99.99'
19MYSQLKAYTTAJA='python'
20MYSQLSALASANA='python'
21TUNNUSTIETOKANTA='koekanta1'
22
23# Muutama testitunnus
24testitunnukset = [["testeri1","salasana1"],
25 ["testeri2","salasana2"],
26 ["testeri3","salasana3"]]
27
28class Kirjautumisikkuna:
29 def __init__(self):
30 self.__ikkuna=Tk()
31 self.__ikkuna.title("Syötä käyttäjätunnus ja salasana")
32 self.__label_tunnus=Label(self.__ikkuna,text="Käyttäjätunnus:")
33 self.__entry_tunnus=Entry(self.__ikkuna,width=24)
34 self.__label_salasana=Label(self.__ikkuna,text="Salasana:")
35 # show="*" näyttää salasanan merkit tähtinä
36 self.__entry_salasana=Entry(self.__ikkuna,width=24,show="*")
37 self.__nappi_kirjaudu=Button(self.__ikkuna,
38 text="Kirjaudu",
39 command=self.kirjaudu)
40 self.__label_tunnus.grid(row=0,column=0,sticky='W')
41 self.__entry_tunnus.grid(row=0,column=1)
42 self.__label_salasana.grid(row=1,column=0,sticky='W')
43 self.__entry_salasana.grid(row=1,column=1)
44 self.__nappi_kirjaudu.grid(row=2,columnspan=2)
45
46 mainloop()
47
48 def kirjaudu(self):
49 tunnus=self.__entry_tunnus.get()
50 salasana=self.__entry_salasana.get()
51 if len(tunnus)==0 or len(salasana)==0:
52 messagebox.showinfo("VIRHE", "Käyttäjätunnus ja salasana ei kelpaa")
53 else:
54 tunnusID=tarkasta(tunnus,salasana)
55 if tunnusID==None:
56 messagebox.showinfo("VIRHE","Kirjautuminen epäonnistui")
57 else:
58 messagebox.showinfo("Kirjautuminen OK",\
59 "tunnusID={0}".format(tunnusID))
60
61def tarkasta(kirjautumistunnus,kirjautumissalasana):
62
63 jatketaanko=False
64
65 try:
66 # aukaistaan kanta
67 conn = pymysql.connect(host=PALVELIN,
68 port=3306,
69 user=MYSQLKAYTTAJA,
70 passwd=MYSQLSALASANA,
71 db=TUNNUSTIETOKANTA)
72 jatketaanko=True
73 except Exception as e:
74 print("Yhteyden aukaisu tietokantaan epäonnistui")
75 print(str(e))
76 if jatketaanko:
77 try:
78 cur = conn.cursor()
79 cur.execute("SELECT * FROM Tunnustaulu")
80 except Exception as e:
81 print("Virhe luettaessa tietokantaa")
82 print(str(e))
83 jatketaanko=False
84 conn.close()
85 if jatketaanko:
86 # jos kanta on tyhjä, niin lisätään testitunnukset
87 if cur.rowcount==0:
88 for rivi in testitunnukset:
89 sql="INSERT INTO Tunnustaulu(tunnus,salasana) "\
90 "VALUES ('{0}','{1}')".format(rivi[0],rivi[1])
91 try:
92 cur.execute(sql)
93 conn.commit()
94 print("Tunnus",rivi[0],"lisätty tietokantaan")
95 except Exception as e:
96 conn.rollback()
97 print("Tapahtui virhe suorittaessa SQL-komentoa:\n",sql)
98 print(str(e))
99 # varsinainen tunnuksen ja salasanan tarkastus
100 sql="SELECT tunnusID FROM Tunnustaulu WHERE "\
101 "tunnus = '{0}' AND salasana = '{1}'"\
102 .format(kirjautumistunnus,kirjautumissalasana)
103 try:
104 cur.execute(sql)
105 # jos löytyi yksi, niin kirjautuminen voidaan hyväksyä
106 if cur.rowcount==1:
107 kirjautumistunnusID=cur.fetchone()[0]
108 else:
109 kirjautumistunnusID=None
110 except Exception as e:
111 print("Tapahtui virhe luettassa tietokantaa")
112 print(str(e))
113 cur.close()
114 conn.close()
115 return kirjautumistunnusID
116
117# käynnistys
118kirjautumisikkuna = Kirjautumisikkuna()