Cauchy - Szkoła Myślenia www.cauchy.pl//systemy/php-mysql/logowanie-do-serwisu-internetowego/     |     Dodaj do ulubionych19 grudzień 2014

Teoria

|

Łamigłówki podstawowa

|

Przedszkolaki

|

Kolorowanki

|

Programowanie

|

Podróże

|

Zabawy

|

Różności

|

Systemy

Korepetycje, korepetycje z języka polskiego

Ostatnie OstatnieDo góry, menu nadrzędne, lista zadań Lista wszystkich tematówNastępne Następne

Logowanie do serwisu internetowego

Skrypty PHP, mySQL

Tajne treści
Często chcemy by użytkownik miał dostęp do pewnych treści tylko po podaniu login i hasła. Na przykład chcemy by dostęp do pewnych treści mieli tylko zarejestrowani użytkownicy lub Ci, którzy opłacili abonament.
Poniżej znajdziesz kod gotową stronę php / htm jak również gotowy plik do pobrania, który pozwoli Ci wyświetlić treść strony tylko wówczas gdy użytkownik zaloguje się (poda poprawny mail/hasło).
Uwagi do programu
Cały kod zawiera dokładne komentarze przy każdej instrukcji więc łatwo go zrozumieć/przerobić.
Program wykorzystuje bazę danych mysql do przechowywania danych o użytkownikach (mail i hasło). Całość napisana jest w języku PHP więc jest wymagana obsługa PHP oraz mysql przez serwer www.
Wyjaśnienie metody: mały trick
Ciekawą rzeczą w poniższym programie jest, że ta sama strona (ten sam adres www) wyświetla
  • formularz logowania
  • ukryte treści dostępne po zalogowaniu
  • informacje o nieudanej próbie zalogowania
Trick polega na formularzu html i zmiennych języka PHP odnoszących się do formularzy html. W naszym przypadku kluczową zmienną jest $_POST["mail"], która zawiera to co wpisał użytkownik jako swój mail w formularzu logowania. Mamy następujące możliwości:
  1. Zmienna $_POST["mail"] nie jest ustawiona
    Oznacza to, że formularz nie był wyświetlany i nasza strona jest wyświetlana po raz pierwszy.
    Wówczas po prostu wyświetlamy formularz logowania i zachęcamy do zalogowania.
  2. Zmienna $_POST["mail"] jest ustawiona
    Oznacza to, że formularz został zaakceptowany i ktoś podał mail i hasło.
    Teraz wystarczy wyświetlić ukryty tekst gdy mail/haslo są poprawne
          lub
    ostrzeżenie o błędnym loginie/haśle i ponownie formularz logowania.
Proste, prawda?! Wystarczy, żeby formularz przekierowywał na samego siebie jak w kodzie poniżej.
Krótki opis sposobu działania programu
Użytkownik loguje się w formularzu podając
  • mail
  • hasło
Program jest napisany w PHP, przechowuje informacje o użytkowniku (mail/hasło) i bazie mysql i działa jak poniżej.
  1. Najpierw program łączy się do serwera mysql podając login / hasło
  2. Wybierana jest baza danych w której znajduje się tabela z użytkownikami
  3. Program sprawdza czy ustawiona jest zmienna $_POST["mail"]
    Inaczej mówiąc program sprawdza, czy strona była wyświetlana wcześniej i został wciśnięty przycisk „Zaloguj” w formularzu
    1. Jeśli zmienna $_POST["mail"] nie jest ustawiona to znaczy, że przycisk „Zaloguj” w formularzu logowania nie był wciśnięty. Czyli jesteśmy na naszej stronie po raz pierwszy.
      W tej sytuacji program po prostu zachęca do zalogowania się, wyświetla formularz logowania, i kończy się wyświetlanie strony.
    2. Jeśli zmienna $_POST["mail"] jest ustawiona to znaczy, że jesteśmy na naszej stronie jako przekierowanie z formularza logowania (ktoś wcisnął przycisk „Zaloguj” w formularzu).
      Skoro ktoś wcisnął przycisk „Zaloguj” w formularzu to znaczy, że pole mail formularza ($_POST["mail"]) ma jaką wartość jak również pole haslo ($_POST["haslo"]) ma jakąś wartość.
      W tej sytuacji sprawdzamy czy podane w formularzu mail/haslo znajduje się w bazie mysql.
      Jeśli podane mail/haslo znajduje się w bazie mysql to znaczy, że użytkownik podał poprawny mail/hasło i wyświetlamy mu treści dostępne tylko po zalogowaniu. Strona kończy działanie.
      Jeśli podany mail/haslo NIE znajduje się w bazie mysql to znaczy, że nie ma takiego użytkownika i wyświetlamy komunikat o próbie zabronionego dostępu. Strona kończy działanie.
