2017-10-18 5 views
-4

できるだけ簡潔にしておきます。私のコードは "あなたは今ログインしました!"ユーザーが正しい詳細を入力した場合、または「間違っています。もう一度お試しください。」詳細がCSVファイル内のものと一致しない場合私が実際にどこでも解決策を見つけることができなかったことを本当に迷惑しているように助けてください!ログインの詳細を確認するためのユーザー入力とcsvファイルの比較

Import csv 
answer = input("Welcome to knowledge quiz! Do you have an account? yes or no") 
logIn = False 
if(answer == 'yes':) 
    csvfile = open('users.csv') 
    reader = csv.reader(csvfile) 
    username = input("Username:") 
    password = input("Password:") 

for row in reader: 
    if row[0] == username: 
     if row[1] == password: 
     print("Incorrect. Try again.") 
     logIn = True 
     if logIn == False: 
       print("You are now logged in!") 

は当初、私は最初の1つ(またはその逆)の代わりに、第二の印刷文を持っていた...私は私のコードのいずれか程度の画像をアップロードさせないことだし、それはしませんでした作業。私は 'logIn = True'の部分にも2つの等しい記号がありましたが、「Statementは効果がないようです」というメッセージが表示されました。また、エラーメッセージは表示されず、字下げの問題もありません。助けてください!ありがとう。

+2

サイドノート:決してパスワードをデータベースに直接格納しないでください。特に、平文ではありません。パスワードのハッシュを格納し(好ましくは塩漬け)、それを入力のハッシュと比較します。この方法では、たとえあなたのデータベースが侵害されても、ユーザーのパスワードは安全です。 –

+1

[最小、完全、および検証可能な例](https://stackoverflow.com/help/mcve)を入力してください。これにより、あなたの質問にお答えすることができます。問題を再現するのに十分なコードがありません。 MCVEがなければ、あなたが探している答えを得ることはまずありません。 –

+0

これはコンピュータサイエンスによって評価された評価のためのものです。私はちょうど私のテストの部分を適切に行うために解決策を見つけることができる必要があります。 –

答えて

1
import csv 
answer = input("Welcome to knowledge quiz! Do you have an account? yes or no") 
logIn = False 
if(answer == 'yes'): 
    csvfile = open('users.csv') 
    reader = csv.reader(csvfile) 
    username = input("Username:") 
    password = input("Password:") 

for row in reader: 
    if row[0] == username: 
     if row[1] == password: 
     print("You are now logged in!") 
     logIn = True 
if logIn == False: 
    print("Incorrect. Try again.") 

これは動作するはずです:)

番目のステートメントは、インデント、右とメッセージが交換された(ユーザ名が実際にCSVに存在する場合にのみ印刷された偽のログインが)なかった場合。

# cat users.csv 
test,test 

しかし、例えばhashlibによって提供されるように(塩漬け)ハッシュを使用して、常に、プレーンテキストで任意のパスワードを保存することはありませんようにしてください。

もう少し改良版(コメントを参照してください!):

import csv 
answer = input("Welcome to knowledge quiz! Do you have an account? yes or no") 

logIn = False 

if answer == 'yes': 
    csvfile = open('users.csv') 
    reader = csv.reader(csvfile) 
    username = input("Username:") 
    password = input("Password:") 

    for row in reader: 
     if row[0] == username: 
      if row[1] == password: 
       logIn = True 
       break 

if logIn == False: 
    print("Incorrect. Try again.") 
else: 
    print("You are now logged in!") 
+0

答えを更新していただきありがとうございます。私はforループがifステートメントの内部に存在するはずだと思います。 if文のまわりの括弧も必要ありません。 –

+0

@ Mike-SMT - 問題はありません。しかし、私に指摘してT.Bgmを案内してくれてありがとう:) – Mandraenke

+0

正しいパスワードが見つかったときに別の改善が行われ、さらに処理が行われる可能性があります。 – Mandraenke

1

まず最初は、あなたが適切にインデントされ、for loopのために、私はそれがif文の内側にあるべきだと思うことを確認する必要があります。

for loopを簡略化して、ユーザーとパスワードの両方を同時に確認することもできます。

下記の例をご覧ください。

import csv 
answer = input("Welcome to knowledge quiz! Do you have an account? yes or no") 
logIn = False 

correct_login_found = False 

if answer == 'yes': 
    csvfile = open('user.csv') 
    reader = csv.reader(csvfile) 
    username = input("Username:") 
    password = input("Password:") 

    for row in reader: 
     if row[0] == username and row[1] == password: 
      correct_login_found = True 
      break 

if correct_login_found == False: 
    print("Bad login details") 
else: 
    print("You are now logged in!") 

このコードでは、一致するユーザーとパスワードを各行で確認しています。見つかった場合は、トラッキング変数をTrueに変更します。これにより、ログイン情報の一覧をスキャンすることができ、一度スキャンが完了すると、一致するかどうかをユーザーに伝えることができます。

これは非常に単純な例で、他の人がこのマナーにユーザーのログイン情報を保存することをあまり安全ではないと指摘しているためです。それだけを心に留めておいてください。

関連する問題