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

Logowanie do strony za pomocą loginu lub emaila i poziomy użytkowników

Object Storage Arubacloud
0 głosów
308 wizyt
pytanie zadane 13 grudnia 2020 w SQL, bazy danych przez marcin.domanski Nowicjusz (150 p.)

Witam serdecznie,

mam problem ze stworzeniem logowania do strony w której użytkownik będzie mógł się logować do strony loginem lub emailem. Potrzebuję selectem wyciagnąć z bazy wartości jednak gdy zapytanie ma taką postać wyświetla mi wartości dla uzytkownika 1 który podał błędne hasło. 

SELECT * FROM `uzytkownicy` WHERE login="user1" OR email="" AND haslo="haslousera2"

Jak jeszcze rozwiązać kwestię logowania 3 różnych poziomów użytkowników tzn przykładowo:

- uczeń (id, imie, nazwisko, login, haslo, email)

-nauczyciel (id, imie, nazwisko, login, haslo, email, stopień_naukowy, przedmioty)

-administrator który zarządza wszystkim i ma podgląd do wszystkiego (dodawania ocen, obecności itd)

Chciałbym utworzyć tylko 1 forumularz do logowania i po wpisaniu do zmiennych sesyjnych byłyby przypisywane wartości.

1 odpowiedź

+3 głosów
odpowiedź 13 grudnia 2020 przez SzkolnyAdmin Szeryf (86,360 p.)
wybrane 14 grudnia 2020 przez marcin.domanski
 
Najlepsza
Operator AND ma większy priorytet niż operator OR. Warunek w twoim zapytaniu brzmi (skrótowo, bez porównań):

WHERE login OR email AND haslo

Najpierw wykona się operacja "email AND haslo", a na jej wyniku "login OR wynik_operacji_pierwszej"

Aby zapytanie było poprawne musisz użyć nawiasów (logujesz się za pomocą loginu LUB emaila):

WHERE (login OR email) AND haslo

Rozumiem, że wcześniej sprawdziłeś poprawność danych do zapytania (login,email, hasło) pod kątem występowania znaków, które w nich wystąpić nie mogą.

Poziomy użytkowników to nie problem, w tabeli z danymi logowania umieszczasz kolumnę z poziomem i po zalogowaniu wczytujesz poziom do zmiennej sesyjnej.
komentarz 13 grudnia 2020 przez marcin.domanski Nowicjusz (150 p.)

Nawiasy działają dziękuję :)

Zapytam jeszcze z tym logowaniem. Mam 2 tabele: uczniowie i nauczyciele i ta kwerenda nie zadziała:

Select * FROM uczniowie, pracodawcy WHERE (login='adas' OR email='') AND haslo='adas1'

Czy da się jakoś z 2 tabel wykonać takie zapytanie? 

Te zmienne sesyjne też będą się troche różnić, bo gdy zaloguje się uczeń to w $_SESSION['stopien_naukowy] będzie poprostu null? 

komentarz 13 grudnia 2020 przez SzkolnyAdmin Szeryf (86,360 p.)
Zapytanie nie zadziała, bo nie ma informacji z której tabeli ma pochodzić login, email i hasło.

Strukturę twojej bazy widziałbym inaczej:

1. tabela logowanie: id, id_usera, login, email, haslo.

2. tabela uczniowie

3. tabela pracownicy

id_usera w tabeli łączy tabelę logowanie z tabelą uczniowie i z tabelą pracownicy (kwestia zróżnicowania loginów, albo dodania pola z rolą usera - uczeń, pracownik, admin).

Robisz dwa zapytania:

1. logujesz usera -> do zmiennej sesyjnej zapisujesz id_usera

2. z odpowiedniej tabeli (posługując się id_usera) wyciągasz potrzebne dane.

IMHO tak będzie najprościej, ale nie traktuj tego jako dogmat.
komentarz 13 grudnia 2020 przez marcin.domanski Nowicjusz (150 p.)

Twój pomysł wydaje się być dobry. Zrobiłem od nowa formularz do rejestracji i pojawił się problem z id_usera taki żeby był zgodny z tabelą logowanie. 

tabela logowanie:

id , id_usera, login, haslo, email

tabela nauczyciel:

id_usera, stopien_naukowy

Za pomocą 1 formularza dodaję dane do 2 tabel :

$sql_l = "INSERT INTO `logowanie`(`login`, `haslo`, `email`) VALUES ('$login','$haslo','$email')";
$sql_u = "INSERT INTO `nauczyciel`(`imie`, `nazwisko`,`stopien_naukowy` ) VALUES ('$imie','$nazwisko','$stopien')";

if (mysqli_query($conn, $sql_l)) {
   
                 if (mysqli_query($conn, $sql_u)) {
                 $success_message = "Nowy użytkownik został pomyślnie dodany. ";

                 
            } else {
                 $error_message =  "Wystąpił błąd: " . mysqli_error($conn);
            }

            }


} else {
     $error_message =  "Wystąpił błąd: " . mysqli_error($conn);
}

No i w tabeli logowanie jest id które samo się ikrementuje, w tabeli nauczyciel też, tylko że po drodze może pojawić się jakiś uczeń w tabeli i to id będzie już zaburzone. 

 Nie mam pomysłu jak to rozgryźć aby to się zgodziło

komentarz 13 grudnia 2020 przez SzkolnyAdmin Szeryf (86,360 p.)
W przypadku autoinkrementacji z tabelach uczen i nauczyciel, w tabeli logowanie dołącz pole z informacją czy jest to uczeń, czy nauczyciel. Podczas zapisu do tabeli uczen/nauczyciel wyciągnij nadane id i to samo wstawiaj jako id_usera w tabeli logowanie.
komentarz 14 grudnia 2020 przez marcin.domanski Nowicjusz (150 p.)
Najpierw dodałem ucznia do tabeli ale muszę zdublować email aby pobrało ID. Ale jestem zadowolony z tego jak wyszło :) Dzięki za pomoc. Zdrówka

Podobne pytania

0 głosów
2 odpowiedzi 1,289 wizyt
0 głosów
2 odpowiedzi 332 wizyt
pytanie zadane 31 grudnia 2020 w PHP przez MateuszSikorski Obywatel (1,070 p.)
0 głosów
1 odpowiedź 329 wizyt

92,565 zapytań

141,416 odpowiedzi

319,598 komentarzy

61,948 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!

...