Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] System uprawnień z cookies
Forum PHP.pl > Forum > Przedszkole
Knight
Witam

Ostatnio przez dłuższy okres borykam się z problemem napisania systemu uprawnień.
Otóż gdy wpisuję ten kod by zostało zapisane moje numerID w cookies, a bym mógł je wywołać w pliku panel.php i tam ustalić co ma być dla danego id wyświetlane to wyskakuje mi error

Warning: setcookie() expects parameter 2 to be string, resource given in C:\wamp\www\nazwa\login.php on line 58


Linia 58 =
  1. setcookie('id', $id, time()+60*60);


  1. if($submit)
  2. {
  3.  
  4. $id = mysql_query("SELECT numerID FROM users WHERE Username='$username' AND Password='$zaszyfrowane'") or die(mysql_error());
  5. $rezultat=mysql_query("SELECT * FROM users WHERE Username='$username' AND Password='$zaszyfrowane");
  6.  
  7. setcookie('id', $id, time()+60*60);
  8.  
  9. if(@mysql_num_rows($rezultat)){
  10.  
  11. session_register('username'); // Zapamiętuje zmienną sesji
  12. header("location:panel.php"); // Przekierowanie do strony main.php
  13. }
  14. else
  15. {
  16. }
  17. }

http://fotoo.pl//out.php?i=437704_knight.png

Otóż myślę, że już jestem blisko by to w pełni działało, tylko blokuje mnie ten string, poprowadziłby mnie ktoś?

markonix
Przeczytaj komunikat (error), który Ci wyświetla i się do niego ustosunkuj.

System uprawnień oparty na ciasteczkach jest bezsensowny.
Już większy sens ma trzymanie to w sesji, a jeszcze większy weryfikowanie tego przy każdej akcji - bo uprawnienie może się zmienić podczas sesji.
Knight
oczekuje żeby 2 parametr był w ciągu?

Nie mogę wykminić o co tu chodzi, jakbym wiedział to bym nie pisał na forum.
Szymciosek
Wg. mnie parametr 2 powinien być stringiem.

Więc najpierw sprawdź czy rzeczywiście ID, które pobierasz za pomocą mysql_query takowym jest.
Knight
No pobieram numerID z users gdzie username = $username itp.

a $username to nic innego jak $_POST['username'] itp.
więc wydaje mi się, że powinno wychwycić numerID, choć gdy wpisuje

  1. echo $id;

to wyskakuje Resource id #6 :/
Szymciosek
http://php.net/manual/en/function.mysql-query.php

Np example 2
Knight
no wyskakuje mi jak napisałem Resource id #6
markonix
Weź w końcu otwórz dokumentacje i przeczytaj co funkcja zwraca.

http://php.net/manual/en/function.mysql-qu...ry-returnvalues
Knight
dodałem coś takiego,

  1. mysql_fetch_array($id, MYSQL_NUM);


lecz nadal nie mogę dojść do tego powrócić do tego stanu przed resource, bo wyskakuje nadal ten sam błąd
Szymciosek
Ty w ogóle spoglądasz na examples w dokumentacji ? Tam jest w każdym chyba podane żeby to zastosować w while. Sprawdzaj.
Knight
  1. if($submit)
  2. {
  3.  
  4. $rezultat=mysql_query("SELECT * FROM users WHERE Username='$username' AND Password='$zaszyfrowane");
  5. $id = mysql_query("SELECT numerID FROM users WHERE Username='$username' AND Password='$zaszyfrowane'") or die(mysql_error());
  6.  
  7.  
  8. while ($row = mysql_fetch_array($id, MYSQL_NUM))
  9. {
  10. printf("ID: %s", $row[0]);
  11. }
  12.  
  13. setcookie('id', $id, time()+60*60);
  14.  
  15. if(@mysql_num_rows($rezultat)){
  16.  
  17. session_register('username'); // Zapamiętuje zmienną sesji
  18. header("location:panel.php"); // Przekierowanie do strony main.php
  19. }
  20. else
  21. {
  22. }
  23. }


Warning: setcookie() expects parameter 2 to be string, resource given in C:\wamp\www\nazwa\login.php on line 62

dalej to samo, chociaż już mi wyszło że ID=1, czyli się zgadza.
Szymciosek
  1. $id = mysql_query("SELECT numerID FROM users WHERE Username='$username' AND Password='$zaszyfrowane'") or die(mysql_error());

na
  1. $id_query = mysql_query("SELECT numerID FROM users WHERE Username='$username' AND Password='$zaszyfrowane'") or die(mysql_error());


  1. while ($row = mysql_fetch_array($id, MYSQL_NUM))
  2. {
  3. printf("ID: %s", $row[0]);
  4. }

na
  1. while ($row = mysql_fetch_array($id_query, MYSQL_NUM))
  2. {
  3. $id = $row[0];
  4. }


i na sam koniec:
  1. echo $id;


Trochę pomyśl. Bo niby po co Ci tam print ? Powinieneś wiedzieć jak działa, a tu musisz mieć przypisanie wartości do zmiennej.
Knight
no teraz ładnie działa, dzięki za pomoc, potem jeszcze napisze efekt końcowy i dokończe na panel.php żeby prawidłowo to wyświetlało, teraz mnie trochę czas goni.

Dzięki wam za pomoc, chociaż jednak jak miał kolega wyżej rację, rozwiązanie z sesjami będzie najodpowiedniejsze, jednak zostawię tutaj to co zrobiłem, być może komuś się przyda.

login.php - skrawek z odczytywaniem id i przekierowywaiem do login.php
  1. if($submit)
  2. {
  3.  
  4. $rezultat = mysql_query("SELECT * FROM users WHERE Username='$username' AND Password='$zaszyfrowane'");
  5. $id_query = mysql_query("SELECT numerID FROM users WHERE Username='$username' AND Password='$zaszyfrowane'") or die(mysql_error());
  6.  
  7.  
  8. while ($row = mysql_fetch_array($id_query, MYSQL_NUM))
  9. {
  10. $id = $row[0];
  11. }
  12.  
  13.  
  14.  
  15.  
  16. setcookie('id', $id, time()+60*60);
  17.  
  18. if(@mysql_num_rows($rezultat)){
  19.  
  20. session_register('username'); // Zapamiętuje zmienną sesji
  21. header("location:panel.php"); // Przekierowanie do strony main.php
  22. }
  23. else
  24. {
  25. }
  26. }



funkcja w panel.php

  1. function uprawnienia($acess)
  2. {
  3. require 'config.php';
  4. require 'zmienne.php';
  5.  
  6. $polaczenie = mysql_connect($serwer, $uzytkownik, $haslo);
  7. $db = mysql_select_db('liga' , $polaczenie);
  8. $id = $_COOKIE['id'];
  9. $result = mysql_query("SELECT Acess FROM users WHERE numerID = '$id'", $polaczenie) or die("Error");
  10. while($row = mysql_fetch_array($result))
  11. {
  12. $acess = $row[0];
  13. }
  14.  
  15. $uprawnienia = $row[$acess];
  16. if ($acess == '0')
  17. {
  18. echo 'Admin';
  19. }
  20. else if ($acess == '1')
  21. {
  22. echo 'Trener';
  23. }
  24. else if ($acess == '2')
  25. {
  26. echo 'Gracz';
  27. }
  28. }
  29.  
  30. @uprawnienia($acess);
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.