Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie + rejestracja
Forum PHP.pl > Inne > Oceny
kamil_lk
Witam.
Proszę o ocenę logowania oraz rejestracji.
Czy taki skrypt jest wystarczający czy ewentualnie coś poprawić, coś zmienić?
  1. <?php
  2. session_register('key_id');
  3. include_once('connect.php');
  4.  
  5. /* warunek sprawdzający, czy ktoś chce aktywować swoje konto */
  6. if(isset($_GET['action']) && isset($_GET['key']) && $_GET['action'] == 'activate')
  7. {
  8. $query = mysql_query("UPDATE `users` SET `stan`=1 WHERE `key_id`='".mysql_real_escape_string($_GET['key'])."'");
  9. if($query) login("Twoje konto zostało aktywowane! Możesz się teraz zalogować!");
  10. else login('Błąd podczas aktywacji!');
  11. }
  12.  
  13. /* formularz do logowania */
  14. function login($komunikat = "")
  15. {
  16. if($komunikat) echo $komunikat;
  17. echo '<form action="logowanie.php?action=login" method="post">';
  18. echo '<table>';
  19. echo '<tr><td>Login:</td><td><input type="text" name="login" maxlength="25" /></td></tr>';
  20. echo '<tr><td>Hasło:</td><td><input type="password" name="haslo" /></td></tr>';
  21. echo '<tr><td></td><td><input type="submit" name="zaloguj" value="Zaloguj" /></td></tr>';
  22. echo '<tr><td></td><td><a href="logowanie.php?action=register">Utwórz konto</a></td></tr>';
  23. echo '</table>';
  24. echo '</form>';
  25. }
  26.  
  27. /* formularz do rejestracji nowego użytkownika */
  28. function register($komunikat = "")
  29. {
  30. if($komunikat) echo $komunikat;
  31. echo '<form action="logowanie.php?action=register" method="post">';
  32. echo '<table>';
  33. echo '<tr><td>Login:</td><td><input type="text" name="login" maxlength="25" value="'.$_POST['login'].'" /></td></tr>';
  34. echo '<tr><td>Hasło:</td><td><input type="password" name="haslo" /></td></tr>';
  35. echo '<tr><td>Powtórz hasło:</td><td><input type="password" name="re_haslo" /></td></tr>';
  36. echo '<tr><td>Imię:</td><td><input type="text" name="imie" maxlength="25" value="'.$_POST['imie'].'" /></td></tr>';
  37. echo '<tr><td>Nazwisko:</td><td><input type="text" name="nazwisko" maxlength="25" value="'.$_POST['nazwisko'].'" /></td></tr>';
  38. echo '<tr><td>E-mail:</td><td><input type="text" name="email" maxlength="50" value="'.$_POST['email'].'" /></td></tr>';
  39. echo '<tr><td>Telefon:</td><td><input type="text" name="telefon" maxlength="15" value="'.$_POST['telefon'].'" /></td></tr>';
  40. echo '<tr><td></td><td><input type="submit" name="zarejestruj" value="Zarejestruj" /></td></tr>';
  41. echo '<table>';
  42. echo '<form>';
  43. }
  44. ?>
  45. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  46. <html xmlns="http://www.w3.org/1999/xhtml">
  47. <head>
  48. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  49. <title>Untitled Document</title>
  50. </head>
  51.  
  52. <body>
  53. <?php
  54. if($_SESSION['user'] != 1) // sprawdzamy czy użytkownik jest już zalogowany, jeśli nie to przechodzi dalej, jeśli tak to przenosi go na index.php
  55. {
  56. if(!isset($_POST['zaloguj']) && !isset($_POST['zarejestruj'])) // jeśli nie został kliknięty przycisk to wyświetlamy formularz
  57. {
  58. if(!isset($_GET['action']) || $_GET['action'] == 'login') login(); // wyświetlamy formularz do logowania
  59. elseif($_GET['action'] == 'register') register(); // wyświetlamy formularz do rejestracji
  60. }
  61. else // jeśli został kliknięty któryś przycisk
  62. {
  63. if(isset($_POST['zaloguj'])) // dla przycisku logowania
  64. {
  65. /* skrypt do logowania */
  66. if(empty($_POST['login']) || empty($_POST['haslo'])) login("Wypełnij wymagane pola!"); // sprawdzamy czy pola w formularzu nie zostały wypełnione
  67. else
  68. {
  69. $query = mysql_query("SELECT * FROM users WHERE `login`='".mysql_real_escape_string($_POST['login'])."' AND `password`='".sha1(mysql_real_escape_string($_POST['haslo']))."'"); // sprawdzamy czy dane z formularza pasują do danych w bazie
  70. if(@mysql_num_rows($query) == 0) login("Podałeś błędne dane!"); // jeśli wynik zapytanie zwraca zero wyników, tzn. że dane są błędne
  71. else
  72. {
  73. $row = mysql_fetch_array($query);
  74. if($row['stan'] == 0) login("Konto jest nieaktywne!"); // sprawdzamy czy konto nie zostało aktywowane
  75. else
  76. {
  77. $_SESSION['user'] = 1; // logujemy użytkownika
  78. $_SESSION['key_id'] = $row['key_id'];
  79. header( "refresh:5; url=index.php" ); // przenosimy do na stronę index.php
  80. echo 'Zostałeś zalogowany! Zaraz zostaniesz przeniesiony na stronę główną!';
  81. }
  82. }
  83. }
  84.  
  85. }
  86. if(isset($_POST['zarejestruj'])) // dla przycisku rejestracji
  87. {
  88. /* skrypt do rejestrowania użytkowanika */
  89. if(empty($_POST['login']) || empty($_POST['haslo']) || empty($_POST['re_haslo']) || empty($_POST['imie']) || empty($_POST['email'])) register("Wypełnij wymagane pola!"); // sprawdzamy czy pola w formularzu nie zostały wypełnione
  90. else
  91. {
  92. if(mysql_num_rows(mysql_query("SELECT login FROM users WHERE `login`='".mysql_real_escape_string($_POST['login'])."'")) != 0) // tutaj sprawdzamy czy login nie jest wolny
  93. {
  94. $_POST['login'] = "";
  95. register("Ten login jest zajęty");
  96. }
  97. else
  98. {
  99. if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $_POST['email'])) // sprawdzamy czy adres email ma dobrą strukturę
  100. if(mysql_num_rows(mysql_query("SELECT email FROM users WHERE `email`='".mysql_real_escape_string($_POST['email'])."'")) != 0) // sprawdzamy czy na dany adres email jest założone już konto
  101. {
  102. $_POST['email'] = "";
  103. register("Ten email jest zajęty");
  104. }
  105. else
  106. {
  107. if($_POST['re_haslo'] != $_POST['haslo']) register("Podane hasła są różne!"); // sprawdzamy czy hasła są od siebie różne
  108. else
  109. {
  110. $key = md5(uniqid()); // generujemy unikalny ciąg znaków dla użytkownika
  111. if(mysql_query("INSERT INTO users VALUES('', '".mysql_real_escape_string($_POST['login'])."', '".sha1(mysql_real_escape_string($_POST['haslo']))."', '".mysql_real_escape_string($_POST['imie'])."', '".mysql_real_escape_string($_POST['nazwisko'])."', '".mysql_real_escape_string($_POST['email'])."', '".mysql_real_escape_string($_POST['telefon'])."', '".mysql_real_escape_string($key)."', '0')")) // sprawdzamy czy dane zostały dodane do bazy
  112. {
  113. $header = "MIME-Versio: 1.0\r\n"."Content-type: text/html; charset=UTF-8\r\n";
  114. $header .= "From: nazwa strony\r\n";
  115. $header .= "Cc: nazwa strony\r\n";
  116. $header .= "Bcc: ".$_POST['email']."\r\n";
  117. $tresc = "Aby aktywować swoje konto kliknij w poniższy link<br /><br />";
  118. $tresc .= '<a href="logowanie.php?action=activate&key='.$key.'">logowanie.php?action=activate&key='.$key.'</a>';
  119. if(mail($_POST['email'], 'Aktywacja konta', $tresc, $header)) // sprawdzamy czy został wysłany email z linkiem aktywacyjnym
  120. {
  121. $_POST['imie'] = $_POST['nazwisko'] = $_POST['login'] = $_POST['haslo'] = $_POST['re_haslo'] = $_POST['email'] = $_POST['telefon'] = "";
  122. register("Zostałeś zarejestrowany! Sprawdź pocztę i aktywuj konto!");
  123. }
  124. else
  125. {
  126. register("Wystąpił nieoczekiwany błąd!"); // jeśli email nie został wysłany
  127. $query = mysql_query("DELETE FROM users WHERE `login`='".mysql_real_escape_string($_POST['login'])."'"); // to usuwamy dane wprowadzone do bazy
  128. }
  129. }
  130. else register("Wystąpił nieoczekiwany błąd!");
  131. }
  132. }
  133. else
  134. {
  135. $_POST['email'] = "";
  136. register("Popraw adres e-mail!");
  137. }
  138. }
  139. }
  140. }
  141. }
  142. }
  143. else header("Location: index.php");
  144.  
  145. ?>
  146. </body>
  147. </html>
