Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]proste logowanie
Forum PHP.pl > Forum > Przedszkole
Lukasz_mk2
Witam, mam poblem z prostym logowaniem i nie wiem gdzie leży przyczyna. Generalnie skrypt łączy się z bazą użytkownik i hasło (hasło w bazie oczywiście kodowane md5) jest poprawne ale nie przechodzi od strony main.php
index.php
  1. <?
  2. $message=""; // Wiadomość po wylogowaniu
  3.  
  4. // Sekcja logowania
  5. $login=$_POST['login'];
  6. if($login) {
  7. // W momencie kliknięcia w przycisk formularza
  8. $uzytkownik=$_POST['uzytkownik'];
  9. $md5_haslo=md5($_POST['haslo']);
  10. // Koduje hasło funkcją md5().
  11.  
  12.  
  13. // Połączenie z bazą.
  14. $host="localhost"; // Nazwa hosta.
  15. $db_user="root"; // Nazwa użytkownika - MySQL.
  16. $db_password="vertrigo"; // Hasło do bazy.
  17. $database="baza"; // Nazwa bazy.
  18. mysql_connect($host,$db_user,$db_password);
  19. mysql_select_db($database);
  20. // Sprawdzenie nazwy użtkownika i hasła.
  21. $rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik='$uzytkownik' AND haslo='$md5_haslo'");
  22. if(@mysql_num_rows($rezultat)){
  23. session_register("uzytkownik"); // Zapamiętuje zmienną sesji
  24. header("location:main.php"); // Przekierowanie do strony main.php
  25. }else {
  26. $message="Nieprawidłowa nazwa użytkownika lub hasło";
  27. }
  28. } // Koniec sprawdzania autoryzacji.
  29. ?>
  30. <head>
  31.  
  32. <title>Dokument</title>
  33. </head>
  34. <body>
  35. <? echo $message; ?>
  36. <form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
  37. <table>
  38. <tr>
  39. <td>Użytkownik: </td>
  40. <td><input name="uzytkownik" type="text" id="uzytkownik" /></td>
  41. </tr>
  42. <tr>
  43. <td>Hasło: </td>
  44. <td><input name="haslo" type="password" id="haslo" /></td>
  45. </tr>
  46. </table>
  47. <input name="login" type="submit" id="login" value="login" />
  48. </form>
  49. </body>
  50. </html>


main.php
  1. <?
  2.  
  3. session_start(); // Na samej górze zadeklaruj sesję.
  4. if(!session_is_registered($uzytkownik)){ // Sprawdza zmienną sesji.
  5. header("location:index.php"); // Przekierowanie do index.php
  6. }
  7. ?>
  8.  
  9. <head>
  10.  
  11. <title>Dokument</title>
  12. </head>
  13. <body>
  14. <p>Witaj <? echo $_SESSION["uzytkownik"]; ?>! Jesteś zalogowany.</p>
  15. <p><a href="index.php">Wyloguj</a></p>
  16. </body>
  17. </html>
