Najsampierw 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`
[codesyntax lang=”sql”]
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 ;
[/codesyntax]
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:
[codesyntax lang=”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>
[/codesyntax]
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:
[codesyntax lang=”css”]
* { margin: 0; padding: 0; } body { margin: 0 auto; width: 800px; }
[/codesyntax]
bottom.php:
[codesyntax lang=”php”]
<?php echo'<hr />To jest dolna część stronki'; ?>
[/codesyntax]
top.php:
[codesyntax lang=”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 />'; ?>
[/codesyntax]
Zawartość pliku silnik.php:
[codesyntax lang=”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; } ?>
[/codesyntax]
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.
[codesyntax lang=”php”]
<?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; } } ?>
[/codesyntax]
Jeśli mamy już zarejestrowane konto należy się zalogować używając poniższego kodu:
[codesyntax lang=”php”]
<?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 } } ?>
[/codesyntax]
Pozostaje nam napisać kod odpowiedzialny za edycję danych użytkownika:
[codesyntax lang=”php”]
<?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>'; } ?>
[/codesyntax]
A oto proste wylogowanie:
[codesyntax lang=”php”]
<?php if(isset($_SESSION['login'])) { echo'Wylogowanie przebiegło pomyślnie'.$_SESSION['login']; session_destroy(); } else { echo'Jesteś już wylogowany/a'; } ?>
[/codesyntax]
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:
[codesyntax lang=”php”]
<?php if($_SESSION['ranga'] >= 5) { echo'jesteś administratorem ;-)'; } else { echo'Nie jesteś administratorem ;-('; } ?>
[/codesyntax]
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
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
No brawo! ładnie napisane! U mnie wszystko działa… 😉
Nie trzeba było w switchu podawać pustego case oraz case ”glowna’
Wystarczy na końcu dać default: include(’logowanie.php’); break;
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
@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 🙂
Skrypt nie działa. Nie odczytuje wyników z bazy danych, mimo poprawnego ich wprowadzenia
@andrzejlech musisz mieć jakiś błąd, skrypt jak widać działa kolegą 😉
Witam świetny skrypt pozdrawiam link do tej strony oczywiście podam na moje
🙂 pozdrawiam
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ę
Przeanalizuj raz jeszcze kod. Na pewno masz jakąś głupią literówkę 😉
OK, już wszystko działa, jeszcze raz wielkie dzięki
nie piszcie, że jestem idiotom, bo to wiem, ale jeżeli coś z tego zrozumiałem to góra 1% ;(
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
@olodsw – sprawdź proszę wielkość liter loginu oraz poprawne dane dotyczące połączenia z MySQL
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?
Zmiana styli CSS nie ma wpływu na działanie skryptu
Mi nie działa 😮 wszędzie błąd wychidzi 😮
czy może ktoś rzucić to na jakiegoś up’a?
Chyba źle to robię :O
Porozmawialiśmy sobie i jednak dział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
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ś
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.
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 …
Może chodzi o umieszczenie funkcji ob_flush() na początku pliku. http://php.net/manual/en/function.ob-flush.php
byłbyś tak miły i mógł napisać, gdzie to dokładnie wstawić?
Na początku pliku 🙂
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?
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.
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…
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.
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..
Człowiek uczy się całe życie 😉
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:)
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";}
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:)
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
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
aha, po usunieciu z tego pliku session start, niezaleznie od numerow czy wylogowania, ponownie pokazuje zawsze i wszedzie, ze „jestes admisnistratorem”..
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"; }
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?
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ą.
reweka! mega dzieki:)
jeszcze mam pytanko jezeli bym chcial tylko dla danej rangi ustalic cos, to zamiast >=4 moge uzyc samego =4 ?
Konkretniej to ==
Jak najbardziej tak 🙂
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?
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 🙂
hmmm ale w top.php?
bo probowalem, ale cos nie bardzo to idzie.. :/
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?
A przypisałeś zmiennej $ranga jakąś wartość?
$ranga = $_SESSION['ranga'];
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.. 😀
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 🙂
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.
W jakim pliku znajdę ten kod ??
if($_SESSION['ranga'] >= 5) {
echo'jesteś administratorem ';
} else {
echo'Nie jesteś administratorem ;-(';
}
Obawiam się, że w żadnym z dostępnych w gotowcu
Skrypt działa prawidłowo, lecz mam problem.
Pomimo tego, że mam rangę 5 wyświetla mi się informacja „Nie jesteś administratorem”.
Sprawdź, czy aby na pewno – echo $_SESSION[’ranga’]
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?
W trakcie testów nie wykryłem tego błędu. W kodzie również nie widzę żadnego, spróbuj się wylogować i zalogować jeszcze raz.
Taki błąd miałem tylko na webservie. Na hostingu już problemu nie było. Tak więc nie było tematu 🙂
Aha i warto dodać:
mysql_query(„SET CHARSET utf8”);
mysql_query(„SET NAMES `utf8` COLLATE `utf8_polish_ci`”);
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ł? 🙂
Podaj prawidłowe dane do bazy danych 🙂