Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Prosty formularz logowania
Forum PHP.pl > Forum > Przedszkole
mlodygda
Hej, przekształcałem nieco formularz logowania. Na początku wszystko ładnie działało, jak nie zgadzało się hasło/login to pokazywało, że któraś z danych jest nieprawidłowa i cacy. Postanowiłem przerobić nieco tak, aby pokazywało dokładnie gdzie został popełniony błąd - przy haśle czy przy loginie i teraz dzieje się coś takiego, że loguje mnie nawet wtedy, kiedy nie ma loginu i hasła w bazie danych, czyli niezależnie co wpiszę i tak jestem zalogowany. Gdzie tkwi błąd?


  1.  
  2. mysql_connect('nazwabazy', 'nazwauzytkownika', 'haslo ;)')
  3. or die('Nie mozna się połączyć z bazą');
  4.  
  5. mysql_select_db('uzytkownicy')
  6. or die ('Nie mozna wybrac bazy');
  7.  
  8. if (isset($_SESSION['login'])) {
  9. print "Witam ". $_SESSION['login'] ;
  10. } else {
  11.  
  12.  
  13. if (isset($_POST['wyslij'])) {
  14.  
  15.  
  16. $zapytanie1="SELECT nazwa FROM uzytkownicy_pozycje
  17. WHERE nazwa = '".$_POST['login']."'";
  18.  
  19. $zapytanie2="SELECT haslo FROM uzytkownicy_pozycje
  20. WHERE haslo = '".$_POST['haslo']."' ";
  21.  
  22.  
  23. if ((!empty($_POST['login'])) AND (!empty ($_POST['haslo'])) ){
  24.  
  25. if (mysql_query($zapytanie1)){
  26. if (mysql_query($zapytanie2)) {
  27. $_SESSION['login']= $_POST['login'];
  28.  
  29. print "Jestes zalogowany";
  30. } else {
  31. print 'Podano nieprawidlowe haslo.'; }
  32.  
  33. }else {
  34. print "Nie ma takiego uzytkownika"; }
  35. } else {
  36. print "Wypelnij pole";
  37. }
  38.  
  39. } else {
  40. print '<form action="login2.php" method="POST"><p>
  41. Uzyt:<input type="text" name="login"><br />
  42. Haslo:<input type="text" name="haslo"><br />
  43. <input type="submit" name="wyslij" value="Zaloguj!" /></p></form>';
  44. }
  45.  
  46. }
kamil_lk
Np. tutaj
  1. if (mysql_query($zapytanie2))

Zapytanie nie musi nic zwracać, aby przyjmować wartość true.
Musisz sprawdzić, czy zwraca jakieś rekordy.

Poza tym w zapytaniu numer 2 masz błąd ponieważ sprawdzasz czy hasło istnieje w bazie, ale nie sprawdzasz czy to hasło jest danego użytkownika.

I jeszcze jedna taka moja sugestia. Lepiej sprawdzać czy dane zostały wypełnione poprawnie, nie rozdzielać ich na: login poprawny, hasło złe, ponieważ logując się na cudze konto w przypadku poprawnego loginu pozostaje mi złamać tylko jego hasło, a w innym przypadku nie mam danych o tym czy taki login istnieje czy nie.
mlodygda
Ad 1. Dzięki. Dodałem przed mysql_query - mysql_num_rows()>0 i działa. Tylko szczerze mówiąc nie wiem dlaczego. mysql_num_rows sprawdza tylko, czy moje zapytanie jest większe od 0, tak?

Ad 2. Jakaś podpowiedź jak zespawać ze sobą, żeby komunikat pokazywał, że dane hasło jest złe ale dla danego użytkownika?

Ad 3. Dzięki, narazie się tylko bawie i staram się po prostu realizować to, co wpadnie mi do glowy smile.gif
kamil_lk
Ad.1 Sprawdza ile rekordów zwraca Twoje zapytanie.

Ad.2
  1. SELECT haslo FROM uzytkownicy_pozycje
  2. WHERE haslo = '".$_POST['haslo']."' AND login ='".$_POST['login']."'
mlodygda
O rany, ale banał smile.gif dzięki bardzo!
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.