Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Logowanie [osobno user osobno admin]
Forum PHP.pl > Forum > Przedszkole
marekpb
Witam !
Od pewnego czasu uczę się php, ale nie jestem stanie jeszcze wymyślać własnych metod rozwiązania problemu. Musze jeszcze się podszkolić. Znalazłem w internecie poradnik na logowanie i rejestracje, przeanalizowałem go dokładnie, żebym wiedział co jest co. Ale chciałem jakoś powolutku zacząć pisać własnego CMS na potrzeby własnej strony internetowej. Tylko tutaj mam do was pytanie. Jak można zrobić przy normalnej rejestracji i logowaniu podział (uprawnienia) usera a admina. Chyba wiecie o co mi chodzi. Żebym w jakiś sposób ustalił stałego administratora (mnie) żebym tylko ja miał dostęp do Panelu Administracyjnego, który właśnie tworzę. Może macie jakiś tutorial jak to zrobić, a jeśli nie, to prosiłbym was o teoretyczne przedstawienie mi tego co muszę napisać. Nie chcę prosić Was o gotowca bo nie o to chodzi. Chciałbym się samemu nauczyć tylko potrzebuję pomysłu. Bedę bardzo wdzięczny za odpowiedź. Z góry dziękuję. Pozdrawiam.
qba10
Ja własnym cms'ie zrobiłem to tak:
Ma bazie MySql w tabeli user: przy każdym użytkowniku mam pola z uprawnieniami i następnie za pomocą skryptu jak ktoś się zaloguję wsadzam do sesji dane uprawnienia i w panelu administracyjnym sprawdzam czy naprzykład:
  1. <?php
  2. if ($_SESSION['uprawnienie'] == 'tak')
  3. {
  4. echo' skrypt panelu administracyjnego';
  5. }
  6. else
  7. {
  8. echo ' Nie masz uprawnień, by tu przebywać';
  9. }
  10. ?>


Edit: setny jubileuszowy post na tym Forum
Pozdro dla wszystkich z tego forum!!!
blue_boy
Cześć, też jestem początkujący w PHP i z podobnym problemem mierzyłem się całkiem niedawno. Być może moje rozwiązanie nie będzie idealnym, ale rozwiązuje problem o którym piszesz. Jeżeli wszyscy użytkownicy (zwykli i admini) są "przechowywani" w jednej tabeli bazy danych, to ja bym utworzył w niej osobną kolumnę, w której znajdowałaby się informacja, czy użytkownik jest adminem czy userem. Potem podczas logowania, skrypt sprawdzałby kto próbuje się zalogować i na podstawie tego określał uprawnienia lub przekierowywał do odpowiedniej strony. Warto zauważyć, że na każdej stronie, do której dostęp ma mieć tylko osoba zalogowana także powinna znajdować się instrukcja sprawdzająca, kto jest zalogowany (powinna ona zapobiec chęci wywołania strony przez osobę, która nie do niej uprawnień winksmiley.jpg)
marekpb
Mam tą rejestrację zrobioną tak jak tutaj http://www.strefaphp.net/artykul31.html Czy moglibyście podpowiedzieć mi gdzie trzeba wkleić kod użytkownika qba10 ? Bo próbuje na wszystkie sposoby i wyskakuje mi tylko Nie masz uprawnień, by tu przebywać a nie poprawny komunikat. Niby utworzyłem pole uprawnienia i powinno być dobrze.

