Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Rejestracja
Forum PHP.pl > Forum > Przedszkole
Deotho
  1. <?php
  2. ?>
  3.  
  4. <?php include('templates/header.php'); ?>
  5.  
  6. <?php
  7. include ("config/db.php");
  8.  
  9. //Flirtujemy dane.
  10. $login = addslashes($_POST['login']);
  11. $haslo = addslashes($_POST['haslo']);
  12. $email = addslashes($_POST['email']);
  13.  
  14. //Sprawdzamy czy użytkownik podał poprawne dane.
  15. if (isset($_POST['submit'])) {
  16. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $login)) {
  17. } else {
  18. echo "Nazwa użytkownika zawiera niedozwolone znaki!";
  19. }
  20. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $haslo)) {
  21. } else {
  22. echo "Hasło zawiera niedozwolone znaki!";
  23. }
  24. if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$_POST["userEmail"])) {
  25. } else {
  26. echo "Email zawiera niedozwolone znaki!";
  27. }
  28. if (empty($login)) die ('Pole z nazwą użytkonika nie może być puste!');
  29. if (empty($haslo)) die ('Pole z haslem nie może być puste!');
  30. if (empty($email)) die ('Pole z emailem nie może być puste!');
  31.  
  32. $db = mysql_query("SELECT * FROM users WHERE u_name='$_POST[login]' ");
  33. if (!$_POST['login'] OR !$_POST['haslo'] OR !$_POST['email']) {
  34. print "Nie wypełniono wszystkich pól formularza.";
  35. if (mysql_num_rows($db)==1) {
  36. print "Podana nazwa użytkownika jest już zajęta."; }
  37. else {
  38. $_POST["haslo"]=SHA1($_POST["haslo"]);
  39. $actCode=str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  40. $headers="MIME-Version: 1.0\r\n";
  41. $headers.="Content-type: text/html; charset=iso-8859-2\r\n";
  42. $content="<html><head><title>Aktywacja Konta</title</head>
  43. <body>
  44. Aby aktywować konto musisz kliknąć poniższy link aktywujący:<br>
  45. <a href=\"http://twojastrona.com/register.php?active=".$actCode."\"> <a href="http://twojastrona.com/register.php?active=&quot;.$actCode.&quot;" target="_blank">http://twojastrona.com/register.php?active...;actCode."</a> </a><br></body></html>";
  46. mail($_POST["email"], "Link Aktywacyjny", $content, $headers);
  47. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$_POST[login]', '$_POST[haslo]', '$_POST[email]', '$actCode')");
  48. print"Na podany adres emailowy został wysłany klucz aktywacyjny.";
  49. }
  50. }
  51. elseif($_GET["active"])
  52. {
  53. mysql_query("UPDATE users SET active=1 WHERE active_key='$_GET[active]' ");
  54. {
  55. print"Twoje konto zostało aktywowane.";
  56. }
  57. else
  58. {
  59. print"Podany kod aktywacyjny jest nieprawidłowy.";
  60. }
  61. }
  62. }
  63. ?>
  64.  
  65. <form action="register.php" method="post">
  66. <input type="hidden" name="submit" value="true">
  67. Nazwa <input type="text" name="login" maxlength="20"><br>
  68. Hasło <input type="password" name="haslo" maxlength="30"><br>
  69. Podaj E-Mail <input type="text" name="email" maxlength="64"><br>
  70. <input type="submit" value="Rejestracja">
  71. </form>
  72.  
  73. <?php include('templates/footer.php'); ?>


Po kliknięciu na Rejestracja wszystko jest ok, ale nie tworzy konta w bazie.
Dodatkowo prosiłbym o ocenę kodu - to mój pierwszy.
Lwik
Przejrzałem wybiórczo bo napaćkane strasznie, mnie osobiściem mieszanie php z HTML'em strasznie denerwuje..
przy zapytaniu insertującym
  1. mysql_query(Tresc zapytania) or die(mysql_error());

Przeanalizuj to co Ci zwróci błąd.
  1. <?php
  2. ?>
  3.  
  4. <?php include('templates/header.php'); ?>
  5.  
  6. <?php
  7. include ("config/db.php");

Po co tak?
  1. <?php
  2. include_once('templates/header.php');
  3. include_once("config/db.php");


PS: Na start możesz poczytać o MYSQLi i PDO.
Niktoś
Cytat
$_POST["haslo"]=SHA1($_POST["haslo"]);
-To jest błędne, gdyż nie nadpiszesz zmiennej z tablicy $_POST, ani jej nie zmodyfikujesz.
Powinno być:
$haslo=SHA1($_POST["haslo"]); -czyli powinieneś utworzyć zmienną i przypisać do niej jakąś wartość $_POST.
Kokoszz
Cytat
Przejrzałem wybiórczo bo napaćkane strasznie, mnie osobiściem mieszanie php z HTML'em strasznie denerwuje..