Czy użytkownik może podejrzeć nasz kod?
Pojawia się pytanie czy użytkownik może podejrzeć nasz kod między innymi:
  1. Poznać login/hasło do serwera mysql
  2. Sposób sprawdzenia jego maila i hasła
Odpowiedź na obydwa pytania jest: NIE.
Użytkownik nie będzie widział kodu php. Użytkownik będzie widział kod html utworzony na serwerze przez nasz program / skrypt PHP.
A w kodzie html nie będzie żadnych informacji o logowaniu do serwera mysql czy też o weryfikacji danych użytkownika.
W kodzie html będzie tylko to, co ma się wyświetlić użytkownikowi.
Cała logika jest zakryta dla użytkownika.
Kod programu
Poniżej znajduje się link do pliku zawierającego gotową stronę wyświetlającą ukryte treści dla zalogowanych uzytkowników (jak omówiono wcześniej):
Po wrzuceniu do serwisu www strona i zawarty w niej program będą od razu działać. Jedynie trzeba zmienić:
  1. Adres ip serwera mysql
  2. Login do bazy danych mysql
  3. Haslo do bazy danych mysql
  4. Nazwę bazy danych zawierającą tabelę z użytkownikami
  5. Upewnić się, że w bazie danych jest tabela uzytkownicy zawierająca następujące pola:
    • mail
    • haslo
