|
[PHP]Prosty system rejestracji i logowania.
WoM2 - Wszystko o Metin2 |
.
Wprowadzenie i dodanie bazy danych
Przedstawię w tym temcie i opiszę dokładnie najprostszy system rejestracji i logowania tak żeby każdy z użytkowników mógł sobie ten system zaadoptować do własnej strony. Postaram się przytoczyć do każdego fragmentu kilka sposobów i w ten sposób każdy kto będzie chciał z tego skorzystać będzie sobie mógł wybrać to co go interesuje i uzna co jest mu potrzebne. Najlepiej jednak zacząć i zrobić jest coś na gotowym działającym przykładzie.
Początki. Podstawowa sprawa - starajcie się używać odpowiednich do tego edytorów tekstu. Każdy skrypt, który będziecie edytować starajcie się otworzyć w Notepad ++, EditPlus, albo w Pajączku. Otwarcie i zapisanie dokumentu w innym niż powyższe edytory może grozić utratą kodowania i będziecie mieli problem z wyświetleniem polskich znaków na stronie. Nie muszę też chyba wspominać o odpowiedniej konstrukcji strony wraz ze wszystkimi meta tagami tyczącymi się też kodowania na stronie.
W innym temacie napisałem jakie reguły rządzą przy pisaniu skryptów php. Tutaj tylko je przypomnę . Jeśli już ktoś ma stronę napisaną wyłącznie w html i chciałby zaadoptować do niej jakiś system rejestracji i logowania to nic prostszego, ale nie ominie go pare zmian. 1. php wymaga, a przynajmniej tak jest ustawiona większość serwerów php aby dokumenty php były zapisywane w plikach o rozszerzeniu ".php" . Zmiana rozszerzenia niczym nie grozi, a przynajmniej na pierwszy rzut oka. Jeśli zmienimy rozszerzenie z "html" na "php" to serwer nadal będzie czytać nasze dokumenty i wykonywać jak zwykłą stronę, ale w przyszłości przedewszystkim umożliwi to zapisywanie w nich skryptów php. Jedyną niedogodnością mogą być linki. Jeśli na stronie głównej macie zawarte odnośniki do podstron to po zmianie rozszerzenia w tych podstronach musicie dokonać zmian w odnośnikach ponieważ zmienia się nazwa pliku do którego prowadzi odnośnik. 2. Jeśli będziemy pisać w php to część, która będzie dotyczyć php będzie się zaczynać od :
<?PHP a konczyć na :
?>
Nie będzie tutaj żadnych wodotrysków i ładnego wyglądu. Każdy może się zatroszczyć o to sam w części html. Tak więc zaczynamy ...
Baza danych Dane będziemy zbierać w bazie danych MySql . Każdy kto ma dostęp do phpMyAdmin, a każdy administrator powinien mieć dostęp do tego skryptu. Tak więc logujemy się do phpMyAdmin i zakładamy bazę danych :
Czyli w pole "Utwórz nową bazę danych" wpisujemy "nasza_str" wybieramy kodowanie "latin2_general_ci" i naciskamy "utwórz" . W różnych wersjach MySql albo phpMyAdmin ta część może się nieznacznie róznić, ale zasada zawsze będzie ta sama. Po wykonaniu już mamy baze danych gdzie phpMyAdmin nas automatycznie przeniesie po naciśnięciu guzika :
Dalej już wystarczy nacisnąć na górze "SQL" i wkleić do okienka, które się pokaże ten kawałek kodu :
-- -- Struktura tabeli dla `uzytkownicy` --
CREATE TABLE IF NOT EXISTS `uzytkownicy` ( `id` int(15) NOT NULL AUTO_INCREMENT, `login` varchar(30) NOT NULL, `haslo` varchar(40) NOT NULL, `prawa` varchar(50) NOT NULL, `ustaw_wlasne` varchar(10) NOT NULL, `ip` varchar(15) NOT NULL, `data_rej` int(15) NOT NULL, `data_log` int(15) NOT NULL, `email` varchar(100) NOT NULL, `skype` varchar(50) NOT NULL, `gadu` int(15) NOT NULL, `plec` varchar(5) NOT NULL, `miasto` varchar(5) NOT NULL, `wojew` varchar(5) NOT NULL, `kraj` varchar(50) NOT NULL, `data_ur` varchar(8) NOT NULL, `stronawww` varchar(100) NOT NULL, `frekwenc` int(5) NOT NULL, `avatar` varchar(30) NOT NULL, `opis` text NOT NULL, `zainteresow` varchar(255) NOT NULL, `ilosc_odwiedz` int(10) NOT NULL, `pole_doda1` varchar(50) NOT NULL, `pole_doda2` varchar(50) NOT NULL, UNIQUE KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=8 ;
-- -- Zrzut danych tabeli `uzytkownicy` --
INSERT INTO `uzytkownicy` VALUES(1, 'anonymous', '923sc43asdc2fa3b3c78d4d762fgh283', '00000000000000000000000000000000000000000000000000', '0000000000', '', 1, 1, '', '', 0, '', '', '', '', '0', '', 0, '', 'Użytkownik anonimowy lub gość .', '', 0, '', '');
i nacisnąć wykonaj. W wyniku tej operacji do bazy danych w której jesteśmy zostanie dodana tabela w której będziemy zbierać informacje o użytkownikach. Wsród tych danych są zawarte pola, których nie bedę używać w skrypcie do logowania i rejestracji, ale ze względu na możliwość przyszłej rozbudowy co też uwzględniam, bo może dopisze później pare przykładów, to mogą one zostać w tej tabeli i w niczym nie będą przeszkadzać. Od razu w bazie danych dodałem też użytkownika anonymowego. Gościa, który nie ma żadnych praw, ale może się przydać nam przy budowie strony.
Więcej bazą danych nie będziemy się zajmować . Do połączenia z bazą danych będziemy wykorzystywać odpowiedni skrypt i na jego potrzeby utworzymy użytkownika w bazie danych. Najpierw należy przejść do głównego okna phpMyAdmin, dlatego przyciskamy :
i teraz w phpMyAdmin na górze należy kolejno nacisnąć odnośnik lub guzik : 1. "uprawnienia" 2. "Dodaj nowego użytkownika" 3. wpisujemy dane
jako haslo prosze wpisac "sas123" 4. nalezy nacisnac "wykonaj"
Po nacisnięciu tego guzika musimy jeszcze tego użytkownika przypisać do odpowiedniej tabeli danych i nadać mu do niej prawa. Czyli nieco niżej wybieramy baze danych :
Zaraz po wyborze zmieni się nam podstrona więc należy wybrać tylko "zaznacz wszystkie" i nacisnąć wykonaj :
Dzięki temu mamy dodanego użytkownika z uprawnieniami do naszej bazy danych. Proszę dodać użytkownika, którego podałem. Jeśli ktoś chce zrobić inaczej ze względu na bezpieczeństwo to może oczywiście to uczynić, jednak jeśli na razie ktoś zaczął już to robić na serwerze lokalnym (swoim komputerze) i nie widać go w internecie to dla pewności działania skryptów można nadać takiego samego użytkownika jak w przykładzie. Na koniec należy po nadaniu praw przeładować uprawnienia więc można kliknąć w "uprawnienia" i później w tekście na dole w odnośnik "przeładować uprawnienia" .
Opisuję to wszystko tak dokładnie, aby uniknąć wszystkich pomyłek, żeby wszystko było jasne i może dzięki temu także zrozumiałe dlaczego to robimy.
Do połączenia z bazą danych będziemy używać skryptu : nazwa : config.php
<? $domena = "cyberduck"; // domena bez http:// $hostbazy="localhost"; // host do bazy $loginmysql="ktosiek"; // login do bazy $haslomysql="sas123"; // haslo do bazy $nazwabazy="nasza_str"; // nazwa bazy danych
$bladbazy = 'Brak polaczenia z baza danych'; $domena_jest = $_SERVER["HTTP_HOST"]; if ($domena_jest != $domena) { die("$bladbazy"); exit; }
@$connect = mysql_connect("$hostbazy", "$loginmysql", "$haslomysql") OR die("$bladbazy"); mysql_select_db("$nazwabazy"); mysql_query ("SET NAMES latin2"); ?>
Jak widać w pola oznaczone zmiennymi należy podać odpowiednie dane. Jedynie należy się objasnienie :
$domena = "cyberduck"; // domena bez http:// W tym miejscu należy podać adres domeny pod którą będzie wykonywany skrypt bez podawania żadnych http:// czy dalszej części adresu. Jeśli będziemy na lokalnym komputerze uruchamiać skrypt należy wpisać to co stoi po http:// . Czyli odpowiednio to będzie adres ip komputera w sieci albo slowo "localhost" . Na serwerze docelowym to będzie poprostu domena w postaci : "www.moja_domena.pl" albo "moja_domena.pl" . To jest najprostsza forma zabezpieczenia tak żeby nikt nam nie wykonał tego skryptu z pod innej lokacji. Skrypt będzie poprawnie wykonywany tylko na naszym serwerze.
Aby sprawdzić czy nasz skrypt wykonuje się poprawnie i czy wszystko jest w porządku należy zapisać skrypt : nazwa : index.php
<? include"config.php";
$sql = mysql_query("SELECT login FROM użytkownicy WHERE id='1'"); $dane = list($login) = mysql_fetch_row($sql); echo "$login";
mysql_close(); ?> Jeśli po wykonaniu skryptu na stronie zobaczymy napis "anonymous" i nic więcej to znaczy, że wszystko przebiegło poprawnie i skrypt nam wyświetlił login jedynego użytkownika, kótry znajduje się w bazie danych. Gdyby wyskoczył jakiś problem z kodowaniem i skrypt nam to zgłosi w postaci komunikatu to należy skasować całą linię lub postawić znak przed "#" :
mysql_query ("SET NAMES latin2");
Na początku skryptu wykonujemy przy pomocu include wykonanie skryptu config.php, czyli połączenie do bazy danych. Później skrypt pobiera login z naszej tabeli użytkowników o id=1, a ponieważ tam jest nasz użytkownik anonymous to właśnie jego login zostaje załadowany do zmiennej $login i na koniec zostaje ta zmienna wyświetlona, a następnie następuje zamknięcie połączenia do bazy danych.
Właściwie już w tej części zrobiliśmy wszystko.
. Skrypt rejestracji
Zanim sie zalogujemy na stronie potrzebna będzie rejestracja, a więc zebranie wszystkich danych jakie będą potrzebne i w tej części zdecydujemy co jest nam potrzebne na stronie i w bazie danych. Długo się nad tym zastanawiałem i zdecydowałem się na dane, które widnieją w polach bazy danych. Jeśli ktoś nie będzie potrzebować którejś z danych poprostu można pominąć tę część skryptu co postaram się opisać jak najdokładniej.
Postanowiłem więc na zebranie następujących danych : 1. Login (nazwa użytkownika) 2. Hasło i hasło powtornie 3. prawa (prawa użytkownika na stronie począwszy od aktywacji konta do dostępu do różnych części strony) 4. ustawienia własne (jeśli gdzieś na stronie umieścimy możliwość wprowadzenia ustawień własnych dla użytkowników to będzie można te dane zapisać właśnie w tym polu) 5. ip - IP użytkownika, który się zarejestrował lub zalogował 6. data rejestracji 7. data ostatniego logowania 8. e-mail użytkownika 9. identyfikator skype 10. numer gadu gadu 11. płeć użytkownika 12. miasto 13. województwo 14. kraj 15. data urodzenia 16. strona www własna lub ulubiona 17. frakwencja - narazie nie będziemy tego pola używać, ale może się przydać w przyszłości 18. avatar - można dodać możliwość podania adresu do obrazka albo wysłać go na serwer 19. opis - opis własny użytkownika 20. zainteresowania - max 255 znaków 21. ... 22. ...
Opis powyższy jest adekwatny do tego co mamy w bazie danych o czym jest łatwo się przekonać wchodząc do naszej bazy danych, a następnie klikając w tabele "uzytkownicy" po lewej stronie i na górze w "struktura" . Tutaj będziemy zbierać oczywiście nie wszystkie dane. Do rozwiązania w przyszłości.
Skrypt rejestracji . Moze najpierw przedstawie skrypt, a później dokładnie go opisze. Skrypt zapisujemy pod nazwą "rejestracja.php" .
<?php session_start(); ?>
<!-- tutaj mozna zaczac wlasna strone w html -------------------------- -->
<!-- 1 --> <? # sprawdzamy czy nacisnieto przycisk akceptujacy regulamin if ($_POST['przyciskr'] != '' AND $_SESSION['rejestracja'] == '') { $_SESSION['rejestracja'] = '1'; }
if ($_SESSION['rejestracja'] == '') {
# wyswietlanie regulaminu w html ?> Regulamin :<br> 1. <br> 2. <br><br> <form name="rejestracja" action="rejestracja.php" method="POST"> <input type="submit" name="przyciskr" value="Akceptuje regulamin"><br> </form> <?php
} else { ?> <!-- 2 -->
<?php # -------------------------------------------------------------------------- sprawdzanie formularzy
$komunikat = ''; if ($_POST['przycisk'] != '' AND $_SESSION['rejestracja'] != '') {
# sprawdzanie loginu ----------------------------------------- $_POST['login'] = preg_replace("[ ]", "", $_POST['login']); // pozbywamy się spacji $login = stripslashes($_POST['login']); $login = htmlspecialchars(trim($login)); # 1 sprawdzamy czy nie za krotki login, minimum 4 znaki if (strlen($login) < '4' AND $komunikat == '' AND $login != '') { $komunikat = 'W login wpisz najmniej 4 znaki'; } # 2 sprawdzamy czy dozwolone znaki if ($komunikat == '' AND $login != '' AND !ereg("^[[:alnum:]ąĄęĘłŁóÓźŹżŻńŃśŚ_-]*$", $login)) { $komunikat = 'Nie stosuj w login znaków specjalnych'; } # 3 wykluczenie nazw specjalnych if ($komunikat == '' AND $login != '' AND $login == 'admin') { $komunikat = 'Taka nazwa jest nie dozwolona'; } # 4 pole login jest wymagane if ($login == '' AND $komunikat == '') { $komunikat = 'Pole login jest wymagane'; } # 5 czy już taki uzytkownik jest w bazie include"config.php"; $sql = mysql_query("SELECT login FROM uzytkownicy WHERE login='$login'"); $dane = list($loginspr) = mysql_fetch_row($sql); mysql_close(); if ($loginspr != '') { $komunikat = 'Taki login już jest zajety'; } # koniec sprawdzanie loginu ------------------------------------ # sprawdzanie hasla -------------------------------------------- $_POST['haslo'] = preg_replace("[ ]", "", $_POST['haslo']); // pozbywamy się spacji $haslo = stripslashes($_POST['haslo']); $haslo = htmlspecialchars(trim($haslo)); $haslo_powt = stripslashes($_POST['haslo_powt']); $haslo_powt = htmlspecialchars(trim($haslo_powt)); # 1 sprawdzamy czy dozwolone znaki if ($komunikat == '' AND $haslo != '' AND !ereg("^[[:alnum:]ąĄęĘłŁóÓźŹżŻńŃśŚ_-]*$", $haslo)) { $komunikat = 'Nie stosuj w hasle znaków specjalnych'; } # sprawdzamy czy haslo1 jest rowne haslo2 if ($haslo != $haslo_powt AND $haslo_powt != '') { $komunikat = 'Haslo jest rozne od powtornie wpisanego hasla'; } # ------------------------------------------------------------- # sprawdzanie e-mail -------------------------------------------- $_POST['adremail'] = preg_replace("[ ]", "", $_POST['adremail']); // pozbywamy się spacji $email = stripslashes($_POST['adremail']); $email = htmlspecialchars(trim($email)); # sprawdzanie czy e-mail jest poprawnie zapisany if (!ereg("^[a-z0-9_\\.-]+@([a-z0-9_-]+\\.)+[a-z]{2,}$", $email) AND $email != '') { $komunikat = 'Sprawdz email. Zle wpisano adres.'; } # koniec sprawdzania e-mail ------------------------------------
# sprawdzenie numeru gadu gadu , czy same cyfry ---------------- $_POST['gg'] = preg_replace("[ ]", "", $_POST['gg']); // pozbywamy się spacji $gg = stripslashes($_POST['gg']); $gg = htmlspecialchars(trim($gg)); # sprawdzanie czy w gg same cyfry if (!ereg("^[0-9]*$", $gg) AND $gg != '') { $komunikat = 'Wpisz same cyfry w gg'; } # koniec sprawdzenie numeru gadu gadu , czy same cyfry --------- # sprawdzenie danej miasto ------------------------------------- $miasto = stripslashes($_POST['miasto']); $miasto = htmlspecialchars(trim($miasto)); # 1 sprawdzamy czy nie za krotkie minimum 3 znaki if (strlen($miasto) < '3' AND $komunikat == '' AND $miasto != '') { $komunikat = 'W miasto wpisz najmniej 3 znaki'; } # 2 sprawdzamy czy dozwolone znaki if ($komunikat == '' AND $miasto != '' AND !ereg("^[[:alnum:]ąĄęĘłŁóÓźŹżŻńŃśŚ-]*$", $miasto)) { $komunikat = 'Nie stosuj w miasto znaków specjalnych'; } # koniec sprawdzenie danej miasto ------------------------------- # sprawdzenie danej kraj ------------------------------------- $_POST['kraj'] = preg_replace("[ ]", "", $_POST['kraj']); // pozbywamy się spacji $kraj = stripslashes($_POST['kraj']); $kraj = htmlspecialchars(trim($kraj)); # 1 sprawdzamy czy nie za krotkie minimum 3 znaki if (strlen($kraj) < '3' AND $komunikat == '' AND $kraj != '') { $komunikat = 'W kraj wpisz najmniej 3 znaki'; } # 2 sprawdzamy czy dozwolone znaki if ($komunikat == '' AND $kraj != '' AND !ereg("^[[:alnum:]ąĄęĘłŁóÓźŹżŻńŃśŚ-]*$", $kraj)) { $komunikat = 'Nie stosuj w miasto znaków specjalnych'; } # koniec sprawdzenie danej kraj -------------------------------
# sprawdzenie danej data urodzenia ---------------------------- $_POST['dzienur'] = preg_replace("[ ]", "", $_POST['dzienur']); // pozbywamy się spacji $_POST['miesur'] = preg_replace("[ ]", "", $_POST['miesur']); // pozbywamy się spacji $_POST['rokur'] = preg_replace("[ ]", "", $_POST['rokur']); // pozbywamy się spacji $dzienur = stripslashes($_POST['dzienur']); $dzienur = htmlspecialchars(trim($dzienur)); $miesur = stripslashes($_POST['miesur']); $miesur = htmlspecialchars(trim($miesur)); $rokur = stripslashes($_POST['rokur']); $rokur = htmlspecialchars(trim($rokur)); # 1 sprawdzamy czy same cyfry if (!ereg("^[0-9]*$", $dzienur) AND $dzienur != '') { $komunikat = 'W dniu urodzin wpisz same cyfry'; } if (!ereg("^[0-9]*$", $miesur) AND $miesur != '') { $komunikat = 'W dniu miesiacu wpisz same cyfry'; } if (!ereg("^[0-9]*$", $rokur) AND $rokur != '') { $komunikat = 'W dniu roku wpisz same cyfry'; } if (strlen($rokur) != '4' AND $rokur != '') { $komunikat = 'Podaj rok urodzenia w postaci czterocyfrowej'; } # sprawdzamy czy nie za stary albo nie za mlody if ((date("Y") - $rokur) < '8' AND $rokur != '') { $komunikat = 'Nie jestes za mlody ?'; } if ((date("Y") - $rokur) < '0' AND $rokur != '') { $komunikat = 'Ty się jeszcze nie urodziles'; } if ((date("Y") - $rokur) > '100' AND $rokur != '') { $komunikat = 'Jestes za stary. Widzisz cos jeszcze w monitorze ?'; } if ($dzienur != '' AND $miesur != '' AND $rokur != '' AND $komunikat == '') { $znacznikur = $dzienur .$miesur .$rokur; } # koniec sprawdzenie danej data urodzenia ----------------------- # sprawdzenie danej strona www ---------------------------------- if ($_POST['strwww'] != '') { $_POST['strwww'] = preg_replace("[ ]", "", $_POST['strwww']); // pozbywamy się spacji $strwww = stripslashes($_POST['strwww']); $strwww = htmlspecialchars(trim($strwww)); $strwww = preg_replace("[http://]", "", $strwww); # 1 sprawdzamy czy same cyfry $adres = "http://" .$strwww; $uchwyt = @fopen(($adres),'r'); if ($uchwyt !== false) { fclose($uchwyt); } else { $komunikat = 'Bledny adres www'; } } # koniec sprawdzenie strona www -------------------------------- # przygotowanie danych dla bazy danych i zapis do bazy danych if ($komunikat == '') { $mdhaslo = md5($haslo); $ip_uzytk = $_SERVER["REMOTE_ADDR"]; $dzienur = substr($dzienur+100,1); $miesur = substr($miesur+100,1); $rokur = substr($rokur+10000,1); $znacznikur = $rokur .$miesur .$dzienur; $kod_aktywacyjny = time() .$login .$ip_uzytk; $kod_aktywacyjny = md5($kod_aktywacyjny); include"config.php"; mysql_query("INSERT INTO uzytkownicy VALUES ( NULL, '$login', '$mdhaslo', '000000000000000000000000000000', '0000000000', '$ip_uzytk', '" .time() ."', '0', '$email', '$skype', '$gg', '" .$_POST['plec'] ."', '$miasto', '$wojewodztwo', '$kraj', '$znacznikur', '$strwww', '0', '', '', '$zainteres', '0', '$kod_aktywacyjny', '')"); mysql_close(); # tutaj może być zawarty skrypt wysylajacy list aktywujacy wraz z linkiem aktywujacym # tutaj stopka strony lub przejscie do komunikatu, ze rejestracja powiodla się sukcesem ?> Rejestracja zakonczyla się sukcesem
<? exit; # koniec komunikatu o sukcesie } # koniec zapisu }
?>
<!-- dalej już może być html uzytkownika ------------------------------------------------- -->
<!-- wyswietlanie komunikatu bledu --> <?
if ($komunikat != '') { echo "Blad w formularzu : <br>" .$komunikat ."<br>"; } ?> <!-- koniec wyswietlania komunikatu bledu -->
<!-- Formularz rejestracyjny ---------------------------------------------------------------- html --> <form name="rejestracja" action="rejestracja.php" method="POST" >
Login :<br> <input type="text" name="login" value="<? echo $_POST['login']; ?>"> <br>
Haslo :<br> <input type="password" name="haslo" value="<? echo $_POST['haslo']; ?>"><br> Haslo powtornie :<br> <input type="password" name="haslo_powt" value="<? echo $_POST['haslo_powt']; ?>"><br>
Adres email :<br> <input type="text" name="adremail" value="<? echo $_POST['adremail']; ?>"><br>
Skype :<br> <input type="text" name="skype" value="<? echo $_POST['skype']; ?>"><br>
Numer GG :<br> <input type="text" name="gg" value="<? echo $_POST['gg']; ?>"><br>
Plec : <br> <select size="1" name="plec"> <option value="0" <? if ($_POST['plec'] == "0") { echo "Selected"; } ?>>Nie okreslona</option> <option value="1" <? if ($_POST['plec'] == "1") { echo "Selected"; } ?>>Mezczyzna</option> <option value="2" <? if ($_POST['plec'] == "2") { echo "Selected"; } ?>>Kobieta</option> </select><br>
Miasto :<br> <input type="text" name="miasto" value="<? echo $_POST['miasto']; ?>"><br>
Wojewodztwo :<br> <select size="1" name="wojewodztwo"> <option value="0" <? if ($_POST['wojewodztwo'] == "0") { echo "Selected"; } ?>>Nie określone</option> <option value="1" <? if ($_POST['wojewodztwo'] == "1") { echo "Selected"; } ?>>Dolnośląskie</option> <option value="2" <? if ($_POST['wojewodztwo'] == "2") { echo "Selected"; } ?>>Kujawsko-Pomorskie</option> <option value="3" <? if ($_POST['wojewodztwo'] == "3") { echo "Selected"; } ?>>Lubelskie</option> <option value="4" <? if ($_POST['wojewodztwo'] == "4") { echo "Selected"; } ?>>Lubuskie</option> <option value="5" <? if ($_POST['wojewodztwo'] == "5") { echo "Selected"; } ?>>Łódzkie</option> <option value="6" <? if ($_POST['wojewodztwo'] == "6") { echo "Selected"; } ?>>Małopolskie</option> <option value="7" <? if ($_POST['wojewodztwo'] == "7") { echo "Selected"; } ?>>Mazowieckie</option> <option value="8" <? if ($_POST['wojewodztwo'] == "8") { echo "Selected"; } ?>>Opolskie</option> <option value="9" <? if ($_POST['wojewodztwo'] == "9") { echo "Selected"; } ?>>Podkarpackie</option> <option value="10" <? if ($_POST['wojewodztwo'] == "10") { echo "Selected"; } ?>>Podlaskie</option> <option value="11" <? if ($_POST['wojewodztwo'] == "11") { echo "Selected"; } ?>>Pomorskie</option> <option value="12" <? if ($_POST['wojewodztwo'] == "12") { echo "Selected"; } ?>>Śląskie</option> <option value="13" <? if ($_POST['wojewodztwo'] == "13") { echo "Selected"; } ?>>Świętokrzyskie</option> <option value="14" <? if ($_POST['wojewodztwo'] == "14") { echo "Selected"; } ?>>Warmińsko-Mazurskie</option> <option value="15" <? if ($_POST['wojewodztwo'] == "15") { echo "Selected"; } ?>>Wielkopolskie</option> <option value="16" <? if ($_POST['wojewodztwo'] == "16") { echo "Selected"; } ?>>Zachodnio-Pomorskie</option> <option value="17" <? if ($_POST['wojewodztwo'] == "17") { echo "Selected"; } ?>>Zagranica</option> </select><br>
Kraj:<br> <input type="text" name="kraj" value="<? echo $_POST['kraj']; ?>"><br>
Data urodzenia (dd.mm.YYYY):<br> <input type="text" name="dzienur" value="<? echo $_POST['dzienur']; ?>"> <input type="text" name="miesur" value="<? echo $_POST['miesur']; ?>"> <input type="text" name="rokur" value="<? echo $_POST['rokur']; ?>"><br>
Strona www :<br> <input type="text" name="strwww" value="<? echo $_POST['strwww']; ?>"><br>
<br><br><input type="submit" name="przycisk" value="Zapisz"><br>
</form> <!-- Koniec formularza rejestracyjnego -->
<!-- 3 --> <? }
?>
Mozna sobie ten skrypt skopiowac do edytora lub pobrac w formie zalacznika. http://www.bluelan.eu/for...tracji/zal1.zip
No i teraz opis : Cały skrypt podzieliłem na części tak żeby każdy mogł sobie zdecydować o tym, która część będzie dla niego przydatna. Sam początek skryptu to :
<?php session_start(); ?>
Jest to dość ważna część strony ponieważ pozwoli nam na zapisywanie do zmiennych globalnych, a konkretnie ciasteczek sesji różnych zmiennych i danych potrzebnych na calej stronie. Należy te trzy linie umieścić na początku każdego pliku na stronie głównej i podstronach. Przyda się to też później ponieważ dane o zalogowaniu użytkownika będą umieszczone też w zmiennych sesji. Za tymi liniami może być juz zwykły html, ale najlepiej jeśli html umieścicie dopiero za linią
<!-- tutaj mozna zaczac wlasna strone w html -------------------------- --> Specjalnie to miejsce tak oznaczylem zeby kazdy wiedzial do czego to sluzy. Zaraz poźniej zaczyna się wyświetlanie regulaminu więc przed tym można umieścić już własny kod html strony. Czyli cały nagłówek, tabele i co tam każdy chce.
Zaraz za trzema wspomnianymi liniami z rozpoczęciem sesji, znajduje się kod do sprawdzania formularzy, które znajdują się w dalszej części całego kodu.
Proszę się przyjrzeć zapisowi. Każdą część kodu opisałem i jeśli dla przykladu chcemy zrezygnować z pola kraj to wystarczy z części sprawdzającej skasować :
# sprawdzenie danej kraj ------------------------------------- $_POST['kraj'] = preg_replace("[ ]", "", $_POST['kraj']); // pozbywamy się spacji $kraj = stripslashes($_POST['kraj']); $kraj = htmlspecialchars(trim($kraj)); # 1 sprawdzamy czy nie za krotkie minimum 3 znaki if (strlen($kraj) < '3' AND $komunikat == '' AND $kraj != '') { $komunikat = 'W kraj wpisz najmniej 3 znaki'; } # 2 sprawdzamy czy dozwolone znaki if ($komunikat == '' AND $kraj != '' AND !ereg("^[[:alnum:]ąĄęĘłŁóÓźŹżŻńŃśŚ-]*$", $kraj)) { $komunikat = 'Nie stosuj w miasto znaków specjalnych'; } # koniec sprawdzenie danej kraj ------------------------------- Czyli od początku :
# sprawdzenie danej kraj ------------------------------------- do końca oznaczonego jako :
# koniec sprawdzenie danej kraj -------------------------------
oraz z części formularza należy w takim wypadku skasować :
Kraj:<br> <input type="text" name="kraj" value="<? echo $_POST['kraj']; ?>"><br> i sprawa załatwiona. Pozostała część kodu będzie działać prawidłowo. Każda część kodu sprawdzającego jest oznaczona komentarzami więc kasujemy całość od komentarza do komentarza jak to podałem w przykładzie.
Jeśli uznamy, że jakiś formularz jest wymagany i musi być zostać wypełniony to : Dla przykladu kraj . 1. sprawdzamy jaką nazwę ma zmienna formularza. To jest dość proste ponieważ po każdym <input type="parametr" stoi parametr name="nazwa" i miedzy cudzysłowia (w tym wypadku nazwa) jest właśnie wpisana nazwa zmiennej. Tak więc w przypadku kraju sprawdzamy jaka tam zmienna stoi i jest to "kraj". Przechodzimy do części sprawdzjącej, która jest opisana w tym wypadku jako :
# sprawdzenie danej kraj ------------------------------------- i zaraz przed końcem wklejamy taki oto skrypt :
if ($komunikat == '' AND $kraj != '') { $komunikat = 'Dana kraj jest wymagana'; } Tak, ze calość będzie wyglądać tak :
# sprawdzenie danej kraj ------------------------------------- $_POST['kraj'] = preg_replace("[ ]", "", $_POST['kraj']); // pozbywamy się spacji $kraj = stripslashes($_POST['kraj']); $kraj = htmlspecialchars(trim($kraj)); # 1 sprawdzamy czy nie za krotkie minimum 3 znaki if (strlen($kraj) < '3' AND $komunikat == '' AND $kraj != '') { $komunikat = 'W kraj wpisz najmniej 3 znaki'; } # 2 sprawdzamy czy dozwolone znaki if ($komunikat == '' AND $kraj != '' AND !ereg("^[[:alnum:]ąĄęĘłŁóÓźŹżŻńŃśŚ-]*$", $kraj)) { $komunikat = 'Nie stosuj w miasto znaków specjalnych'; }
if ($komunikat == '' AND $kraj != '') { $komunikat = 'Dana kraj jest wymagana'; } # koniec sprawdzenie danej kraj ------------------------------- Zamiast $kraj zawsze wpisujemy nazwe zmiennej poprzedzając ją znakiem $.
Jako wymaganymi polami ustawiłem na stałe pole loginu i hasła oraz email, który przyda sie do wysłania listu aktywacyjnego z linkiem aktywacyjnym.
Komunikat błędu można umieścić w dowolnej części strony. Jedynym warunkiem jest to żeby część wyswietlająca komunikat :
<!-- wyswietlanie komunikatu bledu --> <?
if ($komunikat != '') { echo "Blad w formularzu : <br>" .$komunikat ."<br>"; } ?> <!-- koniec wyswietlania komunikatu bledu --> musi być umieszczona za częścią sprawdzającą poprawność wprowadzonych danych do formularzy. Sam kształt wyświetlenia formularza też możemy sobie dowolnie skonfigurować tak żeby pasował do naszego układu strony. Zamist linii :
echo "Blad w formularzu : <br>" .$komunikat ."<br>"; można wkleić własny kod. Zmienna $komunikat zawiera treść komunikatu. Wystarczy nawet samo :
echo $komunikat; zamiast calej tej linii, a przed i po wyswietlić stosowne wymagane przez Was treści.
Kiedy całość rejestracji zakończy się sukcesem można wyświetlić własną stronę o powodzeniu lub komunikat. Robimy to w miejscu zamiast linii :
Rejestracja zakonczyla się sukcesem i wpisujemy html, który nas interesuje. Poprostu w tym miejscu umieszczamy dalszą część naszej strony wraz ze stopką lub poprostu ładujemy własną stronę wpisując :
<? include"nazwa_skryptu.php"; ?>
Pamiętajcie żeby przed pierwszym znakiem <? na calej stronie nie było nawet spacji czy entera.
Po skopiowaniu tego kodu na własny serwerek można spróbować już się zarejestrować. Jeśli wejdziemy do bazy danych i pokażą sie po rejestracji dane, które podaliśmy to znaczy, że całość działa poprawnie. Proponuję na początek zarejestrować siebie i od razu aktywować sobie konto. W tabeli w polu o nazwie prawa mamy zapisane tajemnicze zera. Można się umówić, że każde miejsce w miejscu zera/jedynki będzie oznaczać zezwolenie na stronie na jakąś czynność i tak :
1 miejsce - konto aktywne 2 strona odblokowana 3 może edytowac swoje dane ... Wpisując w te miejsca 0 lub jeden będzie można decydować o tym co może lub nie użytkownik na stronie. Umówmy się na początek, że zero będzie blokować zezwolenie, a jedynka będzie zezwalać na jakąś czynność. Dobrze jest sobie to zapisać w notatniku jako osobny tekst w takiej postaci jak to podałem w przykładzie. Chodzi o to, że będzie to nam dość często potrzebne i po czasie nie zapomnimy która jedynka lub zero za co odpowiada. Umówmy się, że na stałe na potrzeby skryptu zajmę 4 początkowe miejsca :
miejsce opis znaczenie 1. konto aktywowane 1-tak 2. strona odblokowana 1-tak 3. rezerwacja 4. rezerwacja
Tak więc żeby sobie nadać najwyższe uprawnienia należy wszystkie zera w tym polu zamienić na same jedynki. W tym celu należy zalogować się do phpMyAdmin i wejść do naszej bazy danych. Na razie w ten sposób. Później dopiszemy podstronę, która będzie umożliwiać przeglądanie użytkowników i ewentualnie zmieniać im uprawnienia na stronie. Nastepnie trzeba kliknąć w tabele uzytkowników po lewej i na górze w "przeglądaj". Teraz klikamy w ołóweczek przy profilu w którym chcemy zmienić prawa i w polu prawa zamieniamy wszystkie zera na same jedynki. Ważne jest żeby zachować ilość jedynek. Znaczy żeby było tyle samo jedynek co było wcześniej zer. Na koniec naciskamy wykonaj i już jesteśmy administratorami z najwyższymi uprawnieniami.
Hasło w bazie danych jest przechowywane w postaci zakodowanej w md5 więc praktycznie nie jest do złamania. Każdy kto spróbuje przejąć naszą bazę danych to się zdziwi, a przynajmniej bardzo mu utrudnimy złamanie haseł.
Na koniec jeśli chcemy pozbyć się regulaminu ze skryptu, który wpisujemy tutaj :
Regulamin :<br> 1. <br> 2. <br><br> to należy ze skryptu poprostu skasować to :
<!-- 1 --> <? # sprawdzamy czy nacisnieto przycisk akceptujacy regulamin if ($_POST['przyciskr'] != '' AND $_SESSION['rejestracja'] == '') { $_SESSION['rejestracja'] = '1'; }
if ($_SESSION['rejestracja'] == '') {
# wyswietlanie regulaminu w html ?> Regulamin :<br> 1. <br> 2. <br><br> <form name="rejestracja" action="rejestracja.php" method="POST"> <input type="submit" name="przyciskr" value="Akceptuje regulamin"><br> </form> <?php
} else { ?> <!-- 2 --> i to :
<!-- 3 --> <? } ?> az do konca.
W praktyce skrypt działa bardzo prosto wtakiej wersji jak go widać : Na początku sprawdzamy czy zmienna sesji $_SESSION['rejestracja'] zawiera cos w sobie i jeśli jest pusta to znaczy, że regulamin nie został jeszcze przeczytany i zatwierdzony. Strona kończy działanie wyświetlając regulamin. Jeśli naciśniemy guzik to strona skacze do początku spełniając warunek :
if ($_POST['przycisk'] != '' AND $_SESSION['rejestracja'] == '') { więc w tym wypadku wpisujemy do zmiennej sesyjnej naszego regulaminu
$_SESSION['rejestracja'] = '1'; cyfre jeden. Teraz jednak w dalszej części ponieważ wspomniana zmienna sesji jest już wypelniona to zostaje warunek nie spełniony i dlatego zostaje wykonana druga część warunku po :
} else { Dalej jednak zaczyna sie warunek sprawdzający czy został przyciśnięty guzik zapisu. Wiadomo, ze na początku nie, więc cała część warunku sprawdzającego nasze formularze jest pomijana. Na koniec poprostu zostają wyświetlone formularze. Wpisujemy w formularze dane i dalej jeśli przyciśniemy guzik to znowu strona skrypt jest wykonywany od początku. Jednak pewne warunki jakie teraz istnieją i dane jakie zawierają niektóre zmienne wymuszają sprawdzenie formularzy. W zależności co tam zawarliśmy to zmienna $komunikat będzie zawierac odpowiedni tekst co jest łatwo prześledzić w skrypcie. Na koniec po sprawdzeniu formularzy sprawdzamy poprostu czu zmienna komunikatu ($komunikat) jest pusta czy nie. Więc jeśli nie jest pusta to wyświetlamy komunikat, a jeśli tak to znaczy, że nie było błędu i zaczynamy proces przygotowywania i uzupełniania danych o brakujące wpisy do bazy. Np adres IP uzytkownika, czas i data rejestracji. Odpowiedni zapis daty urodzenia. Teraz po przygotowaniu danych poprostu dokonujemy wpisu danych do bazy i po sprawie. Na koniec można wyświetlić odpowiednia stronkę lub komunikat o prawidłowo zakończonym procesie rejestracyjnym w miejscu gdzie to opisałem wcześniej.
Pozostanie nam na później wysłanie email aktywacyjnego do uzytkownika, ale na to zostawiłem specjalne miejsce, które oznaczyłem jako :
# tutaj może być zawarty skrypt wysylajacy list aktywujacy wraz z linkiem aktywujacym Za tą linią umieścimy skrypt do wysyłania listu email w którym się znajdzie tekst dla użytkownika i link aktywacyjny po kliknięciu w który użytkownik potwierdzi adres email i zostanie jego konto automatycznie aktywowane.
Za ostatnia linia skryptu czyli za :
<!-- 3 --> <? } ?> można pisać już w zwykłyum html. Czyli można umieścić tam dalszą część strony, stopkę i to wszystko co będziecie chcieli tam sobie umieścić.
. Usprawniamy skrypt rejestracji. Wyświetlanie na bierząco informacji o zajętości loginu
Mamy już formularz, jest on sprawdzany przy kazdej próbie wysłania, ale póki nie naciśniemy wyślij nie wiemy czy nazwa użytkownika jest wolna czy nie ... A co gdyby dodać sprawdzanie loginu na bierząco ? Ten post pozwala na wprowadzenie zmian, żeby osiągnąć sprawdzanie loginu na bierząco podczas wypełniania formularza.
1. Zapisujemy w głównym katalogu gdzie jest zapisany plik rejestracji "rejestracja.php" taki skrypt pod nazwą "ramka_stala.php" :
<? session_start();
# skrypt sprawdzający na bierząco login w bazie danych $domena = "cyberduck"; if ($_SERVER["HTTP_HOST"] != $domena) { exit; } if ($_GET['sprlogin'] != '') { include"config.php"; $sql = mysql_query("SELECT login FROM uzytkownicy WHERE login='" .$_GET['sprlogin'] ."'"); $dane = list($loginspr) = mysql_fetch_row($sql); mysql_close(); if ($loginspr != '') { $podm_text = 'Nazwa uzytkownika zajeta'; } else { $podm_text = 'Nazwa uzytkownika wolna'; } echo "<script language=\"JavaScript\">"; echo "parent.document.getElementById(\"changeMeLOG\").innerHTML = \"$podm_text\";"; echo "</SCRIPT>"; } ?> Nasz skrypt ponieważ będzie wykonywany w ukrytej ramce na naszej stronie należałoby jakoś zabezpieczyć i takie zabezpieczenie jest właśnie w tym skrypcie. W linii :
$domena = "cyberduck"; zamiast "cyberduck" nalezy wpisać podobnie jak w pliku config.php wlasna domene pod, którą będzie ten skrypt działał. Ja mam wpisany swój nick ponieważ skrypty sprawdzam na serwerze lokalnym na swoim komputerze, a jego nazwa to właśnie "cyberduck" i mogę tej nazwy używać jako domeny lokalnej w sieci. W kazdym innym wypadku może to być "localhost", adres_Ip, ... albo jeśli jest to domena macierzystego serwera to taka wpisujemy. Aby nie było pomyłek oto skrypt wyświetlający nazwę tej domeny :
<? echo $_SERVER["HTTP_HOST"]; ?> Po zapisaniu tego mini skryptu na serwerze pod dowolną nazwą należy go wywołać, a na stronie ukaże się dokladnie to co mamy wpisać właśnie w wymienionej linii. 2. W skrypcie rejestracja.php szukamy formularza w którym wpisujemy login(nazwę uzytkownika) i dokonujemy zmiany . 3. Przed samym :
<!-- Formularz rejestracyjny ---------------------------------------------------------------- html --> Wklejamy taki fragment :
<script type="text/javascript"> function sprawdzlogin() { this.ram_stala.location = 'ramka_stala.php?sprlogin=' + document.rejestracja.login.value }
</script> 4. W samym formularzu dodajemy :
onkeyup="sprawdzlogin()" Rozkaz ten po każdym przycisnięciu przycisku na klawiaturze będąc w okienku loginu w naszej ukrytej ramce będzie wywolywać javascript z powyżej, a on będzie wywoływać akcję w ramce przekazując parametr, który jest umieszczony w formularzu. Tak więc linia formularza powinna wyglądać tak :
<input type="text" name="login" value="<? echo $_POST['login']; ?>" onkeyup="sprawdzlogin()"> 4. Gdzieś trzeba wyświetlić jeszcze informację o tym, że login jest wolny lub zajęty. Dlatego w dowolnym dla nas dogodnym miejscu strony umieszczamy taki fragment:
<div id="changeMeLOG"></div> albo taki :
<i id="changeMeLOG"></i> Miedzy tymi znacznikami będzie wyświetlana informacja o tym czy login jest zajęty czy wolny. 5. No i na koniec nasza ukryta ramka. Można ją umieścić w doiwolnej części strony, ale najlepiej jeśli ją umieścimy na końcu strony. Jeśli mamy już wpisane tagi BODY na stronie to przed samym </body> w części html :
<iframe name="ram_stala" marginwidth="0" marginheight="0" align="top" border="0" frameborder="0" width="1" height="1" src="ramka_stala.php" scrolling="no"></iframe>
I już można sprawdzić działanie skryptu. Podczas wpisywania do okienka loginu cokolwiek we wskazanym miejscu będzie się wyświetlać informacja o tym, że nazwa użytkownika jest wolna, ale jeśli wpiszemy istniejący już login w bazie danych to zostanie wyświetlona informacja o tym, że nazwa użytkownika zajęta. Można się o tym łatwo przekonać ponieważ mamy użytkownika anonymous. Wpisując tę nazwę pokaże się że login jest zajęty.
Jeśli chcemy zmienić treść komunikatu należy to zmienić w skrypcie "ramka_stala.php" w liniach :
$podm_text = 'Nazwa uzytkownika zajeta'; } else { $podm_text = 'Nazwa uzytkownika wolna'; Można poprostu tam umieścić :
$podm_text = 'zajete'; } else { $podm_text = 'wolne';
.
Skrypt logowania na stronie
Logowanie na stronie polega na niczym innym jak na wpisaniu do zmiennej sesyjnej typu $_SESSION[''] jakiejś danej i sprawdzanie na każdej podstronie naszej strony czy w tej zmiennej jest odpowiednia dana. Jeśli tak to zezwalamy na dostęp do pewnej części strony, a jeśli nie to ukrywamy te części strony, które maja być tylko dla zalogowanych. Jak to będzie wyglądać w praktyce pokaże w skryptach i opisze w dalszej części. Dzięki odpowiednim wpisom do bazy danych i zmiennym sesyjnym możemy też zróżnicować uprawnienia. Np użytkownikowi zezwolimy tylko na pisanie wiadomości, przegladanie najnowszych artykulów, ale to wszystko. Do reszty strony mogą mieć dostęp tylko administratorzy.
Przypomne na początku o naszych tajemniczych trzech liniach na początku każdej podstrony:
<?php session_start(); ?> Bezwzględnie musi to być umieszczone na każdej podstronie na której zmienne sesyjne będą mialy znaczenie. Zresztą wrócę do tej części poniewaz dopiszemy tutaj jedną linię.
Skrypt logowania się podzielimy na kilka części. 1. formularz podawania loginu i hasła wstępu 2. skrypt logujący 3. części zezwalające na wyświetlanie części strony dla zalogowanych
Skrypt logujący postanowiłem umieścić w osobnym pliku, który będzie ładowany na każdą podstronę na początku przy pomocy rozkazu php "include". Rozkaz ten działa tak, że zawartość pliku wskazanego przez ten rozkaz jest dodawany do dokumentu w miejscu gdzie jest on umieszczony i jest traktowany tak jakby był dosłownie częścią kodu do, którego jest dodawany.
Sam skrypt postanowiłem tak zorganizować, że będzie on pozwalać na : 1. logowanie na przycisk (czyli zwykłe podanie loginu i hasła oraz przycisnięcie przycisku) 2. wylogowywanie na link 3. logowanie na ciastka. Czyli z pamięcią logowania się na stronie. Czyli jeśli ktoś zaznaczy znacznik autologowanie to login i hasło zostanie zapamiętane w ciasku komputera użytkownika i w ten sposób przy następnym wejściu nastąpi automatyczne zalogowanie się na stronie.
Skrypt logujący będzie też pobierać podstawowe dane z bazy danych o użytkowniku do zmiennych, które będą dostępne na całej stronie.
Formularz Logowania : nazwa pliku : "logowanie.php"
<?php session_start(); include"loguj.php"; ?>
<?php # do której strony ma powrócić kod html po nacisnieciu guzika $strona_logow = 'logowanie.php'; ?>
<!-- Start 1 --> <?php if ($_SESSION['log_uzytkownik'] == '') { ?> <!-- End 1 -->
<!-- formularz logujacy--> <form name="logowanie" action="<? echo $strona_logow; ?>" method="POST" >
Podaj Login :<br> <input name ="logowlogin" type="text" value="<? echo $_POST['logowlogin']; ?>"><br> Podaj Hasło :<br> <input name ="logowhaslo" type="password" value="<? echo $_POST['logowhaslo']; ?>"><br> Autologowanie : <br> <input type='CHECKBOX' name='logowznacz' value='1' <? if ($_POST['logowznacz'] == '1') { echo " checked"; } ?>><br><br> <input name="logowprzyc" type="submit" value="Loguj">
</form>
<!-- Start 2 --> <?php } ?> <!-- End 2 -->
<!-- Wyswietlenie linka do wylogowywania --> <? if ($_SESSION['log_uzytkownik'] != '') { echo '<a href="?wyloguj=wyloguj">Wyloguj</a>'; } ?> <!-- Koniec Wyswietlenie linka do wylogowywania -->
<!-- Te linie do konca można skasowac --> <? echo '<br><br>Login sesji : -' .$_SESSION['log_uzytkownik'] .'-<br>'; echo 'Id użytkownika w bazie : -' .$_SESSION['id_uz'] .'-<br>'; echo 'Prawa użytkownika : -' .$_SESSION['log_prawa'] .'-<br>'; echo 'Ustawienia wlasne użytkownika -' .$ustaw_wlasne .'-<br>'; ?>
Umieśćmy na początku każdego dokumentu naszej strony i tutaj właśnie mała zmiana. Jeśli chcemy logować użytkownika na każdej postronie/ sprawdzać jakie ma on uprawnienia to do wcześniejszego session_start(); należy dodać linie :
include"loguj.php"; . Po tej zmianie sam początek strony i podstron będzie wyglądać tak :
<?php session_start(); include"loguj.php"; ?> czyli tak jak w skrypcie "logowanie.php" . Skrypt loguj.php będzie dbał o zalogowanie się użytkownika na przycisk albo na ciastko i dodatkowo sprawdzał czy użytkownik jest zalogowany, a jeśli tak to pobierze z bazy danych niektóre dane do odpowiednich zmiennych, które już będą dostępne na całej stronie i właśnie dlatego te pierwsze linie są tak ważne na każdej podstronie.
I tak umawiamy się już teraz, że zmienna :
$_SESSION['log_uzytkownik'] będzie zawierać login użytkownika zalogowanego na stronie. Zmienna :
$_SESSION['log_prawa'] będzie zawierać uprawnienia użytkownika zalogowanego na stronie. Zmienna :
$_SESSION['id_uz'] będzie zawierać id użytkownika zalogowanyge na stronie. Zmienna $_SESSION['log_uzytkownik'] będzie w takim razie dostarczać nam dwóch informacji. Login użytkownika i co ważne jeśli jest ta zmienna wypełniona czym kolwiek to znaczy, że użytkownik jest zalogowany, a jeśli jest pusta to znaczy, że użytkownik jest wylogowany.
Oba pliki można sobie pobrać z pod linka : http://www.bluelan.eu/for...tracji/zal2.zip W środku znajdziecie plik logowanie.php i loguj.php . Ten drugi należy zapisać w głównym katalogu strony. Nie będę go opisywać, ale oczywiście można do niego zajrzeć.
Opis logowanie.php : Początek strony podstrony już znamy i powtórze to jeszcze raz, aż do znudzenia Linie :
<?php session_start(); include"loguj.php"; ?> należy umieścić bezwzględnie na poczatku każdej podstrony naszego serwisu.
Dalej mamy taki kawałek :
<?php # do której strony ma powrócić kod html po nacisnieciu guzika $strona_logow = 'logowanie.php'; ?> Jest to potrzebne po to żeby skrypt wiedział do której podstrony ma wrócić strona po przyciśnięciu guzika "loguj". To jest dość ważne bo formularz logowania można umieścić np w nagłówku strony/banerze i dzięki temu będzie można zalogować się z każdej podstrony, ale kiedy naciśniemy "Loguj" to można zrobić tak żeby wrócić na te samą podstronę a nie na stronę główną. Dlatego na początku każdej podstrony należy umieścić ten kawałek kodu, ale miedzy znaki ' ' wpisując nazwę pliku w którym umieszczamy te linie kodu. Czyli jeśli jesteśmy na podstronie index.php to ten kawałek kodu zaraz za :
<?php session_start(); include"loguj.php"; ?> może wyglądać tak :
<?php # do której strony ma powrócić kod html po nacisnieciu guzika $strona_logow = 'index.php'; ?> a jeśli jest to dokument "podstronax.php" to ma to wyglądać tak :
<?php # do której strony ma powrócić kod html po nacisnieciu guzika $strona_logow = 'podstronax.php'; ?> i dzięki temu będąc na tej podstronie możemy się zalogować wracając na te samą podstronę. Poprostu skrypt sam o to zadba. Jeśli nam na tym nie zależy to można tylko przy logowaniu wpisać nazwe pliku strony głównej i zawsze kiedy naciśnie się "Loguj" strona zawsze powróci do strony głównej.
Dalej w skrypcie już mamy formularz, ale zaraz przed nim i zaraz po nim mamy coś takiego :
<!-- Start 1 --> <?php if ($_SESSION['log_uzytkownik'] == '') { ?> <!-- End 1 -->
<!-- Start 2 --> <?php } ?> <!-- End 2 --> To są warunki pozwalające na pokazanie czegoś jeśli użytrkownik jest wylogowany. Jak widzicie między te kawałki kodów jest umieszczony formularz logowania. Znaczy to, że pokaże sie on tylko wtedy kiedy użytkownik jest wylogowany na stronie.
Sam formularz to nic wielkiego. Poprostu kilka pól typu input z kawałkami kodów w php wpisanych w value po to, żeby jeśli coś wpiszemy i naciśniemy "Loguj" to jeśli logowanie się nie powiedzie to dane wpisane zostaną w polach i można je poprawić.
Następną częścia naszej mini podstrony jest link wylogowujący, ale jest on wpisany między linie warunkowe, które pozwalają na pokazanie się tego linka tylko wtedy kiedy użytkownik jest zalogowany:
<!-- Wyswietlenie linka do wylogowywania --> <? if ($_SESSION['log_uzytkownik'] != '') { echo '<a href="?wyloguj=wyloguj">Wyloguj</a>'; } ?> <!-- Koniec Wyswietlenie linka do wylogowywania --> Działanie jak wspomniałem wcześniej jest bardzo proste i w dosłownym tłumaczeniu na język ludzki znaczy to tyle co : jeśli zmienna $_SESSION['log_uzytkownik'] jest różna od pustego łańcucha znaków to wykonaj to co jest między klamrami {}, a tam jest wyświetlenie linka z dodaniem zmiennej $wyloguj z wartością wyloguj. Zapisanie w ten sposób linka : "?wyloguj=wyloguj" gwarantuje nam powrót zawsze do tej samej podstrony na, której jesteśmy aktualnie. Reszte już załatwi skrypt loguj.php . Czyli jeśli w tej zmiennej znajdzie wartość "wyloguj" to skasuje wszystkie zmienne sesyjne wraz z ciastkiem i przy ponownym wejściu na strone nie zostaniemy już zalogowani.
Na podstawie tego można dopisać warunek, który pozwoli wyświetlić jakąś zawartość dla użytkownika zalogowanego ... Przy formularzach mialiśmy sytuacje dla użytkownika wylogowanego, a tutaj macie fragment kodów miedzy które można zbudować sobie fragment strony dla użytkownika zalogowanego pisząc poprostu w htrml. :
<!-- Start 3 --> <?php if ($_SESSION['log_uzytkownik'] != '') { ?> <!-- End 3 -->
<!-- Start 4 --> <?php } ?> <!-- End 4 -->
Aby sprawdzić działanie skryptu można przetestować go tak : 1. Zalogować się na tej ministroniczce bez zaznaczania autologowania. Po zalogowaniu sie widać na stronce link i zmienne wraz z ich wartośćiami jakie są zapamietane w nich. Nie klikać odświerz tylko bez zamykania tej strony wywołać ten sam adres ponownie. Jeśli nic się nie zmieni w wyglądzie to znaczy, że logowanie działa poprawnie. 2. Kliknąć "wyloguj". Na stronce ponownie pokaże się formularz logowania. 3. Zalogować się z zaznaczeniem pola autologowanie. Teraz mozna zamknąć strone i po powrocie na stronę skrypt nas zaloguje automatycznie. 4. Po kliknięciu w "wyloguj" już po powrocie się nie zalogujemy. 5. W bazie danych w tabeli uzytkownicy w polu "prawa" użytkownika na którego się logujemy możemy zmienić drugą jedynkę na 0 i zapisać zmiany. Teraz próba zalogowania się na stronie niepowiedzie się ponieważ umówiliśmy się, że drugi znak w polu prawa będzie odpowiedzialny za blokade strony. Dodatkowo jeśli strona jest zablokowana to w zmiennej $komunikat_blokady znajdziemy komunikat "'Strona zablokowana". Możemy to wykorzystać na kilka sposobów : A. możemy nic z tym nie robić B. możemy jedynie wykorzystać to do wylogowania użytkownika. Jeśli na moment zablokujemy stronę czyli wpiszemy zero użytkownik przy zmianie podstrony zostanie wylogowany. C. możemy wpisywać w głównej części strony komunikat, że strona została użytkownikowi zablokowana i aby tego dokonać należy wkleić taki skrypt :
<? if ($komunikat_blokady == 'Strona zablokowana') { ?> tutaj wklejamy to co chcemy i jak chcemy wyświetlić <? } ?> Można w tej drugiej części czyli :
<? } ?> wpisać zakończenie wykonywania skryptu :
<? exit; } ?> i w ten sposób przerwać dalsze wyświetlanie strony. Oczywiście wtedy zamiast linii :
tutaj wklejamy to co chcemy i jak chcemy wyświetlić należy wpisać wyświetlenie komunikatu jaki chcecie , a dalej zakonczenie strony czyli stopkę i normalnie wszystko to co powinno się znależć dalej. Dzięki temu użytkownik nie wejdzie po zalogowaniu na żadną postronę bo zawsze będzie widoczny komunikat blokady obojetnie gdzie by nie kliknął
No i skrypt logowania mamy załatwiony.
Podam jeszcze na koniec jak można wykorzystać w przyszłości te pozostałe jedynki i zera. Jeśli już zdecydowaliście który znak za co będzie odpowiadać i na co będzie zezwalać to np jeśli chcecie zezwolić na stronie na coś za co odpowiada 5 znak, a konkretnie na tym miejscu jedynka w polu prawa to wystarczy napisać coś takiego :
<? if (substr($_SESSION['log_prawa'], 4, 1) == '1') { ?> tutaj treść na jaką zezwalamy <? } ?> Trzeba pamiętać, że rozkaz substr liczy znaki od zera a nie od jeden i dlatego jeśli jest to 5 znak to wpisujemy 4, jeśli 7 to 6, itd. W miejscu jedynki w rozkazie substr zawsze stoi jeden. Pozozstałe zmienne dostępne na całej stronie to : $_SESSION['log_uzytkownik'] - nick użytkownika zalogowanego, jeśli wylogowany to pusta $_SESSION['log_prawa'] - prawa pobrane z bazy danych czyli ten ciąg jedynek i zer. $_SESSION['id_uz'] - id użytkownika zalogowanego w bazie danych $ustaw_wlasne - usatwienia własne użytkownika zalogowanego, na takiej samej zasadzie jak prawa $email_str - email użytkownika zalogowanego $_SESSION['ilosc_odwiedzin'] - zawiera ilosc odwiedzin/logowan na stronie
Aby wyświetlić na stronie dowolną z tych zmiennych można to zrobić tak :
<? echo $_SESSION['log_uzytkownik']; ?> czyli podobnie jak to jest na końcu skryptu logowanie.php .
Pamiętajcie, że żeby się możnabylo zalgować testowo trzeba zmienić prawa w bazie danych przy użytkowniku na, którego sie logujemy. Jak to zrobić ? Opisywałem to wcześniej. Później dopiszemy do tego panel, ale na tym etapie trzeba to zrobić z poziomu phpMyAdmin.
.
Skrypt do wysyłania listu aktywacyjnego i skrypt aktywacyjny.
Na początek mała informacja dla tych którzy już ściągneli albo skopiowali sobie skrypt z opisu. Jakto przy pisaniu skryptow pewne rzeczy wychodzą w trakcie pisania. I tak tutaj też było. Do skryptu wprowadziłem jeden warunek sprawdzający ilość znaków wprowadzanych w dacie urodzenia. W czasie zapisu to nie będzie przeszkadzać. Kazdy może podać dowolna date urodzenia : 1.3.1978 31.10.1968 ... i w takiej formie będą zapisywane te daty w bazie danych : 197831 19681031 Od razu można zauważyć, że to jest błąd ponieważ w drugim wypadku jest łatwo oddzielić dni, miesiące i rok urodzenia, ale w pierwszym przypadku może to być problem. Np chcemy na stronie wyświetlić kto ma urodziny ... Będzie to pewną trudnością. Dlatego przed zapisem trzeba sprowadzić dni i miesiące do zapisu dwucyfrowego, a rok do czterocyfrowego ... Wszystkie pozostałe daty na stronie i bazie są zapisywane w postaci znacznika czasu. Znacznik czasu to jest ilość sekund, jaka upłynela od 1.1.1978 roku, ale niestety w wypadku daty urodzenia nie da się jeszcze wprowadzać w ten sposób daty do bazy, dlatego trzeba w taki sposób jak napisałem to tutaj. Prosze prześledzić skrypt rejestracji i wprowadzić zmiany. Ja już takowe wprowadziłem do załączników i w opisie więc ktoś kto zacznie teraz dopiero czytać ten opis będzie na bierząco.
Dodatkowo w skrypcie rejestracji wprowadziłem małe udogodnienie i dodałem jedną daną. Posłuży nam ta zmiana do linka aktywacyjnego w liście aktywacyjnym. Chodzi o te linie :
$dzienur = substr($dzienur+100,1); $miesur = substr($miesur+100,1); $rokur = substr($rokur+10000,1); $znacznikur = $rokur .$miesur .$dzienur; $kod_aktywacyjny = time() .$login .$ip_uzytk; $kod_aktywacyjny = md5($kod_aktywacyjny); include"config.php"; mysql_query("INSERT INTO uzytkownicy VALUES ( NULL, '$login', '$mdhaslo', '000000000000000000000000000000', '0000000000', '$ip_uzytk', '" .time() ."', '0', '$email', '$skype', '$gg', '$plec', '$miasto', '$wojewodztwo', '$kraj', '$znacznikur', '$strwww', '0', '', '', '$zainteres', '0', '$kod_aktywacyjny', '')"); mysql_close(); Tutaj skopiowalem nieco więcej i jest to fragment z rejestracja.php czyli ze skryptu rejestracyjnego. Mam nadzieje, że wiecej zmian nie będzie. Konkretnie chodzi mi o dwie linie :
$kod_aktywacyjny = time() .$login .$ip_uzytk; $kod_aktywacyjny = md5($kod_aktywacyjny); Liczymy jakiś unikatowy kod aktywacyjny i dobrze jeśli jeśli będzie nie do złamania. Tak więc postanowiłem go policzyć dodając do siebie : znacznik czasu + login użytkownika + ip użytkownika . Calość na koniec jest zakodowana przy pomocy md5 dzieki czemu uzyskujemy np coś takiego : 074ac44a46a1848cca0f44253ef33802 co jest na koniec zapisywane do bazy danych :
'$zainteres', '0', '$kod_aktywacyjny', '')"); mysql_close(); Teraz wystarczy wysłać list aktywacyjny i zbudować stronę która będzie aktywować konto użytkownika po podaniu prawidłowego kodu aktywacyjnego.
Wysłanie listu aktywacyjnego : Trzeba się zastanowić na jaką metodę wysłania listu się zdecydujemy. Nie wszystkie serwery pozwalają na wysłanie listu z własnego serwera i dlatego przedstawię tutaj takie dwie metody : 1. przy pomocy rozkazu php 2. przy pomocy dodatkowego skryptu.
Najpierw jednak budujemy list jaki zostanie wysłany. Szukamy w skrypcie rejestracji takiego oto miejsca :
# tutaj może być zawarty skrypt wysylajacy list aktywujacy wraz z linkiem aktywujacym i zaraz za tą linią będziemy umieszczać skrypt do wysłania listu.
Najpierw budujemy treść i wszystkie dane jakie są potrzebne do wysłania listu :
# tutaj może być zawarty skrypt wysylajacy list aktywujacy wraz z linkiem aktywujacym $domena_strony = 'cyberduck'; // domena strony, adres bez http:// np "www.strona.pl" $temat_wid = "rejestracja na stronie"; // tutaj wpisujemy temat jaki ma być widoczny w liscie $from = "jakis_adres@domena.pl"; // tutaj umieszczamy adres strony # tekst email $tekst_em = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ."\n" ."Witam serdecznie $login" ."\n\n" ."Ktoś lub Ty zarejestrował się na stronie nazwa_strony" ."\n" ."podając ten adres e-mail jako kontaktowy." ."\n" ."Poniżej widnieje link aktywacyjny, który należy nacisnąć aby" ."\n" ."zakończyć proces aktywacji :" ."\n" ."http://$domena_strony/aktywacja.php" ."?kodaktyw=$kod_aktywacyjny" ."\n\n" ."Jeśli uważasz, że to jest zwykły spam lub zaistniała pomyłka" ."\n" ."wyślij ten list do administracji strony." ."\n\n" ."" ."\n" ."Pozdrowienia, Administracja" ."\n" ."~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ."\n"; $naglowek = "Content-Type: text;charset='iso-8859-2'"; $tematem = "=?iso-8859-2?B?".base64_encode($temat_wid)."?="; Czyli do $domena_strony wpisujemy domene pod jaka działa strona, a dokładniej adres z pod jakiego będzie wysłany list. Później w tekście email jest ten adres składany tak, że jego kształt wynikowy będzie wyglądać tak :
http://www.domena.pl/aktywacja.php?kodaktyw=j2h3jh2kj34hkj234jlkj234 . Dlatego należy wpisać tylko i wyłącznie domene. W liście ten link będzie automatycznie zamieniony na link klikalny i kliknięcie w ten link zostaniemy skierowani pod wskazany adres z podaniem kodu aktywacyjnego do zmiennej za pomocą metody GET czyli w adresie strony. $temat_wid - wpisujemy temat jaki będzie widniał w treści wiadomości ... $from - wpisujemy adres z pod jakiego będzie list wysłany $tekst_em - to poprostu tekst email. Na koniec jest budowany nagłówek i zawarte jest kodowanie dzięki czemu w liście też będa widoczne polskie znaki.
Teraz jeśli chcemy wysłać wiadomość przy pomocy naszego rodzimego serwera to wystarczy dalej dopisac :
@mail($email, $tematem, $tekst_em, $naglowek); I już. Email zostanie wysłany. Czyli całość będzie wyglądać tak :
# tutaj może być zawarty skrypt wysylajacy list aktywujacy wraz z linkiem aktywujacym $domena_strony = 'cyberduck'; // domena strony, adres bez http:// np "www.strona.pl" $temat_wid = "rejestracja na stronie"; // tutaj wpisujemy temat jaki ma być widoczny w liscie $from = "jakis_adres@domena.pl"; // tutaj umieszczamy adres strony # tekst email $tekst_em = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ."\n" ."Witam serdecznie $login" ."\n\n" ."Ktoś lub Ty zarejestrował się na stronie nazwa_strony" ."\n" ."podając ten adres e-mail jako kontaktowy." ."\n" ."Poniżej widnieje link aktywacyjny, który należy nacisnąć aby" ."\n" ."zakończyć proces aktywacji :" ."\n" ."http://$domena_strony/aktywacja.php" ."?kodaktyw=$kod_aktywacyjny" ."\n\n" ."Jeśli uważasz, że to jest zwykły spam lub zaistniała pomyłka" ."\n" ."wyślij ten list do administracji strony." ."\n\n" ."" ."\n" ."Pozdrowienia, Administracja" ."\n" ."~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ."\n"; $naglowek = "Content-Type: text;charset='iso-8859-2'"; $tematem = "=?iso-8859-2?B?".base64_encode($temat_wid)."?="; @mail($dana3, $tematem, $tekst_em, $naglowek);
Teraz sposób drugi - trudniejszy ... Pierwsza część będzie wyglądać identycznie, ale druga będzie wyglądać nieco inaczej. Wkleje caly skrypt, a później go opiszę :
# tutaj może być zawarty skrypt wysylajacy list aktywujacy wraz z linkiem aktywujacym $domena_strony = 'cyberduck'; // domena strony, adres bez http:// np "www.strona.pl" $temat_wid = "rejestracja na stronie"; // tutaj wpisujemy temat jaki ma być widoczny w liscie $from = "jakis_adres@domena.pl"; // tutaj umieszczamy adres strony # tekst email $tekst_em = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ."\n" ."Witam serdecznie $login" ."\n\n" ."Ktoś lub Ty zarejestrował się na stronie nazwa_strony" ."\n" ."podając ten adres e-mail jako kontaktowy." ."\n" ."Poniżej widnieje link aktywacyjny, który należy nacisnąć aby" ."\n" ."zakończyć proces aktywacji :" ."\n" ."http://$domena_strony/aktywacja.php" ."?kodaktyw=$kod_aktywacyjny" ."\n\n" ."Jeśli uważasz, że to jest zwykły spam lub zaistniała pomyłka" ."\n" ."wyślij ten list do administracji strony." ."\n\n" ."" ."\n" ."Pozdrowienia, Administracja" ."\n" ."~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ."\n"; $naglowek = "Content-Type: text;charset='iso-8859-2'"; $tematem = "=?iso-8859-2?B?".base64_encode($temat_wid)."?=";
function wyslij($serwerem,$uzytkownikem,$hasloem,$emailem,$doem,$tematem,$zawartoscem,$naglowek) { global $wynikem; # kodowanie w standardzie base64 $uzytkownikem = base64_encode($uzytkownikem); $hasloem = base64_encode($hasloem); # nawizanie połączenia z serwerem SMTP $polaczenieem = fsockopen($serwerem,25); # sprawdzanie dostępności serwera $sprem[0] = fgets($polaczenieem,1000); # sekwencja: # 1. polecenie uytkownika - fputs # 2. odpowiedź serwera - fgets - idzie do zmiennej $spr do późniejszej analizy # powitanie serwera fputs($polaczenieem,"HELO $ip\r\n"); $sprem[1] = fgets($polaczenieem,1000); # autoryzacja fputs($polaczenieem,"AUTH LOGIN\r\n"); $sprem[2] = fgets($polaczenieem,1000); fputs($polaczenieem,$uzytkownikem."\r\n"); $sprem[3] = fgets($polaczenieem,1000); fputs($polaczenieem,$hasloem."\r\n"); $sprem[4] = fgets($polaczenieem,1000); # polecenie wysyłki fputs($polaczenieem,"MAIL FROM: <$emailem>\r\n"); $sprem[5] = fgets($polaczenieem,1000); fputs($polaczenieem,"RCPT TO: <$doem>\r\n"); $sprem[6] = fgets($polaczenieem,1000); # wpisywanie treci i nagłówków? fputs($polaczenieem,"DATA\r\n"); $sprem[7] = fgets($polaczenieem,1000); fputs($polaczenieem,"Subject: $tematem\r\n"); fputs($polaczenieem,"From: nazwa_strony<email_strony> \n" .$naglowek ." \r\n"); // tutaj nalezy zmienic fputs($polaczenieem,"To: <$doem>\r\n"); fputs($polaczenieem,"\r\n"); fputs($polaczenieem,"$zawartoscem\r\n"); fputs($polaczenieem,".\r\n"); $sprem[8] = fgets($polaczenieem,1000); fputs($polaczenieem,"quit\r\n"); //koniec poczenia $sprem[9] = fgets($polaczenieem,1000); # analiza kodów odpowiedzi serwera SMTP za pomoc ereg # i przypisanie zmiennej $wynik odpowiedniego komunikatu $wynik = 0; if (ereg('220',$sprem[0]) && ereg('250',$sprem[1]) && ereg('334',$sprem[2]) && ereg('334',$sprem[3]) && ereg('235',$sprem[4]) && ereg('250',$sprem[5]) && ereg('250',$sprem[6]) && ereg('354',$sprem[7]) && ereg('250',$sprem[8]) && ereg('221',$sprem[9])) { $wynikem = 1; // dobrze } else { $wynikem = 0; // zle } } # ------------------------------------------------------------------------------------------- $ema_str_smt = 'smtp.poczta.onet.pl'; // smtp serwera $ema_str_em = ''; // adres email serwera $ema_str_has = ''; // haslo do serwera pocztowego @wyslij($ema_str_smt,$ema_str_em,$ema_str_has,$ema_str_em,$email,$tematem,$tekst_em,$naglowek); Jak wspomnialem w pierwszej części budujemy nagłówki, temat i treść strony. Następnie jest deklarowana funkcja, która połączy się ze wskazanym serwerem pocztowym z niego wyśle list aktywacyjny. Na końcu wpisujemy potrzebne dane do połączenia się z serwerem i wywołujemy skrypt . Żeby jednak to przetestować trzeba skonfigurowac całość i jak poprzednio w pierwszych liniach tak samo wpisujemy wszystko jak poprzednio, a dodatkowo w liniach :
$ema_str_smt = 'smtp.poczta.onet.pl'; // smtp serwera $ema_str_em = ''; // adres email serwera $ema_str_has = ''; // haslo do serwera pocztowego podajemy : $ema_str_smt - adres serwera pocztowego. Ja korzystam z poczty onetu na kilku stronach i skrypt działa mi do dzisiaj. $ema_str_em - adres email z pod którego wysyłamy list, a dokładniej to jest login do konta pocztowego. Na onecie to jest adres email. $ema_str_has - hasło do serwera pocztowego. Jest jeszcze jedna linia do konfiguracji :
fputs($polaczenieem,"From: nazwa_strony<email_strony> \n" .$naglowek ." \r\n"); // tutaj nalezy zmienic w samej funkcji wysyłającej. Dokładnie zamiast "nazwa_strony" wpisujemy nazwe strony np w formacie :
www.strona.pl zamiast <email_strony> wpisujemy adres email jaki pojawi sie we właściwościach strony:
<adres_email@op.pl> .
Teraz można już testować skrypt rejestracji do woli. Na adres podany w formularzu powinien przyjść adres aktywacyjny wraz z odpowiednim tekstem. Przetestujcie, a ja już się biorę za pisanie skryptu aktywującego ...
.
Skrypt aktywacyjny z linka aktywacyjnego dostarczonego przy pomocy listu
Skrypt zapisujemy pod nazwą "aktywacja.php" :
<?php session_start(); include"loguj.php"; ?>
<?php $aktywacja = '';
include"config.php"; $data_pzredawnienia = '345600'; // w sekundach 345600 to jest 4 dni $data_pzredawnienia = (time() - $data_pzredawnienia); $db = mysql_query("DELETE FROM uzytkownicy WHERE (data_rej<'$data_pzredawnienia' AND prawa LIKE '00%')");
if ($_GET['kodaktyw'] != '') { $sql = mysql_query("SELECT id, login, prawa FROM uzytkownicy WHERE pole_doda1='" .$_GET['kodaktyw'] ."'"); $dane = list($id_baz,$login_baz,$prawa_baz) = mysql_fetch_row($sql); if ($login_baz != '') { $aktywacja = "1"; $prawatemp = substr($prawa_baz, 2); $prawatemp = '11' .$prawatemp; $db = mysql_query("UPDATE uzytkownicy SET prawa='$prawatemp', pole_doda1='' WHERE id='$id_baz'"); } else { $aktywacja = "0"; } } mysql_close(); ?>
<!-- wyswietlenie komunikatu jeśli aktywacja przebiegla poprawnie --> <?php if ($aktywacja == '1') { ?>
aktywacja przebiegla poprawnie<br> mozesz sie juz zalogowac
<?php } ?> <!-- koniec wyswietlenie komunikatu jeśli aktywacja przebiegla poprawnie -->
<!-- wyswietlenie komunikatu jeśli aktywacja nie powiodla sie --> <?php if ($aktywacja == '0') { ?>
aktywacja nie powiodla sie
<?php } ?> <!-- koniec wyswietlenie komunikatu jeśli aktywacja nie powiodla sie -->
<!-- wyswietlenie komunikatu jeśli nie podano w ogóle kodu aktywacyjnego --> <?php if ($aktywacja == '') { ?>
ta strona sluzy jedynie do aktywacji
<?php } ?> <!-- koniec wyswietlenie komunikatu jeśli nie podano w ogóle kodu aktywacyjnego -->
Załącznik : http://www.bluelan.eu/for...tracji/zal3.zip
Jak widzicie sprawa jest niezwykle prosta. Stronę jak zwykle zaczynamy naszymi stalymi liniami rozpoczęcia sesji i skryptem logowania. Jeśli jest użytkownik zalogowany można to wykorzystać do przekierowania go na inna podstronę. Można to zrobić umieszczając zaraz za tymi liniami :
<? if ($_SESSION['log_uzytkownik'] != '') { include"skrypt.php"; exit; } ?> .
Dalej mamy skrypt, który sprawdza link aktywacyjny i jeśli znalazł w bazie pasujący kod aktywacji to pobiera dane z bazy tyczące się loginu i id użytkownika do którego ten kod prowadzi. Dalej zmienia początkowe znaki w polu prawa na 11. Jak pamiętamy to pierwszy znak odpowiada za aktywacje konta, a drugi znak odpowiada za odblokowanie strony. Tę część skryptu można umieścić na początku strony, a dalej jej dalsza część . Przy wyjściu ze skryptu mamy dodatkową zmienną $aktywacja .
Jeśli jest w niej zapisana 1 przy wyjściu to znaczy, że aktywacja zakończyła się pozytywnie. Jeśli jest w niej 0 to znaczy, że aktywacja przebiegła negatywnie. Natomiast ta zmienna pusta daje nam sygnał o tym, że ktoś wszedł na stronę bez podania linka aktywacyjnego.
Można to wykorzystać do wyświetlania w dowolnej części strony odpowiedniego komunikatu w naszym aktywacja.php i do tego właśnie służą dalsze linie. Np to :
<!-- wyswietlenie komunikatu jeśli aktywacja przebiegla poprawnie --> <?php if ($aktywacja == '1') { ?>
aktywacja przebiegla poprawnie<br> mozesz sie juz zalogowac
<?php } ?> <!-- koniec wyswietlenie komunikatu jeśli aktywacja przebiegla poprawnie --> wyświetli nam komunikat kiedy aktywacja na stronie się powiedzie. Wystarczy zmienić treść :
aktywacja przebiegla poprawnie<br> mozesz sie juz zalogowac na dowolną inną jaką sobie ustalimy wraz z innym kodem w html. Wszystko co będzie stać w tym miejscu pojawi się wyłącznie w przypadku kiedy aktywacja się powiedzie. Ta sama zasada tylko przy innych warunkach tyczy się w pozostałych przypadkach i możemy sami zdecydować o tym co z tym zrobić.
W skrypcie zawarłem też jedną fuknckję, która może się przydać . Czasami bywa z różnych względów, że użytkownicy nie aktywują konta bo nie dotarł do nich list, bo podali błędny adres e-mail, bo im się nie chciało i zrezygnowali ... Takie konta więc bez tej funkcji będą wisieć w nieskończoność. Dlatego w skrypcie jest cos takiego :
$data_pzredawnienia = '345600'; // w sekundach 345600 to jest 4 dni $data_pzredawnienia = (time() - $data_pzredawnienia); $db = mysql_query("DELETE FROM uzytkownicy WHERE (data_rej<'$data_pzredawnienia' AND prawa LIKE '00%')"); W linii :
$data_pzredawnienia = '345600'; // w sekundach 345600 to jest 4 dni Ja wpisałem odpowiednią ilość sekund określającą czas na aktywacje konta 4 dni od momentu zarejestrowania się, ale każdy może sobie to zmienić na dowolną inną wartość. Jeśli użytkownik w tym czasie nie aktywuje konta, albo jeśli administrator strony nie aktywuje konta to przestanie ono istnieć.
|
|