Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Rejestracja użytkownika
Forum PHP.pl > Forum > Przedszkole
if_error
Witam - chciałbym podzielić się gotowym skryptem rejestracji użytkownika w serwisie. Jednocześnie prosiłbym o Wasze opinie dotyczące w/w skryptu.
1) Czy skrypt Waszym zdaniem jest bezpieczny ...
2) Czy można go jakoś zoptymalizować ...
3) ... ? może macie jakieś propozycje?

Rejestracja użytkownika w serwisie – pliki index.html, rejestracja.html, list.php, potwierdz.html

1) Formularz – index.html
  1. <form action="..." method="POST">
  2. //imie
  3. <input type="text" name="imie" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB">
  4. //nazwisko
  5. <input type="text" name="nazwisko" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB">
  6. //user
  7. <input type="text" name="user" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB">
  8. //password
  9. <input type="password" name="password" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB">
  10. //password2
  11. <input type="password" name="password2" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB">
  12. //email
  13. <input type="text" name="email" size="30" style="font-family: Verdana; color: #000000; font-size: 7pt; height: 20px; border: 1px solid #ECEBEB">
  14. //przycisk
  15. <input type="image" value="rejestruj" src="..." width="..." height="...">
  16. </form>


2) Odbiór danych z formularza – rejestracja.html
  1. <?php
  2. function odbierz($pole) {
  3. $pole = trim($pole);
  4. if (get_magic_quotes_gpc()) $pole = stripslashes($pole);
  5. return htmlspecialchars($pole, ENT_QUOTES);
  6. }
  7. $imie=odbierz($_POST['imie']);
  8. $nazwisko=odbierz($_POST['nazwisko']);
  9. $user=odbierz($_POST['user']);
  10. $password=odbierz($_POST['password']);
  11. $password2=odbierz($_POST['password2']);
  12. $email=odbierz($_POST['email']);
  13. //ten adres będzie w nagłówku wiadomości
  14. $twoj_adres="jakis adres";
  15. //sprawdzamy pole imie
  16. if(strlen($imie)<2) {
  17. $blad++;
  18. echo" <font color=\"#000000\">Imię nie może być krótsze niż 2 znaki.</font>";
  19. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  20. }
  21. //sprawdzamy pole nazwisko
  22. if(strlen($nazwisko) < 2) {
  23. $blad++;
  24. echo" <font color=\"#000000\">Nazwisko nie może być krótsze niż 2 znaki.</font>";
  25. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  26. }
  27. //sprawdzamy czy podany login nie znajduje się na liscie zabronionych
  28. $unav_logins = array('admin', 'administrator', 'admini', 'root', 'bin', 'daemon', 'adm', 'lp', 'sync', 'shutdown', 
  29. 'halt', 'mail', 'news', 'uucp', 'operator', 'games', 'mysql', 'httpd', 'nobody', 'dummy', 'www', 
  30. 'cvs', 'shell', 'ftp', 'irc', 'debian', 'ns', 'download',
  31.  ' ');
  32. if(in_array($user, $unav_logins)) {
  33. $blad++;
  34. echo" <font color=\"#000000\">Proszę wybrać inny login.</font>";
  35. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  36. }
  37. //sprawdzamy pole user
  38. if (strlen($user)<3 or strlen($user)>50 or !eregi("^[a-zA-Z0-9_.]+$",$user)) { 
  39. $blad++;
  40. echo "<font color=\"#000000\">Login musi mieć od 3 do 50 znaków bez polskich liter i spacji.</font>";
  41. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  42. } else {
  43. //wybieramy tabele user
  44. include('user.php');
  45. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  46. if (mysql_select_db($mysql_baza)) {
  47. $wynik=mysql_query("SELECT * FROM $mysql_tabela WHERE user='$user'");
  48. } else echo "Nie można połączyć się z bazą.";
  49. mysql_close($baza);
  50. } else echo "Nie można połączyć się z serwerem MySQL.";
  51. if (mysql_num_rows($wynik)<>0) { 
  52. $blad++;
  53. echo"<font color=\"#000000\">Podany login jest już zajęty. Zaproponuj inny.</font>";
  54. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  55. }
  56. }
  57. //sprawdzamy pole password
  58. if($password !== $password2) {
  59. $blad++;
  60. echo "<font color=\"#000000\">Proszę podać identyczne hasła.</font>";
  61. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  62. }
  63. if (strlen($password)<6 or strlen($password)>50) { 
  64. $blad++;
  65. echo "<font color=\"#000000\">Hasło musi mieć od 6 do 50 znaków.</font>";
  66. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  67. }
  68. //sprawdzamy pole email
  69. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$",$email)) { 
  70. $blad++;
  71. echo "<font color=\"#000000\">E-mail nie został podany prawidłowo.</font>";
  72. echo"<br><img border=\"0\" src=\"../images/6_1.gif\" width=\"1\" height=\"2\"><br>";
  73. }
  74. //w przypadku wystapienia bledu pokaz link powrot w przeciwnym wypadku wykonuj skr
  75. pt dalej
  76. if ($blad!=0) {
  77. echo"<br><a href=\"javascript:history.go(-1)\">powrót</a>";
  78. } else {
  79. if ($blad==0) {
  80. //tworzymy unikalny kod wiadomości w celu potwierdzenia rejestracji
  81. $kod = uniqid(rand());
  82. //szyfrujemy hasło
  83. $password = md5($password);
  84. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  85. if (mysql_select_db($mysql_baza)) {
  86. $wyni=mysql_query("INSERT INTO $mysql_tabela VALUES('$imie', '$nazwisko', '$user', '$password', '$kod', 1, NOW(), '$email')");
  87. } else echo "Nie można połączyć się z bazą.";
  88. mysql_close($baza); 
  89. } else echo "Nie można połączyć się z serwerem MySQL.";
  90. //w przypadku braku błędów wysyłamy list potwierdzajacy rejestracje
  91. if ($wynik) {
  92. //wczytujemy list do wysłania
  93. include('list.php');
  94. //wysyłamy dane na podany adres email w trakcie rejestracji
  95. mail($email, "Tytuł wiadomości", $list, "From: $twoj_adres");
  96. echo "<font color=\"#000000\">Aby dokończyć proces rejestracji odbierz e-mail.</font>";
  97. } else {
  98. echo"Wystąpił błąd. W przypadku ponownego pojawienia się komunikatu skontaktuj s
    ię z 
  99. dministratorem <a href=\" \">kontakt</a>";
  100. }
  101. }
  102. }
  103. ?>


