Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Rejestracja oraz logowanie
Forum PHP.pl > Forum > Przedszkole
WebspyPL
Witam!
Piszę właśnie skrypt rejestracji i logowania i mam pewnie problem, a mianowicie.

1. Jak zrobić, aby podczas rejestracji były wymagane wszystkie pola?
2. Podczas rejestracji wyświetla się błąd, a mianowicie:
Kod
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/webspy/public_html/rejestracja.php:1) in /home/webspy/public_html/rejestracja.php on line 3


Wracając do punktu pierwszego to chciałbym, aby:

Login, hasło, powtórz hasło oraz imię było wymagane! - Jeśli nie uzupełnimy tych pól to się nie zarejestrujemy.

A, oto kod rejestracji:
  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7. <h3>Zarejestruj się:</h3>
  8.  
  9. <?php
  10.  
  11. include('inc/db.php');
  12.  
  13. function html_header()
  14. {
  15. global $new_win_width, $new_win_height;
  16. ?>
  17. <HTML>
  18. <HEAD>
  19.  
  20. <TITLE>Rejestracja</TITLE>
  21. </HEAD>
  22. <BODY>
  23. <?php
  24. }
  25.  
  26. function html_footer()
  27. {
  28. ?>
  29. </BODY>
  30. </HTML>
  31. <?php
  32. }
  33.  
  34.  
  35. function in_use($userid)
  36. {
  37. global $tabela_uzytkownikow;
  38.  
  39. $query = "SELECT userid FROM $tabela_uzytkownikow WHERE userid = 'userid'";
  40. $result = mysql_query($query);
  41. if(!mysql_num_rows($result)) return 0;
  42. else return 1;
  43. }
  44.  
  45.  
  46. function register_form()
  47. {
  48. global $userid, $username;
  49. global $PHP_SELF;
  50. ?>
  51. <CENTER><H3>Utworz swoje konto</H3></CENTER>
  52. <FORM METHOD="post" ACTION="<?php echo $PHP_SELF ?>">
  53. <INPUT TYPE="hidden" NAME="action" VALUE="register">
  54. <DIV ALIGN="center"><CENTER><TABLE BORDER="1" WIDTH="90%">
  55. <TR>
  56. <TH WIDTH="30%" NOWRAP>Imię</TH>
  57. <TD WIDTH="70%"><INPUT TYPE="text" NAME="username" VALUE="<?php echo $username ?>" SIZE="20"></TD>
  58. </TR>
  59. <TR>
  60. <TH WIDTH="30%" NOWRAP>Login</TH>
  61. <TD WIDTH="70%"><INPUT TYPE="text" NAME="userid" VALUE="<?php echo $userid ?>" SIZE="8" MAXLENGHT="8"></TD>
  62. </TR>
  63. <TR>
  64. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  65. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword" SIZE="15"></TD>
  66. </TR>
  67. <TR>
  68. <TH WIDTH="30%" NOWRAP>Powtórz hasło</TH>
  69. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword2" SIZE="15"></TD>
  70. </TR>
  71. <TR>
  72. <TH WIDTH="30%" COLSPAN="2" NOWRAP>
  73. <INPUT TYPE="submit" VALUE="Zarejestruj się">
  74. <INPUT TYPE="reset" VALUE="Wyczyść">
  75. </TH>
  76. </TR>
  77. </TABLE>
  78. </CENTER></DIV>
  79. </FORM>
  80. <?php
  81. }
  82.  
  83.  
  84. function create_account() // funckja ta tworzy tworzy konto danego użytkownika
  85. {
  86. global $userid, $username, $userpassword, $userpassword2;
  87.  
  88.  
  89. $link_id = include('inc/db.php');
  90.  
  91. $query = "INSERT INTO user VALUES(NULL, '$userid', password('$userpassword'), '$username')";
  92.  
  93. $result = mysql_query($query);
  94.  
  95. html_header();
  96. ?>
  97. <CENTER><H3>
  98. <?php echo $username ?>, dziękujemy za zarejestrowanie się
  99. </H3></CENTER>
  100.  
  101. <DIV ALIGN="center"><CENTER><TABLE BORDER="1" WIDTH="90%">
  102. <TR>
  103. <TH WIDTH="30%" NOWRAP>Imię:</TH>
  104. <TD WIDTH="70%"><?php echo $username ?></TD>
  105. </TR>
  106. <TR>
  107. <TH WIDTH="30%" NOWRAP>Login</TH>
  108. <TD WIDTH="70%"><?php echo $userid ?></TD>
  109. </TR>
  110. <TR>
  111. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  112. <TD WIDTH="70%"><?php echo $userpassword ?></TD>
  113. </TR>
  114. </TABLE></CENTER></DIV>
  115. <?php
  116. html_footer();
  117. }
  118. switch($action)
  119. {
  120. case "register":
  121. create_account();
  122. break;
  123. default:
  124. html_header();
  125. register_form();
  126. html_footer();
  127. break;
  128. }
  129. ?>
  130.  
  131. </div>
  132. <?php include('stopka.php'); ?>
glacier
Co do punktu 1 po lini 88 dałbym warunek:

  1. if (empty($username) or empty($userpassword) or empty($userpassword2)) {
  2.  
  3. echo "nie wypełniłeś wszystkich pól formularza! wróć i popraw";
  4.  
  5. }
  6.  
  7. else {
  8.  
  9. $query = "INSERT INTO user VALUES(NULL, '$userid', password('$userpassword'), '$username')"; //tutaj zapytanie do bazy danych, które dodaje rekordy do tabeli i dalsza część Twojego kodu
  10.  
  11. }