a że wtrącę się w temat offtopickiem lekkim - jak to wg Ciebie powinno wyglądać? smile.gif

W ten sposób?
  1. <html>
  2. //kod strony
  3. </html>
  4. <?php
  5. // kod php
  6. ?>


czy raczej, osobno plik html i osobno plik php?
Deotho
Cytat
Notice: Undefined index: userEmail in D:\Program Files\WebServ\httpd\register.php on line 24
Notice: Undefined index: active in D:\Program Files\WebServ\httpd\register.php on line 52


To wyskakuje po dodaniu kodu:
  1. ini_set('display_errors','1');


Wiem, że funkcja email nie będzie działała na localhost, ale konto i tak powinno tworzyć.

Całość koduje po edycji:
  1. <?php
  2. ini_set('display_errors','1');
  3. include_once('templates/header.php');
  4. include_once("config/db.php");
  5.  
  6. //Flirtujemy dane.
  7. $login = addslashes($_POST['login']);
  8. $haslo = md5($_POST['haslo']);
  9. $email = addslashes($_POST['email']);
  10.  
  11. //Sprawdzamy czy użytkownik podał poprawne dane.
  12. if (isset($_POST['submit'])) {
  13. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $login)) {
  14. } else {
  15. echo "Nazwa użytkownika zawiera niedozwolone znaki!";
  16. }
  17. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $haslo)) {
  18. } else {
  19. echo "Hasło zawiera niedozwolone znaki!";
  20. }
  21. if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$_POST["userEmail"])) {
  22. } else {
  23. echo "Email zawiera niedozwolone znaki!";
  24. }
  25. if (empty($login)) die ('Pole z nazwą użytkonika nie może być puste!');
  26. if (empty($haslo)) die ('Pole z haslem nie może być puste!');
  27. if (empty($email)) die ('Pole z emailem nie może być puste!');
  28.  
  29. $db = mysql_query("SELECT * FROM users WHERE u_name='$_POST[login]' ");
  30. if (!$_POST['login'] OR !$_POST['haslo'] OR !$_POST['email']) {
  31. print "Nie wypełniono wszystkich pól formularza.";
  32. if (mysql_num_rows($db)==1) {
  33. print "Podana nazwa użytkownika jest już zajęta."; }
  34. else {
  35. $_POST["haslo"]=md5($_POST["haslo"]);
  36. $actCode=str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  37. $headers="MIME-Version: 1.0\r\n";
  38. $headers.="Content-type: text/html; charset=iso-8859-2\r\n";
  39. $content="<html><head><title>Aktywacja Konta</title</head>
  40. <body>
  41. Aby aktywować konto musisz kliknąć poniższy link aktywujący:<br>
  42. <a href=\"http://twojastrona.com/register.php?active=".$actCode."\"> <a href="http://twojastrona.com/register.php?active=&quot;.$actCode.&quot;" target="_blank">http://twojastrona.com/register.php?active...;actCode."</a> </a><br></body></html>";
  43. mail($_POST["email"], "Link Aktywacyjny", $content, $headers);
  44. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$_POST[login]', '$_POST[haslo]', '$_POST[email]', '$actCode')");
  45. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$_POST[login]', '$_POST[haslo]', '$_POST[email]', '$actCode')") or die('BŁĄD:'.mysql_error());
  46. print"Na podany adres emailowy został wysłany klucz aktywacyjny.";
  47. }
  48. }
  49. elseif($_GET["active"])
  50. {
  51. mysql_query("UPDATE users SET active=1 WHERE active_key='$_GET[active]' ");
  52. {
  53. print"Twoje konto zostało aktywowane.";
  54. }
  55. else
  56. {
  57. print"Podany kod aktywacyjny jest nieprawidłowy.";
  58. }
  59. }
  60. }
  61. ?>
  62.  
  63. <form action="register.php" method="post">
  64. <input type="hidden" name="submit" value="true">
  65. Nazwa <input type="text" name="login" maxlength="20"><br>
  66. Hasło <input type="password" name="haslo" maxlength="30"><br>
  67. Podaj E-Mail <input type="text" name="email" maxlength="64"><br>
  68. <input type="submit" value="Rejestracja">
  69. </form>
  70.  
  71. <?php include_once('templates/footer.php'); ?>


