Skocz do zawartości
[GIVEAWAY] Nóż survivalowy | Doppler ×
[GIVEAWAY] Bowie Knife | Gamma Doppler ×
Damianciu

Rejestracja & Logowanie na sesjach

Rekomendowane odpowiedzi

  • Inwestor
Opublikowano

Jak możemy stworzyć rejestrację oraz logowanie. Dane przetrzymywać będziemy w bazie danych. Hasła kodowane są w md5, dzięki czemu hasła są nie do odczytu.

A więc zaczynamy!

No więc, najpierw tworzymy naszą tabelę, gdzie będziemy przechowywać dane o użytkownikach:

 

    CREATE TABLE `users` (
      `id` mediumint(8) NOT NULL AUTO_INCREMENT,
      `username` varchar(25) NOT NULL,
      `password` varchar(32) NOT NULL,
      `email` varchar(255) NOT NULL,
      PRIMARY KEY (`id`));



Jak widać w bazie będziemy mieć:
id każdego z naszych użytkowników – ID nadawane jest automatycznie, w związku z czym nie ma możliwości, aby jakieś ID było przypisane do kilku userów 
username – czyli nick naszego usera (max. 25 znaków),
password – zakodowane w md5 hasło usera,:tongue:
email – czyli mail usera :default_ohmy:

Najpierw w naszym pliku (u mnie index.php) umieszczamy dane umożliwiające skryptowi połączyć się z naszą bazą. Otwieramy również naszą sesję, umożliwiającą logowanie się:

 

    <?php
    mysql_connect('localhost','root','password')
     
            or die('Nieudane połaczenie z baza danych...');
     
    mysql_select_db('name_database')
     
            or die('Nie udało się wybrać bazy danych...');
    session_start();



Następnie tworzymy ciało naszego dokumentu naszej REJESTRACJI – czyli pola input pozwalające wprowadzić dane do logowania (oczywiście widoczne tylko dla niezalogowanych):

 

    if ( isset($_GET['action']) && htmlspecialchars($_GET['action']) == 'register' && $_SESSION['nazwa'] == NULL && !isset($_POST['submit']) )
    {
        $body = '<form action="index.php?action=register" method="post"><table><tr><td>Login: <input type="post" name="login" maxlength="25"></td></tr><tr><td>Adres E-Mail: <input type="post" name="email" maxlength="255"></td></tr><tr><td>Haslo: <input type="password" name="password_first" maxlength="35"></td></tr><tr><td>Powtorz haslo: <input type="password" name="password_second" maxlength="35"></td></tr><tr><td><input type="submit" name="submit" value="Zarejestruj mnie!"></td></tr></table></form>';
        echo $body;
        exit;
    }



