Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] Rejestracja użytkownika
if_error
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 6.06.2007

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


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?

Ten post edytował if_error 28.08.2007, 19:07:48
Go to the top of the page
+Quote Post
drPayton
post
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


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
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 Aktualny czas: 22.08.2025 - 04:43