Nie wyskakuje error, a co do mieszania HTML i PHP to HTML będzie potem w oddzielnym pliku.
Lwik
Cytat(Kokoszz @ 13.05.2012, 18:10:36 ) *
a że wtrącę się w temat offtopickiem lekkim - jak to wg Ciebie powinno wyglądać? smile.gif

W ten sposób?
  1. <html>
  2. //kod strony
  3. </html>
  4. <?php
  5. // kod php
  6. ?>


czy raczej, osobno plik html i osobno plik php?

raczej opcja druga, ew jakiś system template'ów, gdzie będziemy wyświetlać php'owe szczątki. : )
  1. $login = addslashes($_POST['login']);
  2. $haslo = md5($_POST['haslo']);
  3. $email = addslashes($_POST['email']);

  1. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$_POST[login]', '$_POST[haslo]', '$_POST[email]', '$actCode')") or die('BŁĄD:'.mysql_error());

albo $_POST albo zmienna.
Niktoś
Struktura html ogólnie źle zaprojektowana.Przy planowanym przerabianiu tego skryptu musisz zwrócić uwagę jaką strukturę html będzie Ci generował skrypt.Na razie to us ciebie wygląda tak:
  1. </head>
  2. </body>
  3. </html>
  4. </form>

no i przy okazji zauważyłem dobry błąd u ciebie:

Cytat
$content="<html><head><title>Aktywacja Konta</title</head>
powinno być:

  1. $content="<html><head><title>Aktywacja Konta</title></head>



Można robić to w ten sposób jak Ty to robisz, czyli mieszać html z PHP, aby dynamicznie(w locie) generować tagi w zależności od potrzeb aplikacji ,ale trzeba robić to z głową i zgodnie z normami html.
Deotho
Dobra poprawki:
  1. <?php
  2. ini_set('display_errors','1');
  3. include_once('templates/header.php');
  4. include_once("config/db.php");
  5.  
  6. //Flirtujemy dane.
  7. $login = addslashes($_POST['login']);
  8. $haslo = md5($_POST['haslo']);
  9. $email = addslashes($_POST['email']);
  10.  
  11. //Sprawdzamy czy użytkownik podał poprawne dane.
  12. if (isset($_POST['submit'])) {
  13. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $login)) {
  14. } else {
  15. echo "Nazwa użytkownika zawiera niedozwolone znaki!";
  16. }
  17. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $haslo)) {
  18. } else {
  19. echo "Hasło zawiera niedozwolone znaki!";
  20. }
  21. if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$_POST["email"])) {
  22. } else {
  23. echo "Email zawiera niedozwolone znaki!";
  24. }
  25. if (empty($login)) die ('Pole z nazwą użytkonika nie może być puste!');
  26. if (empty($haslo)) die ('Pole z haslem nie może być puste!');
  27. if (empty($email)) die ('Pole z emailem nie może być puste!');
  28.  
  29. $db = mysql_query("SELECT * FROM users WHERE u_name='$_POST[login]' ");
  30. if (!$_POST['login'] OR !$_POST['haslo'] OR !$_POST['email']) {
  31. print "Nie wypełniono wszystkich pól formularza.";
  32. if (mysql_num_rows($db)==1) {
  33. print "Podana nazwa użytkownika jest już zajęta."; }
  34. else {
  35. $_POST["haslo"]=md5($_POST["haslo"]);
  36. $actCode=str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  37. $headers="MIME-Version: 1.0\r\n";
  38. $headers.="Content-type: text/html; charset=iso-8859-2\r\n";
  39. $content="<html><head><title>Aktywacja Konta</title></head>
  40. <body>
  41. Aby aktywować konto musisz kliknąć poniższy link aktywujący:<br>
  42. <a href=\"http://twojastrona.com/register.php?active=".$actCode."\"> <a href="http://twojastrona.com/register.php?active=&quot;.$actCode.&quot;" target="_blank">http://twojastrona.com/register.php?active...;actCode."</a> </a><br></body></html>";
  43. mail($_POST["email"], "Link Aktywacyjny", $content, $headers);
  44. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$login', '$haslo', '$email', '$actCode')");
  45. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$login', '$haslo', '$email', '$actCode')") or die('BŁĄD:'.mysql_error());
  46. print"Na podany adres emailowy został wysłany klucz aktywacyjny.";
  47. }
  48. } else
  49. if($_GET["active"]) {
  50. mysql_query("UPDATE users SET active=1 WHERE active_key='$_GET[active]' ");
  51. if (mysql_affected_rows()==1) {
  52. print"Twoje konto zostało aktywowane.";
  53. } else {
  54. print"Podany kod aktywacyjny jest nieprawidłowy.";
  55. }
  56. }
  57. }
  58. ?>
  59.  
  60. <form action="register.php" method="post">
  61. <input type="hidden" name="submit" value="true">
  62. Nazwa <input type="text" name="login" maxlength="20"><br>
  63. Hasło <input type="password" name="haslo" maxlength="30"><br>
  64. Podaj E-Mail <input type="text" name="email" maxlength="64"><br>
  65. <input type="submit" value="Rejestracja">
  66. </form>
  67.  
  68. <?php include_once('templates/footer.php'); ?>


