Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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

Posty w temacie


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

 



RSS Aktualny czas: 28.09.2025 - 03:08