Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z panelem logowania
Forum PHP.pl > Forum > Przedszkole
o2w5n778
Witam!
Mam problem z panelem logowania. Chodzi mi o to że jak wpiszę się się jakiś login i hasło w formularzu HTML, prześlę się postem do skryptu i jeśli wielkość liter w loginie lub haśle jest inna niż przypisana do usera to zwraca mi że hasło jest niepoprawne.
Chodzi mi o to że jeżeli login przypisany do jakiegoś użytkownika jest JaNeK a ja w formularzu wpiszę Janek to i tak ma mnie zalogować.
Co mam zrobić?
zavada
Zrób, żeby porównywało z bazy mysql i z formularza if, ale musisz zamienić wszystkie na małe litery. Wtedy na przykład JaNeK zamieni się na janek, a jak będziesz miał w mysql JAneK to też zamieni na janek.
Poczytaj też o strtolower();

  1. $login_mysql = strtolower($tutaj_poda_nick_z_bazy_mysql);
  2. $login_form = strtolower($_POST['nazwa_pola_w_formularzu']);
  3. if ($login_mysql == $login_form) {
  4. echo ('Zalogowany!');
  5. }
  6. else {
  7. echo ('Niepoprawna nazwa użytkownika lub hasło!');
  8. }
  9.  
mortus
@zavada A jak niby kolega ma wybrać login tego użytkownika z bazy danych, skoro właśnie login mu się nie zgadza?
  1. $login = strtolower($_POST['login']);
  2. $password = $_POST['password'];
  3. $query = "SELECT * FROM users WHERE LOWER(login) = {$login} AND password={$password}";

Oczywiście trzeba to jeszcze zabezpieczyć.

Poza tym nie wiem, po co Ci taki zabieg. Dla mnie JaNeK to nie janek, czy JaneK, to po prostu trzech różnych użytkowników.
o2w5n778
Możesz mi wytłumaczyć tą linijkę?
  1. $query = "SELECT * FROM users WHERE LOWER(login) = {$login} AND password={$password}";
Websky
Troche dziwne masz pomysly, haslo to haslo, im wiecej znakow specialnych lub duzych liter tym bezpieczniejsze jest haslo.
Dla mnie to nie ma sensu.



$query = "SELECT * FROM users WHERE LOWER(login) = {$login} AND password={$password}";

LOWER(login) -> to zamienia wszystkie znaki w zmiennej $login i $password na male, wiec jesli ktos wpisze w formularzu TomOjeHASLO to zamieni wszystko na tomojehaslo.

Lecz musisz tez Inserta dac na LOWER, jak ktos sie rejestruje
mortus
Cytat(Websky @ 28.05.2011, 12:17:37 ) *
LOWER(login) -> to zamienia wszystkie znaki w zmiennej $login i $password na male, wiec jesli ktos wpisze w formularzu TomOjeHASLO to zamieni wszystko na tomojehaslo.

Nie no bzdury. To zapytanie służy do sprawdzenia, czy dany użytkownik w naszej tabeli użytkowników istnieje przy czym zawartość kolumny login w tabeli bazy danych jest zamieniana na małe litery. Podobnie zresztą, jak zawartość z pola login formularza logowania, ale za to odpowiada linijka:
  1. $login = strtolower($_POST['login']);
Websky
Ups troche sie pomylilem wink.gif racja, tylko ze tlumaczylem funkcje ktora jest w kodzie SQL.

Sorrka za pomylke wink.gif
o2w5n778
Panowie, ale ja nie chciałem żeby tak się działo z hasłem tylko samym loginem smile.gif
Bo dziwne by było że jak wpiszesz login z małej a nie dużej litery i zaliczy go jako niepoprawny.
Websky
Możesz zrobić tak jak kolega wcześniej pisał za pomocą funkcji strtolower() lub SQL LCASE(nazwa kolumny) np:


  1. $login = strtolower($_POST[login]);


  1. SELECT LCASE(nazwa kolumny) FROM tabela


Pozdrawiam


kadlub
Cytat(o2w5n778 @ 28.05.2011, 19:48:07 ) *
Panowie, ale ja nie chciałem żeby tak się działo z hasłem tylko samym loginem smile.gif
Bo dziwne by było że jak wpiszesz login z małej a nie dużej litery i zaliczy go jako niepoprawny.

spytam z ciekawości czy w panelu rejestracji gdy użytkownik podaje login to czy sprawdzając w bazie danych czy taki istnieje bierzesz pod uwagę duże litery. Bo chyba login nie może się powtarzać, a jak bierzesz tego pod uwagę to możesz mieć w bazie np
Janek
janek
JaneK

i przypuśćmy że np dwóch jakimś tam cudem ma takie samo hasło całkiem przypadkiem np pomysl
i jak myślisz na którego sie zalogujesz
Websky
Dlatego lepiej żeby nie powtarzały się loginy no i lepiej zapisywac je z malych liter lub duzych jak kto woli. W bazie danych można ustawić kolumnę login na UNIQUE ( login ) wtedy nie będzie duplikatu, baza automatycznie sprawdza czy jest taki login i zwraca komunikat jeżeli już jest wpisany rekord a poprzez LCASE lub UCASE mozesz ustawic w INSERT zapis z malej lub duzej litery.

Hasła mogą się powtarzać ,ale prawdopodobieństwo, że tak będzie jest małe.

Możesz również napisać skrypt w php, który będzie sprawdzał bazę danych przed rejestracja czy już jest podobny login.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.