Poniżej pełny listing programu jak w pliku do pobrania:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html>
 <head>
 <title>Serwis ABC</title>
 <meta http-equiv=content-type content="text/html; charset=iso-8859-2">
 <meta http-equiv="Content-Language" content="pl">
 </head>
 
 <body>
 <?php 
 
 ////////////////////////////////////////////////////////////
 //Przykład kodu pokazującego różny tekst w zależności czy
 //użytkownik jest zalogowany czy też nie
 //Sposob dzialania kodu:
 //Po otwarciu strony uzytkownik widzi formularz logowania gdzie musi 
 //podac:
 //   * login (jest nim adres mail)
 //   * haslo
 //Po podaniu loginu, hasla i kliknieciu przycisku "Zaloguj" kod 
 //sprawdza czy w bazie mysql istnieje login i hasla ktore podal 
 //uzytkownik 
 //Jesli istnieje login i hasla w bazie mysql to wyswietlany jest tekst
 //dla uzytkownikow zalogowanych
 //Jesli nie istnieje podane przyz uzytkownika login i haslo w bazie 
 //mysql to wyswietlany jest informacja o nieautoryzowanym dostepie i
 //ponownie wyswietlany jest komuniukat
 ////////////////////////////////////////////////////////////
 
 ////////////////////////////////////////////////////////////
 //Definicje zmiennych
 
 //adres ip serwera mysql który zawiera bazę danych i tabele z danymi 
 //uzytkowników (loginy i hasla)
 $adres_ip_serwera_mysql_z_baza_danych = '127.0.0.1';
 
 //nazwa bazy danych zawierającej dane uzytkownikow (loginy i hasla)
 //na serwerze $adres_ip_serwera_z_baza_danych
 $nazwa_bazy_danych_z_tabela_uzytkownikow = 'moja_baza';
 
 //nazwa uzytkownika bazy danych $nazwa_bazy_danych_z_tabela_uzytkownikow
 $login_bazy_danych_z_tabela_uzytkownikow = 'user_test';
 
 //haslo uzytkownika bazy danych $nazwa_bazy_danych_z_tabela_uzytkownikow
 $haslo_bazy_danych_z_tabela_uzytkownikow = 'haslo_test';
 
 //Formularz logowania do serwisu
 //Formularz bedzie pokazywany gdy strona wyswietlana pierwszy raz 
 //lub gdy użytkownik podał błędne dane logowania
 $login_frame = '
 <FORM method="POST" action="">
 Mail: <INPUT type="text" name="mail" value="MG@usa.com">
 <br />Haslo: <INPUT type="text" name="haslo" value="mg">
 <br /><INPUT type="submit" value="Zaloguj">
 </FORM>
 ';
 
 ////////////////////////////////////////////////////////////
 //Kod programu
 
 //Ustanawiamy połączenie z serwerem mysql
 if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,
                     $login_bazy_danych_z_tabela_uzytkownikow,
                     $haslo_bazy_danych_z_tabela_uzytkownikow) ) {
    echo 'Nie moge polaczyc sie z baza danych';
 	 exit (0);
 }
 //Wybieramy baze danych na serwerze mysql ktora zawiera tabele
 //uzytkownicy gdzie sa login i hasla
 if ( !mysql_select_db($nazwa_bazy_danych_z_tabela_uzytkownikow) ) {
    echo 'Blad otwarcia bazy danych';
 	 exit (0);
 }
 
 //Sprawdzamy czy była próba logowania - czy zmienna $_POST["mail"] 
 //ma wartość
 if ( isset($_POST["mail"]) ){
 //Jeśli była próba logowania - czyli zmienna $_POST["mail"] ma jakąś 
 //wartość to sprawdzamy czy para mail/haslo istnieje w bazie danych
 //wywołując fukcję SprawdzCzyPoprawneHaslo($mail,$haslo);
    $mail = $_POST["mail"];
    $haslo = $_POST["haslo"];
    $czy_poprawne_haslo = SprawdzCzyPoprawneHaslo($mail,$haslo);
 	 if ($czy_poprawne_haslo) {
 //Jeśli para mail/haslo istnieje w bazie danych to użytkownik 
 //został zalogowany i ma dostęp do autoryzowanych informacji 
 //dostepnych tylko po zalogowaniu
 	    echo "<p>Super - jestes zalogowany.";
 			echo "<br />Oto tajna informacja:";
 			echo "<br />   <strong>W Paryżu najlepsze 
                      kasztany są na placu Pigalle</strong>";
 	 } else {
 //Jeśli para mail/haslo nie istnieje w bazie danych to informujemy o 
 //błędnym logowaniu i ponownie wypisujemy formularz logowania
 	    echo "<p>Nie hakuj! 
             Wpisz poprawny mail/haslo lub zaplac za tajna informacje.";
 		  echo $login_frame;
 	 } 
 } else {
 //Jeśli nie było próby logowania - czyli zmienna $_POST["mail"] nie ma 
 //wartości to znaczy, że nasza strona jest wyświetlana po raz pierwszy.
 //Zatem wyświetlamy informacje o konieczności zalogowania się i 
 //formularz logowania
     echo "<p>Cześć!";
     echo "<br />Zaloguj się bo nic nie zobaczysz!!!";
 		echo $login_frame;
 }
 
 //Zamykamy połączenie z bazą danych
 if ( !mysql_close() ) {
    echo 'Nie moge zakonczyc polaczenia z baza danych';
    exit (0);
 }
 
 ////////////////////////////////////////////////////////////
 //Dodatkowa funkcja
 
 /////// Funkcja SprawdzCzyPoprawneHaslo($mail,$haslo) ///////
 //Funkcja sprawdza czy istnieje użytkownik o danym mailu i hasle
 //Funkcja zwraca true jesli istnieje użytkownik o danym mailu i hasle
 //Funkcja zwraca false jesli NIE istnieje użytkownik o danym mailu i 
 //hasle
 //Funkcja zaklada, ze 
 //   1. Jestesmy zalogowani do bazy danych mysql
 //   2. Mamy wybrana baze danych
 //   3. Maile i hasla przechowywane sa w tabeli o nazwie "uzytkownicy"
 //      w nastepujacych kolumnach tabeli:
 //         a. Maile uzytkownikow przechowywane sa w kolumnie 
 //            o nazwie "mail"
 //         b. Hasla uzytkownikow przechowywane sa w kolumnie 
 //            o nazwie "haslo"
 //////////////////////////////////////////////////////////////////////
 function SprawdzCzyPoprawneHaslo($mail,$haslo){
 //Definiujemy zapytanie do bazy danych
 //Zapytanie to zada wszystkich uzytkownikow takich, ze:
 //pole mail tabeli uzytkownicy ma wartosc $mail
 //pole haslo tabeli uzytkownicy ma wartosc $haslo
  $zapytanie = "SELECT * FROM `uzytkownicy` WHERE 
                       `mail`='$mail' && `haslo`='$haslo'";
 //Zadamy wykonania zapytania na bazie danych 
  $wynik = mysql_query($zapytanie); 
 //Jesli wystapil blad w wykonaniu zapytania na bazie mysql to zwracamy
 //wartosc false do fukcji nadrzednej 
  if (!$wynik)
    return false;
 //Jesli zapytanie sie udalo to sprawdzamy ile wierszy zwrocilo
  $liczba_wierszy = mysql_num_rows($wynik);
 //Jesli liczba wierszy ktore zwrocilo zapytanie jest rowna 1 to znaczy, 
 //ze istnieje jeden uzytkownik ktory ma dany mail i haslo
 //Zatem zwracamy true
  if ($liczba_wierszy == 1)
    return true;
 //W przeciwym przypadku uzytkownik nie istnieje i zwracamy false
  return false;
 }
 
 ?>
 </body> 
 </html>
 