W kolejnym kroku już trochę więcej roboty – musimy przefiltrować dane wprowadzone przez użytkownika i sprawdzić czy dane są w ogóle poprawne.
W pierwszym warunku sprawdzamy czy pole z loginem, mailem, hasłem nie są puste, czy nick nie jest taki sam jak hasło, czy nick jest dłuższy nic 4 znaki, czy hasło jest dłuższe niż 6 znaków, czy adres email jest wpisany poprawnie oraz czy nazwa użytkownika nie zawiera żadnych znaków poza A-Z / a-z / 0-9 / _ / [SPACJA]:

 

    else if ( isset($_GET['action']) && htmlspecialchars($_GET['action']) == 'register' && $_SESSION['nazwa'] == NULL && isset($_POST['submit']) )
    {
        $login = htmlspecialchars($_POST['login']);
        $email = htmlspecialchars($_POST['email']);
        $password_first = md5($_POST['password_first']);
        $password_second = md5($_POST['password_second']);
        if ( !empty($login) && !empty($email) && md5($_POST['login']) !== $password_first && !empty($_POST['password_first']) && !empty($_POST['password_second']) && $password_first == $password_second && filter_var($email, FILTER_VALIDATE_EMAIL) && strlen($login) > 4 && strlen($_POST['password_first']) > 6 && preg_match( "/^[a-zA-Z0-9_ ]+$/" , $login) )
        {



Później sprawdzamy czy wprowadzone hasło oraz nick są wolne – czy ktoś przypadkiem nie zarejestrował się już z takimi danymi. Jeśli dane są wolne to rejestrujemy usera, jeśli znów dane są już w użyciu – wypluwamy błąd:

 

        $sql = "SELECT * FROM `users` WHERE (email = '".$email."' OR username = '".$login."')";
        $result = mysql_query($sql)
            or die("Nie udalo sie pobrac danych");
        $num = mysql_num_rows($result);
        if ( $num == 0 )
        {
            $sql = "INSERT INTO `users` (`username`, `password`, `email`) VALUES ('".$login."', '".$password_first."', '".$email."')";
            $result = mysql_query($sql)
                or die("Nie udalo sie dodac usera");
            echo 'Zostales zarejestrowany! Teraz mozesz sie zalogowac <a href="index.php">TUTAJ</a>';
            exit;
        }
        else
        {
            echo "Wpisany login lub email jest juz w uzyciu! Podaj inny lub jesli posiadasz juz tutaj konto - zaloguj sie!";
            exit;
        }
    }



No i sprawa prosta – jeśli któryś z powyższych warunków się nie spełnił – informujemy o tym usera, czyli: Jeśli któreś z pól jest puste – błąd, jeśli nick jest taki sam jak hasło – błąd, jeśli wprowadzone dwa hasła nie zgadzają się ze sobą – błąd, jeśli email jest niepoprawny – błąd, jeśli nick lub hasło są za krótkie – błąd, jeśli nick zawiera znaki, które są zakazane (inne niż wyżej wymieniłem) – błąd.

 

        else if ( empty($login) || empty($email) || empty($_POST['password_first']) || empty($_POST['password_second']) )
        {
            echo "Uzupelnij wszystkie pola!";
            exit;
        }
        else if ( strlen($login) < 4 || strlen($_POST['password_first']) < 6 )
        {
            echo "Nick lub haslo jest za krotkie. Haslo musi zawierac min. 6 znakow, natomiast nick 4 znaki";
            exit;
        }
        else if ( md5($_POST['login']) == $password_first )
        {
            echo "Haslo nie moze byc takie samo jak login!";
            exit;
        }
        else if ( $password_first !== $password_second )
        {
            echo "Wpisane hasla nie zgadzaja sie!";
            exit;
        }
        else if ( !filter_var($email, FILTER_VALIDATE_EMAIL) )
        {
            echo "Wpisany email jest niepoprawny!";
            exit;
        }
        else if ( !preg_match( "/^[a-zA-Z0-9_ ]+$/" , $login) )
        {
            echo "Znaki w loginie sa niedozwolone! Mozesz uzywac tylko malych i duzych liter (bez polskich znakow!), spacji, cyfr.";
            exit;
        }
    }



Dorzućmy jeszcze warunek dla usera, który jest już zalogowany a mimo to próbuje się zarejestrować – jeśli tak będzie, wyrzucimy mu błąd iż jest już zalogowany, a multikonta niemile są widziane:

    else if ( isset($_GET['action']) && htmlspecialchars($_GET['action']) == 'register' && $_SESSION['nazwa'] !== NULL && (!isset($_POST['submit']) || isset($_POST['submit'])) )
    {
        echo "Masz juz konto - jestes zalogowany ;]";
        exit;
    }



Czas na panel logowania dla gości. Najpierw standardowo tworzymy dwa pola – nick i hasło:

 

    if ( $_SESSION['nazwa'] == NULL && !(isset($_POST['submit'])) )
    {
        $body = 'Witaj gosc! Zaloguj sie <img src="htpp://twojastrona.pl/wp-includes/images/smiles/icon_oczko.gif" alt=";)" class="wp-smiley"> <br><form action="index.php" method="post"><table><tr><td>Login: <input type="post" name="login" maxlength="25"></td></tr><tr><td>Haslo: <input type="password" name="password" maxlength="35"></td></tr><tr><td><input type="submit" name="submit" value="Zaloguj"></td></tr></table></form><br>Lub <a href="index.php?action=register">ZAREJESTRUJ SIE!</a>';
        echo $body;
        exit;
    }



