System rejestracji i logowania z rangami w PHP

Sty 30
2010

rejestracjaNajsampierw teoria, która jak mam nadzieje rozjaśni Wasze szare komórki. Naszym celem jest stworzenie skryptu rejestracji, logowania, edycji profilu oraz wylogowania. Całość ma znajdować się w osobnych plikach oraz posiadać mały silnik.

Teoria

System rejestracji polega na dodaniu rekordu do bazy danych. Skrypt pobiera od użytkownika takie wartości jak nick, hasło oraz email. Po przefiltrowaniu oraz sprawdzeniu danych z tablicy $_POST rozpoczyna się translacja z bazą danych. Jeśli w bazie znajduje się już rekord z podanym przez użytkownika nickiem na ekranie pojawia się stosowny komunikat, a do bazy danych nie zostaną dodane żadne wartości dlatego, że z powodów oczywistych nie może być dwóch użytkowników o identycznych nickach.

Logowanie to nic innego jak pobranie od użytkownika loginu z hasłem, a następnie sprawdzeniu czy hasło dla podanego nicku jest prawidłowe. Jeśli dane się zgadzają deklarujemy zmienną sesyjną do tablicy $_SESSION z wartościami takimi jak nick, hasło oraz pobraną z bazy range(aby w razie potrzeby odróżnić administratora od zwykłego użytkownika). Jeśli dane się nie zgadzają wyświetlamy odpowiedni komunikat i dla celów bezpieczeństwa niszczymy zmienne sesyjne funkcją session_destroy(), która będzie użyta w skrypcie wylogowywania.

Edycja profilu rozpoczyna się od sprawdzenia, czy istnieje zmienna sesyjna przy pomocy funkcji isset(). Jeśli zmienna istnieje skrypt pobiera odpowiednie dane do formularza na stronie. Po edycji pól tekstowych przez użytkownika skrypt wykonuje update bazy danych na dane odebrane z formularza. Należy oczywiście pamiętać o filtracji danych.

Wylogowanie polega jedynie na zniszczeniu zmiennych sesyjnych poprzez użycie funkcji session_destroy().

Przygotowania

Mając opanowaną teorie przystępujemy do części praktycznej kursu.

Zacznijmy od utworzenia tabeli danych o nazwie `uzytkownicy`

