Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z sesją
Forum PHP.pl > Forum > Przedszkole
iqique
Witam. Dopiero się uczę dlatego pytam o wskazówkę. Walczę z problemem od wczoraj i doszedłem tylko do wniosku, że to problem z sesją. Chodzi o system logowania w którym użytkownik podaje swoje dane logowania, kod sprawdza czy użytkownik jest w bazie jeśli jest to przekierowuje na stronę admin.php jeśli zalogował się admin. Jeśli zalogował się kto inny przekierowuje na main.php W teorii wszystko pięknie. W praktyce jednak prawidłowo loguje się dopiero za drugim razem. To znaczy otwieram przeglądarkę i wpisuje dane logowania admina. Przekierowuje jednak od razu na main.php przy czym nie zapisuje zmiennych sesyjnych. Tzn w miejscach gdzie później powinien pobrać dane z bazy i wyświetlić dla konkretnego usera wyświetla błąd. Jednak po wylogowaniu i zalogowaniu ponownie wszystko jest już ok. Reasumując loguje się za drugim razem dopiero. Wydaje mi się, że walnąłem się gdzieś w składni i coś ustawiłem w złej kolejności.

  1.  
  2. <?php
  3. ?><?php
  4. @session_register("zalogowany");
  5. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  6.  
  7. include("../includes/baza.php");
  8.  
  9.  
  10. $_SESSION["admin"]="1"; //z góry ustalony NUMER KONTA admina
  11.  
  12. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;}
  13.  
  14.  
  15. if($_SESSION["zalogowany"]!=1){
  16.  
  17.  
  18. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){//
  19. if(mysql_num_rows(mysql_query("select * from konta where user = '".htmlspecialchars($_POST["login"])."' AND haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
  20. $_SESSION["zalogowany"]=1;
  21. $_SESSION["user"]=$_POST["login"];
  22.  
  23. $_SESSION["user"]==$user; //zalogowany klient sklepu NAZWA UZYTKOWNIKA
  24. $_SESSION["admin"]==$admin;
  25.  
  26. $zapytanie = mysql_query("SELECT nrkonta FROM konta WHERE user = '$user';");//sprawdzenie numeru konta klienta
  27. $record = mysql_fetch_array($zapytanie);
  28. $record["nrkonta"];
  29. $_SESSION["nrkonta"]=$record["nrkonta"];
  30. $nrkonta=$_SESSION["nrkonta"];//przypisywanie NUMERU KONTA klienta do zmiennej sesyjnej
  31.  
  32. $zapytanie2 = mysql_query("SELECT balans FROM konta WHERE nrkonta = '$nrkonta';");
  33. $record2 = mysql_fetch_array($zapytanie2);
  34. $record2["balans"];
  35. $_SESSION["balans"]=$record2["balans"];//pobieranie STANU KONTA i przypisywanie do zmiennej sesyjnej
  36.  
  37. if($nrkonta==$admin){header("Location: admin.php");} //jeśli zalogował się adminisrator przekieruj na admin.php
  38. else{
  39.  
  40. header("Location: main.php");//przekierowanie
  41. exit();
  42. }
  43.  
  44. }
  45. else include("../includes/logowanie.php");
  46. echo ("Błędny login lub hasło."."<br>");
  47. }
  48. else {include("../includes/logowanie.php");
  49. if($_GET["wyloguj"]=="tak"){echo "Wylogowano pomyślnie.";}
  50. else {if(isset($_POST[login])){echo ("Proszę wprowadzić pełne dane logowania."."<br>");}}
  51. }
  52.  
  53. }
  54. else{};
  55.  
  56.  
  57.  
  58. ?>
  59.  
  60.  
yduck
Nie widze zebys rejestrował zmienne
$_SESSION["user"] i $_SESSION["admin"]==$admin; tak jak to zrobiles dla @session_register("zalogowany"); moze to to ? wink.gif
iqique
Dziekuję za podpowiedź. user w tym przypadku jest nie potrzebny, a admin poprawiłem i zarejestrowałem. Teraz za każdym razem loguje od razu do main.php Dalej nie rozumiem istoty problemu :/
PanGuzol
Usuń małpkę w 5 linii a 6 całkowicie.
Zmienne od użytkownika które wykorzystujesz w zapytaniach filtruj w pierwszej kolejności funkcją mysql_escape_string.
Przyjrzyj się linią 25 i 26, co miały robić a co robią?
Nigdzie nie przypisałeś żadnej wartości do zmiennej $user a używasz jej w zapytaniu.
Linie 30 i 36?
W linie 39 używasz zmiennej $admin która tak samo jak $user jest pusta.
iqique
Dziękuję. Problem rozwiązany.
php__amator
Hejo,
Możesz wrzucić poprawiony listing ?
chętnie też się przyjżę, ostatnio walczyłem z tym tematem.
Co prawda rozwiązałem ale chętnie zmodyfikuję/poprawię/ulepszę smile.gif
iqique
Pewnie jeśli się przyda.



  1. <?php
  2. ?><?php
  3. @session_register("zalogowany");
  4. @session_register("admin");
  5. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  6.  
  7. include("../includes/baza.php");
  8.  
  9. $admin=1; //z góry ustalony NUMER KONTA admina
  10.  
  11. if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;}
  12.  
  13. if($_SESSION["zalogowany"]!=1){
  14.  
  15.  
  16. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  17. if(mysql_num_rows(mysql_query("select * from konta where user = '".htmlspecialchars($_POST["login"])."' AND haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
  18. $_SESSION["zalogowany"]=1;
  19.  
  20. $_SESSION["user"]=$_POST["login"];
  21. $_SESSION["user"]=$user;
  22.  
  23.  
  24. $zapytanie = mysql_query("SELECT nrkonta FROM konta WHERE user = '$user';");
  25. $record = mysql_fetch_array($zapytanie);
  26. $record["nrkonta"];
  27. $_SESSION["nrkonta"]=$record["nrkonta"];
  28. $nrkonta=$_SESSION["nrkonta"];
  29.  
  30.  
  31. if($nrkonta==$admin){header("Location: admin.php");
  32. exit();}
  33. else{
  34.  
  35. header("Location: main.php");
  36. exit();
  37. }
  38.  
  39. }
  40. else include("../includes/logowanie.php");
  41. echo ("Błędny login lub hasło."."<br>");
  42. }
  43. else {include("../includes/logowanie.php");
  44. if($_GET["wyloguj"]=="tak"){echo "Wylogowano pomyślnie.";}
  45. else { if(isset($_POST[login])){echo ("Proszę wprowadzić pełne dane logowania."."<br>");}}
  46. }
  47.  
  48. }
  49. else{};
  50.  
  51.  
  52.  
  53. ?>
yduck
Cytat(PanGuzol @ 16.09.2011, 12:48:31 ) *
... pierwszej kolejności funkcją mysql_escape_string.


z uwzględnieniem informacji że: This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

rekomenduje sie uzycie: mysql_real_escape_string
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.