Przykłady działania programu
Formularz logowania
Logowanie do serwisu internetowego z wykorzystaniem mysql i php
Część serwisu dostępna dla zalogowanych użytkowników
Logowanie do serwisu internetowego z wykorzystaniem mysql i php 2
Informacja o błędnym logowaniu
Logowanie do serwisu internetowego z wykorzystaniem mysql i php 3
Używaj kodu dowolnie
Kod zawarty w tym artykule możesz wykorzystywać dowolnie, bez żadnych zastrzeżeń. Jedyna prośba to umieszczenie linku do niniejszej strony:
      http://cauchy.pl/systemy/php-mysql/logowanie-do-serwisu-internetowego/
na przykład w formie jak poniżej:
<a href="http://cauchy.pl/systemy/php-mysql/logowanie-do-serwisu-internetowego/">Strona pokazująca logowanie się do serwisu www (wyświetlanie ukrytych treści)</a>

OstatnieDo góry, menu nadrzędne, lista zadańNastępne
OstatnieLista wszystkich tematówNastępne


Nie znalazłeś szukanej treści?
Poszperaj w serwisie cauchy.pl lub w sieci.
Google
 
Tapeta ze wzorami dotyczącymi logarytmów i funkcji logarytmicznej
 
Internetowe kursy maturalne z matematyki
 
Matury z lat 2002 - 2005. Zadania, rozwiązania zadań, schemat punktacji
 
Kurs przygotowujący do konkursów matematycznych w szkole podstawowej
 
(C) 2010 Szkoła Myślenia im. A. L. Cauchy        Napisz Napisz        Praca     Reklama
   korepetycje z języka polskiego