• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Blad przy tworzeniu logowania w Python'ie z uzyciem MySQL.

Object Storage Arubacloud
0 głosów
652 wizyt
pytanie zadane 1 czerwca 2020 w Python przez xVelu Nowicjusz (120 p.)
edycja 1 czerwca 2020 przez xVelu

Dzień dobry/Dobry wieczór!, mam problem, otóż stworzyłem program, który ma za zadanie wyciągnąć z bazy danych MySQL login i hasło użytkownika, jeżeli użytkownik podał poprawne dane - ma wypisać "Logged in as: <nazwa użytkownika>", program "działa", lecz nie w 100%, ponieważ jakiego loginu i hasła by użytkownik nie wpisał, to i tak go zaloguje, męcze sie z tym od ok 1h, i już jestem na ten program wkurzony, potrzebuję na informatykę tego programu, niżej zamieszczam trochę informacji

IDE: PyCharm

Wersja Python'a: 3.9

Baza danych: Lokalna (XAMPP Control Panel)

Kod źródłowy:

import mysql.connector
from mysql.connector import Error

username = input("Username: ")
password = input("Password: ")
try:
    bdconnect = mysql.connector.connect(host='localhost',
                                        database='projektszkola',
                                        user='root',
                                        password='',
                                        port='3306')
    if bdconnect.is_connected():
        zmienna = bdconnect.cursor()
        if("SELECT * FROM `loginydoszkoly` WHERE `login`='" + username + "' AND `password`='" + password + "';"):
            print("Logged in as:", username)
        else:
            print("Failed to login!")
except Error as e:
    print("Error", e)

zmienna.close()
bdconnect.close()

Z góry dziękuję za pomoc!

PS. Dodaje bazę danych do importu + jej skan:

Pobierz plik .sql

Skan

1 odpowiedź

0 głosów
odpowiedź 1 czerwca 2020 przez adrian17 Ekspert (344,860 p.)
if("SELECT * FROM `loginydoszkoly` WHERE `login`='" + username + "' AND `password`='" + password + "';"):

Uh... spójrz jeszcze raz na tą linię - bo ona zupełnie nic z bazą danych nie robi ;)

(btw, już widzę że uczysz się pisać kod wrażliwy na SQL injection... poczytaj jak się pisze zapytania z argumentami :/ )

komentarz 1 czerwca 2020 przez adrian17 Ekspert (344,860 p.)

A swoją drogą:

from pip._vendor.distlib.compat import raw_input

Po co to? Czemu nie zwykłe input()?

komentarz 1 czerwca 2020 przez xVelu Nowicjusz (120 p.)
edycja 1 czerwca 2020 przez xVelu

@adrian17,

"już widzę że uczysz się pisać kod wrażliwy na SQL injection..."

nie ma to być program do użytku dla wszystkich, a szkolny projekt, jest mi to obojętne czy bedzie tak czy tak, tak jak mojej pani, tak czy siak dostane 5/6

"Po co to? Czemu nie zwykłe input()?"

poprawilem

komentarz 1 czerwca 2020 przez xVelu Nowicjusz (120 p.)

@adrian17,

"Uh... spójrz jeszcze raz na tą linię - bo ona zupełnie nic z bazą danych nie robi ;)"

 wysyła zapytanie do bazy, które robi mniej więcej tyle, że wyjmuję ci wszystkie konta z takim loginem i hasłem (podstawowe logowanie używając MySQL)

komentarz 2 czerwca 2020 przez adrian17 Ekspert (344,860 p.)

wysyła zapytanie do bazy

Nie, ta linia nie wysyła zapytania do bazy.

Ta linia

if("SELECT * FROM `loginydoszkoly` WHERE `login`='" + username + "' AND `password`='" + password + "';"):

Robi dokładnie tyle samo co ta linia ;)

if "kopytko":

 

komentarz 2 czerwca 2020 przez xVelu Nowicjusz (120 p.)
w takim razie jakbym mogl mogsic o naprowadzenie, jak z tego if'a zrobic logowanie
komentarz 2 czerwca 2020 przez adrian17 Ekspert (344,860 p.)

Tak jak wyżej pisałem: poczytaj jak się pisze zapytania.

https://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html

komentarz 2 czerwca 2020 przez xVelu Nowicjusz (120 p.)

zmienilem troche kod:

import mysql.connector
from mysql.connector import Error

username = input("Username: ")
password = input("Password: ")
try:
    bdconnect = mysql.connector.connect(host='localhost',
                                        database='projektszkola',
                                        user='root',
                                        password='',
                                        port='3306')
    if bdconnect.is_connected():
        zmienna = bdconnect.cursor()
        sss = "SELECT * FROM `loginydoszkoly` WHERE `login`='" + username + "' AND `password`='" + password + "';"
        if(zmienna.execute(sss)):
            bdconnect.commit()
            print("Logged in as:", username)
        else:
            bdconnect.commit()
            print("Failed to login!")
except Error as e:
    print("Error", e)
bdconnect.close()

zaraz bede sie uczyl argumentow

PS. W kodzie wyzej jest blad Unread result found

komentarz 2 czerwca 2020 przez adrian17 Ekspert (344,860 p.)

Bo na oko, nigdzie nie używasz wyniku zapytania.

(sam zobacz, co `zmienna.execute(sss)` zwraca.)

A swoją drogą...

bdconnect.commit()

Tutaj nie ma żadnych zmian, które trzeba by zacommitować ;) Nie wiem więc po co to dodałeś.

Podobne pytania

0 głosów
3 odpowiedzi 675 wizyt
pytanie zadane 28 lipca 2020 w PHP przez x_000 Obywatel (1,460 p.)
0 głosów
4 odpowiedzi 1,074 wizyt
pytanie zadane 5 lipca 2019 w PHP przez Nerez Użytkownik (970 p.)
0 głosów
1 odpowiedź 293 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...