Potem znowu musimy przefiltrować wprowadzone dane – jedziemy. Jeśli któreś z pól jest puste, lub nick zawiera niedozwolone znaki – wyrzucamy błąd. Jeśli tak nie jest to sprawdzamy czy podane dane są poprawne – czy istnieje user z podanym hasłem oraz nickiem. Jeśli tak to logujemy usera, na jego konto:

 

    else if ( $_SESSION['nazwa'] == NULL && isset($_POST['submit']) )
    {
        $login = htmlspecialchars($_POST['login']);
        $password = md5($_POST['password']);
        if ( !empty($login) && !empty($_POST['password']) && preg_match( "/^[a-zA-Z0-9_ ]+$/" , $login) )
        {
            $sql = "SELECT * FROM `users` WHERE username = '".$login."' AND password = '".$password."'";
            $result = mysql_query($sql)
                or die("Nie udalo sie pobrac danych");
            $num = mysql_num_rows($result);
            if ( $num > 0 )
            {
                $row = mysql_fetch_assoc($result);
                $_SESSION['nazwa'] = $row['id'];
            }
            else
            {
                echo "Wpisane dane sa niepoprawne";
                exit;
            }
        }



No i jak wyżej – jeśli któryś z warunków się nie spełnił – informujemy usera o tym. Czyli jeśli pola są puste lub nick zawiera niewłaściwe znaki – błąd.

 

        else if ( empty($login) || empty($_POST['password']) )
        {
            echo "Uzupelnij wszystkie pola!";
            exit;
        }
        else if ( !preg_match( "/^[a-zA-Z0-9_ ]+$/" , $login) )
        {
            echo "Znaki w loginie sa niedozwolone! Mozesz uzywac tylko malych i duzych liter (bez polskich znakow!), spacji, cyfr.";
            exit;
        }
    }



Potem dorzucamy jeszcze link, umożliwiający userowi wylogowanie się. Oczywiście dodajemy też header location, tak aby jeśli user się wyloguje a potem cofnie stronę – aby sesja nie mogła powrócić:

 

    if ( isset($_GET['action']) && htmlspecialchars($_GET['action']) == 'wyloguj' )
    {
        header('Location: index.php');
     
        session_destroy();
    }



Dorzuciłem też bajer, który jest stosowany w phpBB2 by przemo – zmienna $userdata['pole'] czyli po prostu możemy zwrócić dowolne info z bazy userowi, o nim samym, przykładowo jeśli użyjemy $userdata['username'] zwróci userowi obecnie zalogowanemu jego nick:

 

    if ( $_SESSION['nazwa'] !== NULL )
    {
        $sql = "SELECT * FROM `users` WHERE id = ".$_SESSION['nazwa']."";
        $result = mysql_query($sql)
            or die("Nie udalo sie pobrac danych");
        $userdata = mysql_fetch_assoc($result);
     
        $body = 'Witaj, <b>' . $userdata['username'] . '</b>! Jestes zalogowany! <img src="htpp://twojastrona.pl/wp-includes/images/smiles/icon_smile.gif" alt=":)" class="wp-smiley"> <br><a href="index.php?action=wyloguj">WYLOGUJ SIE!</a>';
        echo $body;
        exit;
    }
    ?>


To tyle  Teraz możecie śmiało działać dalej. Można do tego łatwo dorzucić chociażby panel admina. Wystarczy w bazie dodać pole user_level i jeśli pole jest równie 1 to user jest adminem  Kombinujcie, powodzenia.

 

Autor Damianciu

Zakazuje się kopiowania na inne fora bez zgody autora!

  • Haha 1
  • Zasłużony
Opublikowano

Autor nie wyraził zgody na kopiowanie poradnika na inne fora.

  • Lubię to! 2
  • Uwielbiam 1
  • Zasłużony
Opublikowano

●● Wiadomość wygenerowana automatycznie ●●

 

kosz.png

 

Z pozdrowieniami, Administracja Katujemy.EU

 

Jeśli nie zgadzasz się z powyższą informacją, zgłoś post moderatorom. 

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.