Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Skrypt rejestracji - problem
Forum PHP.pl > Forum > Przedszkole
Popek231
Witam, mam problem, gdyż rejestrując się mogę zrobić dużo kont o tym samym nicku... nie da się potwierdzać ( chyba przez to że się źle rejestrują userzy:D ) i logować... Plik db.php jest prawidłowo napisany więc nie przez to...
Daje wam kody kilku plików rejestracji (pliki z formularzami pomijam [np. logowanie, rejestracja, itd.] ) :
to kod pliku rejestr2.php:
  1. <?php
  2. if ($_POST['koniec']) {
  3. include 'db.php'; // połączenie się z bazą danych
  4. /*
  5. CREATE TABLE `user` (
  6.   `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  7.   `login` VARCHAR(30) NOT NULL,
  8.   `pass` VARCHAR(30) NOT NULL,
  9.   `email` VARCHAR(100) NOT NULL,
  10.   `data` VARCHAR(20) NOT NULL,
  11.   `aktywny` TINYINT(1) DEFAULT 0,
  12.   PRIMARY KEY (`id`)
  13. );
  14. */
  15. $login = $_POST['login'];
  16. $pass = $_POST['pass'];
  17. $pass2 = $_POST['pass2'];
  18. $email = $_POST['email'];
  19. $email2 = $_POST['email2'];
  20. $data = date('d-m-Y');
  21.  
  22. if (strlen($login) < 3 or strlen($login) > 30) { $komunikat = 'Błędny login lub puste pole';}
  23. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) { $komunikat = 'Błędny adres email';}
  24. if (strlen($pass) < 6 or strlen($pass) > 30 ) { $komunikat = 'Błędne hasło lub puste pole';}
  25. if ($email == $email2 ) { $komunikat = 'Emaile nie zgadzają się';}
  26. if ($pass == $pass2) { $komunikat = 'Hasła nie zgadzają się';}
  27.  
  28. $pass = md5($pass);
  29.  
  30. $wynik = mysql_query("SELECT * FROM user WHERE login='$login'");
  31. if (mysql_num_rows($wynik) <> 0) { $komunikat = "Ten login jest zajety";}
  32.  
  33. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$login', '$pass', '$email', '$data', '0')");
  34.  
  35. if ($wynik) {
  36. $list="Witaj $login!
  37. Dane do zalogowania:
  38. Login: $login
  39. Haslo: takie jakie podałeś przy rejestracji
  40. Aby aktywować swoje konto kliknij w link: #STRONKA#/logow/potwierdz.php?user=$login
  41. Dziękuje za rejestracje, administrator strony";
  42. mail($email, "Link Aktywacyjny", $list,"From: <Admin@STRONKA>");
  43.  
  44. $komunikat = "<p>Dziękuję za rejestracje ".$login."! W ciagu nabliższych 5 minut dostaniesz wiadomość e-mail z linkiem aktywacyjnym konta.</p> <br> Aktywuj konto i <a href='formularz.php'>Zaloguj się</a>";
  45. } else { echo 'Nie zarejestrowałeś się, spróbuj ponownie!'; }
  46. mysql_close($polaczenie);
  47. }
  48. ?>

to kod potwierdz.php:
  1. <? include('head.php'); ?>
  2. <?php
  3. include('db.php');
  4. $login = $_GET['user'];
  5. /*
  6.   mysql_query("UPDATE user SET aktywny=1 WHERE login=$login ");
  7.   if(mysql_affected_rows()==0)
  8.   {
  9.   print'Aktywacja ukończona pomyślnie. Możesz już korzystać z naszego serwisu. <a href="formularz.php">Zaloguj się!</a>';
  10.   }
  11.   else
  12.   {
  13.   print'Podano nieistniejącego użytkownika!';
  14.   }
  15. */
  16.  
  17. $wynik = mysql_query("SELECT * FROM $tabela
  18. WHERE login=$login and aktywny=1");
  19.  
  20. if (mysql_num_rows($wynik) == 1) {
  21. echo '<span class="powodzenie">Aktywowałeś już swoje konto.</span>';
  22. exit;
  23. } else {
  24. // $wynik = mysql_query("UPDATE $tabela
  25. // SET aktywny='1', data=NOW() WHERE login=$login and aktywny=0");
  26. $wynik = mysql_query("SELECT * FROM $tabela
  27. WHERE login=$login and aktywny=1");
  28. if (mysql_num_rows($wynik) == 1) {
  29. echo '<span class="powodzenie">Dziękujemy. Rejestracja została zakończona poprawnie. Możesz się teraz zalogować.</span>';
  30. }
  31. }
  32.  
  33. // jeżeli został wprowadzony zły link, wyświetla się błąd
  34. if (!$kod or mysql_num_rows($wynik)<>1) {
  35. echo '<p>Aktywowanie konta nie powiodło się.</p>';
  36. }
  37. mysql_close($polaczenie);
  38.  
  39. ?>
  40. <? include('foot.php'); ?>

to kod login.php:
  1. <?php
  2. if ($_POST['koniec']) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  3.  
  4. include('db.php');
  5.  
  6. // sprawdzanie czy to nie jest admin
  7. include("admin.php");
  8. $login = $_POST['login'];
  9. $pass = $_POST['pass'];
  10. if ($login == $adl) {
  11. if ($pass == $adp) {
  12. $_SESSION['loged'] = $login;
  13. $_SESSION['rang'] = "admin";
  14. echo '<meta http-equiv="Refresh" content="0 url=admp.php" >';
  15. }
  16. }
  17. $pass = md5($pass);
  18.  
  19. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  20. login='$login' and pass='$pass' and aktywny=0");
  21. // jeżeli nie aktywował konta
  22. if (mysql_num_rows($wynik) == 1) {
  23. $informacja = mysql_fetch_array($wynik);
  24. $komunikat = 'To konto nie jest aktywne!<br>Musisz je aktywowac by sie zalogowac!<br>Wejdz na E-mail, odszukaj wiadomość z linkiem aktywacyjnym i aktywuj konto.<br>';
  25. }
  26. // użytkownika loguje
  27. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  28. login='$login' and pass='$pass' and aktywny=1");
  29. if (mysql_num_rows($wynik) == 1) {
  30. $informacja = mysql_fetch_array($wynik);
  31. $_SESSION["login"] = $informacja["login"];
  32. header('Location: index.php ');
  33. } else {
  34. echo 'Zostały wprowadzone nieprawidłowe dane!';
  35. }
  36. mysql_close($polaczenie);
  37.  
  38. $_SESSION['loged'] = $login;
  39. $_SESSION['rang'] = "user";
  40. }
  41. ?>
Damonsson
Możesz zrobić dużo kont o tym samym nicku bo sprawdzasz czy nick istnieje i jeśli tak, to do zmiennej $komunikat przypisujesz "Ten login jest zajety". Nic więcej z tym nie robiąc, albo ja niedowidzę.

te linijki:
  1. $wynik = mysql_query("SELECT * FROM user WHERE login='$login'");
  2. if (mysql_num_rows($wynik) <> 0) { $komunikat = "Ten login jest zajety";}
greycoffey
Jak wyżej, do tego projektując bazę danych, polecam dodawać indexy UNIQUE na unikalne wartości, taka rada z własnego doświadczenia wink.gif
Popek231
UNIQUE czyli że nie może być ta sama wartość w tabeli, tak? i zaraz zmienie na UNIQUE, w php tak samo - dodam exit; smile.gif
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.