Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sesje
Forum PHP.pl > Forum > Przedszkole
Raven1122
Witam, mam problem z sesja poniewaz przy zalogowaniu ustawiam sesje $_SESSION['auth'] = 1;, sesja jest ustawiana w pliku board.php, ogolem mam 3 pliki:
board.php
edit.php
delete.php

no i na poczatku edit wpisuje:
  1. if($_SESSION['auth'] = 1){
  2. }
  3. else {
  4. echo ("brak uprawnien");
  5. exit();
  6. }


lecz za kazdym razem wyskakuje mi brak uprawnien, dlaczego?
longinus_torwaldzki
sadistic_son
A uzupełniając podpowiedź mojego przedmówcy to to musi się znaleźć przed wysłaniem nagłówków. Innymi słowy przed jakimkolwiek kodem html. Czyli najlepiej na samym początku każdego pliku, który korzysta z sesji.
Raven1122
dobra juz rozgryzlem, ale sie pojawil probliem stworzylem plik logout.php:
  1. <?php
  2. $_SESSION['auth'] = 0;
  3. header("location:./index.php");
  4. ?>


no i dobra zmienila sesje auth na wartosc 0, ale jak tylko zmienie index.php na board.php (w linku bez wpisywania hasla) to automatycznie znow robi sie 1. Kod:

  1. $sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
  2. $query = mysql_query($sql) or die(mysql_error());
  3. $row = mysql_fetch_array($query);
  4.  
  5. if($pass !== $row['userpassword']){
  6. header ("location:./index.php?password=wrong");
  7. exit();
  8. }
  9.  
  10. else {
  11. $_SESSION['auth'] = 1;
  12. }
  13. ?>
Ruio
spróbuj zamiast !== użyć !=

edit.
Sprawdzasz na innych stronach czy użytkownik jest zalogowany czy nie ?
Raven1122
dalej to samo
Ruio
To lepiej zostaw !== i zobacz czy na pewno sprawdzasz na innych podstronach czy użytkownik jest zalogowany
peter13135
@Ruio. Co to miało by zmienić questionmark.gif

Po pierwsze, nie wiadomo skąd się wzieła u Ciebie zmienna $pass wink.gif

