Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]problem z logowaniem różnch userów
agata
post 4.12.2009, 14:48:08
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 4.12.2009

Ostrzeżenie: (0%)
-----


Dzień dobry.

Mam problem z logowaniem użytkowników z różnymi rolami.

Napisałam coś takiego, gdy już user zostanie znaleziony w bazie to zależnie od roli jaką posiada powinien zostać przekierowany do swojego panelu i powinna zostać utworzona dla niego sesja. Nie wiem gdzie mam błąd i dlaczego tak a nie inaczej. Proszę o pomoc i wyjaśnienie jak powinnam to zrobić.

EDIT1:
Problem polega na tym że użytkownik nie zostaje przekierowany. User zostaje ponownie przekierowany do formularza gdzie dostaje komunikat o błędnych danych logowania


  1. <?php
  2. require_once('db_connect.php');
  3.  
  4.  
  5.  
  6. function login($login, $haslo)
  7. {
  8. $db_connect = new Db_connect();
  9.  
  10. $haslo=sha1($haslo);
  11. $zapytanie = "SELECT Login, Haslo FROM Users WHERE Login ='$login' and Haslo ='$haslo'";
  12. $wynik = mysql_query($zapytanie) or die (mysql_error('Nie można wykonać zapytania'));
  13.  
  14.  
  15.  
  16. $ile = mysql_num_rows();
  17.  
  18. if ( $ile > 0 )
  19. {
  20. $query = mysql_query ("Select Rola From Users Where Rola='$rola'") or die (mysql_error('nie mogę wyciągnąć roli użytkownika'));
  21. if ($rola == 'administrator')
  22. {
  23. header ('Location: admin/admin_control_panel.php');
  24. $_SESSION['rola'] = $rola;
  25. }
  26. else
  27. if ($rola == 'kierownik')
  28. {
  29. header ('Location: boss/boss_control_panel.php');
  30. $_SESSION['rola'] = $rola;
  31. }
  32. else
  33. if ($rola == 'pracownik')
  34. {
  35. header ('Location: workman/workman_control_panel.php');
  36. $_SESSION['rola'] = $rola;
  37. }
  38.  
  39. else
  40. {sleep(3);
  41. $blad="Podano błędne dane logowania";
  42. // kombinacja: identyfikator i hasło dostępu jest nieprawidłowa
  43. header('Location: index.php?blad=1');
  44. }
  45. }
  46. }
  47. ?>


