1
votes

Recherche d'une chaîne stockée dans un fichier texte

J'écris un code pour implémenter un système de connexion utilisateur, dans lequel l'utilisateur entrera ses détails comme son nom et son mot de passe qui seront stockés dans un fichier texte. Quand il essaiera de se connecter, il demandera le nom d'utilisateur et le mot de passe et correspondra à celui stocké dans le fichier texte créé précédemment.

Il est probablement impossible de rechercher correctement dans le fichier texte

user=str(input('Do u have registration(Y/N): \n '))
if user =='Y':
    print('Please login now:')
    boom=str(input("Enter your name: "))
    pass_inp=str(input('Enter your password: \n'))


    with open('user_database.txt','r') as f:
        if pass_inp in f.readlines() and boom in f.readlines():
            print('Welcome User')
        else:
            print('Invalid Login ID')
elif user == 'N':
    print('Please register now,fill the following details:')
    name=str(input("Register your name: \n"))
    password =str(input('Create your password:\n'))
    with open("user_database.txt",'a') as f:
        f.write(name+'\n')

        f.write(password+'\n')

        print('Account successfully created')`````````


0 commentaires

3 Réponses :


0
votes

En mettant de côté la raison de l'enregistrement du mot de passe et de l'utilisateur sous forme de texte brut dans un fichier et en permettant que le nom d'utilisateur et le mot de passe soient également identiques, Veuillez vérifier si '\ n' dans f.write (name + '\ n') est à l'origine du problème. (Est certainement)


0 commentaires

0
votes

Vous lisez le fichier texte deux fois avec

contents =  f.readlines()

if pass_inp in contents and boom in contents:

Définissez le contenu sur une variable, puis vérifiez la variable pour le nom et le mot de passe.

if pass_inp in f.readlines() and boom in f.readlines(): 
Solution précédente à ce problème

. L'avantage de cette solution est qu'avec un petit changement de codage, il est capable de distinguer les noms d'utilisateur et les mots de passe lors de la vérification de ce que votre approche actuelle ne fait pas.


0 commentaires

0
votes

Les commentaires Hope vous aident à comprendre la logique:

# input return a string
user = input('Do u have registration(Y/N): \n ')
if user == 'Y':
    print('Please login now:')
    boom = input("Enter your name: ")
    pass_inp = input('Enter your password: \n')

    with open('user_database.txt','r') as f:
        lines = f.readlines()
        flag_founded = False
        for index, line in enumerate(lines):
            # user name found check if the line after it contains it's password
            if boom == line.replace('\n', ''):  
                # password of this user should be in the next line
                password = lines[index+1].replace('\n', '')
                if pass_inp == password:
                    flag_founded = True
                break  # break the current loop no need to keep checking because user name should be unique
        if flag_founded:
            print('You are logged: ', boom)
        else:
            print('User name or password wrong')

elif user == 'N':
    print('Please register now,fill the following details:')
    name = input("Register your name: \n")
    password = input('Create your password:\n')
    with open("user_database.txt", 'a') as f:
        f.write(name+'\n')
        f.write(password+'\n')
        print('Account successfully created')


0 commentaires