Ustawienie sesji na 1 jest oczywiste. mianowicie warunek
  1. if($pass !== $row['userpassword']){
jest niespełniony, więc jest wykonywany kod else
A jest dlatego nie spełniony, bo zarówno $row jak i $pass nie istnieje, więc są takie same (być może coś przekombinowałem) wink.gif
Raven1122
na kazdej stronie przed trescia jest:
  1. <?php
  2. if(isset($_SESSION['auth']) and $_SESSION['auth'] == '1'){
  3.  
  4. }
  5.  
  6. else {
  7. echo ("brak uprawnien");
  8. exit();
  9. }
  10. ?>


ale i tak pokazuje dana strone o.O
Ruio
sam nie wiem wink.gif Zasugerowałem się czymś ale już sam nie wiem czym ...

raven sprawdź jaką wartość mają zmienne podane przez petera i powinieneś rozwiązać problem
Raven1122
zmienna pass jest troszke przed kodem ktory podalem $pass = $_POST['pass'];
peter13135
przeanalizuję Twój kod linia po linii, aby ukazać Ci jego bezsensowność.
linia 1 :
ot zwykłe zapytanko mysql. Do którego wrzucasz nie istniejącą zmienną login.
linia 2:
tutaj nie mam się do czego przyczepić
linia 3: skąd wiesz, że user podał prawidłowy login (pomijająć, że ten $login nie istnieje, ale może masz stare php) i zmienna $row istnieje ?
linia 4:
-ani jednego błędu ;D
linia 5: to co pisałem wcześniej. zmienna pass nie istnieje i porównujesz ją z wartością z bazy... któta też może nie istnieć

dalej wszystko ok.


jeszcze taka jedna duża uwaga. Dlaczego ten kod wykonujesz zawsze, nawet jeśli user nie wysłał danych do logowania przez formularz ?


edit:// ten post zacząłem pisać zanim zobaczyłem powyższy post. Jak chcesz otrzymać dobrą odpowiedź to daj od razu wszelkie dane a nie później się okazuje, że było jeszcze coś.

No więc... załóżmy, że $login jest prawidłowa, $pass również. Dane się pobierają jak trzeba jest ustawiana sesja na 1 i jest git.
Jeśli hasło jest złe, a login dobry to przekierowuje gdzieś indziej
Jeśli login jes zły, to hasło jest porównywane z nieistniejącą zmienną
Jeślli brak jest żadnych danych (loginu i hasła) to zapytanie jest nieprawidłowe, $row i $pass są puste, a więc takie same, więc warunek nie jest spełniony i idzie do bloku else - to Ci napisałem już w pierwszym poście, czy dalsze posty były konieczne ?
Raven1122
no dobra, dodalem juz sprawdzenie czy informacje z pola nie sa puste, no ale znowu kolejny problem. po przejsciu dalej (kliknieciu zaloguj w forularzu) przenosi mnie na strone board.php. nastepnie klikam w menu edytuj tresc strony, a gdy juz chcialem znowu powrocic do board.php mowi zebym wypelnil wszystkie pola
Kod:

  1. <?php
  2. mysql_connect ("xxx", "xxx", "xxx");
  3. mysql_select_db ("xxx");
  4.  
  5. $login = $_POST['login'];
  6. $pass = $_POST['pass'];
  7.  
  8. $sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
  9. $query = mysql_query($sql) or die(mysql_error());
  10. $row = mysql_fetch_array($query);
  11. if ($login != '' and $pass != ''){
  12. if($pass != $row['userpassword']){
  13. header ("location:./index.php?password=wrong");
  14. break;
  15. }
  16.  
  17. else {
  18. $_SESSION['auth'] = 1;
  19. }
  20. ?>
  21. <?php if($_SESSION['auth'] == 1){
  22. }
  23. else {
  24. echo ("brak uprawnien");
  25. exit();
  26. }
  27. }
  28. else {
  29. echo ("Wypełnij Wszystkie pola");
  30. exit();
  31. }
  32. ?>


odsiezam
Daiquiri
Bo zmienne $login oraz $pass są pobierane z danych wysłanych przez $_POST, których już tam nie ma?
Raven1122
a jak to naprawic, zeby to dzialalo?
Daiquiri
Zmienić warunek na taki, który będzie korzystał z danych $_SESSION.

I tak na marginesie, proszę zapoznać się i zastosować do wskazówek: Temat: Jak poprawnie zatytulowac watek
Raven1122
a moglbym prosic o jakies rozwiazanie? bo kompletnie nie wiem jak mam to zrobic ;/
peter13135
znowu jakieś bzdury napisałeś w swoim kodzie.
Przypisujesz do zmiennych login i pass dane z tablicy $_POST bez sprawdzenia czy te dane istnieją (podpowiem, że możesz użyć funkcji isset)
potem wykonujesz zapytanie (bez upewnienia się czy zostały wysłane dane)
następnie sprawdzasz czy zmienne pass i login są puste, jeśli tak to wyświeltasz komunikat wypełnij wszystkie pola - po co Ci było potrzebne używać mysql_query, skoro i tak nic z bazy nie pobierasz w tym przypadku questionmark.gif?

dalej.. po co "zamykasz skrypt" by go potem otworzyć ?
mam na myśli
  1. ?><?php

Raven1122
jak to nie sprawdzam czy nie sa puste?
a to to co? ;p
  1. if ($login != '' and $pass != ''){
peter13135
yyy, a gdzie ja napisałem, że nie sprawdzasz ?
Raven1122
zle zrozumialem, sorry ;p ale kurcze, jak rozwiazac ten problem?
freemp3
Daiquiri-emu zapewne chodzi o to, żebyś cały kod logowania wziął w warunek sprawdzający czy dane $_POST istnieją czyli:

Kod
if(isset($_POST['login]) && isset($_POST['pass']))
{
// Kod logowania
}
Raven1122
jak obialem kod tym co podales free to wyskoczyl blad:
Parse error: syntax error, unexpected T_BOOLEAN_AND, expecting ',' or ')' in /home/emes/public_html/pa/board.php on line 11
dobra juz poprawilem ten blad
peter13135
Już chyba 3 razy Ci pisałem co masz źlę (z tym sprawdzaniem) na różne sposoby. Przeczytaj uważnie, popraw i będzie działało. Ja nie wiem jak tak można.... ja Ci piszę co masz źle, a ty na to odpowiadasz "no dobra ale jak rozwiązać problem?". To po cholerę ja to piszę questionmark.gif
kolega wyżej dał Ci gotowca. Popraw tylko nawiasy.
Raven1122
i jak obialem konstrukcja if kod do logowania to powtorka z rozrywki bo znowu dopisujac board.php moge wejsc bez podawania hasla
juz kompletnie sie pogubilem ;/

  1. <?php
  2. if(isset($_POST['login']) && isset($_POST['pass'])){
  3. mysql_connect ("localhost", "exxx", "xxx");
  4. mysql_select_db ("exxxb");
  5.  
  6. $login = $_POST['login'];
  7. $pass = $_POST['pass'];
  8.  
  9. $sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
  10. $query = mysql_query($sql) or die(mysql_error());
  11. $row = mysql_fetch_array($query);
  12.  
  13. if ($login != '' and $pass != ''){
  14. if($pass != $row['userpassword']){
  15. header ("location:./index.php?password=wrong");
  16. exit();
  17. }
  18.  
  19. else {
  20. $_SESSION['auth'] = 1;
  21. }
  22.  
  23. if($_SESSION['auth'] == 1){
  24. }
  25. else {
  26. echo ("brak uprawnien");
  27. exit();
  28. }
  29. }
  30. else {
  31. echo ("Wypełnij Wszystkie pola");
  32. exit();
  33. }
  34. }
  35. ?>
peter13135
w poprzednim poście pisałem:
Cytat
prawdzasz czy zmienne pass i login są puste, jeśli tak to wyświeltasz komunikat wypełnij wszystkie pola - po co Ci było potrzebne używać mysql_query, skoro i tak nic z bazy nie pobierasz w tym przypadku ?

WYpadało by to poprawić

Dodam do tego jeszcze, że wcięcia ułatwiły by nam i Tobie analizę kodu.

Pokaż ten plik board, to wtedy się zobaczy.
freemp3
Raven1122 dam Ci małą radę. Jeśli coś nie działa tak jak chcemy i zaczynamy powoli gubić się w kodzie to jest na to super sposób. Wywalić wszystko (lub skopiować gdzieś na bok w razie gdyby nas oświeciło) i napisać jeszcze raz od początku.
Zrób plik board.php mniej więcej tak:
1. Start sesji na samym początku pliku - funkcja session_start();
2. Sprawdź czy dostałeś dane z formularza tym warunkiem który podałem wyżej (z poprawionymi nawiasami wink.gif )
2.1 Jesli dostałeś dane z formularza połącz się z bazą i wyciągnij odpowiednie dane (jeśli będziesz korzystał z bazy umieść połączenie zaraz pod session_start())
2.2 Sprawdź dane i wykonaj odpowiednią akcje. Jeśli jest ok to auth ustaw na 1 i najlepiej odśwież strone (funkcja: header()); Jesli dane były błednę do informacji o błędzie
3. sprawdź czy auth jest na 1? jeśli nie to przekierowanie.
4. Dalsza część kodu
Raven1122
Plik board.php

  1. <?php
  2. mysql_connect ("localhost", "emes_system", "ceowwyso1212");
  3. mysql_select_db ("emes_web");
  4.  
  5. $login = $_POST['login'];
  6. $pass = $_POST['pass'];
  7.  
  8. $sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
  9. $query = mysql_query($sql) or die(mysql_error());
  10. $row = mysql_fetch_array($query);
  11. if(isset($_POST['login']) && isset($_POST['pass']))
  12. {
  13. if ($login != '' and $pass != ''){
  14. if($pass != $row['userpassword']){
  15. header ("location:./index.php?password=wrong");
  16. break;
  17. }
  18.  
  19. else {
  20. $_SESSION['auth'] = 1;
  21. }
  22.  
  23. if($_SESSION['auth'] == 1){
  24. }
  25. else {
  26. echo ("brak uprawnien");
  27. exit();
  28. }
  29. }
  30. else {
  31. echo ("Wypełnij Wszystkie pola");
  32. exit();
  33. }
  34. }
  35. ?>
  36. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  37. <html>
  38. <head>
  39. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  40. <meta http-equiv="Content-Language" content="pl" />
  41. <meta name="Robots" content="ALL" />
  42. <meta name="author" content="eMeS" />
  43. <meta http-equiv="X-UA-Compatible" content="IE=8">
  44. <link rel="stylesheet" href="css/style.css" type="text/css" />
  45. <link rel="icon" href="./images/favicon.ico" type="image/x-icon" />
  46. <title>eMeS Systems - Panel Admina</title>
  47. </head>
  48. <body>
  49. <div id="container">
  50. <div id="menu"> <?php include("./includes/menu.php"); ?> </div>
  51. <div id="content">
  52.  
  53. <?php
  54.  
  55. $sql = "SELECT * FROM emes_gallery";
  56. $query = mysql_query($sql);
  57. ?>
  58. <table border="1" style="border:1px solid #000"><tr><td>Obrazek<td>Tytuł<td>Edycja<td>Usun</td></tr>
  59. <?php
  60. while($row = mysql_fetch_array($query)){
  61. ?>
  62. <tr>
  63. <td><img src="<?php echo $row['imglink']; ?>" style="width:100px;" /><td><center><?php echo $row['title']; ?></center><td width="100"><center><a href="edit.php?id=<?php echo $row['id']; ?>">Edytuj</a></center><td width="100"><center><a href="delete.php?id=<?php echo $row['id']; ?>">Usuń</a></center></td></tr>
  64.  
  65. <?php } ?>
  66. </table>
  67. <div class="floatend"></div></div>
  68. <div id="footer"></div>
  69. </div>
  70. </body>
  71. </html>


dobra wykombinowałem coś czystszego i czytelniejszego, ale bez skudku (posluchalem sie rady freemp3)
  1. <?php
  2. //łączymy się z bazą
  3. mysql_connect ("localhost", "emes_system", "ceowwyso1212");
  4. mysql_select_db ("emes_web");
  5. mysql_query('SET NAMES \'utf8\'');
  6. mysql_query("SET NAMES utf8");
  7. mysql_query("SET CHARACTER SET utf8");
  8. mysql_query("SET collation_connection = utf8_polish_ci");
  9.  
  10. mysql_query("SET CHARSET utf8");
  11. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`");
  12. //Sprawdzamy czy tablice POST są ustawione
  13. if(isset($_POST['login']) && isset($_POST['pass'])){
  14. //Sprawdzamy czy tablice nie są puste i Dodajemy wartość login i pass do zmiennych
  15. if($_POST['login'] != '' && $_POST['pass'] != ''){
  16. $login = $_POST['login'];
  17. $pass = $_POST['pass'];
  18. }
  19. else {
  20. header("location:index.php");
  21. }
  22. //Wyciągamy haslo poprzez login
  23. $sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
  24. $query = mysql_query($sql) or die(mysql_error());
  25. $row = mysql_fetch_array($query);
  26. //Sprawdzamy poprawność hasła i loginu
  27. if($pass == $row['userpassword']){
  28. $_SESSION['auth'] = 1;
  29. header("location:board.php");
  30. }
  31. else {
  32. $_SESSION['auth'] = 0;
  33. header("location:index.php");
  34. }
  35. }
  36. ?>
  37. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  38. <html>
  39. <head>
  40. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  41. <meta http-equiv="Content-Language" content="pl" />
  42. <meta name="Robots" content="ALL" />
  43. <meta name="author" content="eMeS" />
  44. <meta http-equiv="X-UA-Compatible" content="IE=8">
  45. <link rel="stylesheet" href="css/style.css" type="text/css" />
  46. <link rel="icon" href="./images/favicon.ico" type="image/x-icon" />
  47. <title>eMeS Systems - Panel Admina</title>
  48. </head>
  49. <body>
  50. <div id="container">
  51. <div id="menu"> <?php include("./includes/menu.php"); ?> </div>
  52. <div id="content">
  53.  
  54. <?php
  55.  
  56. $sql = "SELECT * FROM emes_gallery";
  57. $query = mysql_query($sql);
  58. ?>
  59. <table border="1" style="border:1px solid #000"><tr><td>Obrazek<td>Tytuł<td>Edycja<td>Usun</td></tr>
  60. <?php
  61. while($row = mysql_fetch_array($query)){
  62. ?>
  63. <tr>
  64. <td><img src="<?php echo $row['imglink']; ?>" style="width:100px;" /><td><center><?php echo $row['title']; ?></center><td width="100"><center><a href="edit.php?id=<?php echo $row['id']; ?>">Edytuj</a></center><td width="100"><center><a href="delete.php?id=<?php echo $row['id']; ?>">Usuń</a></center></td></tr>
  65.  
  66. <?php } ?>
  67. </table>
  68. <div class="floatend"></div></div>
  69. <div id="footer"></div>
  70. </div>
  71. </body>
  72. </html>

peter13135
możesz wejść bez hasła, bo nie masz przecież sprawdzania czy session auth == 1 czy nie.. Wyświetlasz stronę bez względu na to.
Po drugie. Czemu logowanie masz poza <html></html>
Po trzecie, prosisz o pomoc i jednocześnie ją całkowicie ignorujesz.
freemp3
Na początek Twój kod tylko już sformatowany:
  1. <?php
  2. mysql_connect ("host", "user", "pass");
  3. mysql_select_db ("table");
  4.  
  5. $login = $_POST['login'];
  6. $pass = $_POST['pass'];
  7.  
  8. $sql = "SELECT userpassword FROM emes_accounts WHERE userlogin = '$login'";
  9. $query = mysql_query($sql) or die(mysql_error());
  10. $row = mysql_fetch_array($query);
  11.  
  12. if(isset($_POST['login']) && isset($_POST['pass']))
  13. {
  14. if ($login != '' and $pass != '')
  15. {
  16. if($pass != $row['userpassword'])
  17. {
  18. header ("location:./index.php?password=wrong");
  19. break;
  20. }
  21. else
  22. {
  23. $_SESSION['auth'] = 1;
  24. }
  25. if($_SESSION['auth'] == 1)
  26. {
  27.  
  28. }
  29. else
  30. {
  31. echo ("brak uprawnien");
  32. exit();
  33. }
  34. }
  35. else
  36. {
  37. echo ("Wypełnij Wszystkie pola");
  38. exit();
  39. }
  40. }
  41. ?>
  42. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  43. <html>
  44. <head>
  45. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  46. <meta http-equiv="Content-Language" content="pl" />
  47. <meta name="Robots" content="ALL" />
  48. <meta name="author" content="eMeS" />
  49. <meta http-equiv="X-UA-Compatible" content="IE=8">
  50. <link rel="stylesheet" href="css/style.css" type="text/css" />
  51. <link rel="icon" href="./images/favicon.ico" type="image/x-icon" />
  52. <title>eMeS Systems - Panel Admina</title>
  53. </head>
  54. <body>
  55. <div id="container">
  56. <div id="menu">
  57. <?php include("./includes/menu.php"); ?>
  58. </div>
  59. <div id="content">
  60.  
  61. <?php
  62. $sql = "SELECT * FROM emes_gallery";
  63. $query = mysql_query($sql);
  64. ?>
  65. <table border="1" style="border:1px solid #000"><tr><td>Obrazek<td>Tytuł<td>Edycja<td>Usun</td></tr>
  66. <?php
  67. while($row = mysql_fetch_array($query)){
  68. ?>
  69. <tr>
  70. <td>
  71. <img src="<?php echo $row['imglink']; ?>" style="width:100px;" />
  72. </td> <!-- tutaj -->
  73. <td>
  74. <center>
  75. <?php echo $row['title']; ?>
  76. </center>
  77. </td> <!-- tutaj -->
  78. <td width="100">
  79. <center>
  80. <a href="edit.php?id=<?php echo $row['id']; ?>">Edytuj</a>
  81. </center>
  82. </td> <!-- tutaj -->
  83. <td width="100">
  84. <center>
  85. <a href="delete.php?id=<?php echo $row['id']; ?>">Usuń</a>
  86. </center>
  87. </td>
  88. </tr>
  89. <?php } ?>
  90. </table>
  91. <div class="floatend"></div>
  92. </div>
  93. <div id="footer"></div>
  94. </div>
  95. </body>
  96. </html>


Prawda, że czytelniej wygląda?
Teraz uwagi:
1. Nie podaje się danych do logowania publicznie wink.gif
2. Warunek który podałem powinien być kilka linijek wyżej. Dokładnie to przed: $login = $_POST['login']; Dlaczego? Nie ma sensu przypisywanie do zmiennych czegoś czego nie ma i wyciąganie z bazy informacji o nieistniejącym użytkowniku. Pewnie i tak nic nie wyciągnie, ale to niepotrzebna strata czasu.
3. Brakuje kilku zakończeń komórek tabeli ("</td>"). Zaznaczyłem gdzie.

Teraz powinno być ok.
Raven1122
hah, dziekuje wam smile.gif daje wam pomogl za dluga meke z moim malo pojemnym mozdzkiem haha.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.