Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Błąd w rejestracji.
Forum PHP.pl > Forum > Przedszkole
assasin
Witam, może ktoś widzi w tym skrypcie jakiś błąd:)
Za każdym razem wywala że:
Konto zostało już aktywowane albo token lub nick jest zły...

  1. <?php
  2.  
  3. // Configuration.
  4. // Realm database.
  5. $r_db = "realmd_tbc";
  6. // IP (and port).
  7. $ip = ":3306";
  8. // Username.
  9. $user = "";
  10. // Password.
  11. $pass = "";
  12. // Site title.
  13. $title = "";
  14. $title2 = "";
  15. // End config.
  16.  
  17. function error_s($text) {
  18. echo("<p style=\"background-color:black;color:yellow;font-family:verdana;\">".$text);
  19. echo("<br /><br /><a style=\"color:orange;\" href=\"".$_SERVER["SCRIPT_NAME"]."\">Wróć...</a></p>");
  20. }
  21.  
  22. $page = '<?xml version="1.0" encoding="utf-8" ?>
  23. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  24. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  25. <head>
  26. <title>' . $title . '</title>
  27. </head>
  28. <body style="background-color:black;color:yellow;font-family:verdana;">
  29. <form method="post" action="' . $_SERVER["SCRIPT_NAME"] . '">
  30. <p style="text-align:center;">
  31. <strong>' . $title2 . ' - ' . $title . '</strong>
  32. <br /><br /><br />
  33. Login:
  34. <br /><input name="username" type="text" maxlength="14" /><br />
  35. Hasło:
  36. <br /><input name="password" type="password" maxlength="12" /><br />
  37. Email:
  38. <br /><input name="email" type="text" maxlength="50" />
  39. <br /><input name="tbc" type="checkbox" checked="checked" /> TBC<br /><br /><br />
  40. <button type="submit">Rejestruj</button>
  41. <center><img src="captcha.php" /></center>
  42. </p>
  43. </form>
  44. </body>
  45. </html>';
  46.  
  47. $user_chars = "#[^a-zA-Z0-9_\-]#";
  48. $email_chars = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
  49.  
  50. $con = @mysql_connect($ip, $user, $pass);
  51. if (!$con) {
  52. error_s("Nie można połączyć się z bazą: ".mysql_error());
  53. }
  54.  
  55. if (! empty($_POST)) {
  56. // dodajemy zmienną, która mówi, czy formularz został prawidłowo wypełniony
  57. // na początku przyjmujemy, że tak
  58. $isValid = true;
  59. if (( empty($_POST["username"])) || ( empty($_POST["password"])) || ( empty($_POST["email"])) || ( empty($_POST["tbc"]))) {
  60. error_s("You did not enter all the required information.");
  61. // jeśli jednak któreś pole jest puste, to formularz nie został prawidłowo wypełniony
  62. $isValid = false;
  63. } else {
  64. $username = strtoupper($_POST["username"]);
  65. $password = strtoupper($_POST["password"]);
  66. $email = strtoupper($_POST["email"]);
  67. $blocked = "1";
  68. $active = "0";
  69. $t = md5(uniqid(time())); //generujemy 32-bitowy token
  70. if (strlen($username) < 5) {
  71. error_s("Login jest za krótki.");
  72. // formularz nie został dobrze wypełniony również wtedy, gdy nazwa użytkownika jest zbyt krótka
  73. $isValid = false;
  74. } elseif (strlen($username) > 14) {
  75. error_s("Login jest za długi.");
  76.  
  77. // lub zbyt długa
  78. $isValid = false;
  79.  
  80. }
  81.  
  82. if (strlen($password) < 5) {
  83. error_s("Hasło jest za krótkie.");
  84. $isValid = false;
  85.  
  86. } elseif (strlen($password) > 14) {
  87. error_s("Hasło jest za długie.");
  88. $isValid = false;
  89.  
  90. }
  91. if (strlen($email) < 5) {
  92. error_s("Email jest za krótki.");
  93. $isValid = false;
  94.  
  95. } elseif (strlen($email) > 50) {
  96. error_s("Email jest za długi.");
  97. $isValid = false;
  98. }
  99.  
  100. if (preg_match($user_chars, $username)) {
  101. error_s("Nazwa użytkownika zawiera niedozwolone znaki.");
  102. $isValid = false;
  103.  
  104. } elseif (preg_match($user_chars, $password)) {
  105. error_s("Hasło zawiera niedozwolone znaki.");
  106. $isValid = false;
  107.  
  108. }
  109. if (!preg_match($email_chars, $email)) {
  110. error_s("Email ma zły format..");
  111. $isValid = false;
  112.  
  113.  
  114. }
  115. if ($_POST['tbc'] != "on") {
  116. $tbc = "0";
  117. } else {
  118. $tbc = "1";
  119. }
  120. $username = mysql_real_escape_string($username);
  121. $password = mysql_real_escape_string($password);
  122. $email = mysql_real_escape_string($email);
  123. $qry = @mysql_query("select username from ".mysql_real_escape_string($r_db).".account where username = '".$username."'", $con);
  124. if (!$qry) {
  125. error_s("Error querying database: ".mysql_error());
  126. $isValid = false;
  127.  
  128.  
  129. } elseif ($existing_username = mysql_fetch_assoc($qry)) {
  130. foreach ($existing_username as $key=>$value) {
  131. $existing_username = $value;
  132. }
  133. }
  134. $existing_username = strtoupper($existing_username);
  135. if ($existing_username == strtoupper($_POST['username'])) {
  136. error_s("Ta nazwa użytkownika (login) jest już zajęta..");
  137. $isValid = false;
  138. }
  139. unset($qry);
  140. $qry = @mysql_query("select email from ".mysql_real_escape_string($r_db).".account where email = '".$email."'", $con);
  141. }
  142. if (!$qry) {
  143. error_s("Error querying database: ".mysql_error());
  144. $isValid = false;
  145. }
  146. if ($existing_email = mysql_fetch_assoc($qry)) {
  147. foreach ($existing_email as $key=>$value) {
  148. $existing_email = $value;
  149. }
  150.  
  151. }
  152. if ($existing_email == $_POST['email']) {
  153. error_s("Ten adres email jest już zajęty.");
  154. $isValid = false;
  155.  
  156. }
  157. if ($isValid) {
  158. $sha_pass_hash = sha1(strtoupper($username).":".strtoupper($password));
  159. $register_sql = "insert into ".mysql_real_escape_string($r_db).".account (username, sha_pass_hash, email, expansion, locked, token) values (upper('".$username."'),'".$sha_pass_hash."','".$email."','".$tbc."','".$blocked."','".$t."')";
  160. $qry = @mysql_query($register_sql, $con);
  161.  
  162. $nadawca = "From: The Ocolus <gall@compzone.org>rn"; //ustawiamy nadawcę listu
  163. $temat = "Aktywuj swoje konto !"; //ustawiamy temat listu
  164. mail($email, $temat, "Dziekujemy $username za zalozenie konta w naszym serwisie. Zeby aktywowac Twoje nowo utworzone konto kliknij w ponizszy link <a href="http://www.theocolus.pl/activate.php?t=$t&n=$username" target="_blank">http://www.theocolus.pl/activate.php?t=&#0...=$username</a> Wiadomosc ta zostala wyslana do Ciebie przez osobnika, ktory posiadal IP: $REMOTE_ADDR", $nadawca); //wysyłamy list na podany przez użytkownika adres e-mail znajdujący się w zmiennej $email
  165. $wynikmail = "Dziękujemy za założenie konta w naszym serwisie ! Na podany przed chwilą przez Ciebie adres e-mail została wysłana wiadomość, którą należy odebrać i aktywować swoje konto klikając w link aktywacyjny znajdujący się w wiadomości"; //jeżeli się to uda wyświetlamy stosowną informację
  166.  
  167.  
  168. if (!$qry) {
  169. error_s("Error creating account: ".mysql_error());
  170. $isValid = false;
  171. }
  172. echo("Konto zostało utworzone pomyślnie... <br /> <br /> $wynikmail <br /> <a href=\"".$_SERVER["SCRIPT_NAME"]."\">Wróć...</a></p>");
  173. } else {
  174. echo $page;
  175. }
  176.  
  177. } else {
  178. echo($page);
  179. }
  180. ?>

activate.php

  1. <?php
  2.  
  3. // Configuration.
  4. // Realm database.
  5. $r_db = "";
  6. // IP (and port).
  7. $ip = ":3306";
  8. // Username.
  9. $user = "";
  10. // Password.
  11. $pass = "";
  12. // Site title.
  13.  
  14.  
  15.  
  16. $link = mysql_connect($ip, $user , $pass) or die("Nie można nawiązać połączenia !"); //próbujemy połączyć się z bazą danych
  17. mysql_select_db($r_db ,$link) or die("Nie można wybrać bazy danych!"); //wybieramy bazę danych, z której będziemy korzystać
  18.  
  19. $wynik = mysql_query("SELECT * FROM account WHERE token = '$t' AND username = '$username' AND (locked != '1')"); //sprawdzamy czy podany w adresie token i nick zgadza się oraz wartość pola locked (czyli czy konto zostało aktywowane)
  20.  
  21. if(mysql_num_rows($wynik) == 0) //jeżeli wartość pola locked jest równa 0 lub token, nick są błędne
  22. {
  23. echo '<center><h2>Konto zostało już aktywowane,<BR>albo token lub nick są błędne.</h2></center>'; //wyświetlamy stosowną informację
  24. }
  25. else
  26. {
  27. mysql_query("UPDATE account SET locked='0' WHERE token = '$t' AND username = '$username'", $link); //jeżeli wartość pola locked jest różna od 0 to aktywujemy to konto ustawiając pole ok na 0
  28. echo '<center><h1>Dziękujemy za aktywację konta</h1><BR><h2>Teraz możesz już z niego korzystać</h2></center>';
  29. }
  30.  
  31. mysql_close($sql_conn);
  32. ?>
mortus
W pliku activate.php musisz pobrać token i username z tablicy $_GET (odpowiednio $_GET['t'] i $_GET['n']). Poza tym źle wstawiasz trzeci parametr funkcji mail(), musisz uważać na cudzysłowy.
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.