Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: system logowania
Forum PHP.pl > Forum > Przedszkole
bart132
Witam wszystkich miło i serdecznie.
no wiec zabralem sie za jakies tam małe pehape, niestety mam mały problemik...

Otóż mimo wpisywania poprawnych danych ( sprawdzone kilkukrotnie przy roznych userach ) i tak stronka wywala mi błąd na temat tego ze podaje niepoprawne dane.... Blad jest zapewnie w pliku odpowiedzialnym za logowanie.

Moglibyście pomoc ? ;]

Zapewnie to i ak jakis banalny błąd popełniony przeze mnie.

A no i jak widac naazie nie ma sesji itp itd. Wyglada to tak ze poprostu po dobrym wpisaniu loginu i hasla ma nam pokazać określony tekst. Sesje będzie trzeba później wałkować.

Plik gdzie wprowadzamy dane
  1. <? 
  2. if(!isset($error)) 
  3.  $error=""; 
  4. ?> 
  5.  
  6. <html> 
  7. <head> 
  8. <title>Formularz</title> 
  9. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> 
  10. <link href="../Style/style.css" rel="stylesheet" type="text/css">
  11. </head> 
  12.  
  13. <body> 
  14.  
  15. <form action="20060102_logowanie1.php" method="POST" name="1forma"> 
  16. <table width="300" border="0" cellpadding="0" cellspacing="0" class="ramkaobramowana"> 
  17. <tr> 
  18. <td colspan="2">&nbsp;</td> 
  19. </tr> 
  20. <tr class="tekst-nieb"> 
  21. <td colspan="2"><div align="center">SYSTEM LOGOWANIA:&nbsp;</div></td> 
  22. </tr> 
  23. <tr> 
  24. <td colspan="2">&nbsp;</td> 
  25. </tr> 
  26. <tr> 
  27. <td align="RIGHT" class="tekst-czer">Login: &nbsp;</td> 
  28. <td align="left"> <INPUT TYPE="TEXT" NAME="login" class="form-styl" id="login"> 
  29. </td> 
  30. </tr> 
  31. <tr> 
  32. <td>&nbsp;</td> 
  33. <td>&nbsp;</td> 
  34. </tr> 
  35. <tr> 
  36. <td align="right" class="tekst-nieb">Hasło: &nbsp; </td> 
  37. <td align="left"> <INPUT TYPE="password" NAME="pass" class="form-styl"> 
  38. </td> 
  39. </tr> 
  40. <tr> 
  41. <td colspan="2">&nbsp;</td> 
  42. </tr> 
  43. <tr> 
  44. <td colspan="2"><div align="center"> 
  45. <input name="submit" type="submit" value="zatwierdz"> 
  46. </div></td> 
  47. </tr> 
  48. <tr> 
  49. <td colspan="2">&nbsp;</td> 
  50. </tr> 
  51. <td colspan="2"><div align="center">
  52.  <? echo '<b>'.$error.'</b>'; ?> 
  53.  </td> 
  54. </tr> 
  55. <td colspan="2">&nbsp;</td> 
  56. </tr> 
  57. </table> 
  58. </form> 
  59.  
  60. </body> 
  61. </html>


