Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] proszę o sprawdzenie logowania, sesje
Forum PHP.pl > Forum > Przedszkole
em-ba
Witam, mam taki skrypt logowania, który przełącza mnie na odpowiednią stronę w zależności kto ma jąką rangę. Jeżeli loguje się według login/hasło na strona1.php to jest ok - wyświetla mi "Witaj.. login". Problem jest w tym, że jak się loguje na strona2 i strona3 ..to już się nie wyświetla "Witaj.. login" ..nie wiem o co chodzi, gdyż strony posiadają takie same skrypty (strona1, 2, 3.php)

Poza tym jeżeli wpiszę błędne hasło to zostaję przełączany na stronę i tam ..zostałeś zalogowany jako abc. Nie powinno się tak robić ponieważ nie mam takiego "byle jakiego" użytkownika w bazie. ..strona na którą mnie przełącza jest pusta - tylko z tą inf, ze zostałem zalogowany i "wyloguj"

Czy Ktoś może wie o co chodzi?

skrypt logowania:
  1. <?php
  2.  
  3. mysql_connect ('localhost', 'root', 'krasnal') or die ("nie udało sie połączyć");
  4. mysql_select_db('fi_kur') or die ("Nie mozna zlokalizowac bazy danych");
  5.  
  6.  
  7. $login = trim($_POST['login']);
  8. $haslo = trim($_POST['haslo']);
  9. $loguj = "SELECT `login`,`haslo`,`ranga` FROM `uzytkownicy` WHERE login='".$login."' and haslo='".$haslo."'";
  10. $rekordy = mysql_query($loguj);
  11. if(mysql_num_rows($rekordy)==1)
  12. {
  13.  echo' Podany login i haslo jest błędne';
  14.  exit;
  15. }
  16. else
  17. {
  18.  
  19.  $_SESSION['zalogowany'] = $_POST['login'];
  20.  echo "Zalogowany jako ".$_SESSION['zalogowany']."<br /><a href='index.php?log=wyloguj'>wyloguj</a>";
  21.  
  22.  $pobierz = "SELECT `ranga` FROM `uzytkownicy` WHERE login='".$login."'";
  23.  
  24.  $zrob=mysql_query($pobierz) or die(mysql_error());
  25.  while($pokaz=mysql_fetch_array($zrob)){
  26. print '<br />Twoja ranga to: '.$pokaz[0].'';
  27. if($pokaz['ranga'] == 'uzytkownik') {
  28. header('location: strona1.php');
  29. }
  30.  
  31. if($pokaz['ranga'] == 'pracownik') {
  32. header('location: strona2.php');
  33. }
  34.  
  35. if($pokaz['ranga'] == 'vip') {
  36. header('location: strona3.php');
  37. }
  38.  }
  39.  
  40. }
  41. ?>

strona1.php
  1. <?php
  2.  
  3.  
  4. if($_SESSION['zalogowany'] == 0)
  5. {
  6.  echo "Witaj.. <strong>".$_SESSION['zalogowany']."</strong><br> <a href='index.php?log=wyloguj'>[wyloguj]</a><br>";
  7.  $intTimeoutSeconds = 600; //wartosc podana w sekundach czyli zostane wylogowany po 10 minutach jezeli nie by
    lem aktywny
  8.  
  9.  if(isset($_SESSION['intLastRefreshTime']))
  10.  {
  11. if(($_SESSION['intLastRefreshTime']+$intTimeoutSeconds)<time())
  12. {
  13.  session_destroy(); // kasuje sesje
  14.  echo "strona wygasła, <a href='index.php'>[zaloguj ponownie]</a>";
  15. }
  16.  }
  17.  $_SESSION['intLastRefreshTime'] = time();
  18. }
  19.  
  20. if ($_GET['log'] == "wyloguj") {
  21.  session_destroy(); // kasuje sesje
  22.  header('location: index.php');
  23. }
  24.  
  25. ?>
Cezar708
daj session_start(); na początku KAŻDEGO pliku, gdzie używasz sesji, widzę, żę na przykład w strona1.php nie masz użytej tej funkcji.

Pozdrawiam
em-ba
dodałem session_start(); ale ..to samo
Pilsener
Trochę masz zagmatwany ten skrypt, po co np.
  1. SELECT `login`,`haslo`,`ranga` FROM `uzytkownicy` WHERE login='".$login."' AND haslo='".$haslo."'"

- po co pobierasz rangę, kiedy jej nie potrzebujesz?
- pobierasz hasło where login=login i sprawdzasz, po co dwa razy WHERE?

Lecimy dalej:
  1. <?php
  2. if(mysql_num_rows($rekordy)==1){
  3.  echo' Podany login i haslo jest błędne';
  4.  exit;}
  5. else{
  6. //...
  7. ?>
- po co else, jak i tak przerywasz wykonywanie skryptu?

Następny ciekawy fragment:
  1. <?php
  2. while($pokaz=mysql_fetch_array($zrob)){ 
  3.  print '<br />Twoja ranga to: '.$pokaz[0].'';
  4. if($pokaz['ranga'] == 'uzytkownik') {
  5. header('location: strona1.php');
  6. }
  7. ?>
- po co Ci ta pętla tutaj? I po co mnożyć warunki? Zrób sobie w bazie: RANGA||ADRES - pobierasz rangę do sesji i od razu przekierowujesz na właściwą stronę.

Następna uwaga:
- jak używasz logowania/wylogowania to dobrze jest nie wysyłać tego do pamięci podręcznej przeglądarki
  1. <?php
  2. ?>
- możesz też to zrobić za pomocą meta - ostatnio był taki temat:
http://forum.php.pl/index.php?showtopic=90...mp;#entry454682

Dalej:
  1. <?php
  2. $_SESSION['zalogowany'] = $_POST['login'];
  3. ?>
- ustawiasz zmiennej sesyjnej 'zalogowany' wartość np. moj_login. A później:
  1. <?php
  2. if($_SESSION['zalogowany'] == 0){
  3.  echo "Witaj.. 
  4. //...
  5. ?>
- jeśli login==0 to jestem zalogowany? Na moje oko coś tu masz nie teges. Zrób to jeszcze raz, tylko wolniej i lepiej. Napisz funkcje wyloguj i zaloguj, wstaw je do oddzielnego pliku. Możesz użyć zmiennej $_SESSION['auth'] i przypisać jej TRUE, gdy użytkownik jest zalogowany - ZAWSZE sprawdzaj, czy jest zalogowany, następnie używaj $_SESSION['login'] i $_SESSION['ranga'] - w ten sposób się nie pogubisz.
em-ba
dzięki za "wyczerpującą" odpowiedz biggrin.gif
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.