Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Logowanie do PA
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam wszystkich smile.gif
Mam pewien problem.
Nie bardzo wiem jak się zabrać do napisania skryptu logowania do panelu administratora.
Od początku mojej styczności z PHP nie trawiłem sesji i ciastek, a z tego co mi się kojarzy to na tym się opiera taki skrypt.
Mógłbym prosić Was o pomoc?
Jakieś kroki, które mam wykonać.
Dodam, że aby się zalogować trzeba mieć access=5
To co mam na razie:
  1. <?php
  2. include('include/db.php');
  3. $login = $_POST['login'];
  4. $haslo = md5($_POST['haslo']);
  5. $zapytanie = 'SELECT * FROM admin WHERE login="'.$login.'" AND haslo="'.$haslo.'"';
  6. $idzapytania = mysql_query($zapytanie);
  7. if($_SESSION['admin'] == 'ok' && $_COOKIE['cpadmin'])
  8. {
  9. echo '<div align="center">Jesteś zalgowany jako '.$_SESSION['login'].'<br /><a href="index.php?page=cpadmin&wyloguj=wyloguj">Wyloguj</a></div>';
  10. }
  11. else
  12. {
  13. echo '<div align="center"><form action="index.php?page=cpadmin" method="post" />
  14. Login:<br /><input type="text" name="login" /><br /><br />
  15. Hasło:<br /><input type="password" name="haslo" /><br />
  16. <input type="submit" value="Zaloguj" />
  17. </form></div>';
  18. }
  19. mysql_close($connect);
  20. ?>


Wiem, że nic tutaj praktycznie nie ma, ale nie wiem co mam dalej robić.
Proszę o pomoc smile.gif
Kshyhoo
Skrypt logowania. Co byś chciał wiedzieć?
homik363
Ja ci dam małą podpowiedz:
Jeśli hasło i login sie zgadzają to musisz wtedy stworzyć $_SESSION['admin'] = 'ok' $_COOKIE['cpadmin'] ponieważ stereowanie nie wejdzie nigdy w tego ifa
  1. if($_SESSION['admin'] == 'ok' && $_COOKIE['cpadmin'])
  2. {
  3. echo '<div align="center">Jesteś zalgowany jako '.$_SESSION['login'].'<br /><a href="index.php?page=cpadmin&wyloguj=wyloguj">Wyloguj</a></div>';
  4. }

ponieważ $_SESSION['admin'] = 'ok' $_COOKIE['cpadmin'] nie istnieją
adrianozo
Jak to jest z tymi sesjami i ciastkami bo jak czytam w kursach to nic nie rozumiem
homik363
Sesja -jest przechowywana "informacja" w przeglądarce aż do wyłączenia przeglądarki
Ciasteczka- jest przechowywana "informacja" w przeglądarce aż do wygaśnięcia ciasteczek lub usunięcia ich przez "użytkownika"( trochę tak po chłopsku ;] )
adrianozo
Ale po chłopsku przynajmniej zrozumiałem.
Teraz:
jak z nich korzystać?
Kshyhoo
Też nie mogłem tego załapać a teraz uważam, że to śmiesznie proste. Tablica $_SESION jest bardzo podobna do #_POST czy $_GET, ale wygodniejsza. Możesz "wkładać" tam informacje, potrzebne w skryptach. Na początku skryptu dajesz:

I od tej pory masz dane w tablicy $_SESION. Np. logujesz usera i ładujesz jego dane do sesji:
  1. if (istnieje($_POST['login'], $_POST['haslo'])) { // zalogowanie
  2. $_SESSION['zalogowany']='tak';
  3. $_SESSION['login'] = $_POST['login']; // wkładasz do sesji login...
  4. $_SESSION['haslo'] = $_POST['haslo']; // i hasło usera
  5. }

Teraz możesz te dane wykorzystywać, np.:
  1. echo 'Jesteś zalogowany jako: ".$_SESSION['login']."'; // pobierasz z sesji login usera i wyświetlasz

Podobnie z innymi danymi. Jeżeli chcesz się wylogować i pozbyć się danych zawartych w sesji, to:
  1. if ($_GET["go"]=="wyloguj") { // wylogowanie
  2. mysql_query("DELETE FROM zalogowani WHERE login='{$_SESSION['login']}'"); // pobierasz z sesji login usera do wylogowania
  3. }
