Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Rangi
Forum PHP.pl > Forum > Przedszkole
Vneeas
Witam, chciałbym zrobić system rang, który byłby oparty o MySQL. Chodzi mi o takie coś:

Użytkownik = 0 | Brak dostępu do Panelu Administratora
Administrator = 1 | Dostęp do Panelu Administratora

Kod:

db.php
  1. <?php
  2. /*Połączenie z bazą danych*/
  3. $dbhost = 'localhost';
  4. $dblogin = 'root';
  5. $dbpass = '';
  6. $dbselect = 'login';
  7. mysql_connect($dbhost,$dblogin,$dbpass);
  8. mysql_select_db($dbselect) or die("Błąd przy wyborze bazy danych");
  9. mysql_query("SET CHARACTER SET UTF8");
  10. ?>


hide.php
  1. <?php session_start();
  2. require_once('db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <link href="css/style.css" rel="stylesheet" type="text/css" />
  8. <title>Skrypt logowania z wykorzystaniem PHP i bazy MySQL</title>
  9. <meta name="description" content="Kurs jQuery" />
  10. <meta name="keywords" content="kurs, jquery, mlaskowski.pl" />
  11. </head>
  12.  
  13. <body>
  14.  
  15. <?php if ($_SESSION['auth'] == TRUE) {
  16. echo 'UKRYTA TREŚĆ!<br />';
  17. echo '<a href="index.php?logout">Wyloguj się</a>';
  18. }
  19. else {
  20. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  21. echo '<p style="padding-top:10px;color:white";><strong>Próba nieautoryzowanego dostępu...</strong><br />trwa przenoszenie do formularza logowania</p>';
  22. }
  23. ?>
  24.  
  25. </body>
  26.  
  27. </html>


index.php
  1. <?php session_start();
  2. require_once('db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <link href="css/style.css" rel="stylesheet" type="text/css" />
  8. <title>Skrypt logowania z wykorzystaniem PHP i bazy MySQL</title>
  9. <meta name="description" content="Kurs jQuery" />
  10. <meta name="keywords" content="kurs, jquery, mlaskowski.pl" />
  11. </head>
  12.  
  13. <body>
  14.  
  15. <?php
  16. /* jeżeli nie wypełniono formularza - to znaczy nie istnieje zmienna login, hasło i sesja auth
  17.   * to wyświetl formularz logowania
  18.   */
  19. if (!isset($_POST['login']) && !isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  20. ?>
  21.  
  22. <form name="form-logowanie" action="index.php" method="post">
  23. Login: <input type="text" name="login" /><br />
  24. Hasło: <input type="password" name="password" />
  25. <input type="submit" name="zaloguj" value="Zaloguj" />
  26. </form>
  27.  
  28. <?php
  29. }
  30. /* jeżeli istnieje zmienna login oraz password i sesja z autoryzacją użytkownika jest FALSE to wykonaj
  31.   * skrypt logowania
  32.   */
  33. elseif (isset($_POST['login']) && isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  34.  
  35. // jeżeli pole z loginem i hasłem nie jest puste
  36. if (!empty($_POST['login']) && !empty($_POST['password'])) {
  37.  
  38. // dodaje znaki unikowe dla potrzeb poleceń SQL
  39. $login = mysql_real_escape_string($_POST['login']);
  40. $password = mysql_real_escape_string($_POST['password']);
  41.  
  42. // szyfruję wpisane hasło za pomocą funkcji md5()
  43. $password = md5($password);
  44.  
  45. /* zapytanie do bazy danych
  46.   * mysql_num_rows - sprawdzam ile wierszy odpowiada zapytaniu mysql_query
  47.   * mysql_query - pobierz wszystkie dane z tabeli user gdzie login i hasło odpowiadają wpisanym danym
  48.   */
  49. $sql = mysql_num_rows(mysql_query("SELECT * FROM `user` WHERE `login` = '$login' AND `password` = '$password'"));
  50.  
  51. // jeżeli powyższe zapytanie zwraca 1, to znaczy, że dane zostały wpisane poprawnie i rejestruję sesję
  52. if ($sql == 1) {
  53.  
  54. // zmienne sesysje user (z loginem zalogowanego użytkownika) oraz sesja autoryzacyjna ustawiona na TRUE
  55. $_SESSION['user'] = $login;
  56. $_SESSION['auth'] = TRUE;
  57.  
  58. // przekierwuję użytkownika na stronę z ukrytymi informacjami
  59. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
  60. echo '<p style="padding-top:10px";><strong>Proszę czekać...</strong><br />trwa logowanie i wczytywanie danych</p>';
  61. }
  62.  
  63. // jeżeli zapytanie nie zwróci 1, to wyświetlam komunikat o błędzie podczas logowania
  64. else {
  65. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  66. echo '<a href="index.php">Wróć do formularza</a></p>';
  67. }
  68. }
  69.  
  70. // jeżeli pole login lub hasło nie zostało uzupełnione wyświetlam błąd
  71. else {
  72. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  73. echo '<a href="index.php">Wróć do formularza</a></p>';
  74. }
  75. }
  76.  
  77. // jeżeli sesja auth jest TRUE to przekieruj na ukrytą podstronę
  78. elseif ($_SESSION['auth'] == TRUE && !isset($_GET['logout'])) {
  79. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
  80. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wczytywanie danych</p>';
  81. }
  82.  
  83. // wyloguj się
  84. elseif ($_SESSION['auth'] == TRUE && isset($_GET['logout'])) {
  85. $_SESSION['user'] = '';
  86. $_SESSION['auth'] = FALSE;
  87. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  88. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wylogowywanie</p>';
  89. }
  90. ?>
  91.  
  92. </body>
  93.  
  94. </html>


Struktura MySQL
  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id_user` smallint(6) NOT NULL AUTO_INCREMENT,
  3. `login` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  4. `password` varchar(128) COLLATE utf8_polish_ci NOT NULL,
  5. PRIMARY KEY (`id_user`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;
  7.  
  8. INSERT INTO `users` (`id_user`, `login`, `password`) VALUES
  9. (1, 'admin', '21232f297a57a5a743894a0e4a801fc3');
b4rt3kk
Po powierzchownym przejrzeniu kodu - nie musisz robić escape dla hasła, które później hashujesz md5, zapewniam Cię, że żaden cudzysłów czy apostrof się w takim ciągu nie pojawi. A przecież ktoś równie dobrze może mieć hasło z takowym znakiem (tzn. z Twoim systemem logowania, nie może). Co do pytania o rangi - po zalogowaniu pobierz rangę użytkownika i zapisz ją w sesji, następnie sprawdzaj czy użytkownik ma odpowiednią rangę by przeglądać treści:

  1. if ($_SESSION['ranga'] == 1) {
  2. echo 'Tresc widoczna tylko dla administratora.';
  3. }


Oczywiście to tylko schemat działania.
Crozin
A problem masz z...? Od razu podpowiem, że w sieci jest cała masa artykułów, wątków na forach itp. dotyczących tego problemu.
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.