2016-04-11 30 views
0

Alanın olup olmadığını kontrol etmek için bir çok iş parçacığı gördüm ama biraz kafam karıştı mı diye birinin bana var olup olmadığını kontrol edip edip etmediğini kontrol edip edemeyeceğini merak ettim. değişken olan bir girdi.Python SQLite3 Eğer field == değişken

Kodum şu ana kadar

import sqlite3 
import datetime 
import smtplib 

now = datetime.datetime.now() 
conn = sqlite3.connect("accounts.db") 

c = conn.cursor() 





def register(): 
    username = input("Username: ") 
    password = input ("Password: ") 
    date = now.strftime("%d-%m-%Y %H-%M") 
    adminlevel = 0 

    c.execute("""INSERT INTO accounts 
       (username,password,date,adminlevel) 
       VALUES(?,?,?,?)""",(username,password,date,adminlevel)) 
    conn.commit() 

    print("You have succesfully registered at " + date, "An email has been sent to you with your information!") 
    menu() 

from getpass import getpass 

def login(): 
    def loggedin(): 

     if adminlevel > 0: 
      print("Hello There Admin!") 
      print("Commands: ") 
     else: 
      print("Hello there {}".format(username)) 
      print("Commands: Name, Date, Friend, Logout") 





    adminlevel = 0 
    username = input("Please enter your username: ") 
    password = getpass("Please enter your password: ") 
    admin = c.execute("select 1 from accounts where adminlevel > 0") 
    c.execute("select 1 from accounts where username = ? and password = ?", (username, password)) 
    if c.fetchone(): 
     print('Hello there! {}'.format(username)) 
     loggedin() 
    else: 

     print("Username and Password Not Found!") 
     login() 

def menu(): 
    print("="*40) 
    print("Login & Registration System") 
    print("="*40) 

    choice = input("Login or Register? ") 

    if choice == "register": 
     register() 
    elif choice == "login": 
     login() 


menu() 
+1

'login()' işlevinde mi demek istiyorsun? Sorunuzu açıklığa kavuşturmak için daha fazla çaba harcamalısınız - _might_ sorusunun ne olduğunu bulmak için tüm kodu okumak gerekli olmamalıdır. – mhawke

+0

Yeni başlayanlar için 'def info():' hiçbir şey yapmaz (global değişkenler, bunları kullanan işlevde global olarak bildirilmelidir) ve 'username == kullanıcıadı:' her zaman doğru olur - 'kullanıcı adı' tanımlanmışsa, olduğunu. – jDo

+0

Endişelenme artık bundan kurtuldu, cevaplarım var :) –

cevap

1

Eğer login() işlevinde kullanıcının kimlik bilgilerini kontrol etmek istiyorum varsayarsak, bunun için bir SELECT sorgu yapabilirsiniz:

from getpass import getpass 

def login(): 
    username = input("Please enter your username: ") 
    password = getpass("Please enter your password: ") 
    c.execute("select 1 from accounts where username = ? and password = ?", (username, password)) 
    if c.fetchone(): 
     print('logged in: {}'.format(username)) 
    else: 
     print("ERROR") 

Bu kod girmesini ister Kullanıcı adı ve şifresi için (terminale yankılanmadan) ve daha sonra account tablosunda eşleşen bir kayıt için veritabanını sorgulamak için bu değerleri kullanır. Bir kayıt varsa, fetchone() tarafından 1 iade edilir ve kullanıcı daha sonra giriş yapmış olabilir, aksi takdirde kullanıcı adı ve/veya şifre yanlıştır.

+0

Teşekkürler! Eğer loginin() tanımını yapmak ve kullanıcı adını almak istersem bunu nasıl yapardım? kullanıcı adını global bir değişken yapmak zorunda mıyım? sonra yazdırın vb –

+0

Yani 'loginin()' kullanıcı oturum açacak bir işlevdir? Eğer öyleyse, kullanıcı adını bu işleve argüman olarak, yani 'login' (kullanıcı adı) 'olarak iletebilirsiniz. Global değişkenleri kullanmanız gerekmiyor. – mhawke

+0

Tamam, sadece giriş yaptıkları zaman bu tanımlama/işlevini çağıracaklar, sonra da bir dizi komut yapacaklar –