Funkcja rejestracji i logowania [php]
Katalog znalezionych hase³Archiwum
- Moje największe skarby i opowieści prosto z mojego
- Hubble rejestruje zmiany sezonowe Plutona
- Prowadzone rejestry i ewidencje
- Materia z rejestrem kwantowym
- THE WATCH ponownie w Polsce
- Uchwały Rady Powiatu
- eMeRu#
- Uchwały Zarządu Powiatu
- Problem z BOSE.... chyba
- [S] BRA do e36
- [e30] Nowe tuleje tylnych wachaczy
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- demonter.keep.pl
Moje największe skarby i opowieści prosto z mojego
swoj profil, a nastepnie w zaleznosci od strony i profilu jej dzialania prowadzic na niej
roznego rodzaju dzialalnosc. Do czego sluzy i jak wyglada zazwyczaj proces rejestracji
i logowania chyba nie musze tlumaczyc.
Tutaj zajmiemy sie utworzeniem nowego profilu i pozniejszym logowaniem do tego
profilu z poziomu przegladarki na jakiejs mniej zidentyfikowanej stronie.
Zeby pisac strony w php trzeba niestety znac doskonale html i zasady dzialania
tego jezyka w przegladarce. Sama zasada rejestracji i logowania jest dosc prosta.
Rejestracja :
Polega na pobraniu od uzytkownika danych dowolnego typu, najczesciej loginu i hasla
oraz zapisaniu tych danych w dowolny sposob np w pliku textowym na dysku serwera, albo
w bazie danych. Przy okazji rejestracji mozna pobrac wiecej danych o uzytkowniku typu:
plec, data urodzenia, itp ...
Tutaj zajme sie jedynie pobraniem loginu i hasla potrzebnych do pozniejszego logowania.
PHP doskonale sie nadaje do obrobki danych z formularzy wiec proces rejestracji bedzie
dosc prosty. Wytlumacze tylko niektore zagadnienia, ktore beda mi sie wydawac
konieczne. Reszty mozna sie dowiedziec w internecie poprostu wpisujac w google
rozkaz php. Ten jezyk jest jednym z najlepiej opisanych wiec nie powinien nastreczac
klopotow.
Najpierw musimy utworzyc formularz w ktorym bedziemy pobierac dane :
<?PHP
echo "<form action='rejestracja.php' method='POST' name='rejestracja'>";
echo "<input name='login' value='$login' type='text'><br>";
echo "<input name='pass' value='$pass' type='password'><br>";
echo "<input name='przycisk' type='submit' value='Zapisz'>";
echo "</form>";
?>
Zauwazcie, ze w parametrach formularzy loginu i hasla wystepuja te same zmienne
przy nazwie formularza i wartosci, ktora jest poczatkowo wyswietlana.
Dzieki temu po powrocie, w przypadku nacisniecia przycisku, pojawi sie to co
wczesniej wpisal tam uzytkownik. Dojdziemy jeszcze do tego, ale zwykle
dolacza sie do calego procesu sprawdanie poprawnosci wprowadzonych danych, a dzieki
takiemu postepowaniu jesli dane beda nie prawidlowe to uzytkownik nie bedzie musial
wpisywac calosci od nowa tylko wystarczy, ze poprawi juz istniejaca w formularzu dana.
Ten kawalek skryptu zapiszemy pod nazwa 'rejestracja.php' i taka sama nazwa jest
zdeklarowana w akcji formularza. Czyli jesli ktos przycisnie przycisk 'Zapisz' to nastapi
wyslanie danych wpisanych z formularzy do zmiennych i powrot do tej samej podstrony.
Dlatego wczesniej musimy dopisac juz ewentualne sprawdzenie wprowadzanych danych
i jesli jest wszystko ok to wprowadzenie danych do bazy danych mysql.
Tutaj nie bede pokazywac jak nalezy sie polaczyc i zorganizowac sama baze danych
bo nie to jest celem tego tematu. Nie pokaze tez jak sprawdzic poprawnosc danych.
Skrypt ma jedynie umozliwic prosta rejestracje/zapisanie loginu i hasla jednego
uzytkownika oraz umozliwic zalogowanie sie na stronie.
My chcemy jedynie nadac prawa uzytkownikowi, ktory poprawnie wpisze
login i haslo do formularza podczas logowania sie.
Do zapisania i odczytu danych na dysku posluza nam dwa kawalki kodu :
odczyt danych z pliku dane.php :
$fp = fopen("dane.php", "r");
$zawartosc = fgets($fp);
fclose($fp);
zapis danych do pliku dane.php
$fp = fopen("dane.php", "w");
fputs($fp, $zawartosc);
fclose($fp);
Tak wiec rejestracja bedzie polegac na zapisaniu danych do pliku z dane.php .
Nasz napisany do tad skrypt musimy wzbogacic o pewne instrukcje.
Na poczatku spradzamy czy zostaly wypelnione pola w formularzu login i haslo.
Jesli tak to odpowiednio fomujemy zawartosc zmiennej ktora zostanie zapisana i
mozemy calosc zapisac jednoczesnie wyswietlajac odpowiedni komunikat i
w koncu blokujac ponowne pojawienie sie formularzy.
Kod wiec bedzie wygladac tak :
<?
if ($login != '' AND $pass != '') {
$zawartosc = $login .":" .$pass;
$fp = fopen("dane.php", "w");
fputs($fp, $zawartosc);
fclose($fp);
echo "Zapisano dane w pliku dane.php";
} else {
echo "<form action='rejestracja.php' method='POST' name='rejestracja'>";
echo "<input name='login' value='$login' type='text'><br>";
echo "<input name='pass' value='$pass' type='password'><br>";
echo "<input name='przycisk' type='submit' value='Zapisz'>";
echo "</form>";
}
?>
Mozna to sprawdzic.
Poniewaz przy wejsciu na strone obie zmienne login i pass sa puste to
skrypt przechodzi do dugiej czesci po else i wyswietlaja sie okienka
do wpisania oraz przycisk.
Jesli wpiszemy do obu okienek np "cos" oraz "cos" to po przycisnieciu przycisku
skrypt sprawdzi na poczatku czy zmienne sa puste, a poniewaz tym razem nie sa
puste wiec instrukcja warunkowa wykona tym razem skrypt z pierwszej czesci.
Tak wiec zostanie do zmiennej $zawartosc wpisana dana w formie :
"cos:cos" . Dwukropek pozniej posluzy nam jako podzielnik danych na login i haslo
do postaci tablicy asocjacyjnej.
Na dysku w koncu zostanie zapisany plik o nazwie dane.php z zawartoscia, ktora
okreslilismy wczesniej.
Na koncu zostanie wyswietlony komunikat. Oczywiscie mozna dodatkowo sprawdzic
czy zawartosc pliku jest rowna temu co chcielismy zapisac, ale my upraszamy
sprawe dla celow edukacyjnych.
Logownie :
Calosc polega na pobraniu z formularza loginu i hasla i jesli sa rowne wzorcowi
to wpisujemy jakas dana do zmiennej globalnej, ktora moze byc odczytana w dowolnym
miejscu strony czy na innych podstronach w obrebie tej samej przegladarki.
I caly proces wlasciwie wlasnie na tym polega.
Przesledzmy skrypt zapisany na dysku pod nazwa logowanie.php :
<?
session_start();
$fp = fopen("dane.php", "r");
$zawartosc = fgets($fp);
fclose($fp);
$dane = explode(":", $zawartosc);
if ($wyloguj == 'tak') {
$_SESSION['prawa'] = '';
}
if ($dane[0] == $login AND $dane[1] == $pass AND $_SESSION['prawa'] == '') {
$_SESSION['prawa'] = 'zezw_na_wstep';
}
if ($_SESSION['prawa'] == '') {
echo "<form action='logowanie.php' method='POST' name='logowanie'>";
echo "<input name='login' value='$login' type='text'><br>";
echo "<input name='pass' value='$pass' type='password'><br>";
echo "<input name='przycisk' type='submit' value='Zapisz'>";
echo "</form>";
} else {
echo "Czesc strony po zalogowaniu<br><br>";
echo "<a href='logowanie.php?wyloguj=tak'>wyloguj</a>";
}
?>
Najpierw zostaja odczytane dane zapisane podczas procesu rejestracyjnego do zmiennej
$zawartosc. Otrzymamy w tej zmiennej dane w postaci cos:cos jesli
wpisano tak dane jak podawalem to w przykladzie wczesniej.
Nastepnie do tabeli asocjacyjnej zostana te pojedyncze dane rozbite za pomoca
instrukcji explode. Tak wiec uzyskamy w
dane[0] = login
dane[1] = haslo.
Pierwsza instrukcja warunkowa zaczynajaca sie w linii nr 9 sprawdza czy zmienna
$wyloguj pamieta zawartosc "tak", a poniewaz tak nie jest to program sobie poleci dalej.
Do tego zaraz wrocimy ...
Druga instrukcja warunkowa (linia 13) sprawdza czy dane wpisane w formularzu
sa takie same jak dane odczytane z dysku. A poniewaz tak teraz nie jest
program wykonywany jest dalej od linni nr 17 gdzie zaczyna sie
trzecia instrukcja warunkowa (linia 17 do 30) w ktorej jest sprawdzane :
czy cos do zmiennej globalnej jest zapisane, a poniewaz
zmienna ta zawiera pusty ciag znakow wiec warunek jest prawdziwy wiec zostaje
wykonana czesc skryptu z pierwszej czesci przed else instrukcji warunkowej.
W tej czesci znajduje sie formularz podobny do formularza z rejestracji.
Jedyna roznica polega na adresie i nazwie skryptu do ktorego nalezy powrocic
w przypadku wcisniecia guzika.
Tak wiec wpisujemy login i haslo w postaci "cos" .
Po przycisnieciu przycisku skrypt skacze do poczatku, a poniewaz przed formularzami
i ostatnia instrukcja warunkowa jest sprawdzenie czy login i haslo sa takie same
jak wpisane do formularza, a warunek w tym wypadku jest prawdziwy to
do zmiennej globalnej $_SESSION['prawa'] zostaje wpisane 'zezw_na_wstep' .
Od tad caly czas w tej smiennej niezaleznie czy zmienimy podstrone czy tez nie
bedzie pamietana taka wlasnie sekwencja.
Wystarczy sprawdzac czy jest cos tam zapisane i jesli jest mozna wyswietlac
inna zawartosc strony jak w naszym przykladzie.
Zeby sie wylogowac wystarczy zamknac przegladarke lub kliknac w linka
umieszczonego w ostatniej czesci skryptu. Do zmiennej $wyloguj zostanie
wpisana zawartosc w tym wypadku 'tak' i nastapi skok do poczatku.
Na poczatku skryptu jest umieszczona instrukcja warunkowa, ktora wlasnie to sprawdza
i jesli taka zmienna zawiera slowo tak to do zmiennej globalnej zostanie wpisany
pusty ciag znakow co sie rowna innej reakcji skryptu na ten fakt na calej naszej stronie.
Trzeba pamietac zeby odpowiednie instrukcje warunkowe byly wykonywane
w odpowiedniej kolejnosci. To samo tyczy sie zmiennych.
Oczywiscie mozna calosc bardziej skomplikowac. Tutaj tylko nakreslilem sama zasade
logowania.
Autologowanie na stronach polega na wpisaniu zmiennej np loginu i hasla do ciastka i
zapisaniu calosci na dysku uzytkownika strony podczas procesu logowania sie.
Pozniej juz przy kazdym wejsciu na strone dana ta z dysku uzytkownika jest odczytywana
i porownywana jest z tym co jest zapisane na dysku serwera. Jesli obie sie zgadzaja
to nastepuje wpisanie danej do zmiennej globalnej dla strony i po problemie.
Mozna sobie skonstruowac/zorganizowac dane na dysku serwera w inny sposob
pozwalajacy na zapamietanie wiecej uzytkownikow niezaleznie czy bedziemy
robili to w bazie czy plikach. Oczywiscie baza danych jest o wiele wygodniejsza i
szybsza niz pliki. Roznica polega jedynie na tym, ze wyszukujemy podczas logowania sie
uzytkownika o podanym loginie w formularzu na stronie i porownujemy haslo zapisane
w bazie z haslem wpisanym do formularza. Dalej idac i opisujac te procesy mozna
haslo zakodowac tak zeby nawet wlasciciel strony nie mial mozliwosci odczytania
zawartosci hasla i tak sie to najczesciej robi.
Sam proces odczytu i wyszukania danych dla odpowiedniego uzytkownika to jest
doslownie jedna instrukcja polegajaca na zapytaniu bazy o odpowiednia wartosc.
Jeszcze na koniec nalezy sie wszystkim wytlumaczenie co to jest ta instrukcja
session_start .
Tutaj jest uzyta w uproszczonej formie, ale calosc polega na tym, ze :
w php mozna rozroznic kilka typow/rodzai zmiennych.
Zmienne proste po przejsciu/odswierzeniu strony sa natychmiast zapominane.
Zmienne globalne sa pamietane na calej stronie, ale tycza sie w obrebie
jednego polaczenia z serwerem. Czyli jedna strona tworzy jedno polaczenie, ktore jest
sygnowane w specjalny sposob, ktory sobie notuje serwer.
Niestety zeby zapisac dane globalne musi byc na to przeznaczone miejsce.
Fizycznym miejscem na zapis takich danych jest folder utworzony przy pomocy
instrukcji session_start na czas polaczenia. Tak wiec po tej instrukcji
zostaje utworzony folder na serwerze i do niego beda zapisywane
wszystkie zmienne i po to wlasnie jest ta instrukcja.