Plik odpowiedzialny za logowanie
  1. <? 
  2.  
  3.  
  4. $status_login = 0; 
  5.  
  6. #************************************************* 
  7. # LOGOWANIE DO BAZY DANYCH 
  8. #************************************************* 
  9.  
  10. include('MySQL/open_db.php'); 
  11.  
  12. #************************************************ 
  13. # SPRAWDZENIE CZY ZDEFINIOWANO ZMIENNE 
  14. #************************************************ 
  15.  
  16. if( empty($login) ) 
  17. { 
  18. $login = NULL; 
  19. } 
  20.  
  21. if( empty($pass) ) 
  22. { 
  23. $pass = brak; 
  24. } 
  25.  
  26. if( $login == NULL or $pass == NULL ) 
  27. { 
  28.  echo 'Nie podales loginu i hasla !'; 
  29. } 
  30.  
  31. #************************************************ 
  32. # SPRAWDZANIE CZY USER ISTNIEJE 
  33. #************************************************ 
  34.  
  35. $query = mysql_query('SELECT login, password FROM users_list WHERE login=''.$login.'' AND password=''.md5($pass).''') or die('Błąd zapytania o użytkownika: '.mysql_error()); 
  36. $result = mysql_fetch_assoc($query); 
  37.  
  38. if( $result ) 
  39. { 
  40. $status_login = 1; 
  41. } 
  42. else 
  43. { 
  44. $status_login= 0; 
  45. } 
  46.  
  47. #************************************************ 
  48. # ZALOGOWANIE UŻYTKOWNIKA 
  49. #************************************************ 
  50.  
  51. if( $status_login == 1 ) 
  52. { 
  53. echo 'Witaj ! Jesteś zalogowany !'; 
  54. } 
  55. else 
  56. { 
  57. echo 'Podales złe dane !'.mysql_error(); 
  58. } 
  59.  
  60.  
  61. ?>



ktoś mi dzisiaj polecił użycie funkcji addslashes() . Jest sens ją wykorzystywać ?

Pozdrawiam
vtuner
co do addslashes to jest warto uzywac bo ona filtruje wpisany tekst ale ja mam n taki system logowania:

na początek zasady:
• rejestracja wymaga potwierdzenia listu z odnośnikiem wysyłanego do użytkownika po wypełnieniu formularza - to bardzo ważne, bo zapobiega zapisaniu przypadkowych osób do systemu i spełnia rolę systemu antyspamowego
• dane wpisywane do formularza rejestracji są testowane pod względem poprawności, podanie adresu e-mail jest obowiązkowe
• hasła użytkowników są szyfrowane
• jest możliwość przypomnienia hasła, jeżeli użytkownik o nim zapomni
• użytkownik może zmienić swoje dane w ograniczonym zakresie
• do zalogowania wykorzystywany jest mechanizm sesji

teraz przejdziemy do tabeli:

  1. CREATE TABLE logowanie (
  2. login VARCHAR(50) NOT NULL PRIMARY KEY,
  3. haslo VARCHAR(32) NOT NULL,
  4. kod VARCHAR(32) NOT NULL,
  5. STATUS TINYINT UNSIGNED NOT NULL,
  6. DATA DATETIME NOT NULL,
  7. email VARCHAR(120) NOT NULL,
  8.  
  9. imie VARCHAR(200)
  10. )

wyzej wymienione pola przedstawiaja
• login - unikatowy login użytkownika do 50 znaków
• haslo - hasło użytkownika, zawsze 32 znaki ponieważ będzie zakodowane algorytmem MD5
• kod - specjalny kod wysyłany do potwierdzenia rejestracji
• status - pole opisujące stan konta - będę używał dwóch wartości: 1 gdy użytkownik oczekuje na rejestrację i 5 gdy już jest zarejestrowany
• data - data operacji (np. rejestracji)
• e-mail - adres e-mail użytkownika
• imie - dodatkowe pole tekstowe na imie, takich pól może być więcej, np. na wiek, zawód, opis zainteresowań, itd.