Z błędem numer jeden się uporałem po prostu źle wpisana zmienna = brak sprawdzenia emailu.
Teraz sprawdza email, ale gdy wpiszę test@interia.pl wyskakuje, że znaki nieprawidłowe, a @ musi być.
Co do mysql_error poprawiłem na zmienne wszędzie i nadal nie wyskakuje nic.
Niktoś
<a href=\"http://twojastrona.com/register.php?active=".$actCode."\"> <a href="http://twojastrona.com/register.php?active=&quot;.$actCode.&quot;" target="_blank">http://twojastrona.com/register.php?active...;actCode."</a> </a><br></body></html>";

Zagnieżdżanie a href w a href?Doprawdy nie mam pojęcia czy taki odnośnik zadziała w ogóle.Pomijając usuń te tagi co pogrubione i dodaj je do liniki:

  1. <?php include_once('templates/footer.php');
  2. $content.="</body></html>";
  3. ?>

zamykając tym samym strukturę html.
Deotho
Nic to nie dało, a tylko wyskoczył błąd z content.
  1. <?php include_once('templates/footer.php');
  2. $content.="</body></html>";
  3. ?>


Notice: Undefined index: active in D:\Program Files\WebServ\httpd\register.php on line 52
Notice: Undefined variable: content in D:\Program Files\WebServ\httpd\register.php on line 72

  1. <?php
  2. ini_set('display_errors','1');
  3. include_once('templates/header.php');
  4. include_once("config/db.php");
  5.  
  6. //Flirtujemy dane.
  7. $login = addslashes($_POST['login']);
  8. $haslo = md5($_POST['haslo']);
  9. $email = addslashes($_POST['email']);
  10.  
  11. //Sprawdzamy czy użytkownik podał poprawne dane.
  12. if (isset($_POST['submit'])) {
  13. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $login)) {
  14. } else {
  15. echo "Nazwa użytkownika zawiera niedozwolone znaki!";
  16. }
  17. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $haslo)) {
  18. } else {
  19. echo "Hasło zawiera niedozwolone znaki!";
  20. }
  21. if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$_POST["email"])) {
  22. } else {
  23. echo "Email zawiera niedozwolone znaki!";
  24. }
  25. if (empty($login)) die ('Pole z nazwą użytkonika nie może być puste!');
  26. if (empty($haslo)) die ('Pole z haslem nie może być puste!');
  27. if (empty($email)) die ('Pole z emailem nie może być puste!');
  28.  
  29. $db = mysql_query("SELECT * FROM users WHERE u_name='$_POST[login]' ");
  30. if (!$_POST['login'] OR !$_POST['haslo'] OR !$_POST['email']) {
  31. print "Nie wypełniono wszystkich pól formularza.";
  32. if (mysql_num_rows($db)==1) {
  33. print "Podana nazwa użytkownika jest już zajęta."; }
  34. else {
  35. $_POST["haslo"]=md5($_POST["haslo"]);
  36. $actCode=str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  37. $headers="MIME-Version: 1.0\r\n";
  38. $headers.="Content-type: text/html; charset=iso-8859-2\r\n";
  39. $content="<html><head><title>Aktywacja Konta</title></head>
  40. <body>
  41. Aby aktywować konto musisz kliknąć poniższy link aktywujący:<br>
  42. <a href=\"http://twojastrona.com/register.php?active=".$actCode."\"> <a href="http://twojastrona.com/register.php?active=&quot;.$actCode.&quot;" target="_blank">http://twojastrona.com/register.php?active...;actCode."</a> </a>";
  43. mail($_POST["email"], "Link Aktywacyjny", $content, $headers);
  44. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$login', '$haslo', '$email', '$actCode')");
  45. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$login', '$haslo', '$email', '$actCode')") or die('BŁĄD:'.mysql_error());
  46. print"Na podany adres emailowy został wysłany klucz aktywacyjny.";
  47. }
  48. } else
  49. if($_GET["active"]) {
  50. mysql_query("UPDATE users SET active=1 WHERE active_key='$_GET[active]' ");
  51. if (mysql_affected_rows()==1) {
  52. print"Twoje konto zostało aktywowane.";
  53. } else {
  54. print"Podany kod aktywacyjny jest nieprawidłowy.";
  55. }
  56. }
  57. }
  58. ?>
  59.  
  60. <form action="register.php" method="post">
  61. <input type="hidden" name="submit" value="true">
  62. Nazwa <input type="text" name="login" maxlength="20"><br>
  63. Hasło <input type="password" name="haslo" maxlength="30"><br>
  64. Podaj E-Mail <input type="text" name="email" maxlength="64"><br>
  65. <input type="submit" value="Rejestracja">
  66. </form>
  67.  
  68. <?php include_once('templates/footer.php');
  69. $content.="</body></html>";
  70. ?>