darko
  1. if(!session_is_registered("uzytkownik")){ // Sprawdza zmienną sesji.
Lukasz_mk2
dzięki, działa

zdaje sobie sprawę że ten system logowania nie jest najlepszy ale czy można go jakoś przerobić żeby "rozróżniał użytkowników" tzn że jak wpisze innego użytkownika (istniejącego w bazie) to przekieruje go na inną stronę a nie tylko main.php
darko
Wszystko da radę, zacznij od przeprojektowania bazy, tak żeby mieć w tabeli users pole role (uprawnienie). I ustal sobie że admin ma role=0, user ma role=1 ktoś jeszcze niżej role=2 itd. Przy sprawdzaniu loginu i hasła wyciągnij sobie poziom uprawnień i wstaw chociażby w switch i case, gdziesz będzie "inkludował" odpowiednią stronę dla danych uprawnień. To oczywiście będzie działać, ale eleganckie, wydajne, elastyczne i superbezpieczne nie jest.

Acha! I obowiązkowo jeśli już zweryfikujesz usera, że to ten, za którego się podaje, to zapisz jego id i poziom uprawnień w sesji, żeby móc pominąć sprawdzanie loginu i hasła na każdej kolejnej podstronie którą mu udostępnisz.

ps. zrób przynajmniej podstawową walidację danych przysłanych z formularza, poczytaj o htmlspecialchars, strip_tags, htmlentities albo korzystaj z PDO, preparuj i binduj zapytania przed wykonaniem.

Pozdrawiam i powodzenia w pisaniu!
Lukasz_mk2
zrobiłem coś takiego
  1. <?
  2. // Na samej górze zadeklaruj sesję.
  3. // Sekcja wylogowywania, kasuje wszystkie zmienne sesyjne
  4. $message=""; // Wiadomo?ć po wylogowaniu
  5.  
  6. // Sekcja logowania
  7. $login=$_POST['login'];
  8. if($login) {
  9. // W momencie kliknięcia w przycisk formularza
  10. $uzytkownik=$_POST['uzytkownik'];
  11. $md5_haslo=md5($_POST['haslo']);
  12. // Koduje hasło funkcj? md5().
  13.  
  14.  
  15.  
  16. // Poł?czenie z baz?.
  17. $host="localhost"; // Nazwa hosta.
  18. $db_user="root"; // Nazwa użytkownika - MySQL.
  19. $db_password="vertrigo"; // Hasło do bazy.
  20. $database="sklep"; // Nazwa bazy.
  21. mysql_connect($host,$db_user,$db_password);
  22. mysql_select_db($database);
  23. // Sprawdzenie nazwy użtkownika i hasła.
  24. if ($rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik='$uzytkownik' AND haslo='$md5_haslo' AND upr=0 "));
  25. if(@mysql_num_rows($rezultat)){
  26. session_register("uzytkownik"); // Zapamiętuje zmienn? sesji
  27. header("location:main.php"); // Przekierowanie do strony main.php
  28. }else {
  29. $message="Nieprawidłowa nazwa użytkownika lub hasło";
  30. }
  31. if ($rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik='$uzytkownik' AND haslo='$md5_haslo' AND upr=1 "));
  32. if(@mysql_num_rows($rezultat)){
  33. session_register("uzytkownik"); // Zapamiętuje zmienn? sesji
  34. header("location:admin.php"); // Przekierowanie do strony admin.php
  35. }else {
  36. $message="Nieprawidłowa nazwa użytkownika lub hasło";
  37. }
  38.  
  39. } // Koniec sprawdzania autoryzacji.
  40. ?>
  41. <head>
  42.  
  43. <title>Dokument</title>
  44. </head>
  45. <body>
  46. <? echo $message; ?>
  47. <form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
  48. <table>
  49. <tr>
  50. <td>Użytkownik: </td>
  51. <td><input name="uzytkownik" type="text" id="uzytkownik" /></td>
  52. </tr>
  53. <tr>
  54. <td>Hasło: </td>
  55. <td><input name="haslo" type="password" id="haslo" /></td>
  56. </tr>
  57. </table>
  58. <input name="login" type="submit" id="login" value="login" />
  59. </form>
  60. </body>
  61. </html>

po zalogowaniu jako użytkownik z upr=0 jest ok, ale przy użytkowniku z upr 1 przechodzi na admin.php ale wyskakuje komunikat z błędem sesji
plik admin.php
  1. <?
  2. session_start(); // Na samej górze zadeklaruj sesję.
  3. if(!session_is_registered("uzytkownik")){ // Sprawdza zmienn? sesji.
  4. header("location:index.php"); // Przekierowanie do index.php
  5. }
  6. ?>
  7. <html>cos</html>
darko
Popracuj nad tym

$uzytkownik=$_POST['uzytkownik'];

wystarczy w formularzu logowania wpisać w pole user coś takiego: ' or 1=1 /*

i jesteś zalogowany
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.