Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

HTML/PHP - Logowanie i rejestracja

23 Lis 2013 09:03 3471 2
  • Poziom 7  
    Witam, stworzyłem stronę www na której jest możliwość rejestracji i logowania, edycja profilu i wyświetlenie. Rejestracja działa dodaje wszystko do bazy danych, jednakże w momencie logowanie powinien pojawić się komunikat "Zostałeś zalogowany" i tak się dzieje jednak po zalogowaniu powinien pokazać się profil użytkownika a tutaj pokazuje się komunikat ze jesteś z strefie tylko dla zalogowanych i mam znowu sie zalogowac jednak jestem niby zalogowany i tak cały czas.
    Kod index.php:
    Code:

    <?php
    include 'config.php';
    db_connect();
     
    check_login();
     
    // pobieramy dane usera
    $user_data = get_user_data();
     
    echo '<p>Witaj <b>'.$user_data['user_name'].'</b>!</p>
        <p>Jesteś w strefie tylko dla zalogowanych.</p>
        <p>[<a href="profile.php?id='.$user_data['user_id'].'">Wyświetl swój profil</a>] [<a href="editprofile.php">Edytuj profil</a>] [<a href="userlist.php">Lista użytkowników</a>] [<a href="logout.php">Wyloguj się</a>]</p>';
     
    db_close();
    ?>


    <html>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
          <link rel="stylesheet" type="text/css" href="style.css" media="screen">
       </head>
       <body>
          <div id="wrapper">
             <div id="logo">
                <div class="bpoz"></div>
                <div id="comptechlogo">
                   <div id="comptechlogo1"></div>
                   <div id="comptechlogo2"></div>
                </div>
                <div class="bpoz"></div>
             </div>
             <div id="content">
             <div id="panelmenu">
                <div class="bpion"></div>
                <div id="menu">
                   
                </div>
                <div id="logowanie">
                   <form method="post" action="login.php">
                   <div class="logowanieslot"><font color="#9c9696">Panel logowania:</font></div>
                   <div class="logowanieslot"><img src="jpgi/ludzik.png" style="float:left;margin-top:4px;"/><input type="text" name="login" style="float:right"id="name";/></div>
                   <div class="logowanieslot"><img src="jpgi/klodka.png" style="float:left;margin-top:4px;"/><input type="password" name="password" style="float:right" id="password";/></div>
                   <div class="logowanieslot" style="text-align:center;background-color:#505050;width:55px;margin-top:4px;display: table-cell;vertical-align: middle;"><font color="#f5f5f5"><a href="login.php">Zaloguj</a></div>
                   <div class="logowanieslot" style="text-align:right"><font color="#f5f5f5"><a href="register.php">Rejestracja&nbsp;</a></font></div>
                   <div class="logowanieslot" style="text-align:right"><font color="#f5f5f5">Zapomniałem hasła&nbsp;</font></div>
                   </form>
                   
                </div>
                <div id="fb"></div>
                <div id="partnerzy">
                   
                </div>
             </div>
             <div id="tresc">
                <div id="baner"></div>
                <div id="tekst">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada libero at massa luctus, sit amet euismod est scelerisque. Ut at porta nulla, vel volutpat ligula. Aenean venenatis tellus enim. Quisque ultrices aliquet massa, vitae egestas ipsum consectetur in. Pellentesque malesuada purus sit amet iaculis ullamcorper. Vestibulum pellentesque congue lorem, nec varius ante viverra suscipit. Vestibulum vehicula neque eget arcu fringilla vehicula. Etiam rhoncus elit nec orci sodales, vitae dapibus neque vehicula. Quisque aliquam dapibus cursus.

    Praesent lectus magna, pharetra sit amet suscipit nec, accumsan sed ipsum. Nam sed arcu justo. Fusce sodales semper turpis ut aliquam. Cras ac malesuada dolor, eu pellentesque sapien. Nunc nec leo non lectus placerat condimentum eu non urna. Morbi at auctor purus. Vestibulum at aliquam urna, vel ullamcorper augue. Morbi cursus erat quis cursus bibendum. Fusce tempor tincidunt dapibus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis posuere velit elit, id iaculis ligula facilisis eu. Fusce accumsan, lorem eu volutpat rhoncus, nunc quam molestie nunc, sit amet feugiat elit nisi ut mauris. Vestibulum lacinia posuere ante in ultrices. Aliquam sed ultrices velit. Cras tincidunt tristique volutpat. Aliquam malesuada dapibus nulla, vel sodales felis ullamcorper in.</div>
                <div id="dzialanie"></div>
             </div>
             </div>
             <div id="stopka"></div>
          </div>
       </body>
    </html>

    Kod profile.php:
    Code:

    <html>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
          <link rel="stylesheet" type="text/css" href="style.css" media="screen">
       </head>
       <body>
          <div id="wrapper">
             <div id="logo">
                <div class="bpoz"></div>
                <div id="comptechlogo">
                   <div id="comptechlogo1"></div>
                   <div id="comptechlogo2"></div>
                </div>
                <div class="bpoz"></div>
             </div>
             <div id="content">
             <div id="panelmenu">
                <div class="bpion"></div>
                <div id="menu">
                   
                </div>
                <div id="logowanie">
                      
                      <?php
                         include 'config.php';
                         db_connect();
                         
                         check_login();
                         
                         // filtrujemy id oraz rzutujemy je na int
                         $_GET['user_id'] = (int)clear($_GET['user_id']);
                         
                         // pobieramy dane usera z podanego id
                         $user_data = get_user_data($_GET['user_id']);
                         
                         // sprawdzamy czy znalazło użytkownika
                         // jeśli nie to wyświetlamy komunikat
                         // a jeśli tak to wyświetlamy wszystkie jego dane
                         // jeśli user nie ma podanej strony www lub skąd jest to wyświetlamy "brak"
                         if($user_data === false) {
                            echo '<p>Niestety, taki użytkownik nie istnieje.</p>
                               <p>[<a href="index.php">Powrót</a>]</p>';
                         } else {
                            echo '<h2>Profil użytkownika</h2>
                               <p>Nick: <b>'.$user_data['user_name'].'</b></p>
                               <p>Email: '.$user_data['user_email'].'</p>
                               <p>Data rejestracji: '.date("d.m.Y, H:i", $user_data['user_regdate']).'</p>
                               <p>Strona WWW: '.(empty($user_data['user_website']) ? 'brak' : $user_data['user_website']).'</p>
                               <p>Skąd: '.(empty($user_data['user_from']) ? 'brak' : $user_data['user_from']).'</p>';
                         }
                         
                         db_close();
                         ?>   
                                        
                </div>
                <div id="fb"></div>
                <div id="partnerzy">
                   
                </div>
             </div>
             <div id="tresc">
                <div id="baner"></div>
                <div id="tekst">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada libero at massa luctus, sit amet euismod est scelerisque. Ut at porta nulla, vel volutpat ligula. Aenean venenatis tellus enim. Quisque ultrices aliquet massa, vitae egestas ipsum consectetur in. Pellentesque malesuada purus sit amet iaculis ullamcorper. Vestibulum pellentesque congue lorem, nec varius ante viverra suscipit. Vestibulum vehicula neque eget arcu fringilla vehicula. Etiam rhoncus elit nec orci sodales, vitae dapibus neque vehicula. Quisque aliquam dapibus cursus.

    Praesent lectus magna, pharetra sit amet suscipit nec, accumsan sed ipsum. Nam sed arcu justo. Fusce sodales semper turpis ut aliquam. Cras ac malesuada dolor, eu pellentesque sapien. Nunc nec leo non lectus placerat condimentum eu non urna. Morbi at auctor purus. Vestibulum at aliquam urna, vel ullamcorper augue. Morbi cursus erat quis cursus bibendum. Fusce tempor tincidunt dapibus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis posuere velit elit, id iaculis ligula facilisis eu. Fusce accumsan, lorem eu volutpat rhoncus, nunc quam molestie nunc, sit amet feugiat elit nisi ut mauris. Vestibulum lacinia posuere ante in ultrices. Aliquam sed ultrices velit. Cras tincidunt tristique volutpat. Aliquam malesuada dapibus nulla, vel sodales felis ullamcorper in.</div>
                <div id="dzialanie"></div>
             </div>
             </div>
             <div id="stopka"></div>
          </div>
       </body>
    </html>

    Kod config.php:
    Code:

    <?php
    define('DBHOST', 'localhost');
    define('DBUSER', 'user');
    define('DBPASS', haslo');
    define('DBNAME', 'baza');
     
    function db_connect() {
        // połączenie z mysql
        mysql_connect(DBHOST, DBUSER, DBPASS) or die('<h2>ERROR</h2> MySQL Server is not responding');
     
        // wybór bazy danych
        mysql_select_db(DBNAME) or die('<h2>ERROR</h2> Cannot connect to specified database');
    }
     
    function db_close() {
        mysql_close();
    }
     
    function clear($text) {
        // jeśli serwer automatycznie dodaje slashe to je usuwamy
        if(get_magic_quotes_gpc()) {
            $text = stripslashes($text);
        }
        $text = trim($text); // usuwamy białe znaki na początku i na końcu
        $text = mysql_real_escape_string($text); // filtrujemy tekst aby zabezpieczyć się przed sql injection
        $text = htmlspecialchars($text); // dezaktywujemy kod html
        return $text;
    }
     
    function codepass($password) {
        // kodujemy hasło (losowe znaki można zmienić lub całkowicie usunąć
        return sha1(md5($password).'#!%Rgd64');
    }
     
    // funkcja na sprawdzanie czy user jest zalogowany, jeśli nie to wyświetlamy komunikat
    function check_login() {
        if(!$_SESSION['logged']) {
            die('<p>To jest strefa tylko dla użytkowników.</p>
            <p>[<a href="login.php">Logowanie</a>] [<a href="register.php">Zarejestruj się</a>]</p>');
        }
    }
     
    // funkcja na pobranie danych usera
    function get_user_data($user_id = -1) {
        // jeśli nie podamy id usera to podstawiamy id aktualnie zalogowanego
        if($user_id == -1) {
            $user_id = $_SESSION['user_id'];
        }
        $result = mysql_query("SELECT * FROM `users` WHERE `user_id` = '{$user_id}' LIMIT 1");
        if(mysql_num_rows($result) == 0) {
            return false;
        }
        return mysql_fetch_assoc($result);
    }
     
    // startujemy sesje
    session_start();
     
    // jeśli nie ma jeszcze sesji "logged" i "user_id" to wypełniamy je domyślnymi danymi
    if(!isset($_SESSION['logged'])) {
        $_SESSION['logged'] = false;
        $_SESSION['user_id'] = -1;
    }
    ?>

    Kod register.php
    Code:




       <html>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
          <link rel="stylesheet" type="text/css" href="style.css" media="screen">
       </head>
       <body>
          <div id="wrapper">
             <div id="logo">
                <div class="bpoz"></div>
                <div id="comptechlogo">
                   <div id="comptechlogo1"></div>
                   <div id="comptechlogo2"></div>
                </div>
                <div class="bpoz"></div>
             </div>
             <div id="content">
             <div id="panelmenu">
                <div class="bpion"></div>
                <div id="menu">
                   <a href="index.php"><div class="menuslot">Główna</div></a>
                   <a href="zamow.php"><div class="menuslot">Zamów  usługe</div></a>
                   <a href="#"><div class="menuslot">O nas</div></a>
                   <a href="cennik.php"><div class="menuslot">Cennik</div></a>
                   <a href="#"><div class="menuslot">Regulamin</div></a>
                   <a href="#"><div class="menuslot">Kontakt</div></a>
                   <a href="#"><div class="menuslot">Opinie Klientów</div></a>
                </div>
                <div id="logowanie">
                   <div class="logowanieslot"><font color="#9c9696">Panel logowania:</font></div>
                   <div class="logowanieslot"><img src="jpgi/ludzik.png" style="float:left;margin-top:4px;"/><input type="text" name="login" style="float:right"id="name";/></div>
                   <div class="logowanieslot"><img src="jpgi/klodka.png" style="float:left;margin-top:4px;"/><input type="password" name="password" style="float:right" id="password";/></div>
                   <div class="logowanieslot" style="text-align:center;background-color:#505050;width:55px;margin-top:4px;display: table-cell;vertical-align: middle;"><font color="#f5f5f5"><a href="login.php">Zaloguj</a></div>
                   <div class="logowanieslot" style="text-align:right"><font color="#f5f5f5"><a href="register.php">Rejestracja&nbsp;</a></font></div>
                   <div class="logowanieslot" style="text-align:right"><font color="#f5f5f5">Zapomniałem hasła&nbsp;</font></div>         
                </div>
                <div id="fb"></div>
                <div id="partnerzy">
                   Nasi partnerzy:<br/><br/>
                   <div class="partnerzyslot"><img src="jpgi/ikona3.png"/></div>
                   <div class="partnerzyslot"><img src="jpgi/ikona2.png"/></div>
                   <div class="partnerzyslot"><img src="jpgi/ikona.png"/></div>
                </div>
             </div>
             <div id="tresc">
             <?php
                   include 'config.php';
                   db_connect();
                   
                   // sprawdzamy czy user nie jest przypadkiem zalogowany
                   if(!$_SESSION['logged']) {
                      // jeśli zostanie naciśnięty przycisk "Zarejestruj"
                      if(isset($_POST['name'])) {
                         // filtrujemy dane...
                         $_POST['name'] = clear($_POST['name']);
                         $_POST['email'] = clear($_POST['email']);
                         $_POST['password'] = clear($_POST['password']);
                         $_POST['password2'] = clear($_POST['password2']);
                         $_POST['imie'] = clear($_POST['imie']);
                         $_POST['nazwisko'] = clear($_POST['nazwisko']);
                         $_POST['miejscowosc'] = clear($_POST['miejscowosc']);
                         $_POST['kod'] = clear($_POST['kod']);
                         $_POST['ulica'] = clear($_POST['ulica']);
                         $_POST['nr'] = clear($_POST['nr']);
                         //$_POST['data']=clear($_POST['data']['rok'].'-'.$_POST['data']['miesiac'].'-'.$_POST['data']['dzien']);

                   
                         // sprawdzamy czy wszystkie pola zostały wypełnione
                         if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email']) || empty($_POST['imie']) || empty($_POST['nazwisko']) || empty($_POST['kod']) || empty($_POST['ulica']) || empty($_POST['nr'])) {
                            echo '<p>Musisz wypełnić wszystkie pola.</p>';
                         // sprawdzamy czy podane dwa hasła są takie same
                         } elseif($_POST['password'] != $_POST['password2']) {
                            echo '<p>Podane hasła różnią się od siebie.</p>';
                         // sprawdzamy poprawność emaila
                         } elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
                            echo '<p>Podany email jest nieprawidłowy.</p>';
                         } else {
                            // sprawdzamy czy są jacyś uzytkownicy z takim loginem lub adresem email
                            $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}'");
                            $row = mysql_fetch_row($result);
                            if($row[0] > 0) {
                               echo '<p>Już istnieje użytkownik z takim loginem lub adresem e-mail.</p>';
                            } else {
                               // jeśli nie istnieje to kodujemy haslo...
                               $_POST['password'] = codepass($_POST['password']);
                               // i wykonujemy zapytanie na dodanie usera
                               mysql_query("INSERT INTO `users` (`user_name`,`user_imie` ,`user_nazwisko`,`user_password`, `user_email`, `user_miejscowosc`, `user_kod`, `user_ulica`, `user_nr`, `user_regdate`) VALUES ('{$_POST['name']}','{$_POST['imie']}','{$_POST['nazwisko']}', '{$_POST['password']}', '{$_POST['email']}', '{$_POST['miejscowosc']}', '{$_POST['kod']}','{$_POST['ulica']}','{$_POST['nr']}', '".time()."')");
                               function komunikat(){
                               echo '<p>Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</p>';
                               }
                            }
                         }
                      }
                   
                      // wyświetlamy formularz
                   else '';   
                      
                   } else {
                      echo '<p>Jesteś już zalogowany, więc nie możesz stworzyć nowego konta.</p>
                         <p>[<a href="index.php">Powrót</a>]</p>';
                   }
                   
                   db_close();
                   ?>
                <form method="post" action="register.php">
                <img src="jpgi/login.png" style="float:left;margin-top:4px;"/><input type=text name=name style="float:left;height:20px"/><br><br>
                <img src="jpgi/haslo.png" style="float:left;margin-top:4px;"/><input type=password name=password style="float:left;height:20px"/><br><br>
                <img src="jpgi/phaslo.png" style="float:left;margin-top:4px;"/><input type=password name=password2 style="float:left;height:20px"/><br><br>
                <img src="jpgi/email.png" style="float:left;margin-top:4px;"/><input type=text name=email style="float:left;height:20px"/><br><br>
                <img src="jpgi/imie.png" style="float:left;margin-top:4px;"/><input type=text name=imie style="float:left;height:20px"/><br><br>
                <img src="jpgi/nazwisko.png" style="float:left;margin-top:4px;"/><input type=text name=nazwisko style="float:left;height:20px"/><br><br>
                <img src="jpgi/miejscowosc.png" style="float:left;margin-top:4px;"/><input type=text name=miejscowosc style="float:left;height:20px"/><br><br>
                <img src="jpgi/kod.png" style="float:left;margin-top:4px;"/><input type=text name=kod style="float:left;height:20px"/><br><br>
                <img src="jpgi/ulica.png" style="float:left;margin-top:4px;"/><input type=text name=ulica style="float:left;height:20px"/><br><br>
                <img src="jpgi/nr.png" style="float:left;margin-top:4px;"/><input type=text name=nr style="float:left;height:20px"/><br><br>
                
                <img src="jpgi/data.png" name=data style="float:left;margin-top:4px;"/><select name="dzien" style="float:left;height:20px; size=1;"><br><br>
                   <option>1</option>
                   <option>2</option>
                   <option>3</option>
                   <option>4</option>
                   <option>5</option>
                   <option>6</option>
                   <option>7</option>
                   <option>8</option>
                   <option>9</option>
                   <option>10</option>
                   <option>11</option>
                   <option>12</option>
                   <option>13</option>
                   <option>14</option>
                   <option>15</option>
                   <option>16</option>
                   <option>17</option>
                   <option>18</option>
                   <option>19</option>
                   <option>20</option>
                   <option>21</option>
                   <option>22</option>
                   <option>23</option>
                   <option>24</option>
                   <option>25</option>
                   <option>26</option>
                   <option>27</option>
                   <option>28</option>
                   <option>29</option>
                   <option>30</option>
                   <option>31</option>
                </select>
                <select name="miesiac" style="height:20px; size=1; float:left;margin-left:4px;">
                   <option>Styczeń</option>
                   <option>Luty</option>
                   <option>Marzec</option>
                   <option>Kwiecień</option>
                   <option>Maj</option>
                   <option>Czerwiec</option>
                   <option>Lipiec</option>
                   <option>Sierpień</option>
                   <option>Wrzesień</option>
                   <option>Październik</option>
                   <option>Listopad</option>
                   <option>Grudzień</option>
                </select>
                <select name="rok" style="float:left;height:20px; size=1; margin-left:4px;">
                   <option>1995</option>
                   <option>1994</option>
                   <option>1993</option>
                   <option>1992</option>
                   <option>1991</option>
                   <option>1990</option>
                   <option>1989</option>
                   <option>1988</option>
                   <option>1987</option>
                   <option>1986</option>
                   <option>1985</option>
                   <option>1984</option>
                   <option>1983</option>
                   <option>1982</option>
                   <option>1981</option>
                   <option>1980</option>
                   <option>1979</option>
                   <option>1978</option>
                   <option>1977</option>
                   <option>1976</option>
                   <option>1975</option>
                   <option>1974</option>
                   <option>1973</option>
                </select><br><br>
                
                
                <input type="submit" value="Zarejestruj">
        </form>
                <div id="dzialanie"></div>
             </div>
             </div>
             <div id="stopka"></div>
          </div>
       </body>
    </html>
  • Poziom 40  
    Aby korzystać z tablicy $_SESSION musisz w każdym pliku, gdzie chcesz jej użyć, wywołać session_start(); i to zaraz na samym początku - najlepiej zaraz po znaczniku <?php
  • Poziom 18  
    Soldner napisał:
     <select name="rok" style="float:left;height:20px; size=1; margin-left:4px;">
                   <option>1995</option>
                   <option>1994</option>
                   <option>1993</option>
                   <option>1992</option>
                   <option>1991</option>
                   <option>1990</option>
                   <option>1989</option>
                   <option>1988</option>
                   <option>1987</option>
                   <option>1986</option>
                   <option>1985</option>
                   <option>1984</option>
                   <option>1983</option>
                   <option>1982</option>
                   <option>1981</option>
                   <option>1980</option>
                   <option>1979</option>
                   <option>1978</option>
                   <option>1977</option>
                   <option>1976</option>
                   <option>1975</option>
                   <option>1974</option>
                   <option>1973</option>
                </select>


    Nie lepiej by było coś takiego napisać?
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Co do startowania sesji w każdym skrypcie - można to zrobić również poprzez utworzenie skryptu o nazwie header.php, w którym by można było umieściić session_start();, człon <head> - </head> i po prostu includować do skryptów ten header -
    Kod: php
    Zaloguj się, aby zobaczyć kod

    zamiast w każdym skrypcie kopiować to samo. Dużym plusem jest to, że zmiana w pliku header.php będzie miała odniesienie do każdego skryptu, bo przy 20 skryptach, zmienić szerokość jednego diva zajmie 20x więcej czasu, niż przy edycji jedynie header.php ;)

    No i zainteresuj się stylami CSS, jeśli chcesz samodzielnie tworzyć CMSy czy inne projekty ;)
    Nie rozumiem jednego - po co linkujesz plik ze stylami skoro potem i tak dopisujesz do każdego pola osobne style? Ale, nie to jest tematem tego wątku :P