Lwik
Powiem tak.. raz używasz jednej zmiennej raz drugiej.. IFy masz cholernie dziwnie ułożone.
  1. $db = mysql_query("SELECT * FROM users WHERE u_name='$_POST[login]' ");

u_name?
później
  1. mysql_query("INSERT INTO users (login, haslo, email, active_key) VALUES('$login', '$haslo', '$email', '$actCode')") or die('BŁĄD:'.mysql_error());


Tak szybko w edytorze forumowym:
  1. if (isset($_POST['login'])) {
  2. $login = addslashes($_POST['login']);
  3. $haslo = md5($_POST['haslo']);
  4. $email = addslashes($_POST['email']);
  5. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $login)) {
  6. } else {
  7. echo "Nazwa użytkownika zawiera niedozwolone znaki!";
  8. }
  9. if (preg_match("/^[a-zA-Z0-9_ ]+$/" , $haslo)) {
  10. } else {
  11. echo "Hasło zawiera niedozwolone znaki!";
  12. }
  13.  
  14. if (empty($login)) die ('Pole z nazwą użytkonika nie może być puste!');
  15. if (empty($haslo)) die ('Pole z haslem nie może być puste!');
  16. if (empty($email)) die ('Pole z emailem nie może być puste!');
  17.  
  18. $db = mysql_query("SELECT * FROM users WHERE login=' ".$login."' ") or die(mysql_error());
  19. if (!$_POST['login'] || !$_POST['haslo'] || !$_POST['email']) die ("Nie wypełniono wszystkich pól formularza.");
  20. if (mysql_num_rows($db)==1) {
  21. print "Podana nazwa użytkownika jest już zajęta."; }
  22. else {
  23. $actCode=str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  24.  
  25. mysql_query("INSERT INTO users (`login`, `haslo`, `email`, `active_key`) VALUES('$login', '$haslo', '$email', '$actCode')") or die('BŁĄD:'.mysql_error());
  26. echo"Na podany adres emailowy został wysłany klucz aktywacyjny.";
  27. }
  28.  
  29. }
  30.  
  31. ?>
  32.  
  33. <form action="index.php" method="post">
  34. Nazwa <input type="text" name="login" maxlength="20"><br>
  35. Hasło <input type="password" name="haslo" maxlength="30"><br>
  36. Podaj E-Mail <input type="text" name="email" maxlength="64"><br>
  37. <input type="submit" value="Rejestracja">
  38. </form>
  39.  


@niktos, a może domyka to w pliku footer'a? Nigdy nic nie wiadomo, więc ja byłbym daleki od takich poprawek, skoncentrujmy się na błędzie który znalazł.
Deotho
Faktycznie Lawik nie zauwazyłem tego.

Wszystko już działa, ale duplikuje mi wpisy w bazie jak wpisze takie same dane kilka razy.
Można jakoś zrobić, aby nie można było na ten sam login oraz email się zarejestrować?
Niktoś
Ok ,drobna poprawka ,powinno działać.
  1. <?php
  2.  
  3. include_once('templates/footer.php');
  4. if (isset($content)){
  5. $content.="</body></html>";
  6. }
  7. ?>
Lwik
Odpaliłem sobie z ciekawości to na localhoście tworząc przykładową bazę:
  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `login` varchar(20) NOT NULL,
  4. `haslo` varchar(64) NOT NULL,
  5. `email` varchar(25) NOT NULL,
  6. `active_key` varchar(50) NOT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

działa poprawnie.
Co do unikalności rekordów
  1. $db = mysql_query("SELECT * FROM users WHERE login=' ".$login."' or email = '".$email."' ") or die(mysql_error());

i jakiś klucz w mysql.
Deotho
Wszystko działa jak należy. Dziękuje panowie.
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.