Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt logowania
Forum PHP.pl > Inne > Oceny
The Night Shadow
Stworzyłem skrypt logowania. Ciekaw jestem jak go widzicie i co ewentualnie moznaby poprawić. Znajduje się w nim dużo komentarzy, które powinny pomóc. Tak więc pytanie. Co jest źle, tudziez mogłoby być lepiej, jak zmienić i przede wszystkim po co? :- )

Pozdrawiam... :- )

  1. <?php
  2.     session_start();
  3.     $mysql_host = '***';
  4.     $mysql_login = '***';
  5.     $mysql_haslo = '***';
  6.     $mysql_baza = '***';
  7.  
  8.     $nlogin = strip_tags(htmlspecialchars( mysql_escape_string(trim($_POST["login"])), ENT_QUOTES));
  9.     $nhaslo = strip_tags(htmlspecialchars( mysql_escape_string(trim($_POST["haslo"])), ENT_QUOTES));
  10.     $zakonczenie = strip_tags(htmlspecialchars( mysql_escape_stringtrim($_GET["login"])), ENT_QUOTES));
  11.     
  12.     if ($zakonczenie=='koniec') 
  13.     {
  14.  
  15.         // USUWANIE SESJI JEŚLI W ADRESIE STRONY POJAWIŁA SI ZMIENNA "LOGIN" RÓWNA "KONIEC"
  16.  
  17.         session_unset(); 
  18.         session_destroy();
  19.     }
  20.     if ($_SESSION['zalogowany']<>'tak')
  21.     {
  22.  
  23.         // JEŻELI UŻYTKOWNIK JEST ZALOGOWANY
  24.  
  25.         if ($nlogin<>'') 
  26.         {
  27.  
  28.             // JEŻELI PODANO LOGIN Z FORMULARZA KODOWANIE HASŁA
  29.  
  30.             $nhaslo = md5($nhaslo);
  31.             if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) 
  32.             {
  33.                 if (mysql_select_db($mysql_baza)) 
  34.                 {
  35.  
  36.                     // ŁĄCZENIE Z BAZĄ DANYCH MYSQL I SPRAWDZANIE KOLEJNYCH WŁAŚCIWOŚCI PODANYCH W FOR
    MULARZU DANYCH
  37.  
  38.                     $sprawdzanie_loginu = mysql_query("SELECT login FROM logowanie WHERE login='$nlogin'");
  39.                     if (mysql_num_rows($sprawdzanie_loginu)==0)
  40.                     {
  41.  
  42.                         // GENEROWANIE BŁDU JEŚLI LOGIN NIE ISTNIEJE W BAZIE DANYCH
  43.  
  44.                         $blad++;
  45.                         $wykrytoblad = "Użytkownik <b>$nlogin</b> nie istnieje...";
  46.                     }
  47.                     else 
  48.                         if (mysql_num_rows($sprawdzanie_loginu)==1)
  49.                         {
  50.                         
  51.                             // JEŻELI W BAZIE ISTNIEJE JEDEN PODANY PRZEZ UŻYTKOWNIKA W FORMULARZU LOGIN SPRAW
    DZANIE POPRAWNOŚCI WPISANEGO HASŁA
  52.                         
  53.                             $sprawdzanie_hasla = mysql_query("SELECT login, haslo FROM logowanie WHERE (login='$nlogin' and haslo='$nhaslo')");
  54.                             if (mysql_num_rows($sprawdzanie_hasla)==0) 
  55.                             {
  56.                             
  57.                                 // GENEROWANIE BŁDU JEŚLI PODANE HASŁO NIE JEST POPRAWNE
  58.                             
  59.                                 $blad++;
  60.                                 $wykrytoblad = 'Podałeś błędne hasło...';
  61.                             }
  62.                             else 
  63.                             {
  64.                             
  65.                                 // JEŚLI HASŁO PODANE ZOSTAŁO W FORMULARZU PRAWIDŁOWO 
  66.                             
  67.                                 $sprawdzanie_statusu = mysql_query("SELECT * FROM logowanie WHERE (login='$nlogin' and status=5)");
  68.                                 if (mysql_num_rows($sprawdzanie_statusu)==0) 
  69.                                 {
  70.                                     $blad++;
  71.                                     $wykrytoblad = 'Twoje konto nie zostało przez Ciebie aktywowane...';
  72.                                 }
  73.                             }
  74.                         }
  75.                         else
  76.                         {
  77.                         
  78.                             // GENEROWANIE BŁDU JEŚLI W BAZIE ZNALEZIONO DWA IDENTYCZNE LOGINY
  79.                         
  80.                             $blad++;
  81.                             $wykrytoblad = 'BŁĄD KRYTYCZNY - w bazie danych znajdują się co najmniej dwa identyczne loginy! Skontaktuj się z
     administratorem i powiadom o zaistniałym fakcie...'
    ;
  82.                         }
  83.                     if ($blad==0)
  84.                     {
  85.                     
  86.                         // JEŻELI NIE WYKRYTO ŻADNYCH BŁDÓW TWORZENIE SESJI. WSZYSTKIE DANE Z TABELI LOGOW
    ANIE SĄ UŻYTE, PONIEWAŻ BDĄ POTRZEBNE W SKRYPTACH NA INNYCH STRONACH
  87.                     
  88.                         $dane=mysql_fetch_array($sprawdzanie_statusu);
  89.                         $_SESSION["zalogowany"] = 'tak';
  90.                         $_SESSION["id"] = $dane["id"];
  91.                         $_SESSION["login"] = $dane["login"];
  92.                         $_SESSION["imie"] = $dane["imie"];
  93.                         $_SESSION["email"] = $dane["email"];
  94.                         $_SESSION["gadu"] = $dane["gadu"];
  95.                         $_SESSION["tlen"] = $dane["tlen"];
  96.                         $_SESSION["skype"] = $dane["skype"];
  97.                         $_SESSION["www"] = $dane["www"];
  98.                         $_SESSION["pytanie"] = $dane["pytanie"];
  99.                         $_SESSION["odpowiedz"] = $dane["odpowiedz"];
  100.                         $_SESSION["dataurodzenia_dzien"] = $dane["dataurodzenia_dzien"];
  101.                         $_SESSION["dataurodzenia_miesiac"] = $dane["dataurodzenia_miesiac"];
  102.                         $_SESSION["dataurodzenia_rok"] = $dane["dataurodzenia_rok"];
  103.                         $_SESSION["ranga"] = $dane["ranga"];
  104.                         $adresip = $_SERVER['REMOTE_ADDR'];
  105.                         $hostuzytkownika = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  106.                         $ndata = time();
  107.                         
  108.                         // DODAWANIE DATY LOGOWANIA DO TABELI DATYLOGOWAŃ
  109.                         
  110.                         $dodanie_daty_logowania = mysql_query("INSERT INTO datylogowan SET datylogowan_id_uzytkownika='".$_SESSION["id"]."', datylogowan_data='$ndata'");
  111.                         
  112.                         // AKTUALIZACJA TABELI LOGOWANIE. NADPISYWANIE OSTATNIEGO IP, HOST I DATY LOGOWANI
    A
  113.                         
  114.                         $aktualizacja_danych = mysql_query("UPDATE logowanie SET ostatnie_logowanie='$ndata', ostatnie_ip='$adresip', ostatni_host='$hostuzytkownika' WHERE id='".$_SESSION["id"]."'");
  115.                         
  116.                         $sprwadzanie_listy_ip = mysql_query("SELECT * FROM adresyip WHERE (adresyip_ip='$adresip' and adresyip_id_uzytkownika='".$_SESSION["id"]."')");
  117.                         if (mysql_num_rows($sprwadzanie_listy_ip)=='0') 
  118.                         {
  119.                         
  120.                             // JEŻELI AKTALNEGO ADRESU IP NIE MA W TABELI ADRESÓW IP DOPISYWANIE GO DO LISTY
  121.                         
  122.                             $dodawanie_adresu_ip = mysql_query("INSERT INTO adresyip SET adresyip_id_uzytkownika='".$_SESSION["id"]."', adresyip_ip='$adresip', adresyip_host='$hostuzytkownika'");
  123.                         }
  124.                     }
  125.                 } 
  126.                 else 
  127.                 { 
  128. ?>
  129.                     <span>
  130.                         <center>
  131.                             Nie można połączyć się z bazą - spróbuj ponownie za chwilę...
  132.                         </center>
  133.                     </span>
  134. <?php 
  135.                 }
  136.             }
  137.             else
  138.             { 
  139. ?>
  140.                 <span>
  141.                     <center>
  142.                          Nie można połączyć się z serwerem MySQL - spróbuj ponownie za chwilę...
  143.                     </center>
  144.                 </span>
  145. <?php 
  146.             }
  147.         }
  148.     }
  149. ?>


Z góry wielkie dzięki :- )
nospor
  1. <?php
  2. ....stripslashes(trim($_POST["login"])....
  3. ?>
Chyba miales na mysli addslashes() winksmiley.jpg i jezeli tak to juz lepiej mysql_escape_string()
The Night Shadow
czyli mysql_escape_string() podstawić zamiast stripslashes czy tak?
nospor
No chyba wyraznie napisalem winksmiley.jpg
Poczytaj se:
http://forum.php.pl/index.php?showtopic=23258

ps: dobrze ze usunoles poprzedniego posta...
The Night Shadow
No tak... :- ) A czy coś jeszcze? Generalnie zastanawiam sie czy naprawdę tak istotne jest psanie $costam a $cosTam Itp... to w sumie drobiazgi są, ale... ;- )

Zastanawiam się nad jeszcze jedną kwestią... istnieje możliwość includowania pliku *.ini lub *.php z wartościami zmiennych takimi jak np nazwa hosta... czy to dość silnie wpływa na wydajność?
xarr
...lub mysql_real_escape_string

A tak z ciekawosci, po co Ci tyle danych w sesji? To tylko logowanie smile.gif
The Night Shadow
Tak, to tylko logowanie, ale zaraz na następnej stonie pojawia się monit w przypadku gdy użytkownik ma urodziny. Myślę, że dana w sesji będzie mnie uciążliwa niż dodatkowe zapytanie. Pozostałe dane również są potrzebne... :- )

Nospor... "usunołeś" a powinno być usunąłeś ;- ppp :- )
xarr
no dobrze, ale to tylko jeden element, a co z reszta? Na kazdej stronie bedziesz wykorzystywal informacje o nr. gg, tlen, www, itd. usera? Nie to, zebym sie czepial, czy cos... ot, poprostu zwykla ciekawosc.

Swoja droga po co date rozbijasz na dni, miesiace, lata?
The Night Shadow
Ponieważ w formularzu stworzyłem pola dzień miesiąc rok... :- )
A co do informacji o GG to pojawiają się rzeczywiście dość często na kolejnych podstronach... :- )

Ale w związku z nimi... czy to wpływa w jakiś sposób negatywnie na strukturę strony (czy rzeczywiście powinienm uciec się do dodatkowego zapytania o dane. Wtedy potrzebny byłby tylko ID RANGA i ewentualnie LOGIN)?
xarr
Jezeli przy kazdym logowaniu bedziesz mnie meczyl formularzem z taka iloscia pol do wypelnienia to... chyba wiecej Cie nie odwiedze smile.gif

Dajesz do oceny skrypt logowania, a do niego nie sa Ci potrzebne te wszystkie dane.

Chyba ze mowimy o jakiejs rejstracji usera, a nie logowaniu. smile.gif
The Night Shadow
Ale widzę, że nie przeczytałeś uważnie skryptu. Z formularza pobierane są dwie dane. Login i hasło. reszta pochodzi z bazy danych, która to wypełniona została nimi podczas rejestracji tudzież edycji profilu.
hwao
Cytat(The Night Shadow @ 2006-03-08 16:45:02)
Ale widzę, że nie przeczytałeś uważnie skryptu. Z formularza pobierane są dwie dane. Login i hasło. reszta pochodzi z bazy danych, która to wypełniona została nimi podczas rejestracji tudzież edycji profilu.

zapisujesz te dane nie wiem w jakim celu w sesji smile.gif pewnie dla tego zeby np zapisywac je przy roznych miejsach (komentarze, i temu podobne). a co bedzie jak user zmieni nr gg? pozamieniasz wszytko? lepiej poprostu id usera i po tym wyciagac to co trzeba gdzie trzeba;)
The Night Shadow
I tak też się dzieje... :- ) Do komentarzy i czego tam jeszcze chcieć dopisywane jest jedynie id żytkownika ip host i data... bo one są niezmienne... A sesje... pytałem i pytam po raz kolejny czy szybciej w sesji, czy zapytaniem... ;- )

Czy sesja bardzo obciąża przechodzenie miedzy stronami, bo mam wrażenie, że nie, a skoro nie (wydaje się to być szybszym od kolejnego zapytania skoro i tak login i id jest pobierany przy okazji tworzenia sesji) to czemu by tego nie używać? :- )
acztery
a nie lepiej w sesji trzymac tylko id_usera i opcjonalnie nazwe usera
xarr
No, mi chodzilo tylko o celowosc trzymania tylu danych w sesji, cala reszta to proba dociekania smile.gif
The Night Shadow
No więc odpowiadam... stwierdziłem, że to MOŻE (choć nie musi) być szybsze... ;- ) A te dane dość często są tam wyświetlane... ;- )
Przynajmniej w wersji finalnej bo na serwerze znajduje się beta
SHiP
Cytat(The Night Shadow @ 2006-03-08 17:27:29)
Ponieważ w formularzu stworzyłem pola dzień miesiąc rok... :- )

Lepiej użyć pola date w bazie danych ;] Operacje na dacie... m.in wyciaganie osób które mają w danym dniu urodziny bedzie dzialalo lepiej i szybciej... ;]

EDIT...
a dam jeszcze zapytanie SQL co mi tam =)
  1. SELECT user_id,YEAR(CURDATE())-YEAR(user_birthday) AS user_age
  2. FROM moja_tabelka
  3. WHERE MONTH(user_birthday)=MONTH(CURDATE()) AND DAYOFMONTH(user_birthday)=DAYOFMONTH(CURDATE())
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.