adrianozo
Na razie wymodziłem takie coś i nie wiem co dalej:

  1. <?php
  2. include('include/db.php');
  3. $login = $_POST['login'];
  4. $haslo = md5($_POST['haslo']);
  5. $zapytanie = 'SELECT * FROM admin WHERE login="'.$login.'" AND haslo="'.$haslo.'" LIMIT 1';
  6. $idzapytania = mysql_query($zapytanie);
  7. if(mysql_num_rows($idzapytania))
  8. {
  9. $found_user = mysql_fetch_array($idzapytania)
  10. $_SESSION['access'] = $found_user['access'];
  11. $_SESSION['login'] = $found_user['login'];
  12. }
  13. else
  14. {
  15. echo '<div align="center">Podano błędny login lub hasło</div><meta http-equiv="Refresh" content="3; url=index.php?page=cpadmin" />';
  16. }
  17. if($_SESSION['admin'] == 'ok' && $_COOKIE['cpadmin'])
  18. {
  19. echo '<div align="center">Jesteś zalgowany jako '.$_SESSION['login'].'<br /><a href="index.php?page=cpadmin&wyloguj=wyloguj">Wyloguj</a></div>';
  20. }
  21. else
  22. {
  23. echo '<div align="center"><form action="index.php?page=cpadmin" method="post" />
  24. Login:<br /><input type="text" name="login" /><br /><br />
  25. Hasło:<br /><input type="password" name="haslo" /><br />
  26. <input type="submit" value="Zaloguj" />
  27. </form></div>';
  28. }
  29. mysql_close($connect);
  30. ?>
Kshyhoo
Kombinuj smile.gif Nie wiem, jakie chcesz uzyskać efekty. Możesz teraz np.: dać dostęp do strony tylko zalogowanym userom:
  1. if (istnieje($_POST['login'], $_POST['haslo'], $_POST['poziom'])) { // zalogowanie
  2. $_SESSION['zalogowany']='tak';
  3. }
  4.  
  5. if ($_SESSION['zalogowany']=='tak') {
  6. echo 'Jesteś zalogowany, więc możesz to przeczytać...';
  7. }

Na początku skryptu dajesz:
  1. if ($_SESSION["czas"] and $_SESSION["czas"]+60*30<time()) { // 30 minut
  2. echo "Sesja wygasła - nastąpiło automatyczne wylogowanie...";
  3. mysql_query("DELETE FROM zalogowani WHERE login='{$_SESSION['login']}'"); // usuwasz usera z bazy, pobierając jego dane z sesji
  4. }
  5. $_SESSION["czas"] = time();

i masz automatyczne wylogowanie po określonym czasie...
Zastosowanie jest bajecznie proste.
Zawsze możesz sprawdzić, jakie dane masz w sesji:
  1. print('<pre>SESSION: ');
  2. print_r ($_SESSION);
adrianozo
Teraz bym chciał takie coś, że jeśli access(z bazy danych)=5 to go zaloguje

Jeśli 0 to Twoje konto jest nieaktywne

Jeśli poda zły login lub hasło to komunikat Podano błędny login lub hasło

Jeśli nie poda jednego z nim to komunikat Musisz podać login i hasło

Kshyhoo
No to pierwsze to akurat jest bardzo proste:
  1. SELECT * FROM logowanie WHERE login='$login' and haslo='$haslo' and access='$access' and status=5

czyli coś na podobę:
  1. function istnieje($login, $haslo, $poziom) {
  2. if ($login=="" or $haslo=="" or $poziom=="") return false;
  3. $haslo = md5($haslo);
  4. $wynik=mysql_query("SELECT * FROM logowanie WHERE login='$login' and haslo='$haslo' and access='$access' and status=5");
  5. if (mysql_num_rows($wynik)==1) return true;
  6. return false;
  7. }

jak ma status 5 w bazie, zaloguje, jak inny nie.

A na resztę musisz sobie poradzić. To podstawy php, proste pętle na if... jest wiele sposobów realizacji tego. Nikt gotowca Ci nie da smile.gif
adrianozo
Dlaczego status=5 w zapytani?
Kshyhoo
Zmienne możesz nazywać po swojemu. Chodzi o to, że z bazy pobierasz dane potrzebne do zalogowania. Wyciągasz z bazy np.:
  1. SELECT * FROM logowanie WHERE login='$login' and haslo='$haslo' and poziom='$poziom' and status=5