3) zawartość pliku list.php
  1. <?php
  2. $list="Aby potwierdzic rejestracje w serwisie … kliknij w ciagu 48 godzin na adres:
  3. … /potwierdz.html?kod=$kod
  4.  
  5. Jezeli nie chcesz sie rejestrowac, zignoruj ten list.
  6. ";
  7. ?>


4) zawartość pliku potwierdz.html
  1. <?php
  2. //zawartość pliku potwierdz.html
  3. $kod = htmlspecialchars(stripslashes(trim($_GET["kod"])), ENT_QUOTES);
  4. if ($kod<>"") {
  5. //wybieramy tabele user
  6. include('user.php');
  7. if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
  8. if (mysql_select_db($mysql_baza)) {
  9. $wynik = mysql_query("DELETE FROM $mysql_tabela 
  10. WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=1");
  11. $wynik = mysql_query("UPDATE $mysql_tabela 
  12. SET status='5', data=NOW() WHERE kod='$kod' and status=1");
  13. $wynik = mysql_query("SELECT * FROM $mysql_tabela 
  14. WHERE kod='$kod' and status=5");
  15. } else echo "Nie można połączyć się z bazą.";
  16. mysql_close($baza);
  17. } else echo "Nie można połączyć się z serwerem MySQL.";
  18. if (mysql_num_rows($wynik)==1) {
  19. $dane = mysql_fetch_array($wynik);
  20. echo "Dziękujemy. Rejestracja została zakończona pomyślnie.";
  21. }
  22. }
  23. if ($kod=="" or mysql_num_rows($wynik)<>1) {
  24. echo "Rejestracja nie może zostać dokończona - sprawdź czy link jest poprawny lub skontaktuj się z administratorem <a href=\" … \">kontakt</p>";
  25. }
  26. ?>


co o tym sądzicie?
drPayton
1. CSS w osobnym pliku
2. Czemu pliki php mają rozszerzenie html? Niby działa, ale po co to?
3. Walidacji formularza JS'em brak... TO akurat poważny błąd
4. Funkcja eregi nie rozróżnia wielkości liter, więc nie ma sensu podawać w zestawie a-zA-Z, wystarczy a-z ([a-zA-Z0-9_.])
5. Sprawdzanie poprawności maila nie działa jak należy, mogę podać mail postaci: login@costam.ghsgfhjgj
Proponuję zmienić:
  1. <?php
  2. eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$",$email)
  3. ?>

na:
  1. <?php
  2. preg_match('/^[A-Z0-9._-]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9].[A-Z.]{2,6}$/i', $mail)
  3. ?>


To tyle, dalej mi się nie chce sprawdzać tiredsmiley.gif;P
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.