Tutaj połączenie z bazą
  1. <?php
  2.  
  3. class Db_connect
  4. {
  5.  
  6. function __construct()
  7. {
  8. $host = 'localhost';
  9. $user = 'root';
  10. $password = 'xxx';
  11. $db = 'Sklep';
  12.  
  13. $this->db = mysql_connect($host, $user, $password, $db) or die (mysql_error('Nie mogę nawiązać połaczenia'));
  14. mysql_select_db($db, $this->db) or die (mysql_error('Nie mogę połaczyć z bazą danych'));
  15. mysql_query("Set Names 'utf8'");
  16. mysql_query("Set collation_connection = utf8_polish_ci");
  17.  
  18. }
  19.  
  20. public function closing ()
  21. {
  22. $close =$this->db;
  23. mysql_close($close);
  24. }?>


user wypełnia zwykły formularz
  1. <form action="" method="post" accept-charset="utf-8">
  2. <tr><td>Login</td><td><input type="text" class="text" name="login" /></td></tr>
  3. <tr><td>Hasło</td><td><input type="password" class="text" name="haslo" /></td></tr>
  4. <tr><td><input type="submit" value="Zaloguj"/></td></tr>
  5. <tr><td></td><td><?php
  6. if(isset($_GET['blad']))
  7. {echo "<font color=red>Podano błędne dane !</font>";}
  8. ?>
  9. </td></tr>
  10.  
  11. </table></form>


Ten post edytował agata 4.12.2009, 15:22:22
Go to the top of the page
+Quote Post
organista18
post 4.12.2009, 15:05:01
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 22.07.2009

Ostrzeżenie: (0%)
-----


Rozwiń ten problem. Narazie napisałaś tylko, że masz problem, a nie napisałaś jaki. Czy wogóle samo logowanie Ci działa? Sam kiedyś z tym walczyłem, więc mogę Ci pomóc.
Go to the top of the page
+Quote Post
korro
post 4.12.2009, 15:05:36
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

Ostrzeżenie: (0%)
-----


mysql_affected_rows zawsze zwróci 0, ponieważ nie ma zastosowania z zapytaniem typu select.
zamiast:

zrób:
  1. $ile = mysql_num_rows($wynik);

Poza tym
  1. $query = mysql_query ("Select Rola From Users Where Rola='$rola'") or die (mysql_error('nie mogę wyciągnąć roli użytkownika'));

nigdzie w kodzie nie widzę zmiennej $rola, pewnie powinna być wyciągnięta z tabeli users.
No i to zapytanie
  1. SELECT Rola FROM Users WHERE Rola='$rola'

zwróci to, co podajesz jako parametr.

Ten post edytował korro 4.12.2009, 15:11:30


--------------------
Go to the top of the page
+Quote Post
agata
post 4.12.2009, 15:27:30
Post #4





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 4.12.2009

Ostrzeżenie: (0%)
-----


Faktycznie nie ma zmiennej $rola i zapytanie też jest nieprawidłowe. Rozumiem gdzie są błedy i dlaczego jednak nie mogę dojść do tego jak poprawnie wyciągnąć rolę z bazy tak żeby zadziałało to z instrukcjami if else.
Go to the top of the page
+Quote Post
korro
post 4.12.2009, 15:34:18
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

Ostrzeżenie: (0%)
-----


Zamiast:
  1. $zapytanie = "SELECT Login, Haslo FROM Users WHERE Login ='$login' and Haslo ='$haslo'";
  2. $wynik = mysql_query($zapytanie) or die (mysql_error('Nie można wykonać zapytania'));
  3. $ile = mysql_num_rows();
  4. if ( $ile > 0 )
  5. {
  6. $query = mysql_query ("Select Rola From Users Where Rola='$rola'") or die (mysql_error('nie mogę wyciągnąć roli użytkownika'));

coś takiego, ale pisane z ręki, więc pewnie z błędami:
  1. $zapytanie = "SELECT rola FROM Users WHERE Login ='$login' and Haslo ='$haslo'";
  2. $wynik = mysql_query($zapytanie) or die (mysql_error('Nie można wykonać zapytania'));
  3. $rola = mysql_fetch_row($wynik);
  4. if ( isset($rola) )
  5. {
  6. $rola = $rola[0];

można to uprościć, ale powinno działać.


--------------------
Go to the top of the page
+Quote Post
agata
post 5.12.2009, 01:29:29
Post #6





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 4.12.2009

Ostrzeżenie: (0%)
-----


Nadal występuje błąd w postaci ponownego przekierowania na stronę logowania z informacją o błędnych danych logowania.
Może mi ktoś to wytłumaczyć łopatologicznie sad.gif
Go to the top of the page
+Quote Post
darko
post 5.12.2009, 02:24:28
Post #7





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Pokaż swój kod po poprawkach korro


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
agata
post 7.12.2009, 15:57:49
Post #8





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 4.12.2009

Ostrzeżenie: (0%)
-----


witam.

Po walce udało mi się w końcu rozwiązać ten problem. Dzięki wszystkim za pomoc uwagi okazały się pomocne, chociaż zrobiłam to po swojemu.
To kod który działa poprawnie, jeśli jednak ktoś zauważy jakieś błędy lub lepsze rozwiązania proszę o uwagi.
  1. <?php
  2. require_once('db_connect.php');
  3.  
  4.  
  5.  
  6. function login($login, $haslo)
  7. {
  8. $db_connect = new Db_connect();
  9.  
  10. $haslo=sha1($haslo);
  11. $zapytanie = "SELECT Login, Haslo FROM Users WHERE Login ='$login' and Haslo ='$haslo'";
  12. $wynik = mysql_query($zapytanie) or die (mysql_error('Nie można wykonać zapytania'));
  13. $ile = mysql_fetch_row($wynik);
  14.  
  15. $zapytanie = "SELECT rola FROM Users WHERE Login ='$login' and Haslo ='$haslo'";
  16. $wynik = mysql_query($zapytanie) or die (mysql_error('Nie można wykonać zapytania'));
  17. $row = mysql_fetch_array($wynik);
  18.  
  19.  
  20. if ( $ile > 0 )
  21. {
  22. $_SESSION['rola'] = $row['rola'];
  23.  
  24. if ($_SESSION['rola'] == 'administrator')
  25. {
  26. header ('Location: admin/admin_control_panel.php');
  27.  
  28. }
  29. else
  30. if ($_SESSION['rola'] == 'kierownik')
  31. {
  32. header ('Location: boss/boss_control_panel.php');
  33.  
  34. }
  35. else
  36. if ($_SESSION['rola'] == 'pracownik')
  37. {
  38. header ('Location: workman/workman_control_panel.php');
  39.  
  40. }
  41.  
  42. else
  43. {sleep(3);
  44. $blad="Podano błędne dane logowania";
  45. // kombinacja: identyfikator i hasło dostępu jest nieprawidłowa
  46. header('Location: index.php?blad=1');
  47. }
  48. }
  49. }
  50. ?>


Jeszcze raz dziękuję za pomoc smile.gif
Go to the top of the page
+Quote Post
korro
post 7.12.2009, 16:01:46
Post #9





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

Ostrzeżenie: (0%)
-----


Role, login i hasło możesz wyciągnąć z bazy za jednym razem. Zapytania są niemal identyczne.
Teraz nawet jeśli pierwsze zapytanie nic nie zwróci, wykonujesz drugie.

Edit:
w zasadzie, to login i hasło nie są potrzebne pobieraj tylko role.

Ten post edytował korro 7.12.2009, 16:05:45


--------------------
Go to the top of the page
+Quote Post
piotrooo89
post 7.12.2009, 16:10:03
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




jak już ~korro napisał 2 razy zapytanie do db nie jest jakoś strasznie wymagane swobodnie można to na jednym zrobić. po za tym kod jest podatny na sql injection.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 04:49