ďťż

.

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']; ?>">&nbsp;&nbsp;&nbsp;<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ć.



 

 

 

 

 

 

 

 

 

 

 

 

   
 
  [PHP]Prosty system rejestracji i logowania.
WoM2 - Wszystko o Metin2