Oczywiście warunki możesz rozdzielić elseif, tak, żeby skrypt wykrywał którego pola dany user nie uzupełnił i podał mu dokładny komunikat np. "nie wypełniłeś pola hasło" czy "podałeś nieprawidłowy login".

Co do problemu drugiego, myślę że tutaj znajdziesz odpowiedź.
WebspyPL
No dobra zaraz sprawdzę, a teraz mam taki problem. Gdy np. zarejestruje się na swojej stronie, a moj Login brzmi Webspy to jak wejdę ponownie w rejestracje to mogę znów założyć takie same konto. To znaczy, że w bazie istnieje mój stary login, ale na nowo tworzy nowego użytkownika. Co zrobić ?

Kod modyfikowałem i wygląda teraz tak:
  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7.  
  8. <?php
  9.  
  10. include('inc/db.php');
  11.  
  12. function html_header()
  13. {
  14. global $new_win_width, $new_win_height;
  15. ?>
  16. <HTML>
  17. <HEAD>
  18.  
  19. <TITLE>Rejestracja</TITLE>
  20. </HEAD>
  21. <BODY>
  22. <?php
  23. }
  24.  
  25. function html_footer()
  26. {
  27. ?>
  28. </BODY>
  29. </HTML>
  30. <?php
  31. }
  32.  
  33.  
  34. function in_use($userid)
  35. {
  36. global $tabela_uzytkownikow;
  37.  
  38. $query = "SELECT userid FROM $tabela_uzytkownikow WHERE userid = 'userid'";
  39. $result = mysql_query($query);
  40. if(!mysql_num_rows($result)) return 0;
  41. else return 1;
  42. }
  43.  
  44.  
  45. function register_form()
  46. {
  47. global $userid, $username;
  48. global $PHP_SELF;
  49. ?>
  50. <CENTER><H3>Utwórz swoje konto</H3></CENTER>
  51. <FORM METHOD="post" ACTION="<?php echo $PHP_SELF ?>">
  52. <INPUT TYPE="hidden" NAME="action" VALUE="register">
  53. <DIV ALIGN="center"><CENTER><TABLE BORDER="0" WIDTH="90%">
  54. <TR>
  55. <TH WIDTH="30%" NOWRAP>Imię</TH>
  56. <TD WIDTH="70%"><INPUT TYPE="text" NAME="username" VALUE="<?php echo $username ?>" SIZE="15"></TD>
  57. </TR>
  58. <TR>
  59. <TH WIDTH="30%" NOWRAP>Login</TH>
  60. <TD WIDTH="70%"><INPUT TYPE="text" NAME="userid" VALUE="<?php echo $userid ?>" SIZE="15" MAXLENGHT="8"></TD>
  61. </TR>
  62. <TR>
  63. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  64. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword" SIZE="15"></TD>
  65. </TR>
  66. <TR>
  67. <TH WIDTH="30%" NOWRAP>Powtórz hasło</TH>
  68. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword2" SIZE="15"></TD>
  69. </TR>
  70. <TR>
  71. <TH WIDTH="30%" COLSPAN="2" NOWRAP>
  72. <INPUT TYPE="submit" VALUE="Zarejestruj się">
  73. <INPUT TYPE="reset" VALUE="Wyczyść">
  74. </TH>
  75. </TR>
  76. </TABLE>
  77. </CENTER></DIV>
  78. </FORM>
  79. <?php
  80. }
  81.  
  82.  
  83. function create_account() // funckja ta tworzy tworzy konto danego użytkownika
  84. {
  85. global $userid, $username, $userpassword, $userpassword2;
  86.  
  87.  
  88. $link_id = include('inc/db.php');
  89.  
  90. $query = "INSERT INTO user VALUES(NULL, '$userid', password('$userpassword'), '$username')";
  91.  
  92. $result = mysql_query($query);
  93.  
  94. html_header();
  95. ?>
  96. <CENTER><H3>
  97. <?php echo $userid ?>, dziękujemy za zarejestrowanie się. Teraz możesz się zalogować.
  98. </H3></CENTER>
  99.  
  100. <DIV ALIGN="center"><CENTER><TABLE BORDER="0" WIDTH="90%">
  101. <TR>
  102. <TH WIDTH="30%" NOWRAP>Imię:</TH>
  103. <TD WIDTH="70%"><?php echo $username ?></TD>
  104. </TR>
  105. <TR>
  106. <TH WIDTH="30%" NOWRAP>Login</TH>
  107. <TD WIDTH="70%"><?php echo $userid ?></TD>
  108. </TR>
  109. <TR>
  110. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  111. <TD WIDTH="70%"><?php echo $userpassword ?></TD>
  112. </TR>
  113. </TABLE></CENTER></DIV>
  114. <?php
  115. html_footer();
  116. }
  117. switch($action)
  118. {
  119. case "register":
  120. create_account();
  121. break;
  122. default:
  123. html_header();
  124. register_form();
  125. html_footer();
  126. break;
  127. }
  128. ?>
  129.  
  130. <center> <CENTER><H3>Przejdź do <a href="index.php" style="text-decoration: none;">Strona Główna</a></H3></CENTER></center>
  131.  
  132. </div>
  133. <?php include('stopka.php'); ?>
amii
Najprościej to zrób UNIQUE na tabeli z użytkownikami albo dodaj coś na kształt funkcji in_use() w create_account() , która będzie sprawdzała loginy
WebspyPL
ammi,
Cytat
Najprościej to zrób UNIQUE na tabeli z użytkownikami


To znaczy tak?:
  1. UNIQUE userid (userid)