Chyba że ten kod co mi podał qba10 jest niepoprawny. Czy ktoś mógłby to sprawdzić ?
qba10
Ten mój kod to tylko przykład...
Ale jak chcesz już skorzystać to rób to co ci napiszę.
Będe się opierał o ten twój przykład i o pewnien skrypt logowania też z tej stronki ( pewnie go tez używasz http://www.strefaphp.net/artykul36.html )

Napoczątku trochę zmodyfikujemy skrypt dodając jeszczen kolumne uprawnienie.
  1. CREATE TABLE `users` (
  2. `nr` int(20) NOT NULL AUTO_INCREMENT,
  3. `login` varchar(20) NOT NULL DEFAULT '',
  4. `gg` varchar(10) NOT NULL DEFAULT '',
  5. `skad` varchar(30) NOT NULL DEFAULT '',
  6. `plec` varchar(20) NOT NULL DEFAULT '',
  7. `haslo` varchar(20) NOT NULL DEFAULT '',
  8. `data` varchar(20) NOT NULL DEFAULT '',
  9. `uprawnienia` varchar(20) NOT NULL DEFAULT '',
  10. PRIMARY KEY (`nr`)
  11. ) TYPE=MyISAM AUTO_INCREMENT=33 ;


Jeżeli użytkownik w tej kolumnie będzie miał wartość 1 to znaczy że jest administratorem, a jak 0 to jest szarym, zwykłym użytkownikiem.

Następnie posłużę się skryptem z mojego linku by przy logogwaniu do sesji wrzucić wartość kolumny 'uprawnienia'.

  1. <?php
  2. /* Gdyby, ktoś(czytaj zły niedobry hacker) popsuł apacha tak, że nie widzi plików .htaaccess to musimy sami upewnić s
    ię czy plik został tylko includowany */
  3.  
  4. if(eregi("config.php",$_SERVER['PHP_SELF']) OR eregi("config.php",$_SERVER['QUERY_STRING']))
  5.  
  6. { header("Location: /"); die(); }
  7.  
  8. /* Klucz XOR dla szyfrowania cookie dowolny ciąg znaków - musi mieć dokładnie 64 znaki
  9.  
  10. 2x hash md5 */
  11. $_CONFIG['kxc'] = "a523d703f908dd69e02db64ec35d07315f4c49ab3cacad14a97304b02f2fbb09";
  12. /* Dane potrzebne do zalogowania sie do bazy MySQL - zastap swoimi */
  13.  
  14. $_CONFIG['MySQL']['host'] = "localhost";
  15. $_CONFIG['MySQL']['user'] = "strefaphp";
  16. $_CONFIG['MySQL']['pass'] = "super tajne haslo, ktore zawiera znaczki i cyfry #8 (no i jest dlugie)";
  17. $_CONFIG['MySQL']['base'] = "strefaphp";
  18.  
  19.  
  20. /* jesli nie mamy swojej sesji to ja zakladamy */
  21.  
  22. if(!isset($_SESSION['sesja'])) {
  23.  
  24.  
  25. $_SESSION['sesja'] = '';
  26.  
  27. }
  28.  
  29.  
  30. /* Łączymy sie z Bazą Danych, jesli coś jest nie tak - wyskakuje nam "przyjazny" komunikat */
  31.  
  32. @mysql_connect($_CONFIG['MySQL']['host'], $_CONFIG['MySQL']['user'], $_CONFIG['MySQL']['pass']) or die('<html>
  33. <head>
  34. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  35. <title>Err0r</title>
  36. <style type="text/css">
  37. body { background: #FFFFFF; }
  38. div { font-family: Verdana, Arial; font-size: 12px; color: #000000; }
  39. </style>
  40. </head>
  41. <body>
  42. <div>
  43. Przepraszamy, wystąpiła chwilowa awaria serwisu.<br>
  44. <br>
  45. <b>Nie mogę połączyć się z serwerem bazy danych.</b><br>
  46. <br>
  47. Proszę powiadom <a href="mailto:ustek@ustek.one.pl">Webmastera</a>.
  48. </div>
  49. </html>');
  50.  
  51. /* To samo co wyżej, z tym, że teraz wybieramy bazę */
  52.  
  53. @mysql_select_db($_CONFIG['MySQL']['base']) or die('<html>
  54. <head>
  55. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  56. <title>Err0r</title>
  57. <style type="text/css">
  58. body { background: #FFFFFF; }
  59. div { font-family: Verdana, Arial; font-size: 12px; color: #000000;}
  60. </style>
  61. </head>
  62. <body>
  63. <div>
  64. Przepraszamy, wystąpiła chwilowa awaria serwisu.<br>
  65. <br>
  66. <b>Nie mogę odnaleść bazy Danych.</b><br>
  67. <br>
  68. Proszę powiadom <a href="mailto:ustek@ustek.one.pl">Webmastera</a>.
  69. </div>
  70. </html>');
  71.  
  72. function login() {
  73.  
  74. /* Pewnie sie zastanawiasz czemu nie globalizujemy tez potrzebnej nam tablicy $_P
    OST - otórz ona już jest globalizowana - automatycznie */
  75.  
  76. global $_CONFIG;
  77. /* Niezalogowany dopuki nie udowodni, że jest tym za kogo się podaje */
  78. $zalogowany = false;
  79.  
  80. /* W pierwszej kolejności będą brane pod uwage dane z cistek, potem sesji, na koń
    cu z formularza. Ta część funkcji ma ustalić, skąd pochodzą dane, i upewnić się, 
    że owe dane są zaszyfrowane w md5. strtolower przy loginie, ma za zadanie sprawić
    , by wielkość liter nie miała znaczenia - ale tylko przy loginie */
  81.  
  82. if(isset($_COOKIE["dane"])) {
  83. $dane = $_COOKIE["dane"]^$_CONFIG['kxc'];
  84. $login = substr($dane, 0, 32);
  85. $haslo = substr($dane, -32);
  86. $metod = "cookies";
  87.  
  88. }
  89.  
  90. elseif(isset($_SESSION['login']) AND isset($_SESSION['haslo'])) {
  91. $login = $_SESSION['login'];
  92. $haslo = $_SESSION['haslo'];
  93. $metod = "session";
  94.  
  95. }
  96.  
  97. elseif(isset($_POST['login']) AND isset($_POST['haslo'])) {
  98.  
  99. $login = md5(strtolower($_POST['login']));
  100. $haslo = md5($_POST['haslo']);
  101. $metod = "post";
  102.  
  103. }
  104.  
  105.  
  106. /* Jeśli istnieje $metod - czyli jeśli dane zostały dostarczone, to sprawdzamy czy są poprawne. Możemy spo
    kojnie wstawić zmienne $login i $haslo do zapytania SQL bo obydwie zmienne, zawsz
    e i wszędzie wyglądać będą tak samo dwa ciągi zawierające 32 znaki czyli 2x hash 
    md5 snitch.gif */
  107.  
  108. if(isset($metod)) {
  109.  
  110. $query = mysql_query("SELECT * FROM `users` WHERE `user`='".$login."' AND `pass`='".$haslo."';");
  111. /* Jeśli baza danych zwróciła tylko jeden wynik to haslo i login zostały odnalezi
    one zatem $zalogowany = true, ale oprócz tego musimy sie upewnić, że dane, które 
    wykożysaliśmy nam nie przepadną */
  112.  
  113. if(mysql_num_rows($query) == 1) {
  114.  
  115. $zalogowany = true;
  116.  
  117. /* Jeśli dane nie pochodzą z sesji, to umieszczamy je w sesji + zapisujemy w sesj
    i info, ktore może się do czegoś przydać, np nick */
  118.  
  119. if($metod <> "session") {
  120.  
  121. $wiersz = mysql_fetch_array($query);
  122. $_SESSION['login'] = $wiersz['user'];
  123. $_SESSION['haslo'] = $wiersz['pass'];
  124. $_SESSION['nick'] = $wiersz['nick'];
  125. #sesja uprawnienia
  126. $_SESSION['uprawnienia'] = $wiersz['uprawnienia'];
  127.  
  128. /* Jeśli dane pochodzą z formularz i dodatkowo gość poprosił o zapamiętanie danyc
    h na przyszłość to dodatkowo umieszczamy potrzebne (zaszyfrowane) dane w cisteczkach */
  129.  
  130. if($metod == "post" AND isset($_POST['pamietaj']) AND $_POST['pamietaj'] == "ok") {
  131. $dane = ($login.$haslo)^$_CONFIG['kxc'];
  132. setcookie ("dane", $dane,time()+3600*24*365); /* straci ważnosc za rok */
  133.  
  134. }
  135.  
  136. }
  137.  
  138. }
  139.  
  140. }
  141.  
  142. return $zalogowany;
  143.  
  144. }
  145.  
  146.  
  147. /* Wylogowanie, polega na zniszczeniu danych, które znajdują sie w sesji i jeśli 
    są w cistakach to tam też sprzątamy */
  148.  
  149. function logout() {
  150.  
  151. if(isset($_COOKIE["dane"]))
  152.  
  153. setcookie ("dane", "",time()-3600*24*365);
  154.  
  155. unset($_SESSION['login']);
  156. unset($_SESSION['haslo']);
  157. unset($_SESSION['nick']);
  158. ?>


Teraz wystarczy w panelu sterowania sprawdzić czy użytkownik ma w sesji uprawnie o wartosci 1 czy 0

  1. <?php
  2. #panel administarcyjny
  3. if($_SESSION['uprawnienia'] == 1)
  4.  
  5. {
  6. #panel administracyjny zwykły użytkownik nie ma tu dostępu
  7. }
  8. else
  9. {
  10. echo 'nie jestes adminem wiec wynocha';
  11. }
  12. ?>


Tak to miejwięcej wygląda. Ja usiebie mam secjalny skrypt do ustalania uprawnien ( mam 10 rodzajów uprawnien nie tylko jedne) , u ciebie to chyba nie będzię konieczne bo chyba tylko ty bedzięsz adminem więc bezproblemu tylko sobie w bazie danych możesz ustawić '1'

W skryptach mogłem popełnić jakąś literówkę....
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.