drozdii07
Nie musisz używać session_register();
darko
Cytat(kamil_lk @ 17.08.2011, 14:07:35 ) *
Czy taki skrypt jest wystarczający czy ewentualnie coś poprawić, coś zmienić?

Wystarczający do czego? Popracuj przede wszystkim nad podstawami php, zwłaszcza nad wykorzystaniem funkcji, echo w funkcji jest karygodnym błędem, po co w takim razie opakowywać blok instrukcji zawierających echo w funkcję? Funkcja ma zwrócić wartość, a nie ją wyświetlić. Zrezygnuj z używania standardowego mysql_query itp, na rzecz PDO. Nie mieszaj widoków z logiką, nie korzystaj z eregi, bo jest zdeprecjonowane (użyj preg_match). Jedyne co jest ok w tym kodzie to liczne komentarze.
ShadowD
Zainteresuj się mvc i klasami, nie korzystaj z starych poradników i kursów - to przede wszystkim, jeśli nie jesteś pewnie/nie znasz jakiejś funkcji popatrz do manuala, komentarze typu "od wersji 4.5 dostępny jest funkcja xyz, tym samym nie zaleca się używać - TU NAZWA TWOJEJ FUNKCJI" są w języku polskim, nawet jeśli jej opis jest w ang. a jeśli to dla Ciebie nie problem tym lepiej. Korzystasz z wielu if'ów w sobie, może całość przydało by się nieco podzielić lub przepisać na klasę.

Btw. nie używaj isset(), a !empty() w takiej formie, ogranicza ona też zmienne puste lub uważane za puste, z manuala:
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)

Przy okazji w jej wnętrzu nie można korzystać z innych funkcji, warto to mieć na uwadze jeśli trzeba coś dodać to zrobić to najpierw i zapisać do zmiennej, a zmienną samą dodać do !empty().
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.