2017-10-29 18 views
1

データベースのユーザー名を確認しようとしていますが、最初のユーザー名では動作しますが、動作しなくなった後はなぜか分かりましたが、代わりの方法はありません。エラーがないsqliteデータベースのユーザー名を確認するには? Python

import sqlite3 
conn = sqlite3.connect('tutorial.db') 
c = conn.cursor() 
def username(): 
    global limit 
    global usernameinput 
    usernameinput = input("What would you like your username to be?") 
    limit = 0 
    select_all_tasks(conn) 
def create_table(): 
    c.execute('CREATE TABLE IF NOT EXISTS stuffToPlot(username TEXT, 
    password TEXT)') 
    conn.close 
def select_all_tasks(conn): 
    global limit 
    global passwordinput 
    global rows 
    c.execute("SELECT * FROM stuffToPlot") 
    rows = c.fetchall() 
    for row in rows: 
     print(row) 
    if usernameinput in row: 
     print("Username Taken") 
     username() 
    else: 
     if limit < 1: 
      passwordinput = input("What would you like your password to 
      be?") 
      limit = limit + 1 
def data_entry(): 
    global passwordinput 
    global row 
    c.execute("INSERT INTO stuffToPlot VALUES(?, ?);",(usernameinput, 
    passwordinput)) 
    conn.commit() 
    c.close() 
    conn.close() 


create_table() 
username() 
select_all_tasks(conn) 
data_entry() 

、それだけでユーザ名がデータベースにすでにあることを登録しません: はここに私のコードです。

+0

'されています:'あなたのコードでは、このようにインデントも

for row in rows: print(row) if usernameinput in row: print("Username Taken") 

あなたはそれを簡単にするだろうか? – PRMoureu

+0

いいえ、それは意味するところです –

+0

これはあなたの質問の要点ではないので、私はコメントとして追加しています。データベースに暗号化されていないパスワードを格納することは非常に悪いアプローチです。最小限は、塩で暗号化する必要があります。あなたは、そのような解決策を考案するために引き出すことができる多くのリソースがあります。いつものように、セキュリティ関連の問題では、 "あなた自身のロール"はひどい考えです。 –

答えて

2

if文とそれに続くすべての行をインデントする必要があります。そうしないと、最後の行だけがテストされます。行にusernameinput場合

# select only the field "username" from the table 
c.execute("SELECT username FROM stuffToPlot") 
# build a set with all names, from the results given as [('name1',), ('name2',), ('name3',)] 
names = {name[0] for name in c.fetchall()} 
if usernameinput in names: 
    print("Username Taken") 
    username() 
else: 
    if limit < 1: 
+0

私は最初のものを試しましたが、それでもまだ仕事はありません編集:しかし、2番目は、ありがとうございます –

+0

'限界'の目的は何ですか?実際には、最初のパターンは正しくありません。2番目のパターンを試してみてください。ループの各行に対してif/elseステートメントを繰り返す代わりに、1つのテストしか行いません。 – PRMoureu

+0

機能が完了した後、パスワードを2回尋ねて、2回目の作業はとてもうれしいです –

関連する問題