gdzie masz dane:
login
haslo
poziom (np.: admin, user, itp.
status (np.: 0 - nieaktywny, 5 - aktywny)
Stąd status=5 w zapytaniu, czyli aktywni userzy z potwierdzoną rejestracją konta.
adrianozo
Takie coś jest dobre?

  1. <?php
  2. include('include/db.php');
  3. if($_POST['login'] && $_POST['haslo'])
  4. {
  5. $login = $_POST['login'];
  6. $haslo = md5($_POST['haslo']);
  7. $zapytanie = 'SELECT * FROM admin WHERE login="'.$login.'" AND haslo="'.$haslo.'" LIMIT 1';
  8. $idzapytania = mysql_query($zapytanie);
  9. if(mysql_num_rows($idzapytania))
  10. {
  11. $found_user = mysql_fetch_array($idzapytania);
  12. $_SESSION['access'] = $found_user['access'];
  13. $_SESSION['login'] = $found_user['login'];
  14. }
  15. else
  16. {
  17. echo '<div align="center">Podano błędny login lub hasło</div>';
  18. }
  19. }
  20. else
  21. {
  22. echo '<div align="center">Musisz podać login i hasło</div>';
  23. }
  24. if($_SESSION['admin'] == 'ok' && $_COOKIE['cpadmin'])
  25. {
  26. echo '<div align="center">Jesteś zalgowany jako '.$_SESSION['login'].'<br /><a href="index.php?page=cpadmin&wyloguj=wyloguj">Wyloguj</a></div>';
  27. }
  28. else
  29. {
  30. echo '<div align="center"><form action="index.php?page=cpadmin" method="post" />
  31. Login:<br /><input type="text" name="login" /><br />
  32. Hasło:<br /><input type="password" name="haslo" /><br />
  33. <input type="submit" value="Zaloguj" />
  34. </form></div>';
  35. }
  36. mysql_close($connect);
  37. ?>


Chodzi o to, że gdy wpiszę złe to pokazuje dobry komunikat, gdy nie wpisze nic również dobry komunikat, ale gdy wpiszę dobrze to nie loguje
tzn. nie cały czas pokazuje formularz tylko po prostu bez komunikatów. Dlaczego?
Kshyhoo
Samym } else { nie sprawdzisz niczego. Najlepiej sprawdzaj warunki i dane wrzucaj w sesję:
  1. if (istnieje($_POST['login'], $_POST['haslo'], $_POST['poziom'])) { // pobierasz dane z posta przy zalogowaniu
  2. $_SESSION['zalogowany']='tak'; // że zalogowany
  3. $_SESSION['login'] = $_POST['login']; // login
  4. $_SESSION['haslo'] = $_POST['haslo']; // hasło
  5. $_SESSION['poziom'] = $_POST['poziom']; // tu poziom, np Admin
  6. mysql_query("INSERT INTO zalogowani SET login='{$_SESSION['login']}', data=NOW()"); // tu dodajesz info do bazy danych login usera
  7. } else {
  8. echo 'Musisz się zalogować'; // jeżeli nie jesteś zalogowany
  9. }
adrianozo
Ale powiedz mi po co zapisywać danę o zalogowaniu do bazy?
Kshyhoo
Chyba chciałeś napisać "po co zapisywać dane do bazy po zalogowaniu"? Gdzieś musisz trzymać loginy zalogowanych userów. To jest jedno z rozwiązań i zastosowań sesji.
adrianozo
Ok rozkminiam to trochę inaczej od nowa: tj. po co mi ciastka wystarczą sesje bo to jest panel admina a nie dla użytkownika:)

  1. <?php
  2. include('include/db.php');
  3. //logowanie start
  4. if($_POST['login'] && $_POST['haslo'] && $_POST['send'])
  5. {
  6. $login = addslashes(htmlspecialchars($_POST['login']));
  7. $haslo = md5($_POST['haslo']);
  8. $zapytanie = 'SELECT * FROM admin WHERE login="'.$login.'" and haslo="'.$haslo.'" LIMIT 1';
  9. $idzapytania = mysql_query($zapytanie);
  10. if(mysql_num_rows($idzapytania))
  11. {
  12. $found_user = mysql_fetch_array($idzapytania);
  13. if($found_user['access']==5)
  14. {
  15. //session_regenerate_id();
  16. $_SESSION['access'] = $found_user['access'];
  17. $_SESSION['login'] = $found_user['login'];
  18. $_SESSION['admin'] = 'ok';
  19. }
  20. else echo '<div align="center">Dostęp zabroniony, brak uprawnień</div>';
  21. }
  22. else echo '<div align="center">Podano błędny login lub hasło</div>';
  23. }
  24. elseif($_POST['send'])
  25. echo '<div align="center">Musisz podać login i hasło</div>';
  26. //logowanie end
  27. //wylogowywanie start
  28. if($_POST['send']==2 && $_SESSION['admin'] == 'ok' && $_SESSION['access']==5)
  29. {
  30. foreach($_SESSION as $k=>$v)unset($_SESSION[$k]);
  31. }
  32. //wylogowywanie end
  33. //obsluga admina start
  34. if($_SESSION['admin'] == 'ok' && $_SESSION['access']==5)
  35. {
  36. echo '<div align="center">Jesteś zalgowany jako '.$_SESSION['login'].'<br /><form method="post" /><input type="hidden" name="send" value="2" /><input type="submit" value="Wyloguj" /></form></div>';
  37. /* instrukcjie po zalogowaniu*/
  38. }
  39. else echo '<div align="center"><form action="index.php?page=cpadmin" method="post" />
  40. <input type="hidden" name="send" value="1" />
  41. Login:<br /><input type="text" name="login" /><br />
  42. Hasło:<br /><input type="password" name="haslo" /><br />
  43. <input type="submit" value="Zaloguj" />
  44. </form></div>';
  45. mysql_close($connect);
  46. ?>


Rozwiązane biggrin.gif
Kshyhoo
Sesje zginą Ci po wylogowaniu lub zamknięciu przeglądarki. Ciastko poleży, możesz wykorzystać je do sprawdzania, czy user już był na stronie, kiedy był ile czasu, itp.
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.