REJESTRACJA

  1. <?php
  2.  
  3. $mysql_host = "localhost";
  4. $mysql_login = "user";
  5. $mysql_haslo = "password";
  6. $mysql_baza = "baza1";
  7. $mysql_tabela = "logowanie";
  8. $twoj_adres = "twoj@adres.email.pl";
  9.  
  10. $opcja = trim($_REQUEST["opcja"]);
  11.  
  12. if ($opcja=="test") {
  13.  
  14. // **************************************************
  15. // ********** 1. sprawdzenie danych i dodanie uzytkownika
  16. // **************************************************
  17.  
  18. $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  19. $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  20. $email = htmlspecialchars(stripslashes(trim($_POST["email"])), ENT_QUOTES);
  21. $imie = htmlspecialchars(stripslashes(trim($_POST["imie"])), ENT_QUOTES);
  22.  
  23. if (strlen($login)<3 or strlen($login)>50
  24. or !eregi("^[a-zA-Z0-9_.]+$",$login)) { $blad++;
  25. echo "<span style="color:red;">Login musi mieć od 3 do 50 znaków
  26. bez polskich liter i spacji!</span><br />";
  27. } else {
  28. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  29. if (mysql_select_db($mysql_baza)) {
  30.  $wynik=mysql_query("SELECT * FROM $mysql_tabela WHERE login='$login'");
  31. } else echo "Nie można połączyć się z bazą";
  32. mysql_close($baza);
  33. } else echo "Nie można połączyć się z serwerem MySQL";
  34. if (mysql_num_rows($wynik)<>0) { $blad++;
  35. echo "<span style="color:red;">Login już został przez kogoś użyty!.
  36. Zaproponuj inny!</span><br />";
  37. }
  38. }
  39.  
  40. if (strlen($haslo)<6 or strlen($haslo)>50
  41.  or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  42. echo "<span style="color:red;">Hasło musi mieć od 6 do 50 znaków
  43. bez polskich liter i spacji!</span><br />";
  44. }
  45.  
  46. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$",$email)) { $blad++;
  47. echo "<span style="color:red;">E-mail nie został
  48. podany prawidłowo!</span><br />";
  49. }
  50.  
  51. if ($blad==0) {
  52. $kod = uniqid(rand());
  53. $haslo = md5($haslo); // zaszyfrowanie hasla
  54. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  55. if (mysql_select_db($mysql_baza)) {
  56. $wynik = mysql_query("INSERT INTO $mysql_tabela
  57. VALUES('$login', '$haslo', '$kod', 1, NOW(), '$email', '$imie')");
  58. } else echo "Nie można połączyć się z bazą";
  59. mysql_close($baza);
  60. } else echo "Nie można połączyć się z serwerem MySQL";
  61.  
  62. if ($wynik) {
  63. $list="
  64. Aby potwierdzic rejestracje kliknij w ciagu 48 godzin na adres:
  65. http://adres.pl/rejestracja.php?opcja=potwierdz&kod=$kod
  66. Jezeli nie chcesz sie rejestrowac, zignoruj ten list.
  67. ";
  68. mail($email, "Rejestracja", $list, "From: <$twoj_adres>");
  69. echo "<p>Aby dokończyć proces rejestracji odbierz e-mail</p>";
  70. }
  71. } else $opcja="";
  72. }
  73.  
  74. if ($opcja=="") {
  75.  
  76. // **************************************************
  77. // ********** 2. formularz zakładania konta
  78. // **************************************************
  79.  
  80. echo <<<KONIEC
  81. <form action="rejestracja.php" method="post">
  82. <input type="hidden" name="opcja" value="test" />
  83. <table>
  84. <tr>
  85.   <td>login:*</td>
  86.   <td><input type="text" name="login" value="$login" /></td>
  87. </tr>
  88. <tr>
  89.   <td>hasło:*</td>
  90.   <td><input type="password" name="haslo" value="$haslo" /></td>
  91. </tr>
  92. <tr>
  93.   <td>e-mail:*</td>
  94.   <td><input type="text" name="email" value="$email" /></td>
  95. </tr>
  96. <tr>
  97.   <td>imie i nazwisko:</td>
  98.   <td><input type="text" name="imie" value="$imie" /></td>
  99. </tr>
  100. <tr>
  101.   <td>&nbsp;</td>
  102.   <td><input type="submit" value=" OK, rejestruję się!" /></td>
  103. </tr>
  104. </table>
  105. </form>
  106. KONIEC;
  107. }
  108.  
  109.  
  110. if ($opcja=="potwierdz") {
  111. // **************************************************
  112. // ********** 3. potwierdzenie rejestracji, uaktywnienie uzytkownika
  113. // **************************************************
  114.  
  115. $kod = htmlspecialchars(stripslashes(trim($_GET["kod"])), ENT_QUOTES);
  116. if ($kod<>"") {
  117. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  118. if (mysql_select_db($mysql_baza)) {
  119. $wynik = mysql_query("DELETE FROM $mysql_tabela
  120. WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=1");
  121. $wynik = mysql_query("UPDATE $mysql_tabela
  122. SET status='5', data=NOW() WHERE kod='$kod' and status=1");
  123. $wynik = mysql_query("SELECT * FROM $mysql_tabela
  124. WHERE kod='$kod' and status=5");
  125. } else echo "Nie można połączyć się z bazą";
  126. mysql_close($baza);
  127. } else echo "Nie można połączyć się z serwerem MySQL";
  128. if (mysql_num_rows($wynik)==1) {
  129. $dane = mysql_fetch_array($wynik);
  130. echo "<p>Dziękujemy. Rejestracja została zakończona poprawnie.</p>";
  131. }
  132. }
  133. if ($kod=="" or mysql_num_rows($wynik)<>1) {
  134. echo "<p>Rejestracja nie może zostać dokończona -
  135. sprawdź czy link jest poprawny!</p>";
  136. }
  137. }
  138.  
  139.  
  140.  
  141. if ($opcja=="przypomnij") {
  142.  
  143. // **************************************************
  144. // ********** 4. formularz przypominania danych
  145. // **************************************************
  146.  
  147. echo <<<KONIEC
  148. <p>Wpisz login użyty podczas rejestracji.
  149. Po chwili otrzymasz mailem nowe hasło.</p>
  150. <form action="rejestracja.php" method="post">
  151. <input type="hidden" name="opcja" value="wyslijhaslo" />
  152. <table>
  153. <tr>
  154.   <td>login:</td>
  155.   <td><input type="text" name="login" value="$login" /></td>
  156. </tr>
  157. <tr>
  158.   <td>&nbsp;</td>
  159.   <td><input type="submit" value=" przypomnij " /></td>
  160. </tr>
  161. </table>
  162. </form>
  163. KONIEC;
  164. }
  165.  
  166.  
  167. function haslo() {
  168. $min = 6; $max = 12;
  169. for($i=0;$i<rand($min,$max);$i++) {
  170. $znak=chr(rand(48,122));
  171. if (eregi("[0-9a-zA-Z]",$znak)) $haslo .= $znak;
  172. else $i--;
  173. }
  174. return $haslo;
  175. }
  176.  
  177.  
  178. if ($opcja=="wyslijhaslo") {
  179.  
  180. // **************************************************
  181. // ********** 5. zmiana hasla i wyslanie go do uzytkownika
  182. // **************************************************
  183.  
  184. $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  185. $hasloczytelne = haslo();
  186. $haslo = md5($hasloczytelne);
  187. if ($login<>"") {
  188. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  189. if (mysql_select_db($mysql_baza)) {
  190. $wynik = mysql_query("UPDATE $mysql_tabela
  191. SET haslo='$haslo' WHERE login='$login' and status=5");
  192. $wynik = mysql_query("SELECT * FROM $mysql_tabela
  193.  WHERE login='$login' and status=5");
  194. } else echo "Nie można połączyć się z bazą";
  195. mysql_close($baza);
  196. }
  197. if (mysql_num_rows($wynik)==1) {
  198. $dane = mysql_fetch_array($wynik);
  199. $email = $dane["email"];
  200. $list="Oto przypominane haslo: $hasloczytelne";
  201. mail($email, "Przypomnienie hasla", $list,"From: <$twoj_adres>");
  202. echo "<p>Hasło zostało wysłane mailem...</p>";
  203. } else {
  204. echo "<p>Użytkownik o podanym loginie nie istnieje!</p>";
  205. }
  206. }
  207. }
  208. ?>


System rejestracji i potwierdzania jest największy. Zmienna $opcja przekazywana przez odnośnik lub formularz określa, który moduł (warunek if) zostanie uruchomiony. Jeżeli w odnośniku nie będzie żadnych parametrów, pojawi się formularz do zakładania konta (nr 2 w numerowanych modułach/warunkach powyżej).

Po wypełnieniu formularza realizowany jest moduł 1. Testuje on czy dane są poprawne. Np. login musi mieć od 3 do 50 znaków z zakresu a-z, A-Z, 0-9 oraz podkreślenie lub kropkę. Nie może też występować wcześniej w bazie. Testowane jest także hasło i e-mail.

Jeżeli są błędy pojawiają się na czerwono, a użytkownik musi poprawiać dane w formularzu do skutku. Jeżeli wszystko jest OK, tworzony jest losowy kod do potwierdzenia listu oraz szyfrowane jest hasło. Dane zapisywane są do tabeli, a do użytkownika wysyłany jest list, który musi potwierdzić.

W momencie wysyłki status użytkownika równy jest 1, gdy potwierdzi wpis zmieni się na 5. Będzie można wykorzystywać dane tylko tych użytkowników, którzy mają pole status=5, bo tylko wtedy potwierdzili swoje dane.

Użytkownik dostaje list. Po kliknięciu na link obsługuje go nasz moduł 4 potwierdzający rejestrację. Jeżeli dane są poprawne, a więc kod się zgadza, użytkownik ma zmieniany status na 5. Przy okazji kasowani są użytkownicy, którzy nie potwierdzili rejestracji przez 2 dni aby nie blokować dłużej wolnych loginów.

Moduł 4 i 5 realizują funkcję przypomnienia hasła. Ponieważ hasła nie można uzyskać z bazy danych (jest ono szyfrowane jednostronnie). Po wypełnieniu formularza przypominania z loginem, generowane jest nowe hasło użytkownika i wysyłane jest do niego mailem.

Ze względów bezpieczeństwa wysyłane jest tylko hasło, bez loginu (gdyby ktoś odczytał list nie zaloguje się bez znajomości loginu). Podczas przypominania podawany jest tylko login, którego użytkownik nie może zapomnieć.

Logowanie
Mamy już zarejestrowanych użytkowników, więc możemy ich logować do systemu. Do testu wystarczy jakaś prostacka strona z ramką. Niech nazywa się index.php:

  1. session_start();
  2.  
  3. $mysql_host = "localhost";
  4. $mysql_login = "user";
  5. $mysql_haslo = "password";
  6. $mysql_baza = "baza1";
  7. $mysql_tabela = "logowanie";
  8.  
  9. // **************************************************
  10. // ********** wylogowanie i zalogowanie z ustaleniem sesji...
  11. // **************************************************
  12.  
  13. $login = $_POST["login"];
  14. $haslo = $_POST["haslo"];
  15.  
  16. if ($_GET["login"]=="koniec") { // wylogowanie
  17. session_unset(); session_destroy();
  18. } else if ($login<>"" and $haslo<>"") {
  19. $haslo = md5($haslo);
  20. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  21. if (mysql_select_db($mysql_baza)) {
  22. $wynik=mysql_query("SELECT * FROM $mysql_tabela WHERE
  23. login='$login' and haslo='$haslo' and status=5");
  24. if (mysql_num_rows($wynik)==1) {
  25. $dane=mysql_fetch_array($wynik);
  26. $_SESSION["zalogowany"]="tak";
  27. $_SESSION["login"]=$dane["login"];
  28. $_SESSION["imie"]=$dane["imie"];
  29. $_SESSION["email"]=$dane["email"];
  30. }
  31. } else echo "Nie można połączyć się z bazą";
  32. mysql_close($baza);
  33. }
  34. }
  35. ?>
  36.  
  37. <table border="1" width="100%">
  38. <tr><td valign="top" width="200">
  39.  
  40. <p>
  41. lewy bok strony
  42. </p>
  43.  
  44. <?
  45.  
  46. // **************************************************
  47. // ********** panel formularza do zalogowania i wylogowania
  48. // **************************************************
  49.  
  50. if ($_SESSION["zalogowany"]=="tak") {
  51. echo "<p>Witaj <b>".$_SESSION["login"]."</b></p>";
  52. echo "<br><a href="index.php?login=koniec">wyloguj się</a>";
  53. echo "<br><a href="zmiana.php">zmień hasło</a>";
  54. } else {
  55.  
  56. echo <<<KONIEC
  57. <form action="index.php" method="post">
  58. <table>
  59. <tr>
  60.   <td align="right">login:&nbsp;</td>
  61.   <td><input type="text" name="login" /></td>
  62. </tr>
  63. <tr>
  64.   <td align="right">hasło:&nbsp;</td>
  65.   <td><input type="password" name="haslo" /></td>
  66. </tr>
  67. <tr>
  68.   <td colspan="2" align="right">
  69.   <input type="submit" value="zaloguj" /></td>
  70. </tr>
  71. </table>
  72. </form>
  73. <a href="rejestracja.php?opcja=przypomnij">przypomnij hasło</a></br />
  74. <a href="rejestracja.php">ZAREJESTRUJ SI!</a>
  75. KONIEC;
  76.  
  77. }
  78. ?>
  79.  
  80. </td><td valign="top">
  81.  
  82. <p>
  83. prawy bok strony...
  84. </p>
  85. <p>
  86. <a href="index.php">index.php</a> - <a href="index2.php">index2.php</a>
  87. </p>
  88.  
  89. <?
  90. if ($_SESSION["zalogowany"]=="tak") {
  91.  echo "<p>TEN tekst widzi tylko zalogowany użytkownik! </p>";
  92. }
  93. ?>
  94.  
  95. </td>
  96. <tr>
  97. </table>


Może nawet część kodu nie jest Ci obca? Opisywałem logowanie i wylogowanie z użyciem sesji w osobnej poradzie (link na końcu tekstu).

Pierwszą czynnością na stronie jest funkcja uaktywniająca sesję session_start(). Następnie pobieram z formularza logowania login i hasło. Jeżeli login ma nazwę "koniec", wtedy użytkownik jest wylogowany z serwisu.

Jeżeli dane są poprawne, użytkownik zostaje zalogowany (zwróć uwagę, że status musi być równy 5) i ustawiane są zmienne sesji, z których można korzystać na innych stronach. Zapisuję login, e-mail i imie oraz ustawiam zmienną $_SESSION["zalogowany"]="tak", aby nie odwoływać się co chwilę do bazy i sprawdzać czy użytkownik faktycznie jest zalogowany.

Gdzieś dalej na stronie umieszczam formularz logowania. Może on być umieszczony na wszystkich stronach serwisu. Jeżeli użytkownik jest zalogowany zobaczy powitanie i opcję wylogowania oraz zmiany hasła/danych, jeżeli nie jest zalogowany zobaczy okienko logowania.

Do testów poruszania się między stronami możesz wykorzystać inną stronę, np. index2.php:

  1. session_start();
  2. ?>
  3.  
  4. <table border="1" width="100%">
  5. <tr><td valign="top" width="200">
  6.  
  7. <p>
  8. lewy bok strony
  9. </p>
  10.  
  11. <?
  12.  
  13. // **************************************************
  14. // ********** panel formularza do zalogowania i wylogowania
  15. // **************************************************
  16.  
  17. if ($_SESSION["zalogowany"]=="tak") {
  18. echo "<p>Witaj <b>".$_SESSION["login"]."</b></p>";
  19. echo "<br><a href="index.php?login=koniec">wyloguj się</a>";
  20. echo "<br><a href="zmiana.php">zmień hasło</a>";
  21. } else {
  22.  
  23. echo <<<KONIEC
  24. <form action="index.php" method="post">
  25. <table>
  26. <tr>
  27.   <td align="right">login:&nbsp;</td>
  28.   <td><input type="text" name="login" /></td>
  29. </tr>
  30. <tr>
  31.   <td align="right">hasło:&nbsp;</td>
  32.   <td><input type="password" name="haslo" /></td>
  33. </tr>
  34. <tr>
  35.   <td colspan="2" align="right">
  36.   <input type="submit" value="zaloguj" /></td>
  37. </tr>
  38. </table>
  39. </form>
  40. <a href="rejestracja.php?opcja=przypomnij">przypomnij hasło</a></br />
  41. <a href="rejestracja.php">ZAREJESTRUJ SI!</a>
  42. KONIEC;
  43.  
  44. }
  45. ?>
  46.  
  47. </td><td valign="top">
  48.  
  49. <p>
  50. prawy bok strony...
  51. </p>
  52. <p>
  53. <a href="index.php">index.php</a> - <a href="index2.php">index2.php</a>
  54. </p>
  55.  
  56. <?
  57. if ($_SESSION["zalogowany"]=="tak") {
  58.  echo "<p>TEN tekst widzi tylko zalogowany użytkownik! </p>";
  59. }
  60. ?>
  61.  
  62. </td>
  63. <tr>
  64. </table>


Na tej stronie umieszczam oczywiście funkcję session_start(); i tylko okienko logowania. Zalogowanie odbywa się na stronie index.php.

Zmiana danych

Zmiana danych jest dosyć newralgicznym punktem. Na pewno nie można zmieniać loginu bo jest to klucz do innych danych. Można (a nawet trzeba) zmieniać hasło. Pytanie czy można zmieniać e-mail?

Użytkownikowi może się zmienić adres e-mail, to fakt. Ale co się stanie, gdy ktoś wykorzysta swoje konto do niezbyt uczciwych celów, po czym zmieni szybko e-mail? Tutaj jest wiele dylematów i zależy to od systemu. U mnie nie będzie takiej opcji.

Warto rozważyć czy ewentualnie stworzyć zwykłe pole zamiany, czy cały system potwierdzania nowego adresu e-mail, aby mieć pewność, że nowy adres został podany poprawnie i ktoś odebrał w nim nasz list potwierdzający.

Ok, wykonajmy zatem zmianę hasła i imienia użytkownika. Wszystko umieść w pliku zmiana.php. Zmianę będzie mógł przeprowadzić tylko użytkownik, który jest zalogowany w systemie.

  1. <?php
  2.  
  3.  
  4. $mysql_host = "localhost";
  5. $mysql_login = "user";
  6. $mysql_haslo = "password";
  7. $mysql_baza = "baza1";
  8. $mysql_tabela = "logowanie";
  9.  
  10. $opcja = trim($_REQUEST["opcja"]);
  11.  
  12.  
  13. if ($opcja=="zmien" and $_SESSION["zalogowany"]=="tak") {
  14. $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  15. $imie = htmlspecialchars(stripslashes(trim($_POST["imie"])), ENT_QUOTES);
  16.  
  17. if (strlen($haslo)<6 or strlen($haslo)>50
  18.  or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  19. echo "<span style="color:red;">Hasło musi mieć od 6 do 50 znaków
  20. bez polskich liter i spacji!</span><br />";
  21. }
  22.  
  23. if ($blad==0) {
  24. $kod = uniqid(rand());
  25. $haslo = md5($haslo); // zaszyfrowanie hasla
  26.  
  27. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  28. if (mysql_select_db($mysql_baza)) {
  29. $wynik = mysql_query("UPDATE $mysql_tabela
  30. SET haslo='$haslo', imie='$imie' WHERE login='{$_SESSION["login"]}'");
  31. } else echo "Nie można połączyć się z bazą";
  32. mysql_close($baza);
  33. } else echo "Nie można połączyć się z serwerem MySQL";
  34. if ($wynik) {
  35. echo "Dane zostały zmienione";
  36. $_SESSION["imie"]=$imie;
  37. }
  38. } else echo "Dane nie zostały zmienione!";
  39. }
  40.  
  41.  
  42. if ($_SESSION["zalogowany"]=="tak") {
  43.  
  44. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  45. if (mysql_select_db($mysql_baza)) {
  46. $wynik=mysql_query("SELECT * FROM $mysql_tabela WHERE
  47. login='{$_SESSION["login"]}'");
  48. if (mysql_num_rows($wynik)==1) {
  49. $dane=mysql_fetch_array($wynik);
  50.  
  51. echo <<<KONIEC
  52. <form action="zmiana.php" method="post">
  53. <input type="hidden" name="opcja" value="zmien" />
  54.  
  55. <table>
  56. <tr>
  57.   <td align="right">hasło:&nbsp;</td>
  58.   <td><input type="password" name="haslo" /></td>
  59. </tr>
  60. <tr>
  61.   <td align="right">imie i nazwisko:&nbsp;</td>
  62.   <td><input type="text" name="imie" value="{$dane["imie"]}" /></td>
  63. </tr>
  64. <tr>
  65.   <td colspan="2" align="right">
  66.   <input type="submit" value="zmien" /></td>
  67. </tr>
  68. </table>
  69. </form>
  70. KONIEC;
  71. }
  72. } else echo "Nie można połączyć się z bazą";
  73. mysql_close($baza);
  74. } else echo "Nie można połączyć się z serwerem MySQL";
  75.  
  76. }
  77.  
  78.  
  79. ?>


Tu również pojawia się formularz i po wprowadzeniu zmian weryfikowane są dane (jak podczas rejestracji). Jeżeli wszystko jest ok, zmiany zostają zapisane w bazie i zmiennych sesji.

Koniec

Nasz system jest gotowy w postaci surowej, a więc musisz dodać cały HTML i szablony swojego serwisu. Jak widzisz, nawet w tak prostej realizacji jest wiele pytań, na które trzeba sobie odpowiedzieć. Dlatego system warto przemyśleć i wymodelować tak, aby spełniał konkretne założenia serwisu.

Miłego logowania i jak największej liczby użytkowników...
bart132
Nie prosiłem o to jak zrobić system logowania, bo przecież nie o to chodzi. Jak sie czlowiek ma czegokolwiek nauczyć jak mu z takimi rzeczami wylatują...

Czekam na jakies konkretne wieści

tak btw

zapytanie do bazy u mnie wygladalo tak :
Kod
CREATE TABLE `users_list` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`imie` VARCHAR( 50 ) NOT NULL ,
`nazwisko` VARCHAR( 50 ) NOT NULL ,
`login` VARCHAR( 20 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
`uprawnienia` INT( 10 ) NOT NULL
) TYPE = MYISAM;




UPDATE:

Oj Panowie...
Teraz wpadłem na rozwiązanie mojego problemu piszac skrypt rejestracji. Otóż jest to banał na który co prawda turdno wpaść. Jednak mi sie udało ;]

W includowanym pliku dla bazy danych ( include jest w formularzu ) znajduje sie $pass ! Ech ;]

Jezeli się komuś przyda to proszę:

  1. <?
  2. $status_login = 0;
  3.  
  4. #*************************************************
  5. # LOGOWANIE DO BAZY DANYCH
  6. #*************************************************
  7.  
  8. include('MySQL/open_db.php');
  9.  
  10. #************************************************
  11. # SPRAWDZENIE CZY ZDEFINIOWANO ZMIENNE
  12. #************************************************
  13.  
  14. if(empty($_POST[login])){
  15.   $login = NULL;
  16. }
  17.  
  18. if(empty($_POST[pass0])){
  19.   $pass0 = NULL;
  20. }
  21.  
  22. if($login == NULL || $pass0 == NULL){
  23.    echo 'Nie podales loginu i hasla!';
  24. }
  25.  
  26. #************************************************
  27. # SPRAWDZANIE CZY USER ISTNIEJE
  28. #************************************************
  29.  
  30. $query = mysql_query("SELECT login, password FROM users_list WHERE login='".$login."' AND password='".md5($pass0)."'") or die('Błąd zapytania o użytkownika: '.mysql_error());
  31.  
  32. if(mysql_fetch_row($query)){
  33.  $status_login = 1;
  34. }else{
  35.  $status_login = 0;
  36. }
  37.  
  38. #************************************************
  39. # ZALOGOWANIE UŻYTKOWNIKA
  40. #************************************************
  41.  
  42. if( $status_login == 1 )
  43. {
  44. echo 'Witaj ! Jesteś zalogowany !';
  45. }
  46. else
  47. {
  48. echo 'Podales złe dane !'.mysql_error();
  49. }
  50.  
  51. ?>


Pozdrawiam i dziękuję za okazaną pomoc
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.