CREATE TABLE `uzytkownicy` (
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nick` VARCHAR( 50 ) NOT NULL ,
`haslo` VARCHAR( 32 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
`ranga` INT NOT NULL ,
`osobie` TEXT NOT NULL ,
`data` DATETIME NOT NULL
) ENGINE = MYISAM ;

Zapisujemy do niej kolejno:

  • indywidualny numer ID służący do identyfikowania użytkowników
  • pole nick, przechowujące nich użytkownika
  • pole haslo, będzie przechowywać hash md5 użytkownika
  • email przechowujący Internetowy adres email
  • ranga, aby można było odróżnić administratora od zwykłego użytkownika.
  • osobie, pole typu text. Będą się w nim znajdować dane podane przez użytkownika.
  • data, to data rejestracji wraz z godziną.

Mając bazę danych możemy przystąpić do tworzenia szkieletu strony. Będzie się on składał z pliku index.php oraz silnik.php. Ponadto utworzymy dwa katalogi, strona oraz includes. W pierwszym będziemy trzymać pliki style.css, bottom.php i top.php. Te dwa ostatnie będą nam służyć za prowizoryczne logo oraz stopkę, aby pokazać Czytelnikowi zmiany zachodzące na stronie podczas logowania. W katalogu includes należy stworzyć pliki o nazwach edycja.php, logowanie.php, rejestracja.php i ostatni wylogowanie.php. Będą to podstrony naszego silnika.

Zawartość pliku index.php:

<?php session_start(); ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link rel="Stylesheet" type="text/css" href="strona/style.css" />
		<title>
			Testowa strona przedstawiająca skrypt obsługi użytkowników.
		</title>
	</head>
	<body>
		<?
		mysql_connect ("serwer", "uzytkownik", "haslo") or
		die ("Blad podczas polaczenia z MySQL. Jesli mozesz to poinformuj o tym administracje. Sprobuj takze odswiezyc strone.");
		mysql_select_db ("baza") or
	 	die ("Blad podczas wybierania bazy. Jesli mozesz to poinformuj o tym administracje. Sprobuj takze odswiezyc strone.");
		include('strona/top.php');
			include('silnik.php'); /*główny silnik - rejestracja, logowanie, edycja i wylogowanie*/
		include('strona/bottom.php');
		?>
	</body>
</html>

Funkcja session_start() odpowiada za podtrzymywanie sesji. Bez niej nasz skrypt nie działałby prawidłowo. Myślę, że reszta kodu nie wymaga dogłębnego omówienia.

Poniżej zawartość plików z katalogu strona.

Style.css:

* {
	margin: 0;
	padding: 0;
}
body {
	margin: 0 auto;
	width: 800px;
}

bottom.php:

<?php
echo'<hr />To jest dolna część stronki';
?>

top.php:

<?php
echo'To jest górna część stronki<hr />
<h4>Menu:</h4>
<a href="?strona=logowanie">Logownaie</a>
<a href="?strona=rejestracja">Rejestracja</a>
<a href="?strona=edycja">Edycja profilu</a>
<a href="?strona=wylogowanie">Wylogowanie</a>
<hr />';
?>

Zawartość pliku silnik.php:

<?php
$get = addslashes($_GET['strona']);
 
switch($get) {
	case '':
		include('includes/logowanie.php');
	break;
 
	case 'glowna':
		include('includes/logowanie.php');
	break;
 
	case 'rejestracja':
		include('includes/rejestracja.php');
	break;
 
	case 'logowanie':
		include('includes/logowanie.php');
	break;
 
	case 'edycja':
		include('includes/edycja.php');
	break;
 
	case 'wylogowanie':
		include('includes/wylogowanie.php');
	break;
}
?>

Zaczynamy

Mając przygotowany szkielet zabieramy się za kodzenie właściwie 😉
Najsampierw przygotujemy skrypt rejestracji(plik rejestracja.php w katalogu includes). Poniżej działający kod wraz z kilkoma komentarzami.

<?php
if(isset($_SESSION['login'])) {
	echo'Posiadasz już konto';
} else {
/*Deklaracja zmiennej $formularz*/
$formularz ='
			<form action="?strona=rejestracja" method="post">
				<table>
					<tr>
						<td width="120">
							Nick
						</td>
						<td>
							<input type="text" name="nick" maxlength="30" />
						</td>
					</tr>
					<tr>
						<td>
							Hasło
						</td>
						<td>
							<input type="password" name="haslo" />
						</td>
					</tr>
					<tr>
						<td>
							Powtórz hasło
						</td>
						<td>
							<input type="password" name="haslo2" />
						</td>
					</tr>
					<tr>
						<td>
							E-mail
						</td>
						<td>
							<input type="text" name="email" maxlength="100" />
						</td>
					</tr>
					<tr>
						<td>
							Kliknij
						</td>
						<td>
							<input type="submit" name="rejestracja" value="Rejestruj" />
						</td>
					</tr>
				</table>
			</form>
	';
 
	if(isset($_POST['rejestracja'])) { //Jeśli został wciśnięty przycisk
		/*Filtracja zmiennych z tablicy $_POST*/
		$nick = addslashes(htmlspecialchars($_POST['nick']));
		$haslo = addslashes(htmlspecialchars($_POST['haslo']));
		$haslo2 = addslashes(htmlspecialchars($_POST['haslo2']));
		$email = addslashes(htmlspecialchars($_POST['email']));
 
		/*Sprawdzanie, czy wszystkie pola zostały uzupełnione i czy są poprawne*/
		if(empty($nick)) {
			echo'<p>Uzupełnij pole <span>nick</span></p>';
		} elseif(strlen($nick) > 50 ) {
			echo'<p>Nick może składać się z maksymalnie 50 znaków</p>';
		} elseif(empty($haslo)) {
			echo'<p>Uzupełnij pole <span>hasło</span></p>';
		} elseif(empty($haslo2)) {
			echo'<p>Powtórz hasło</p>';
		} elseif($haslo != $haslo2) {
			echo'<p>Podane hasła różnią się</p>';
		} elseif(empty($email)) {
			echo'<p>Uzupełnij pole <span>E-mail</span></p>';
		} elseif(strlen($email) > 50 ) {
			echo'<p>E-mail może składać się z maksymalnie 50 znaków</p>';
		} elseif(!preg_match('/^[a-zA-Z0-9.-_]+@[a-zA-Z0-9.-_]+.[a-z]{2,4}$/D', $email)) {
			echo'<p>Podany adres <span>E-mail</span> jest nieprawidłowy.
			 Prawidłowy E-mail jest niezbędny w celu dokończenia procesu rejestracji.</p>';
		} else { //Jeśli wszystkie pola się zgadzają zapytujemy bazę danych
			/*Sprawdzanie, czy podany nick istnieje w bazie danych*/
			$zapytajka_user = mysql_query("SELECT * FROM `uzytkownicy` WHERE `nick` = '$nick';");
			if(mysql_num_rows($zapytajka_user) == 1) {
				echo '<p>Przepraszam, taki login jest już zajęty - proszę wybrać inny nick.</p>';
			} else {
				/*Sprawdzanie, czy podany email istnieje w bazie danych*/
		  		$zapytajka_email = mysql_query("SELECT * FROM `uzytkownicy` WHERE `email` = '$email';");
		     	if(mysql_num_rows($zapytajka_email) == 1) {
		        	echo '<p>Przepraszam, taki <span>e-mail</span> jest już zajęty. Możliwe, że posiadasz już konto w moim serwisie, bądź ktoś podał Twój adres.';
				} else {
					/*Dodawanie nowego użytkownika do bazy danych*/
					echo '<p>Dzięki za rejestracje <span>'.$nick.'</span>, możesz się teraz <a href="?strona=glowna">zalogować</a>.</p>';
					$haslo_zakodowane = md5($haslo);
			        $zapytanie = mysql_query("INSERT INTO uzytkownicy (nick, haslo, email, ranga, osobie, data)
			        VALUES ('$nick', '$haslo_zakodowane', '$email',  1, '---', now());");
				}
			}
		}
	} else { //Jeśli nie został wciśnięty przycisk wyświetlamy formularz
		echo $formularz;
	}
}
?>

Jeśli mamy już zarejestrowane konto należy się zalogować używając poniższego kodu:

<?php
$formularz = '
<form action="" method="post">
	<input type="text" name="login" value="login" />
	<input type="password" name="password" value="pass" />
	<input type="submit" name="logowanie" value="Zaloguj" />
</form>
';
 
$login = addslashes(htmlspecialchars($_POST['login'])); //nadajemy zmiennej login wartosc z POST
$haslo = md5(addslashes(htmlspecialchars($_POST['password']))); //nadajemy zmiennej haslo wartosc z POST
 
if(!empty($_POST['logowanie'])) { //jesli klikniemy przycisk wykonuje sie skrypt
   if(empty($login)) { //jesli nie wpisalismy loginu
	  echo 'Podaj login!'; //echujemy wiadomosc
   }
   elseif(empty($haslo)) { //jesli nie wpisalismy hasla
	  echo 'Podaj hasło!'; //echujemy wiadomosc
   }
   else { //jesli sa wpisane login i haslo
	  $zapytanie = mysql_query("SELECT * FROM `uzytkownicy` WHERE `nick` = '$login' AND `haslo` = '$haslo';"); //zapytujemy baze danych
	   while ($zapytanie && $rekord = mysql_fetch_assoc($zapytanie)) { //petla, aby pobrac wyniki
		  $loginzbazy = $rekord['nick']; //zapisujemy login z bazy do zmiennej
		  $haslozbazy = $rekord['haslo']; //zapisujemy haslo z bazy do zmiennej
		  $ranga = $rekord['ranga']; //zapisujemy range z bazy do zmiennej
	   }
	   if($login != $loginzbazy || $haslo != $haslozbazy) { //jesli login lub/i haslo bedzie inne niz to z bazy
		  echo 'Niepoprawny login lub/i haslo!'; //echujemy wiadomosc
	   } elseif($login == $loginzbazy && $haslo == $haslozbazy) { //jesli dane sie zgadzaja
		    $_SESSION['login'] = $loginzbazy; //zapisujemy login z bazy do sesji
		    $_SESSION['haslo'] = $haslozbazy; //zapisujemy haslo z bazy do sesji
		    $_SESSION['ranga'] = $ranga; //zapisujemy range z bazy do sesji
		    echo 'Zostałeś poprawnie zalogowany/s <b>'.$_SESSION['login'].'</b>!'; //echujemy wiadomosc
	   } else { //jesli wystapi nieoczekiwany blad
		    echo 'Wystąpił nieoczekiwany błąd. Spróbuj ponownie.'; //echujemy wiadomosc
	   }
   }
} else { //jesli nie klikniemy przycisku wyswietlamy formularz
   if(isset($_SESSION['login'])) { //jesli istnieje sesja z loginem
	  echo 'Jesteś już zalogowany jako<b> '.$_SESSION['login'].'</b>!'; //echujemy wiadomosc
   } else { //jesli nie ma sesji z loginem
	  echo $formularz; //wyswietlamy formularz
	}
}
?>

Pozostaje nam napisać kod odpowiedzialny za edycję danych użytkownika:

<?php
if(isset($_SESSION['login'])) {
	if(!isset($_POST['edycja'])) {
		$login = addslashes($_SESSION['login']);
		$zapytanie = mysql_query("SELECT * FROM `uzytkownicy` WHERE nick='".$login."';");
		while ($zapytanie && $rekord = mysql_fetch_assoc($zapytanie)) {
			echo'<h2>Edycja danych</h2>
			<form action="" method="post">
				<textarea name="osobie" cols="40" rows="10">'.$rekord['osobie'].'</textarea>
				<input type="submit" name="edycja" value="Edytuj dane" />
			</form>
			';
		}
	} else {
		$osobie = addslashes(htmlspecialchars($_POST['osobie']));
		$login = addslashes($_SESSION['login']);
		mysql_query("UPDATE `uzytkownicy` SET `osobie`='$osobie' WHERE `nick`='$login'");
		echo'Dane zostały zmodyfikowane pomyślnie!';
	}
} else {
	echo'Aby mieć dostęp do tej strony musisz być <a href="?strona=glowna">zalogowany</a>';
}
?>

A oto proste wylogowanie:

<?php
if(isset($_SESSION['login'])) {
	echo'Wylogowanie przebiegło pomyślnie'.$_SESSION['login'];
	session_destroy();
} else {
	echo'Jesteś już wylogowany/a';
}
?>

Myślę, że kody napisałem dość czytelnie i nie będzie problemów z dostosowaniem skryptów do własnych potrzeb.

Na zakończenie

Pozostaje ostatni problem. Jak odróżnić zwykłego użytkownika od administratora? Nic trudnego. Do bazy danych należy ręcznie dodać nowy rekord z rangą np. 5. Skrypt odpowiedzialny za wyświetlanie informacji dostępnych dla administratora kształtuje się następująco:

<?php
if($_SESSION['ranga'] >= 5) {
	echo'jesteś administratorem ;-)';
} else {
	echo'Nie jesteś administratorem ;-(';
}
?>

To tyle, pisząc ten poradnik chciałem jedynie mniej więcej przybliżyć Wam na czym polega system rejestracja i logowanie na stronie Internetowej.

Gotowiec:

http://blog.grabowski.ostrowwlkp.pl/wp-content/uploads/2010/11/test.zip

60 komentarzy w “System rejestracji i logowania z rangami w PHP”

  1. Matiiii napisał/a:

    Bardzo fajny skrypcik, ale prosiłbym bardzo o dodanie funkcji mail(), ponieważ nie do końca wiem, jak mam to zrobić. Z góry dziękuję za poświęcony czas

  2. Unnamed napisał/a:

    No brawo! ładnie napisane! U mnie wszystko działa… 😉

  3. Łukasz napisał/a:

    Nie trzeba było w switchu podawać pustego case oraz case ”glowna’
    Wystarczy na końcu dać default: include(‚logowanie.php’); break;

  4. Nori19 napisał/a:

    Witam wszystkich, a jak oceniacie ten skrypcik pod względem bezpieczeństwa? i co sam autor może powiedzieć na temat bezpieczeństwa tego skryptu? bo jak wiecie w internecie jest pełno chamów którzy chcą tylko zniszczyć pracę innych ludzi. Z góry dziękuje i pozdrawiam

  5. Hubert Grabowski napisał/a:

    @Matiiii
    Funckje mail() masz bardzo ładnie opisaną w manualu, wraz z przykładami http://www.php.net/manual/pl/function.mail.php

    @Unnamed
    Miło mi, że się podoba 😉

    @Łukasz
    Fakt, cenna uwaga

    @Nori19
    Osobiście uważam, że skrypt jest bezpieczny. Do filtracji danych użyłem funkcji addslashes() oraz htmlspecialchars(), co uniemożliwi atak XSS oraz SQLI. Skrypt sprawdza także takie drobnostki jak poprawność adresu e-mail, czy też informuje o tym, czy dany nick, bądź e-mail jest już zajęty. Hasła są szyfrowane algorytmem MD5.

    Jeśli będzie potrzeba to z chęcią rozbuduje ten skrypt w niedalekiej przyszłości o weryfikacje rejestracji przez system captcha oraz dodam potwierdzenie założenia konta poprzez e-mail.

    Pozdrawiam 🙂

  6. andrzejlech napisał/a:

    Skrypt nie działa. Nie odczytuje wyników z bazy danych, mimo poprawnego ich wprowadzenia

  7. Hubert Grabowski napisał/a:

    @andrzejlech musisz mieć jakiś błąd, skrypt jak widać działa kolegą 😉

  8. JR1111 napisał/a:

    Witam świetny skrypt pozdrawiam link do tej strony oczywiście podam na moje
    🙂 pozdrawiam

  9. Koks napisał/a:

    Witam, bardzo fajny skrypcik – takiego szukałem. Dzięki wielkie.

    Tylko jak by jeszcze więcej o tym adminie napisać, bo nie działa mi to (zawsze pokazuje ‚jestes administratorem’) albo coś źle robię

  10. Koks napisał/a:

    OK, już wszystko działa, jeszcze raz wielkie dzięki

  11. mattrixo napisał/a:

    nie piszcie, że jestem idiotom, bo to wiem, ale jeżeli coś z tego zrozumiałem to góra 1% ;(

  12. olodsw napisał/a:

    nie moge połączyć sie z baza tzn:
    na stronie wszystko sie wyświetla i „niby działą”
    wprowadziłem ręcznie przez phpMyAdmin konto z loginem i hasłem
    niestety nie moge sie zalogować, nie odnajduje mojego loginu z bazy;/
    tak samo nie moge zarejestrować nowego użytkownika.
    chyba taki sam problem jak u andrzejlech
    prosze o pomoc

  13. Hubert Grabowski napisał/a:

    @olodsw – sprawdź proszę wielkość liter loginu oraz poprawne dane dotyczące połączenia z MySQL

  14. Vesim napisał/a:

    Mam taki problem ze jak zmienie w style.css
    body {
    margin: 0 auto;
    width: 800px;
    }

    na

    body {
    background: url(bg.jpg);
    font-family:
    Tahoma,sans-serif;
    font-size: 12px;
    color: #000; }
    To edycja.php raz sie pokazuje a raz nie o co chodzi?

  15. asdf napisał/a:

    Mi nie działa 😮 wszędzie błąd wychidzi 😮
    czy może ktoś rzucić to na jakiegoś up’a?
    Chyba źle to robię :O

  16. jakub napisał/a:

    witam
    bardzo dobry skrypt mi wszystko dziala bardzo prosze tylko o to jakby ktos mi mogl zroic cos w stylu moj profil zeby bylo widac jak wyglada i to co inni beda widzieli

  17. szakal napisał/a:

    Witam

    A może zastsosowanie tej sesji po zalogowaniu, na jakieś przykładowej podstronie… W sensie, jesli zalogowany to widzi więcej, jak nie to… coś

    • komeniusz napisał/a:

      Przykładem tego typu strony jest chociażby logowanie. Jeśli sesja istnieje, to wyświetla się komunikat, że jest się zalogowanym. Jeśli sesja nie istnieje, to wyświetla się formularz logowania.

  18. szakal napisał/a:

    tzn jak teraz chce dodac przekierowanie na strone glowna po poprawnym zalogowaniu: do pliku logowanie.php dodaje linijkę:
    header(‚Location: http://localhost/mainbaza.php‚);

    i pokazuje mi błąd:
    Warning: Cannot modify header information – headers already sent by (output started at C:Program FilesVertrigoServwwwindex.php:)

    o co tu biega? chyba chodzi o session_start(), no ale tego nie moge wywalic …

  19. szakal napisał/a:

    byłbyś tak miły i mógł napisać, gdzie to dokładnie wstawić?

  20. szakal napisał/a:

    Hmm ok po dodaniu na początku pliku index.php:

    przekierowuje po zalogowaniu na stronę mainbaza.php …

    header(‚Location: http://localhost/mainbaza.php‚);

    jednak, gdy jestem na tej stronce (to jest strona główna zawierająca linki do innych stron-takie menu). Klikam na odnośnik do innej stronki, na której mam kodzik opatrzony w klamry:
    if(isset($_SESSION[‚login’])) {
    moj kod strony
    }
    else {
    echo’Aby mieć dostęp do tej strony musisz być zalogowany‚;
    }

    jednak zawsze przechodzi do else… Co moze byc przyczyna?

    • komeniusz napisał/a:

      Najprawdopodobniejszą przyczyną występowanie takiego błędu logicznego to brak funkcji session_start() na początku pliku, do którego chcesz przejść i sprawdzić, czy sesja istnieje. Innym błędem może być fakt, że sesja o nazwie ‚login‚ nie istnieje.

  21. szakal napisał/a:

    No tak, ale przecież sesja u mnie zaczyna się od zalogowania, tzn nie potrzebuję rozpoczynać nowej sesji w tym pliku.php ponownie, ponieważ powinien już widzieć zmienną login, tak jak np widzi to strona edycja.php…

    • komeniusz napisał/a:

      session_start() ma za zadanie podtrzymać istniejące sesje. Jeśli wejdzie się do pliku, w którym nie ma tej funkcji, to tak jakby nie było sesji.

  22. szakal napisał/a:

    czyli oprocz tego ze dam w skrypcie logowania session_Start() to musze jeszcze dac w kazdym pozostalym pliku? Myslalem, ze tylko w jednym sie daje..

  23. bro napisał/a:

    Witam, wszysztko fajnie super:) ale.. rangi cos nie dzialaja;/
    sprawdzalem zmieniajac od 1 do 10 numerki, i niestety zawsze wypisane jest, „jestes administratorem” nawet jezeli jestem wylogowany… co tu moze byc nie tak? bardzo prosilbym o poomoc:)

    • Komeniusz napisał/a:

      Sprawdź co masz w $_SESSION[‚ranga’]. Pewnie w tym leży problem. Administrator powinien mieć większą rangę, niżeli zwykły użytkownik.

      if($_SESSION['ranga'] == 5) { echo "ranga to 5";}

      • bro napisał/a:

        wybacz, ze pytam, ale gdzie mam to sprawdzic? w pliku?
        bo sciagnalem, ta paczke, ktora jest na samyym dole tutoriala, wrzucilem, i chcialem sprawdzic, czy pokaze poprawnie wartosci… wybacz, ale poczatkujacy webmajster jestem:)

        • Komeniusz napisał/a:

          Rozumiem. Wejdź zatem do utworzonej przez Ciebie tabeli w PhpMyAdmin i zmień rangę dla użytkownika, który ma być administratorem z „1” na „10”. Nie zapomnij, że każdy plik, w którym mają być sesje musi posiadać na początku < ?php session_start(); ?>

          • bro napisał/a:


            tak, pamietam:)
            hm, wiec zmienilem.. i jest teraz tak:

            jezeli wykonam jakikolwiek numer od 1 do 10, i jestem zalogowany, to widze napis: nie jestes administratorem.

            po wylogowaniu, wchodzac na ta strone, na ktorej ma byc ta informacja, dostaje informacje, ze jestem administratorem..

            zawsze jest jakis problem:P

  24. bro napisał/a:

    aha, po usunieciu z tego pliku session start, niezaleznie od numerow czy wylogowania, ponownie pokazuje zawsze i wszedzie, ze „jestes admisnistratorem”..

    • Komeniusz napisał/a:

      Widzę błąd w moim skrypcie… W ifie jest zły warunek, zmień go na taki

      if($_SESSION['ranga'] >= 5) {

      Ranga nadawana jest przy logowaniu. Najpierw zmień rangę w bazie danych (na 10), a następnie zaloguj się na to konto, aby nowa ranga była zapisana w sesji. To powinno pomóc.

      PS. Jeśli nie będziesz zalogowany, bądź Twoja ranga nie będzie >=5 to wyświetli się napis, że nie jesteś administratorem.

      Jeśli dalej będą problemy to sprawdź czy sesja istnieje (w tym pliku, w którym sprawdzasz rangę admina)

      if(isset($_SESSION['ranga']) && !empty($_SESSION['ranga'])) { echo"jest ok"; }

      • bro napisał/a:

        ooo no wlasnie:) zastanawialo mnie to, gdyz po rejestracji byle jakiej osoby zawsze przeciez dostawal range 1, wiec adminowa:) dzieki piekne!

        zmienilem jak napisales, i teraz ponizej 5 to zwykly user, a 5 i wiecej to admin.

        a jeszcze jedno pytanie, bo chcialbym dorobic sobie tutaj panel administratora, do edycji uzytkownikow, zmieniania im rangi z usera na admina, jak i pozniej dodac panel z newsami, i innymi takimi… wiec tylko do tego sprawdzania, na kazdej stronie, dodac opcje dla rangi? czy jakos inaczej to ma wygladac?
        a jeszcze jedno pytanko, czy jezelibym chcial zrobic range moderator, czyli cos pomiedzy, to jest taka mozliwosc by jakos to tu dorobic? oczywiscie nie gmerajac, za duzo w kod?

        • Komeniusz napisał/a:

          Ad. 1. Tak dokładnie tak ma to wyglądać. Sprawdzając rangę wiesz, czy możesz wyświetlić panel admina, czy też nie.

          Ad. 2. Możesz wykorzystać rangi jako
          1 – zwykły user
          2 – VIP
          3 – moderator
          4 – wice admin
          5 – admin
          6 – komeniusz 🙂
          A następnie sprawdzać w kodzie wartość sesji z rangą w zależności od której wyświetlisz dany element, bądź nie.
          Np.
          if($ranga >= 4) { kod }

          Kod będzie dostępny tylko dla użytkowników z rangą 4 i wyższą.

  25. bro napisał/a:

    no to super:)
    ale teraz nowe pytanie znow mi wyskoczylo…

    jezeli chcialbym, aby menu zmienialo sie wraz ze zmiana osoby (z odpowiednia ranga), to mozna jakos ten top zmodyfikowac do tego? nie wiem, moze uzywajac tego:

    if($ranga >= 4) { menu dla 4 }

    i tak dla kazdej rangi osobno?

    • Komeniusz napisał/a:

      switch($ranga){
      case 1:
      menu dla rangi 1;
      break;

      case 2:
      menu dla rangi 2;
      break;

      [...]

      default:
      menu dla innych rang, badz osob niezalogowanych
      }

      Zrób jak CI wygodniej 🙂

  26. bro napisał/a:

    hmmm ale w top.php?
    bo probowalem, ale cos nie bardzo to idzie.. :/

  27. bro napisał/a:

    wiec, zrobilem tak na test, zakladajac, ze mam range „3”:

    <?php

    switch($ranga){
    case 1:
    echo 'menu dla rangi 1';
    break;

    case 2:
    echo 'menu 2';
    break;

    case 3:
    echo 'Edycja profilu
    Wylogowanie‚;
    break;

    default:
    echo ‚Menu:
    Logownaie
    Rejestracja‚;
    break;
    }

    ?>

    i jak jestem zalogowany, to widze: Logowanie, Rejestracja Już jestes zalogowany….

    hmm.. co jest nie tak?

  28. bro napisał/a:

    ah! widzisz, bledy poczatkujacych:) sadzilem, ze jednak skads juz to pobiera:P
    ale juz smiga pieknie:)

    to na dzis mi tyle wystarczy:) dzieki wielkie!
    ale czuje, ze bede mial jescze wiele pytan.. 😀

    • bro napisał/a:

      ajj, a jednak nie moge dzis przestac:P

      zastanawiam sie nad wprowadzeniem opcji zmiany hasla, i dodaniem avataru do profilu, plus zrobienie proflu usera, takiego publicznego.

      najwiekszy problem to z haslem bede mial… bo jest ono kodowane w md5 :/ i nie mam pojecia jak sie do tego zabrac.. moze jakies wskazowki? bo zwykle update to bez sensu chyba? bo wtedy ono po zmianie, nie zostanie zakodowane..

      a ja pobawie sie z avatarami i profilami 🙂

      • Komeniusz napisał/a:

        Zmiana hasła powinna polegać na:
        1. Pobierasz od użytkownika aktualne hasło
        2. Szyfrujesz wprowadzone hasło $haslo = md5($_POST[‚haslo’]);
        3. Porównujesz wprowadzone hasło z tym w bazie danych

        Jeśli hasło wprowadzone zgadza się z tym w bazie:
        4. Pobierasz nowe hasło i potwierdzenie nowego hasła
        $nowe_haslo = md5($_POST[‚nowe_haslo’]);
        $nowe_haslo_2 = md5($_POST[‚nowe_haslo_2’]);

        Jeśli i te hasła się zgadzają if($nowe_haslo == $nowe_haslo_2) robisz update do bazy danych z wartością $nowe_haslo.

  29. ebasse napisał/a:

    W jakim pliku znajdę ten kod ??

    if($_SESSION['ranga'] >= 5) {
    echo'jesteś administratorem ';
    } else {
    echo'Nie jesteś administratorem ;-(';
    }

  30. Łukasz napisał/a:

    Skrypt działa prawidłowo, lecz mam problem.
    Pomimo tego, że mam rangę 5 wyświetla mi się informacja „Nie jesteś administratorem”.

  31. miniol napisał/a:

    Bardzo fajny gotowy skrypt. Ale jeśli się zaloguję poprawnie i kliknę na zakładkę ?strona=logowanie to wyświetla mi się „Jesteś już zalogowany jako !”. A to oznacza, że gubi się gdzieś zmienna $_SESSION[‚login’]. $_SESSION[‚haslo’] i $_SESSION[‚ranga’] wyświetla się poprawnie. Oznacza to, że gdzieś $_SESSION[‚login’] zostaje błędnie nadpisana. Jakieś pomysły co do tego?

  32. miniol napisał/a:

    Aha i warto dodać:
    mysql_query(„SET CHARSET utf8”);
    mysql_query(„SET NAMES `utf8` COLLATE `utf8_polish_ci`”);

  33. I3ombel napisał/a:

    Mam taki błąd:
    ” Blad podczas wybierania bazy. Jesli mozesz to poinformuj o tym administracje. Sprobuj takze odswiezyc strone. ”
    Co należy zrobić aby już nie występował? 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *