Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [skrypt] Logowanie
sebekzosw
post 19.08.2009, 23:07:12
Post #1





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Witam!

Mam taki skrypt logowania opartego o sesje - moje pytanie brzmi: Czy taki skrypt jest bezpieczny?:

  1. <?php
  2. function DodawanieDoBazy($ciag) {
  3. $wynik = stripslashes(strip_tags(addslashes(trim($ciag))));
  4. $wynik = str_replace(array("\"", "'", "\\", '\"', "\'", "<", ">", "&nbsp;"), array("&quot;", "'", "\", "&quot;", "'", "&lt;", "&gt;", " "), $wynik);
  5. $wynik = preg_replace(array("/\=/","/\#/","/\sOR\s/"), "", $wynik);
  6. return $wynik;
  7. }
  8.  
  9.  
  10. if(isset($_POST["logowanie"]) && isset($_POST['login']) && isset($_POST['login'])) {
  11. $logon_failure = '';
  12. if(empty($_POST["login"])) { $logon_failure .= "Wpisz login<br />"; }
  13. if(empty($_POST["password"])) { $logon_failure .= "Wpisz hasło<br />"; }
  14. $login = DodawanieDoBazy($_POST["login"]);
  15. $password = md5($_POST["password"]);
  16.  
  17. if(empty($logon_failure)) {
  18. if(!mysql_fetch_row(mysql_query("SELECT * FROM users WHERE login='".$login."' AND pass='".$password."'"))) {
  19. $logon_failure .= "Nieprawidłowy login lub hasło";
  20. } elseif(!mysql_fetch_row(mysql_query("SELECT * FROM users WHERE login='".$login."' AND activity='1'"))) {
  21. $logon_failure .= "Konto jest nieaktywne";
  22. }
  23.  
  24. if(empty($logon_failure)) {
  25. $_SESSION["login"] = $login;
  26. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  27. $_SESSION['browser'] = $_SERVER['HTTP_USER_AGENT'];
  28. } else {
  29. echo $logon_failure;
  30. }
  31. } else {
  32. echo $logon_failure;
  33. }
  34. }
  35. echo "<div id=\"menu\">";
  36. if(UZYTKOWNIK) {
  37. echo "Zalogowany jako ".$_SESSION["login"];
  38. } else {
  39.  
  40.  
  41. ?>
  42. <form action="" method="post" id="logowanie">
  43. <fieldset>
  44. <dl>
  45. <dt>Login</dt>
  46. <dd><input type="text" name="login" id="login" value="Login" onblur="if(this.value=='') this.value='Login';" onfocus="if(this.value=='Login') this.value='';" /></dd>
  47.  
  48. <dt>Hasło:</dt>
  49. <dd><input type="password" name="password" id="password" value="Hasło" onblur="if(this.value=='') this.value='Hasło';" onfocus="if(this.value=='Hasło') this.value='';" /></dd>
  50. </dl>
  51. </fieldset>
  52. <div style="float:right;"><input type="submit" name="logowanie" value="Zaloguj się" onclick="WyslijFormularz('logowanie'); return false;" /></div>
  53. </form>
  54. <img src="http://test.php.pl/www/gfx/login_loading.gif" id="ladowanie" alt="" style="display:none;float:left;" />
  55. <div id="wynik"></div>
  56.  
  57. <p><a href="/rejestracja/">Rejestracja</a>
  58. <br />
  59. <a href="/przypomnij/">Przypomnij hasło</a>
  60.  
  61.  
  62. <?
  63. }
  64. ?>
  65. </div>


Wszystkie sugestie na temat polepszenia mile widziane smile.gif

Ten post edytował erix 19.08.2009, 23:10:18
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post
Quantum
post 20.08.2009, 06:00:49
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(sebekzosw)
  1. ie"]) && isset($_POST['login']) && isset($_POST['login'])


w jakim celu sprawdzasz 2 razy ? biggrin.gif dodatkowo dziwna nazwa funkcji, DodawanieDoBazy, lepiej byłoby FiltrujZapytanie, choć i tak jestem zwolennikiem nazewnictwa ang. używaj http://www.php.net/mysql_real_escape_string.
Dlaczego raz używasz ' a raz " ? zastąp cudzysłów apostrofem, zwiększa to szybkość działania skryptu.
Co do bezpieczeństwa.. MD5 ? ta funkcja skrótu teoretycznie w nowych aplikacjach pojawiać się nie powinna, zastąp ją SHA-1. Od siebie dodam, że lepiej napisałbyś to obiektowo, proceduralne - gorzej się czyta, po 2 tygodniach przerwy nie będziesz wiedział jak on nawet działał, OOP daje większe możliwości, na ten przykład PDO - nie musiałbyś martwić się o bezpieczeństwo, zapytania są tam filtrowane. Dodatkowo rozbudowa takich skryptów jest o wiele szybsza i prostsza.

  1. if(!mysql_fetch_row(mysql_query("SELECT * FROM users WHERE login='".$login."' AND pass='".$password."'"))) {


zastąp tym, będzie wydajniej

  1. SELECT count(*) FROM users WHERE login='".$login."' AND pass='".$password."'


Ten post edytował sniffer32 20.08.2009, 06:14:23
Go to the top of the page
+Quote Post
sebekzosw
post 20.08.2009, 08:30:28
Post #3





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Poprawiłem już to co mówiłem, tylko nie wiem gdzie zastosować mysql_real_escape_stringquestionmark.gif I zamiast czego to użyć smile.gif

I dobrze zrobiłem z tym??:

  1. <?php
  2. if(!mysql_result(mysql_query("SELECT count(*) FROM users WHERE login='".$login."' AND pass='".$password."'"), 0)) {
  3. $logon_failure .= "Nieprawidłowy login lub hasło";
  4. }
  5. ?>


Ten post edytował sebekzosw 20.08.2009, 08:32:31
Go to the top of the page
+Quote Post
Quantum
post 21.08.2009, 13:26:57
Post #4





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


1. wystarczy zajrzeć do manuala, przykład 3, widać czarno na białym jak używać i do czego mysql_real_escape_string służy
2. sprawdź czy działa winksmiley.jpg
Go to the top of the page
+Quote Post
drake88
post 23.08.2009, 15:19:17
Post #5





Grupa: Zarejestrowani
Postów: 283
Pomógł: 15
Dołączył: 22.03.2009
Skąd: Bytów

Ostrzeżenie: (0%)
-----


Cytat(sebekzosw @ 20.08.2009, 09:30:28 ) *
I dobrze zrobiłem z tym??:

[PHP] pobierz, plaintext
  1. <?php
  2. if(!mysql_result(mysql_query("SELECT count(*) FROM users WHERE login='".$login."' AND pass='".$password."'"), 0)) {
  3. $logon_failure .= "Nieprawidłowy login lub hasło";
  4. }
  5. ?>
[PHP] pobierz, plaintext


Jak najbardziej dobrze.


--------------------
Go to the top of the page
+Quote Post
sebekzosw
post 24.08.2009, 14:48:32
Post #6





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Trochę poprawiłem całe logowanie dodając nową opcję, co sądzicie teraz o takim skrypcie:

  1. <?php
  2.  
  3. function DodawanieDoBazy($ciag) {
  4. $wynik = stripslashes(strip_tags(addslashes(trim($ciag))));
  5. $wynik = str_replace(array("\"", "'", "\\", '\"', "\'", "<", ">", " "), array(""", "'", "\", """, "'", "<", ">", " "), $wynik);
  6. $wynik = preg_replace(array("/\=/","/\#/","/\sOR\s/"), "", $wynik);
  7. return $wynik;
  8. }
  9.  
  10. if(isset($_POST["logowanie"]) && isset($_POST["login"])) {
  11. $logon_failure = "";
  12. if(empty($_POST["login"]) OR $_POST["login"] == "Login") { $logon_failure .= "Wpisz login<br />"; }
  13. if(empty($_POST["password"]) OR $_POST["password"] == "Hasło") { $logon_failure .= "Wpisz hasło<br />"; }
  14. $login = DodawanieDoBazy($_POST["login"]);
  15. $password = sha1($_POST["password"]);
  16.  
  17. if(empty($logon_failure)) {
  18. if(!mysql_result(mysql_query("SELECT count(*) FROM users WHERE login='".$login."' AND pass='".$password."'"), 0)) {
  19. mysql_query("UPDATE users SET login_failed=login_failed+1, date_last_failed_login='".time()."' WHERE login='".$login."' LIMIT 1"); //Dodawanie +1 do obecnej liczby błędnych logowań
  20. $zapytanie = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE login='".$login."'"));
  21. if($zapytanie["login_failed"] > 3) {
  22. mysql_query("UPDATE users SET activity='0' WHERE login='".$login."' LIMIT 1"); //Deaktywacja konta po 3 błędnych próbach logowania
  23. $logon_failure = "Konto zostało zdeaktywowane, ponieważ liczba prób logowania była większa niż 3. Aby aktywować konto, kliknij <a href=\"\">tu</a>";
  24. } else {
  25. $logon_failure .= "Nieprawidłowy login lub hasło";
  26. }
  27. } elseif(!mysql_result(mysql_query("SELECT count(*) FROM users WHERE login='".$login."' AND activity='1'"), 0)) { //Sprawdzamy czy konto jest aktywne
  28. $logon_failure .= "Konto jest nieaktywne";
  29. }
  30.  
  31. if(empty($logon_failure)) {
  32. $zapytanie = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE login='".$login."'"));
  33. mysql_query("UPDATE users SET last_login='".$zapytanie["penultimate_login"]."', penultimate_login='".time()."' WHERE id='".$zapytanie["id"]."' LIMIT 1"); //Aktualizacja danych o ostatnim logowaniu
  34. mysql_query("UPDATE users SET login_failed='0' WHERE login='".$login."' LIMIT 1"); //Resetowanie liczby błędnych logowań
  35. $_SESSION["login"] = $login;
  36. $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"];
  37. $_SESSION["browser"] = $_SERVER["HTTP_USER_AGENT"];
  38. } else {
  39. echo $logon_failure;
  40. }
  41. } else {
  42. echo $logon_failure;
  43. }
  44. }
  45. echo "<div id=\"menu\">";
  46. if(UZYTKOWNIK) {
  47. echo "Zalogowany jako ".$_SESSION["login"];
  48. } else {
  49.  
  50.  
  51. ?>
  52. <form action="" method="post" id="logowanie">
  53. <fieldset>
  54. <dl>
  55. <dt>Login</dt>
  56. <dd><input type="text" name="login" id="login" value="Login" onblur="if(this.value=='') this.value='Login';" onfocus="if(this.value=='Login') this.value='';" /></dd>
  57.  
  58. <dt>Hasło:</dt>
  59. <dd><input type="password" name="password" id="password" value="Hasło" onblur="if(this.value=='') this.value='Hasło';" onfocus="if(this.value=='Hasło') this.value='';" /></dd>
  60. </dl>
  61. </fieldset>
  62. <div style="float:right;"><input type="submit" name="logowanie" value="Zaloguj się" onclick="sWyslijFormularz('logowanie'); return false;" /></div>
  63. </form>
  64. <img src="http://test.php.pl/www/gfx/login_loading.gif" id="ladowanie" alt="" style="display:none;float:left;" />
  65. <div id="wynik"></div>
  66.  
  67. <p><a href="/rejestracja/">Rejestracja</a>
  68. <br />
  69. <a href="/przypomnij/">Przypomnij hasło</a>
  70.  
  71.  
  72. <?
  73. }
  74. ?>
  75. </div>


Ten post edytował sebekzosw 24.08.2009, 14:52:14
Go to the top of the page
+Quote Post
drake88
post 26.08.2009, 21:29:19
Post #7





Grupa: Zarejestrowani
Postów: 283
Pomógł: 15
Dołączył: 22.03.2009
Skąd: Bytów

Ostrzeżenie: (0%)
-----


Może najpierw powiedz, jaką opcję dodałeś? ^^


--------------------
Go to the top of the page
+Quote Post
sebekzosw
post 27.08.2009, 13:24:20
Post #8





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Deaktywacja konta po 3 błędnych próbach logowania
Go to the top of the page
+Quote Post
Fifi209
post 27.08.2009, 13:40:19
Post #9





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


  1. $wynik = str_replace(array("\"", "'", "\\", '\"', "\'", "<", ">", " "), array(""", "'", "\", """, "'", "<", ">", " "), $wynik);
  2. $wynik = preg_replace(array("/\=/","/\#/","/\sOR\s/"), "", $wynik);


Jaki w tym sens widzisz?

addslashes doda \
strislashes usunie \
str_replace jest nie potrzebny tak samo preg_replace

Użyj po prostu mysql_real_escape_string?

I jeszcze to:
  1. if(UZYTKOWNIK) {


Gdzie definiujesz tą stałą?

Ten post edytował fifi209 27.08.2009, 13:41:15


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
l0ud
post 27.08.2009, 13:48:02
Post #10





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Cześć

Cała funkcja DodawanieDoBazy() jest zupełnie niepotrzebna, najlepszym i najprostszym zabezpieczeniem przed SQL injection oraz XSS jest przepuszczenie ciągu do dodania do bazy przez mysql_real_escape_string, a następnie - przy wyświetlaniu (a nie dodaniu do bazy) htmlspecialchars.

W tym kodzie zamiast
  1. $login = DodawanieDoBazy($_POST["login"]);


Użyj po prostu
  1. $login = mysql_real_escape_string($_POST["login"]);


(Albo przepuszczaj login przez mysql_real_escape_string bezpośrednio w zapytaniu)


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Fifi209
post 27.08.2009, 13:50:19
Post #11





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(l0ud @ 27.08.2009, 13:48:02 ) *
Cześć

Cała funkcja DodawanieDoBazy() jest zupełnie niepotrzebna, najlepszym i najprostszym zabezpieczeniem przed SQL injection oraz XSS jest przepuszczenie ciągu do dodania do bazy przez mysql_real_escape_string, a następnie - przy wyświetlaniu (a nie dodaniu do bazy) htmlspecialchars.

W tym kodzie zamiast
  1. $login = DodawanieDoBazy($_POST["login"]);


Użyj po prostu
  1. $login = mysql_real_escape_string($_POST["login"]);


(Albo przepuszczaj login przez mysql_real_escape_string bezpośrednio w zapytaniu)

Po prostu to sobie daruj takie posty.

Napisałeś to co ja...(tylko w innych słowach)


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
l0ud
post 27.08.2009, 14:06:29
Post #12





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Cytat
Po prostu to sobie daruj takie posty.

Napisałeś to co ja...(tylko w innych słowach)


Mhm... a nie pomyślałeś że mogłem po prostu dłużej formułować tego posta? Poza tym nie wspomniałeś o htmlspecialchars której działanie czyni również jego funkcja.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Fifi209
post 27.08.2009, 14:09:12
Post #13





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(l0ud @ 27.08.2009, 14:06:29 ) *
Mhm... a nie pomyślałeś że mogłem po prostu dłużej formułować tego posta? Poza tym nie wspomniałeś o htmlspecialchars której działanie czyni również jego funkcja.


O 7 minut ?

htmlspecialchars zamienia na encje - jego funkcja tego nie robi... Więc o czym tu mowa.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
l0ud
post 27.08.2009, 14:23:49
Post #14





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Tak, o 7 minut. Co do htmlspecialchars, robiła to poprzednia wersja funkcji, a na nią patrzałem (mój bład). Niemniej w takiej formie jak teraz tym bardziej należałoby o tym wspomnieć, bo wyrzucenie zmiennej bez filtracji to dziura xss.
btw. właśnie wywołałeś bezsensowną dyskusję na 5 postów tongue.gif Dużo lepiej by było, jakbyś w takich sprawach po prostu napisał na PW.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Fifi209
post 27.08.2009, 14:52:49
Post #15





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Dyskusja jest też na temat. winksmiley.jpg

Napisałeś, przy wyrzucaniu z bazy używać htmlspecialchars tylko powiedz mi jaki ma sens ciągłe obciążanie parsera jak można to zrobić raz przy zapisie do bazy?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
l0ud
post 27.08.2009, 16:05:07
Post #16





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Daje możliwość bezproblemowej edycji i wyświetlenia danych w wersji niezmodyfikowanej - łatwo chociażby wygenerować listę użytkowników do pliku .txt. Poza tym takie zachowanie to przecież standard tongue.gif


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
klocu
post 28.08.2009, 09:18:11
Post #17





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


A tak właściwie to czy jest sens bombardować bazę tymi wszystkimi zapytaniami?
Nie lepiej byłoby na początku wyciągać usera po loginie i potem sprawdzać jego parametry zgodnie z Twoimi założeniami?
Bo tak możesz maksymalnie zmieścić się w: 1 SELECT + 1 UPDATE (przy błędnym zalogowaniu) [dobrze myślę?]

Jednym słowem wartoby trochę zoptymalizować skrypt. Ale droga jest chyba dobra, tak sądzę.
Go to the top of the page
+Quote Post
phpion
post 28.08.2009, 09:24:55
Post #18





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(klocu @ 28.08.2009, 10:18:11 ) *
Nie lepiej byłoby na początku wyciągać usera po loginie i potem sprawdzać jego parametry zgodnie z Twoimi założeniami?

Słuszna uwaga!

Cytat(sebekzosw @ 27.08.2009, 14:24:20 ) *
Deaktywacja konta po 3 błędnych próbach logowania

Bardzo niebezpieczna opcja... wystarczy jeden złośliwy użytkownik aby poblokować Ci innych użytkowników.
Go to the top of the page
+Quote Post
sebekzosw
post 29.08.2009, 12:46:37
Post #19





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


Demo (Login: demo , Hasło: demo) - sprawdźcie bezpieczeństwo smile.gif

a oto kod:

  1. <?php
  2. if(isset($_POST["logowanie"]) && isset($_POST["login"])) {
  3. $logon_failure = "";
  4. if(empty($_POST["login"]) OR $_POST["login"] == "Login") { $logon_failure .= "Wpisz login<br />"; }
  5. if(empty($_POST["password"]) OR $_POST["password"] == "Hasło") { $logon_failure .= "Wpisz hasło<br />"; }
  6. $login = mysql_real_escape_string($_POST["login"]);
  7. $password = sha1($_POST["password"]);
  8.  
  9. $users = mysql_fetch_assoc(mysql_query("SELECT * FROM users WHERE login='".$login."'"));
  10.  
  11. if(empty($logon_failure)) {
  12. if($users["pass"] != $password) {
  13. if($ustawienia["off_account"] == 1) {
  14. if($users["login_failed"] >= 3) {
  15. mysql_query("UPDATE users SET activity='0' WHERE login='".$login."' LIMIT 1"); //Deaktywacja konta po 3 błędnych próbach logowania
  16. $logon_failure = "Konto zostało zdeaktywowane, ponieważ liczba prób logowania była większa niż 3. Aby aktywować konto, kliknij <a href=\"\">tu</a>";
  17. } else {
  18. mysql_query("UPDATE users SET login_failed=login_failed+1, date_last_failed_login='".time()."' WHERE login='".$login."' LIMIT 1"); //Dodawanie +1 do obecnej liczby błędnych logowań
  19. $logon_failure .= "Nieprawidłowy login lub hasło";
  20. }
  21. } else {
  22. $logon_failure .= "Nieprawidłowy login lub hasło";
  23. }
  24. } elseif($users["activity"] == 0) {
  25. $logon_failure .= "Konto jest nieaktywne";
  26. }
  27.  
  28. if(empty($logon_failure)) {
  29. mysql_query("UPDATE users SET last_login='".$users["penultimate_login"]."', penultimate_login='".time()."', login_failed='0' WHERE id='".$users["id"]."' LIMIT 1"); //Aktualizacja danych o ostatnim logowaniu
  30. $_SESSION["login"] = $login;
  31. $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"];
  32. $_SESSION["browser"] = $_SERVER["HTTP_USER_AGENT"];
  33. } else {
  34. echo $logon_failure;
  35. }
  36. } else {
  37. echo $logon_failure;
  38. }
  39. }
  40. echo "<div id=\"menu\">";
  41. if(UZYTKOWNIK) {
  42. echo "Zalogowany jako ".$_SESSION["login"];
  43. } else {
  44.  
  45.  
  46. ?>
  47. <form action="" method="post" id="logowanie">
  48. <fieldset>
  49. <dl>
  50. <dt>Login</dt>
  51. <dd><input type="text" name="login" id="login" value="Login" onblur="if(this.value=='') this.value='Login';" onfocus="if(this.value=='Login') this.value='';" /></dd>
  52.  
  53. <dt>Hasło:</dt>
  54. <dd><input type="password" name="password" id="password" value="Hasło" onblur="if(this.value=='') this.value='Hasło';" onfocus="if(this.value=='Hasło') this.value='';" /></dd>
  55. </dl>
  56. </fieldset>
  57. <div style="float:right;"><input type="submit" name="logowanie" value="Zaloguj się" onclick="sWyslijFormularz('logowanie'); return false;" /></div>
  58. </form>
  59. <img src="http://test.php.pl/www/gfx/login_loading.gif" id="ladowanie" alt="" style="display:none;float:left;" />
  60. <div id="wynik"></div>
  61.  
  62. <p><a href="/rejestracja/">Rejestracja</a>
  63. <br />
  64. <a href="/przypomnij/">Przypomnij hasło</a>
  65.  
  66.  
  67. <?
  68. }
  69. ?>
  70. </div>


Ograniczyłem się do 1 SELECT, ale nie mam pomysłu na 1 UPDATE. Jakieś propozycje polepszenia?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2024 - 19:08