glacier
Czyli musisz zastosować kolejny warunek. Nie jestem wielkim programistą i często chodzę na około, z braku wiedzy, ale zrobiłbym tak:

1. przeszukał konkretną tabele pod wzlędęm username
2. sprawdził czy wynik jest równy 0 lub 1
3. Jeśli 0 to pozwalam dodać usera do bazy, jeśli > niż 1 daje komunikat "że taki user istniej"


Zapytanie przeszukujące tabele:

  1.  
  2. $zapytanie = "SELECT users FROM $tabela_uzytkownikow where username like "%$nazwa_pola_z_formularza%"""; //szukamy czy taki user występuje w bazie
  3.  
  4. $ile = mysql_num_rows($zapytanie); // liczymy ilość pobranych rekordów
  5.  
  6. elseif ($ile != 0) {
  7.  
  8. echo "taki user istnieje. wpisz inna nazwę";
  9.  
  10. }
  11.  
  12. else {
  13.  
  14. $query = "INSERT INTO user VALUES(NULL, '$userid', password('$userpassword'), '$username')";
  15.  
  16. }
  17.  


Oczywiście musisz dostosować powyższy kod do swojego kodu.


//EDIT

tak jak mówiłem, lubie sobie utrudniać życie smile.gif koledzy powyżej podali oczywiście łatwiejszy, szybszy i o wiele bardziej wydajniejszy sposób smile.gif)
WebspyPL
glacier, wiesz ja jestem kompletnie zielony w tym i mam pytanko, a mianowicie czy tamten kod, który podałem wyżej jest dobry? Co do bazy danych.

Cytat("amii")
Najprościej to zrób UNIQUE na tabeli z użytkownikami


  1. UNIQUE userid (userid)
glacier
To już kolega amii musi się wypowiedzieć. Ja musiałbym przeszukać internet, w jaki sposób wyświetlić komunikat, że dany user istnieje.
WebspyPL
Dodałem ten kod do tabeli w bazie danych i nadal mogę stworzyć konto użytkownika o takim samym loginie.

:// pomocy.
glacier
Pokaz kod, z dodanymi wierszami.
WebspyPL
Moje zapytanie do bazy wygląda tak:
  1. CREATE TABLE user (
  2. usernumber MEDIUMINT(10) NOT NULL AUTO_INCREMENT,
  3. username VARCHAR(30) NOT NULL,
  4. userid VARCHAR(10) BINARY NOT NULL,
  5. userpassword VARCHAR(15) BINARY NOT NULL,
  6. PRIMARY KEY (userid),
  7. UNIQUE usernumber (usernumber)
  8. UNIQUE userid (userid)
  9. );


Co do rejestracja.php to plik jest bez zmian z mojego poprzedniego posta.
  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7.  
  8. <?php
  9.  
  10. include('inc/db.php');
  11.  
  12. function html_header()
  13. {
  14. global $new_win_width, $new_win_height;
  15. ?>
  16. <HTML>
  17. <HEAD>
  18.  
  19. <TITLE>Rejestracja</TITLE>
  20. </HEAD>
  21. <BODY>
  22. <?php
  23. }
  24.  
  25. function html_footer()
  26. {
  27. ?>
  28. </BODY>
  29. </HTML>
  30. <?php
  31. }
  32.  
  33.  
  34. function in_use($userid)
  35. {
  36. global $tabela_uzytkownikow;
  37.  
  38. $query = "SELECT userid FROM $tabela_uzytkownikow WHERE userid = 'userid'";
  39. $result = mysql_query($query);
  40. if(!mysql_num_rows($result)) return 0;
  41. else return 1;
  42. }
  43.  
  44.  
  45. function register_form()
  46. {
  47. global $userid, $username;
  48. global $PHP_SELF;
  49. ?>
  50. <CENTER><H3>Utwórz swoje konto</H3></CENTER>
  51. <FORM METHOD="post" ACTION="<?php echo $PHP_SELF ?>">
  52. <INPUT TYPE="hidden" NAME="action" VALUE="register">
  53. <DIV ALIGN="center"><CENTER><TABLE BORDER="0" WIDTH="90%">
  54. <TR>
  55. <TH WIDTH="30%" NOWRAP>Imię</TH>
  56. <TD WIDTH="70%"><INPUT TYPE="text" NAME="username" VALUE="<?php echo $username ?>" SIZE="15"></TD>
  57. </TR>
  58. <TR>
  59. <TH WIDTH="30%" NOWRAP>Login</TH>
  60. <TD WIDTH="70%"><INPUT TYPE="text" NAME="userid" VALUE="<?php echo $userid ?>" SIZE="15" MAXLENGHT="8"></TD>
  61. </TR>
  62. <TR>
  63. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  64. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword" SIZE="15"></TD>
  65. </TR>
  66. <TR>
  67. <TH WIDTH="30%" NOWRAP>Powtórz hasło</TH>
  68. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword2" SIZE="15"></TD>
  69. </TR>
  70. <TR>
  71. <TH WIDTH="30%" COLSPAN="2" NOWRAP>
  72. <INPUT TYPE="submit" VALUE="Zarejestruj się">
  73. <INPUT TYPE="reset" VALUE="Wyczyść">
  74. </TH>
  75. </TR>
  76. </TABLE>
  77. </CENTER></DIV>
  78. </FORM>
  79. <?php
  80. }
  81.  
  82.  
  83. function create_account() // funckja ta tworzy tworzy konto danego użytkownika
  84. {
  85. global $userid, $username, $userpassword, $userpassword2;
  86.  
  87.  
  88. $link_id = include('inc/db.php');
  89.  
  90. $query = "INSERT INTO user VALUES(NULL, '$userid', password('$userpassword'), '$username')";
  91.  
  92. $result = mysql_query($query);
  93.  
  94. html_header();
  95. ?>
  96. <CENTER><H3>
  97. <?php echo $userid ?>, dziękujemy za zarejestrowanie się. Teraz możesz się zalogować.
  98. </H3></CENTER>
  99.  
  100. <DIV ALIGN="center"><CENTER><TABLE BORDER="0" WIDTH="90%">
  101. <TR>
  102. <TH WIDTH="30%" NOWRAP>Imię:</TH>
  103. <TD WIDTH="70%"><?php echo $username ?></TD>
  104. </TR>
  105. <TR>
  106. <TH WIDTH="30%" NOWRAP>Login</TH>
  107. <TD WIDTH="70%"><?php echo $userid ?></TD>
  108. </TR>
  109. <TR>
  110. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  111. <TD WIDTH="70%"><?php echo $userpassword ?></TD>
  112. </TR>
  113. </TABLE></CENTER></DIV>
  114. <?php
  115. html_footer();
  116. }
  117. switch($action)
  118. {
  119. case "register":
  120. create_account();
  121. break;
  122. default:
  123. html_header();
  124. register_form();
  125. html_footer();
  126. break;
  127. }
  128. ?>
  129.  
  130. <center> <CENTER><H3>Przejdź do <a href="index.php" style="text-decoration: none;">Strona Główna</a></H3></CENTER></center>
  131.  
  132. </div>
  133. <?php include('stopka.php'); ?>
glacier
  1.  
  2. CREATE TABLE user (
  3. usernumber MEDIUMINT(10) NOT NULL AUTO_INCREMENT,
  4. username VARCHAR(30) NOT NULL,
  5. userid VARCHAR(10) BINARY NOT NULL,
  6. userpassword VARCHAR(15) BINARY NOT NULL,
  7. PRIMARY KEY (userid),
  8. UNIQUE usernumber (usernumber),
  9. UNIQUE username (username)
  10. );
  11.  
WebspyPL
glacier, username odpowiada za imię, a userid za login.

To jak w końcu? biggrin.gif
glacier
Prawda.

Więc tak:

  1.  
  2. CREATE TABLE user (
  3. usernumber MEDIUMINT(10) NOT NULL AUTO_INCREMENT,
  4. username VARCHAR(30) NOT NULL,
  5. userid VARCHAR(10) BINARY NOT NULL,
  6. userpassword VARCHAR(15) BINARY NOT NULL,
  7. PRIMARY KEY (userid),
  8. UNIQUE usernumber (usernumber),
  9. UNIQUE userid (userid)
  10. );
  11.  
  12.  


Sprawdzałem. Nie mogę dodać usera o takim samym loginie, więc musi działać.
WebspyPL
Dobra już nie duplikuje rekordów w bazie danych, ale gdy stworze takie same konto przez rejestracja.php to nadal piszę na stronie, że utworzono konto - pomimo, że go nie utworzono. Jak mam to zmienić?
Barcelona
Wklej jeszcze raz kod rejestracja.php
WebspyPL
Oto rejestracja.php
  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7.  
  8. <?php
  9.  
  10. include('inc/db.php');
  11.  
  12. function html_header()
  13. {
  14. global $new_win_width, $new_win_height;
  15. ?>
  16. <HTML>
  17. <HEAD>
  18.  
  19. <TITLE>Rejestracja</TITLE>
  20. </HEAD>
  21. <BODY>
  22. <?php
  23. }
  24.  
  25. function html_footer()
  26. {
  27. ?>
  28. </BODY>
  29. </HTML>
  30. <?php
  31. }
  32.  
  33.  
  34. function in_use($userid)
  35. {
  36. global $tabela_uzytkownikow;
  37.  
  38. $query = "SELECT userid FROM $tabela_uzytkownikow WHERE userid = 'userid'";
  39. $result = mysql_query($query);
  40. if(!mysql_num_rows($result)) return 0;
  41. else return 1;
  42. }
  43.  
  44.  
  45. function register_form()
  46. {
  47. global $userid, $username;
  48. global $PHP_SELF;
  49. ?>
  50. <CENTER><H3>Utworz swoje konto</H3></CENTER>
  51. <FORM METHOD="post" ACTION="<?php echo $PHP_SELF ?>">
  52. <INPUT TYPE="hidden" NAME="action" VALUE="register">
  53. <DIV ALIGN="center"><CENTER><TABLE BORDER="0" WIDTH="90%">
  54. <TR>
  55. <TH WIDTH="30%" NOWRAP>Imię</TH>
  56. <TD WIDTH="70%"><INPUT TYPE="text" NAME="username" VALUE="<?php echo $username ?>" SIZE="15"></TD>
  57. </TR>
  58. <TR>
  59. <TH WIDTH="30%" NOWRAP>Login</TH>
  60. <TD WIDTH="70%"><INPUT TYPE="text" NAME="userid" VALUE="<?php echo $userid ?>" SIZE="15" MAXLENGHT="8"></TD>
  61. </TR>
  62. <TR>
  63. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  64. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword" SIZE="15"></TD>
  65. </TR>
  66. <TR>
  67. <TH WIDTH="30%" NOWRAP>Powtórz hasło</TH>
  68. <TD WIDTH="70%"><INPUT TYPE="password" NAME="userpassword2" SIZE="15"></TD>
  69. </TR>
  70. <TR>
  71. <TH WIDTH="30%" COLSPAN="2" NOWRAP>
  72. <INPUT TYPE="submit" VALUE="Zarejestruj się">
  73. <INPUT TYPE="reset" VALUE="Wyczyść">
  74. </TH>
  75. </TR>
  76. </TABLE>
  77. </CENTER></DIV>
  78. </FORM>
  79. <?php
  80. }
  81.  
  82.  
  83. function create_account() // funckja ta tworzy tworzy konto danego uĹźytkownika
  84. {
  85. global $userid, $username, $userpassword, $userpassword2;
  86.  
  87.  
  88. $link_id = include('inc/db.php');
  89.  
  90. $query = "INSERT INTO user VALUES(NULL, '$userid', password('$userpassword'), '$username')";
  91.  
  92. if (!$query) {
  93. echo "blad";
  94. }
  95.  
  96. else {
  97.  
  98. $result = mysql_query($query);
  99.  
  100. }
  101.  
  102. html_header();
  103. ?>
  104. <CENTER><H3>
  105. <?php echo $username ?>, dziękujemy za zarejestrowanie się. Teraz możesz się zalogować.
  106. </H3></CENTER>
  107.  
  108. <DIV ALIGN="center"><CENTER><TABLE BORDER="0" WIDTH="90%">
  109. <TR>
  110. <TH WIDTH="30%" NOWRAP>Imię</TH>
  111. <TD WIDTH="70%"><?php echo $username ?></TD>
  112. </TR>
  113. <TR>
  114. <TH WIDTH="30%" NOWRAP>Login</TH>
  115. <TD WIDTH="70%"><?php echo $userid ?></TD>
  116. </TR>
  117. <TR>
  118. <TH WIDTH="30%" NOWRAP>Hasło</TH>
  119. <TD WIDTH="70%"><?php echo $userpassword ?></TD>
  120. </TR>
  121. </TABLE></CENTER></DIV>
  122. <?php
  123. html_footer();
  124. }
  125. switch($action)
  126. {
  127. case "register":
  128. create_account();
  129. break;
  130. default:
  131. html_header();
  132. register_form();
  133. html_footer();
  134. break;
  135. }
  136. ?>
  137.  
  138. </div>
  139. <?php include('stopka.php'); ?>
Barcelona
Powiem Ci że bardzo ale to bardzo utrudniasz sobie życie.

Po pierwsze to zobacz linie 30. Po co zamykasz </html> na początku strony.
Rejestracja użytkownika nie jest niczym innym jak dodawaniem nowych rekordów do bazy danych, a Ty z tego prostego procesu zrobiłeś zbiór funkcji i zmiennych i to wszystko jest tak porozrzucane że ciężko się połapać.

Zobacz jak wygląda prosty kod dodawania usera do bazy.

  1. <?
  2. $tryb = trim($_REQUEST["tryb"]);
  3.  
  4. if ($tryb=="dodaj") {
  5.  
  6. $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  7. $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  8. $email = htmlspecialchars(stripslashes(trim($_POST["email"])), ENT_QUOTES);
  9.  
  10. // tutaj sprawdzam czy login ma więcej niż 4 znaki oraz czy nie ma polskich liter oraz spacji, jezeli jest ok to robi zapytanie czy taki login juz jest w bazie.
  11.  
  12. if (strlen($login)<4 or !eregi("^[a-zA-Z0-9_.]+$",$login)) { $blad++;
  13. echo "Login musi mieć od 3 do 50 znaków bez polskich liter i spacji!";
  14. } else {
  15. $wynik=mysql_query("SELECT * FROM rejestracja WHERE login='$login'");
  16. if (mysql_num_rows($wynik)<>0) { $blad++;
  17. echo "Login jest zajęty";
  18. }
  19. }
  20.  
  21. if (strlen($haslo)<6 or strlen($haslo)>50 or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  22. echo "Hasło musi mieć od 6 do 50 znaków bez polskich liter i spacji!";
  23. }
  24.  
  25. // Jezeli nie ma bledu to przechodzi dalej
  26.  
  27. if ($blad==0) {
  28. $kod = uniqid(rand());
  29. $haslo = md5($haslo); // zaszyfrowanie hasla
  30. $wynik = mysql_query("INSERT INTO rejestracja VALUES('$login', '$haslo', '$email')");
  31. if ($wynik) {
  32. echo "<p>Konto zostało założone</p>";
  33. }
  34. } else $tryb="";
  35. }
  36.  
  37. if ($tryb=="") {
  38. // Formularz do zakladania konta. Daje input o nazwie tryb oraz wartoscia dodaj.
  39. <form action="?strona=rejestracja" method="post">
  40. <input type="hidden" name="tryb" value="dodaj" />
  41. <table>
  42. <tr>
  43. <td>login:*</td>
  44. <td><input type="text" name="login" value="$login" /></td>
  45. </tr>
  46. <tr>
  47. <td>hasło:*</td>
  48. <td><input type="password" name="haslo" value="$haslo" /></td>
  49. </tr>
  50. <tr>
  51. <td>email:</td>
  52. <td><input type="text" name="email" value="$email" /></td>
  53. </tr>
  54. <tr>
  55. <td colspan="2" align="right">
  56. <div class="buttons">
  57. <button type="submit" class="pozytywnie">
  58. <img src="images/tick.png" alt=""/>
  59. Rejestruj
  60. </button>
  61. </div></td>
  62. </tr>
  63. </table>
  64. </form>
  65. ';
  66. }
  67. ?>


Bez żadnych kombinacji.

Mam nadzieje że chociaż trochę pomogłem.
WebspyPL
Wkleiłem ten Twój kod i tak to wygląda:
Kod
Warning: mysql_query() [function.mysql-query]: Access denied for user 'webspy'@'localhost' (using password: NO) in /home/webspy/public_html/rejestracja.php on line 23

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/webspy/public_html/rejestracja.php on line 23

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/webspy/public_html/rejestracja.php on line 24

Warning: mysql_query() [function.mysql-query]: Access denied for user 'webspy'@'localhost' (using password: NO) in /home/webspy/public_html/rejestracja.php on line 38

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/webspy/public_html/rejestracja.php on line 38


A tutaj rejestracja.php
  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7.  
  8. <?
  9. $tryb = trim($_REQUEST["tryb"]);
  10.  
  11. if ($tryb=="dodaj") {
  12.  
  13. $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  14. $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  15. $email = htmlspecialchars(stripslashes(trim($_POST["email"])), ENT_QUOTES);
  16.  
  17. // tutaj sprawdzam czy login ma więcej niż 4 znaki oraz czy nie ma polskich liter oraz spacji, jezeli jest ok to robi zapytanie czy taki login juz jest w bazie.
  18.  
  19. if (strlen($login)<4 or !eregi("^[a-zA-Z0-9_.]+$",$login)) { $blad++;
  20. echo "Login musi mieć od 3 do 50 znaków bez polskich liter i spacji!";
  21. } else {
  22. $wynik=mysql_query("SELECT * FROM rejestracja WHERE login='$login'");
  23. if (mysql_num_rows($wynik)<>0) { $blad++;
  24. echo "Login jest zajęty";
  25. }
  26. }
  27.  
  28. if (strlen($haslo)<6 or strlen($haslo)>50 or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  29. echo "Hasło musi mieć od 6 do 50 znaków bez polskich liter i spacji!";
  30. }
  31.  
  32. // Jezeli nie ma bledu to przechodzi dalej
  33.  
  34. if ($blad==0) {
  35. $kod = uniqid(rand());
  36. $haslo = md5($haslo); // zaszyfrowanie hasla
  37. $wynik = mysql_query("INSERT INTO rejestracja VALUES('$login', '$haslo', '$email')");
  38. if ($wynik) {
  39. echo "<p>Konto zostało założone</p>";
  40. }
  41. } else $tryb="";
  42. }
  43.  
  44. if ($tryb=="") {
  45. // Formularz do zakladania konta. Daje input o nazwie tryb oraz wartoscia dodaj.
  46. <form action="?strona=rejestracja" method="post">
  47. <input type="hidden" name="tryb" value="dodaj" />
  48. <table>
  49. <tr>
  50. <td>login:*</td>
  51. <td><input type="text" name="login" value="$login" /></td>
  52. </tr>
  53. <tr>
  54. <td>hasło:*</td>
  55. <td><input type="password" name="haslo" value="$haslo" /></td>
  56. </tr>
  57. <tr>
  58. <td>email:</td>
  59. <td><input type="text" name="email" value="$email" /></td>
  60. </tr>
  61. <tr>
  62. <td colspan="2" align="right">
  63. <div class="buttons">
  64. <button type="submit" class="pozytywnie">
  65. <img src="images/tick.png" alt=""/>
  66. Rejestruj
  67. </button>
  68. </div></td>
  69. </tr>
  70. </table>
  71. </form>
  72. ';
  73. }
  74. ?>
  75.  
  76.  
  77. </div>
  78. <?php include('stopka.php'); ?>


PS: Jakieś zapytanie do tego kodu?
Barcelona
A jesteś połączony z bazą ? Z tego co widzę to masz Access denied.
WebspyPL
Faktycznie nie zauważyłem, ale teraz po rejestracji mam:
  1. Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/webspy/public_html/rejestracja.php on line 24


Rejestracja.php
  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7. <?
  8. include('inc/db.php');
  9. $tryb = trim($_REQUEST["tryb"]);
  10.  
  11. if ($tryb=="dodaj") {
  12.  
  13. $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  14. $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  15. $email = htmlspecialchars(stripslashes(trim($_POST["email"])), ENT_QUOTES);
  16.  
  17. // tutaj sprawdzam czy login ma więcej niż 4 znaki oraz czy nie ma polskich liter oraz spacji, jezeli jest ok to robi zapytanie czy taki login juz jest w bazie.
  18.  
  19. if (strlen($login)<4 or !eregi("^[a-zA-Z0-9_.]+$",$login)) { $blad++;
  20. echo "Login musi mieć od 3 do 50 znaków bez polskich liter i spacji!";
  21. } else {
  22. $wynik=mysql_query("SELECT * FROM rejestracja WHERE login='$login'");
  23. if (mysql_num_rows($wynik)<>0) { $blad++;
  24. echo "Login jest zajęty";
  25. }
  26. }
  27.  
  28. if (strlen($haslo)<6 or strlen($haslo)>50 or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  29. echo "Hasło musi mieć od 6 do 50 znaków bez polskich liter i spacji!";
  30. }
  31.  
  32. // Jezeli nie ma bledu to przechodzi dalej
  33.  
  34. if ($blad==0) {
  35. $kod = uniqid(rand());
  36. $haslo = md5($haslo); // zaszyfrowanie hasla
  37. $wynik = mysql_query("INSERT INTO rejestracja VALUES('$login', '$haslo', '$email')");
  38. if ($wynik) {
  39. echo "<p>Konto zostało założone</p>";
  40. }
  41. } else $tryb="";
  42. }
  43.  
  44. if ($tryb=="") {
  45. // Formularz do zakladania konta. Daje input o nazwie tryb oraz wartoscia dodaj.
  46. <form action="?strona=rejestracja" method="post">
  47. <input type="hidden" name="tryb" value="dodaj" />
  48. <table>
  49. <tr>
  50. <td>login:*</td>
  51. <td><input type="text" name="login" value="$login" /></td>
  52. </tr>
  53. <tr>
  54. <td>hasło:*</td>
  55. <td><input type="password" name="haslo" value="$haslo" /></td>
  56. </tr>
  57. <tr>
  58. <td>email:</td>
  59. <td><input type="text" name="email" value="$email" /></td>
  60. </tr>
  61. <tr>
  62. <td colspan="2" align="right">
  63. <div class="buttons">
  64. <button type="submit" class="pozytywnie">
  65. <img src="images/tick.png" alt=""/>
  66. Rejestruj
  67. </button>
  68. </div></td>
  69. </tr>
  70. </table>
  71. </form>
  72. ';
  73. }
  74. ?>
  75.  
  76.  
  77. </div>
  78. <?php include('stopka.php'); ?>
jacobson
w linijce 24 masz nazwe tabeli "rejestracja" czy jestes pewien ze ta nazwa odpowiada Twojej nazwietabeli w bazie ?
albo czy masz pole "login"
WebspyPL
Dobra, a teraz taki problem z zapytaniem.

  1. CREATE TABLE rejestracja (
  2. login VARCHAR(30) NOT NULL,
  3. haslo VARCHAR(30) NOT NULL,
  4. email VARCHAR(30) NOT NULL,
  5. );



A to mi zwraca phpMyAdmin po kliknięciu na wykonanie zapytania:
Cytat
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 5


Barcelona
  1. CREATE TABLE IF NOT EXISTS `rejestracja` (
  2. `login` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  3. `haslo` varchar(32) COLLATE utf8_polish_ci NOT NULL,
  4. `email` varchar(120) COLLATE utf8_polish_ci NOT NULL
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
WebspyPL
Dobra wszystko działa, ale teraz gdy założę konto o nicku Webspy to mogę ponownie założyć konto o takim samym nicku. :/
Barcelona
Hmm sam korzystam z tego skryptu i u mnie nie ma takiej opcji żeby zdublowało rekordy.
WebspyPL
A, no właśnie duplikuje, a oto screen z bazy:




Dodatkowo podczas zakładania konta jest błąd:

Cytat
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/webspy/public_html/rejestracja.php on line 24

Konto zostało założone



A, oto kod z rejestracja.php
  1. <?php
  2. session_start(); // rozpoczęcie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7. <?
  8. include('inc/db.php');
  9. $tryb = trim($_REQUEST["tryb"]);
  10.  
  11. if ($tryb=="dodaj") {
  12.  
  13. $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  14. $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  15. $email = htmlspecialchars(stripslashes(trim($_POST["email"])), ENT_QUOTES);
  16.  
  17. // tutaj sprawdzam czy login ma więcej niż 4 znaki oraz czy nie ma polskich liter oraz spacji, jezeli jest ok to robi zapytanie czy taki login juz jest w bazie.
  18.  
  19. if (strlen($login)<4 or !eregi("^[a-zA-Z0-9_.]+$",$login)) { $blad++;
  20. echo "Login musi mieć od 3 do 50 znaków bez polskich liter i spacji!";
  21. } else {
  22. $wynik=mysql_query("SELECT username FROM user WHERE username='$login'");
  23. if (mysql_num_rows($wynik)>0) { $blad++;
  24. echo "Login jest zajęty";
  25. }
  26. }
  27.  
  28. if (strlen($haslo)<6 or strlen($haslo)>50 or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  29. echo "Hasło musi mieć od 6 do 50 znaków bez polskich liter i spacji!";
  30. }
  31.  
  32. // Jezeli nie ma bledu to przechodzi dalej
  33.  
  34. if ($blad==0) {
  35. $kod = uniqid(rand());
  36. $haslo = md5($haslo); // zaszyfrowanie hasla
  37. $wynik = mysql_query("INSERT INTO rejestracja VALUES('$login', '$haslo', '$email')");
  38. if ($wynik) {
  39. echo "<p>Konto zostało założone</p>";
  40. }
  41. } else $tryb="";
  42. }
  43.  
  44. if ($tryb=="") {
  45. // Formularz do zakladania konta. Daje input o nazwie tryb oraz wartoscia dodaj.
  46. <form action="?strona=rejestracja" method="post">
  47. <input type="hidden" name="tryb" value="dodaj" />
  48. <table>
  49. <tr>
  50. <td>login</td>
  51. <td><input type="text" name="login" value="" /></td>
  52. </tr>
  53. <tr>
  54. <td>hasło</td>
  55. <td><input type="password" name="haslo" value="" /></td>
  56. </tr>
  57. <tr>
  58. <td>email:</td>
  59. <td><input type="text" name="email" value="" /></td>
  60. </tr>
  61. <tr>
  62. <td colspan="2" align="right">
  63. <div class="buttons">
  64. <button type="submit">
  65. <img src="images/tick.png" alt=""/>
  66. Rejestruj
  67. </button>
  68. </div></td>
  69. </tr>
  70. </table>
  71. </form>
  72. ';
  73. }
  74. ?>
  75.  
  76.  
  77. </div>
  78. <?php include('stopka.php'); ?>


Odświeżam!
gorden
1. zamiast ereg użyj preg, jest szybsze. w dodatku ereg ma zostać usunięte
2. mysql_error aby poznać przyczynę
3. die aby zapobiec dodawaniu rekordów kiedy wystąpi jakiś błąd
4. $login, $haslo, $email deklaruj tak:
ponieważ Twoje deklaracja jest narażona na sql injection
5. zamiast SELECT username daj SELECT *

a co do samego kodu:
linia 20, zapomniałeś sprawdzić czy powyżej 50 znaków
używaj empty
WebspyPL
Cytat(gorden @ 24.12.2011, 00:28:36 ) *
2. mysql_error aby poznać przyczynę
3. die aby zapobiec dodawaniu rekordów kiedy wystąpi jakiś błąd
4. $login, $haslo, $email deklaruj tak:
ponieważ Twoje deklaracja jest narażona na sql injection


Jestem początkującym mógłbyś wyjaśnić ?

1,5,6 - zaraz zrobię.
Barcelona
Cytat(gorden @ 24.12.2011, 00:28:36 ) *
1. zamiast ereg użyj preg, jest szybsze. w dodatku ereg ma zostać usunięte
2. mysql_error aby poznać przyczynę
3. die aby zapobiec dodawaniu rekordów kiedy wystąpi jakiś błąd
4. $login, $haslo, $email deklaruj tak:
ponieważ Twoje deklaracja jest narażona na sql injection
5. zamiast SELECT username daj SELECT *

a co do samego kodu:
linia 20, zapomniałeś sprawdzić czy powyżej 50 znaków
używaj empty


I ja skorzystałem z Twoich porad smile.gif

Jutro sobie posiedzę nad preg. Poczytałem i faktycznie eregi mają wycofać.

@WebspyPL kolega podał Ci linki do manuala, jeżeli chcesz się nauczyć PHP to rób coś sam a nie czekaj gotowce. Trochę lektury nie zaszkodzi.
gorden
linie 14-16, chodzi mi o podmianę na podany przeze mnie przykład:
  1. $login = mysql_real_escape_string(trim($_POST["login"]));


linia 23
  1. $wynik=mysql_query("SELECT * FROM user WHERE username='$login'") or die(mysql_error());

błąd, jaki Ci się wyświetli sobie wygoogluj i popraw. na pewno coś będzie. ewentualnie wklej tutaj.
WebspyPL
Dobra, a więc mój kod rejestracja.php wygląda następująco:
  1. <?php
  2. session_start(); // rozpoczÄ?cie sesji
  3. ?>
  4.  
  5. <?php include('header.php'); ?>
  6. <div class="content">
  7. <?
  8. include('inc/db.php');
  9. $tryb = trim($_REQUEST["tryb"]);
  10.  
  11. if ($tryb=="dodaj") {
  12.  
  13.  
  14. $login = mysql_real_escape_string(trim($_POST["login"]));
  15. $haslo = mysql_real_escape_string(trim($_POST["haslo"]));
  16. $email = mysql_real_escape_string(trim($_POST["email"]));
  17.  
  18. // tutaj sprawdzam czy login ma więcej niż 4 znaki oraz czy nie ma polskich liter oraz spacji, jezeli jest ok to robi zapytanie czy taki login juz jest w bazie.
  19.  
  20. if (strlen($login)<4 or !eregi("^[a-zA-Z0-9_.]+$",$login)) { $blad++;
  21. echo "Login musi mieć od 3 do 50 znaków bez polskich liter i spacji!";
  22. } else {
  23. $wynik=mysql_query("SELECT * FROM rejestracja WHERE login='$login'") or die(mysql_error());
  24. if (mysql_num_rows($wynik)>0) { $blad++;
  25. echo "Wybrany login jest już używany przez innego użytkownika.";
  26. }
  27. }
  28.  
  29. if (strlen($haslo)<6 or strlen($haslo)>50 or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
  30. echo "Hasło musi mieć od 6 do 50 znaków bez polskich liter i spacji!";
  31. }
  32.  
  33. // Jezeli nie ma bledu to przechodzi dalej
  34.  
  35. if ($blad==0) {
  36. $kod = uniqid(rand());
  37. $haslo = md5($haslo); // zaszyfrowanie hasla
  38. $wynik = mysql_query("INSERT INTO rejestracja VALUES('$login', '$haslo', '$email')");
  39. if ($wynik) {
  40. echo "<p>Twojego konto zostało utworzone. Teraz możesz się zalogować.</p>";
  41. }
  42. } else $tryb="";
  43. }
  44.  
  45. if ($tryb=="") {
  46. // Formularz do zakladania konta. Daje input o nazwie tryb oraz wartoscia dodaj.
  47. <form action="?strona=rejestracja" method="post">
  48. <input type="hidden" name="tryb" value="dodaj" />
  49. <table>
  50. <tr>
  51. <td>login</td>
  52. <td><input type="text" name="login" value="" /></td>
  53. </tr>
  54. <tr>
  55. <td>hasło</td>
  56. <td><input type="password" name="haslo" value="" /></td>
  57. </tr>
  58. <tr>
  59. <td>email:</td>
  60. <td><input type="text" name="email" value="" /></td>
  61. </tr>
  62. <tr>
  63. <td colspan="2" align="right">
  64. <div class="buttons">
  65. <button type="submit">
  66. <img src="images/tick.png" alt=""/>
  67. Rejestruj
  68. </button>
  69. </div></td>
  70. </tr>
  71. </table>
  72. </form>
  73. ';
  74. }
  75. ?>
  76.  
  77.  
  78. </div>
  79. <?php include('stopka.php'); ?>


I tutaj mam pytanie. Jak zrobić, aby w polu:

Login - było można wpisać tylko 18 znaków?
Hasło - jak zrobić, aby było można wpisać tylko 30 znaków?
Wicio
  1. <input name="login" maxlength="18" />
  2. <input type="password" name="haslo" maxlength="30" />


Może mi się wydaję, ale takie podstawy to szybciej znajdziesz w googlach, a nie czekając na odpowiedź na forum.
WebspyPL
Dziękuje wszystkim za pomoc plusy przyznane, a temat do zamknięcia.
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.