Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Skrypt rejestracji
Forum PHP.pl > Forum > Przedszkole
Stron: 1, 2
SantaClaus
Cześć!
Chciałbym napisać swój skrypt rejestracji, który zawierałby takie informacje jak

ID - automatycznie dodaje np. Użytkownik, który zarejestruje się jako pierwszy ma 1
Nick - służy za login i nazwę użytkownika.
Hasło - wiadomo, hasło do konta
Powtórz Hasło - j/w.
Email - email potrzebny, aby zweryfikować konto.

Po kliknięciu na przycisk zarejestruj tworzy rekord w bazie danych i wysyła link aktywujący konto na email.

Jak mogę coś takiego napisać ?

?
Niktoś
Cytat
Jak mogę coś takiego napisać ?

Za pomocą PHP,odpowiednich tutoriali,manuali i klawiatury alfanumerycznej?
SantaClaus
Cytat(Niktoś @ 26.12.2011, 14:49:47 ) *
Za pomocą PHP,odpowiednich tutoriali,manuali i klawiatury alfanumerycznej?


Aleś Ty mądry! Tyle to i ja wiem. Chodzi mi jakich funkcji muszę użyć.

Na prawdę głupota ludzka nie zna granic.
Niktoś
A przeczytałeś choćby jeden z tutoriali dostępnych w internecie, na temat jak tworzyć formularze z wykorzystaniem bazy danych,przed zadaniem tegoż cudownie mądrego pytania?
sliwa007
To są podstawy php i mysql.Pobierasz dane z formularza i zapisujesz je w bazie za pomocą zapytania INSERT INTO a tutaj się pomaga a nie serwuje gotowe rozwiązania.
markonix
Cytat(SantaClaus @ 26.12.2011, 14:51:40 ) *
Na prawdę głupota ludzka nie zna granic.

baaasmiley.gif
SantaClaus
Cytat(sliwa007 @ 26.12.2011, 14:57:05 ) *
To są podstawy php i mysql.Pobierasz dane z formularza i zapisujesz je w bazie za pomocą zapytania INSERT INTO a tutaj się pomaga a nie serwuje gotowe rozwiązania.


Nie oczekuje gotowego rozwiązania. closedeyes.gif

Cytat(Niktoś @ 26.12.2011, 14:57:01 ) *
A przeczytałeś choćby jeden z tutoriali dostępnych w internecie, na temat jak tworzyć formularze z wykorzystaniem bazy danych,przed zadaniem tegoż cudownie mądrego pytania?


baaasmiley.gif
markonix
To pokaż co już napisałeś.
Niktoś
baaasmiley.gif
No i wszystko jasne,google+ temat tworzenie formularzy z wykorzystaniem bazy danych=miłego czytania życzę.
PS.Wróć jak będziesz miał jakiś problem wink.gif
bzeebzee
Przykładowy skrypt:

rejestracja.html
  1. <!-- formularz rejestracji -->
  2. <form method="post" action="add.php">
  3. <p>Login: <input type="text" name="login" /></p>
  4. <p>Password: <input type="password" name="password" /></p>
  5. <p>Retype password: <input type="password" name="re_password" /></p>
  6. <p>email: <input type="text" name="email" /></p>
  7. <p><input type="submit" name="add" value="Add user" /></p>
  8. </form>


add.php
  1. // plik obslugujacy formularz
  2. if(!isset($_POST['add'])) {
  3. header('Location: rejestracja.html');
  4. } else {
  5. $connection = myql_connect('nazwa_hosta', 'uzytkownik', 'haslo') or die(mysql_error());
  6. mysql_select_db('users');
  7.  
  8. $sSql = "INSERT INTO users('login', 'pass', 'email') VALUES ('".$_POST['login']."', '".$_POST['password']."', '".$_POST['email']."')";
  9. $query = mysql_query($sSql, $connection) or die(mysql_error());
  10. mysql_close($connection);
  11. }


Oczywiście jest to bardzo uboga i prymitywna wersja:
- brak walidacji danych z formularza
- nie sprawdza czy podane hasla sa identyczne

Pozdrawiam
bzeebzee
SantaClaus
rejestracja.php
  1. <?php
  2. session_start(); // rozpoczÄ?cie sesji
  3. ?>
  4.  
  5. <?php
  6.  
  7. if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
  8.  
  9. include 'inc/db.php'; // połączenie się z bazą danych
  10. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  11.  
  12. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  13.  
  14. // filtrowanie treści wprowadzonych przez użytkownika
  15. $login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES);
  16. $haslo = $_POST["haslo"];
  17. $haslo2 = $_POST["haslo2"];
  18. $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
  19.  
  20. // system sprawdza czy prawidło zostały wprowadzone dane
  21. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  22. $blad++;
  23. echo '<span class="blad">Proszę poprawny wprowadzić login (od 3 do 30 znaków).</span>';
  24. } else {
  25. $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
  26. if (mysql_num_rows($wynik) <> 0) {
  27. $blad++;
  28. echo '<span class="blad">Podana nazwa użytkownika została już zajęta.</span>';
  29. }
  30. }
  31. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  32. $blad++;
  33. echo '<span class="blad">Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków).</span>';
  34. }
  35. if ($haslo !== $haslo2) {
  36. $blad++;
  37. echo '<span class="blad">Podane hasła nie są ze sobą zgodne.</span>';
  38. }
  39. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  40. $blad++;
  41. echo '<span class="blad">Proszę wprowadzić poprawnie adres email.</span>';
  42. }
  43.  
  44. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  45. if ($blad == 0) {
  46.  
  47. $haslo = md5($haslo); // zaszyfrowanie hasla
  48. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  49.  
  50. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$id', '$login', '$haslo', '$email', '$kod', NOW(), '')");
  51. if ($wynik) {
  52. $list = "Witaj $login !
  53. Kliknij w poniższy link, aby aktywować swoje konto. <a href="http://www.nazwa-twojej-strony.pl/weryfikacja.php?weryfikacja=potwierdz&kod=$kod&quot;;" target="_blank">http://www.nazwa-twojej-strony.pl/weryfika...#036;kod";</a>
  54. mail($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  56. mysql_close($polaczenie);
  57. }
  58. }
  59. mysql_close($polaczenie);
  60. }
  61.  
  62. // tworzenie formularza HTML
  63. echo <<< KONIEC
  64.  
  65.   <div class="formularz">
  66.   <form class="form" action="rejestracja.php" method="post">
  67.   <input type="hidden" name="wyslane" value="TRUE" />
  68.  
  69. <p>
  70. <div class="label"><label for="login">Login:</label></div>
  71. <input type="text" name="login" id="login" />
  72. </p>
  73.  
  74. <p>
  75. <div class="label"><label for="haslo">Hasło:</label></div>
  76. <input type="password" name="haslo" id="haslo" />
  77. </p>
  78.  
  79. <p>
  80. <div class="label"><label for="haslo2">Powtórz hasło:</label></div>
  81. <input type="password" name="haslo2" id="haslo2" />
  82. </p>
  83.  
  84. <p>
  85. <div class="label"><label for="email">Email:</label></div>
  86. <input type="text" name="email" id="email" />
  87. </p>
  88.   <p class="submit">
  89.   <input type="submit" value="Zarejestruj mnie" />
  90.   </p></form>
  91. KONIEC;
  92.  
  93. } else {
  94. header('Location: /index.php');
  95. }
  96. ?>


weryfikacja.php
  1. <?php include('header.php'); ?>
  2.  
  3. <div class="content">
  4.  
  5. <?php
  6.  
  7. if ($_GET['weryfikacja'] == 'potwierdz') {
  8.  
  9. include 'inc/db.php'; // połączenie się z bazą danych
  10. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  11.  
  12. $kod = htmlspecialchars(stripslashes(strip_tags(trim($_GET['kod']))), ENT_QUOTES); // filtrowanie $_GET['kod']
  13.  
  14. // jeżeli kod znajduje się URL, skrypt najpierw patrzy czy użytkownik ma aktywne konto
  15. // jeżeli nie ma, wtedy zmienia się jego status, jeżeli nie upłynęło 48 godzin od rejestracji
  16.  
  17. $wynik = mysql_query("SELECT * FROM $tabela
  18. WHERE kod='$kod' and status=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("DELETE FROM $tabela
  25. WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=0");
  26. $wynik = mysql_query("UPDATE $tabela
  27. SET status='1', data=NOW() WHERE kod='$kod' and status=0");
  28. $wynik = mysql_query("SELECT * FROM $tabela
  29. WHERE kod='$kod' and status=1");
  30. if (mysql_num_rows($wynik) == 1) {
  31. echo '<span class="powodzenie">Dziękujemy. Rejestracja została zakończona poprawnie. Możesz się teraz zalogować.</span>';
  32. }
  33. }
  34.  
  35. // jeżeli został wprowadzony zły link, wyświetla się błąd
  36. if (!$kod or mysql_num_rows($wynik)<>1) {
  37. echo '<p>Aktywacja konta nie powiodla się.</p>';
  38. }
  39. mysql_close($polaczenie);
  40. }
  41.  
  42. ?>
  43.  
  44. </div>
  45. <?php include('footer.php'); ?>


oraz zapytanie do bazy danych:
  1. CREATE TABLE IF NOT EXISTS `user` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. `login` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  4. `haslo` varchar(32) COLLATE utf8_polish_ci NOT NULL,
  5. `email` varchar(120) COLLATE utf8_polish_ci NOT NULL
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;



Czy dobrze?
Mefiuu
fuj

co się nasuwa na pierwszy rzut oka ?:
- eregi niewspierane już,
- IMO wystarczy tylko mysql_real_escape_string,
- mysql_close bodajże niepotrzebne,
- formularz html w echo ? sad.gif
Niktoś
Używasz
$email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
To ciekawe jak ci potraktuje @ jak to jest znak specjalny.W rezultacie pewnie wysyłasz niepoprawny adres email.

Dodatkowo powiem eregi były minionej epoki teraz masz dostępne preg'i.
W tym bloku co robisz:

  1. else {
  2. $wynik = mysql_query("DELETE FROM $tabela
  3. WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=0");
  4. $wynik = mysql_query("UPDATE $tabela
  5. SET status='1', data=NOW() WHERE kod='$kod' and status=0");
  6. $wynik = mysql_query("SELECT * FROM $tabela
  7. WHERE kod='$kod' and status=1");
  8. if (mysql_num_rows($wynik) == 1) {
  9. echo '<span class="powodzenie">Dziękujemy. Rejestracja została zakończona poprawnie. Możesz się teraz zalogować.</span>';
  10.  
  11. }
  12. }

Fajnie kasujesz rekord ,żeby go potem updatować a następnie wybrać.
Chyba tak by było lepiej
  1. else {
  2. $wynik = mysql_query("UPDATE $tabela
  3. SET status='1', data=NOW() WHERE kod='$kod' and status=0");
  4. $wynik = mysql_query("SELECT * FROM $tabela
  5. WHERE kod='$kod' and status=1");
  6. if (mysql_num_rows($wynik) == 1) {
  7. echo '<span class="powodzenie">Dziękujemy. Rejestracja została zakończona poprawnie. Możesz się teraz zalogować.</span>';
  8. }
  9. }

To tak na szybkiego.
SantaClaus
Cytat
Używasz
$email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
To ciekawe jak ci potraktuje @ jak to jest znak specjalny.W rezultacie pewnie wysyłasz niepoprawny adres email.


Tzn. ?

Cytat
To tak na szybkiego.


Poprawione.

Cytat
- eregi niewspierane już,

Czy to jakiś poważny błąd ?

Mefiuu
w nowych wersjach serwerów jest nieraz tak, że Ci będzie sypało błędami na stronie że jest to niewspierane, przeżyłem to wink.gif

używaj preg_* - są bezpieczniejsze binarnie, szybsze, masz większe możliwości z tego co czytałem, a poza tym nie różni się tak bardzo od eregi - nie musisz się wyrażeń uczyć od podstaw.

@edit:

poczytaj o eregi
SantaClaus
Cytat
używaj preg_* - są bezpieczniejsze binarnie, szybsze, masz większe możliwości z tego co czytałem, a poza tym nie różni się tak bardzo od eregi - nie musisz się wyrażeń uczyć od podstaw.


A czy mógłbyś mi wyjaśnić jakbym miał to przerobić ? snitch.gif
Niktoś
Cytat
Tzn. ?

htmlspecialchars zamienia Tobie znaki specjalne na encje tak więc @ jest prawdopodobnie zmieniany w !#amp czy coś podobnego.Patrzałeś jak email zapisuje Ci się do bazy?
Mefiuu
po prostu poczytaj w manualu o preg_match i przepisz reguły wyrażeń do tej funkcji, ot i cała filozofia wink.gif

było chyba nawet do mozilli rozszerzenie że można było bezboleśnie sprawdzać "wyskrobane" przez siebie wyrażenia.
SantaClaus
Cytat
htmlspecialchars zamienia Tobie znaki specjalne na encje tak więc @ jest prawdopodobnie zmieniany w !#amp czy coś podobnego.Patrzałeś jak email zapisuje Ci się do bazy?


Nie sprawdzałem czyli, że mam usunąć htmlspecialchars ?

  1. $email = (stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);


?
gorden
do deklaracji zmiennych $login $haslo $email itp. użyj mysql_real_escape_string + trim
Niktoś
Możesz zrobić tak,zapisywać do bazy:
$email = htmlentities((trim($_POST["email"]));

Pprzy wysyłaniu, wyświetlaniu:
html_entity_decode( $email).

Jak już chcesz ,aby było bezpiecznie.
Ale,lepiej zrobisz tak jak gorden Ci polecił.
SantaClaus
  1. <?php
  2. session_start(); // rozpoczÄ?cie sesji
  3. ?>
  4.  
  5. <?php
  6.  
  7. if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
  8.  
  9. include 'inc/db.php'; // połączenie się z bazą danych
  10. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  11.  
  12. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  13.  
  14. // filtrowanie treści wprowadzonych przez użytkownika
  15. $login = mysql_real_escape_string($login));
  16. $haslo = mysql_real_escape_string($haslo));
  17. $haslo2 = mysql_real_escape_string($haslo2));
  18. $email = html_entity_decode($email);
  19.  
  20. // system sprawdza czy prawidło zostały wprowadzone dane
  21. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  22. $blad++;
  23. echo '<span class="blad">Proszę poprawny wprowadzić login (od 3 do 30 znaków).</span>';
  24. } else {
  25. $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
  26. if (mysql_num_rows($wynik) <> 0) {
  27. $blad++;
  28. echo '<span class="blad">Podana nazwa użytkownika została już zajęta.</span>';
  29. }
  30. }
  31. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  32. $blad++;
  33. echo '<span class="blad">Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków).</span>';
  34. }
  35. if ($haslo !== $haslo2) {
  36. $blad++;
  37. echo '<span class="blad">Podane hasła nie są ze sobą zgodne.</span>';
  38. }
  39. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  40. $blad++;
  41. echo '<span class="blad">Proszę wprowadzić poprawnie adres email.</span>';
  42. }
  43.  
  44. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  45. if ($blad == 0) {
  46.  
  47. $haslo = md5($haslo); // zaszyfrowanie hasla
  48. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  49.  
  50. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$id', '$login', '$haslo', '$email', '$kod', NOW(), '')");
  51. if ($wynik) {
  52. $list = "Witaj $login !
  53. Kliknij w poniższy link, aby aktywować swoje konto. <a href="http://www.nazwa-twojej-strony.pl/weryfikacja.php?weryfikacja=potwierdz&kod=$kod&quot;;" target="_blank">http://www.nazwa-twojej-strony.pl/weryfika...#036;kod";</a>
  54. mail($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  56. mysql_close($polaczenie);
  57. }
  58. }
  59. mysql_close($polaczenie);
  60. }
  61.  
  62. // tworzenie formularza HTML
  63. echo <<< KONIEC
  64.  
  65.   <div class="formularz">
  66.   <form class="form" action="rejestracja.php" method="post">
  67.   <input type="hidden" name="wyslane" value="TRUE" />
  68.  
  69. <p>
  70. <div class="label"><label for="login">Login:</label></div>
  71. <input type="text" name="login" id="login" />
  72. </p>
  73.  
  74. <p>
  75. <div class="label"><label for="haslo">Hasło:</label></div>
  76. <input type="password" name="haslo" id="haslo" />
  77. </p>
  78.  
  79. <p>
  80. <div class="label"><label for="haslo2">Powtórz hasło:</label></div>
  81. <input type="password" name="haslo2" id="haslo2" />
  82. </p>
  83.  
  84. <p>
  85. <div class="label"><label for="email">Email:</label></div>
  86. <input type="text" name="email" id="email" />
  87. </p>
  88.   <p class="submit">
  89.   <input type="submit" value="Zarejestruj mnie" />
  90.   </p></form>
  91. KONIEC;
  92.  
  93. } else {
  94. header('Location: /index.php');
  95. }
  96. ?>


Czy tak ?
Niktoś
Nie jak już:
$email =htmlentities((trim($_POST["email"]));

Jak wysyłasz emaila to w linice 55:
mail( html_entity_decode($email), "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");

SantaClaus
  1. <?php
  2. session_start(); // rozpoczÄ?cie sesji
  3. ?>
  4.  
  5. <?php
  6.  
  7. if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
  8.  
  9. include 'inc/db.php'; // połączenie się z bazą danych
  10. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  11.  
  12. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  13.  
  14. // filtrowanie treści wprowadzonych przez użytkownika
  15. $login = mysql_real_escape_string($login));
  16. $haslo = mysql_real_escape_string($haslo));
  17. $haslo2 = mysql_real_escape_string($haslo2));
  18. $email= htmlentities((trim($_POST["email"]));
  19.  
  20. // system sprawdza czy prawidło zostały wprowadzone dane
  21. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  22. $blad++;
  23. echo '<span class="blad">Proszę poprawny wprowadzić login (od 3 do 30 znaków).</span>';
  24. } else {
  25. $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
  26. if (mysql_num_rows($wynik) <> 0) {
  27. $blad++;
  28. echo '<span class="blad">Podana nazwa użytkownika została już zajęta.</span>';
  29. }
  30. }
  31. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  32. $blad++;
  33. echo '<span class="blad">Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków).</span>';
  34. }
  35. if ($haslo !== $haslo2) {
  36. $blad++;
  37. echo '<span class="blad">Podane hasła nie są ze sobą zgodne.</span>';
  38. }
  39. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  40. $blad++;
  41. echo '<span class="blad">Proszę wprowadzić poprawnie adres email.</span>';
  42. }
  43.  
  44. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  45. if ($blad == 0) {
  46.  
  47. $haslo = md5($haslo); // zaszyfrowanie hasla
  48. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  49.  
  50. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$id', '$login', '$haslo', '$email', '$kod', NOW(), '')");
  51. if ($wynik) {
  52. $list = "Witaj $login !
  53. Kliknij w poniższy link, aby aktywować swoje konto. <a href="http://www.nazwa-twojej-strony.pl/weryfika...#036;kod&quot;;" target="_blank">http://www.nazwa-twojej-strony.pl/weryfika...#036;kod";</a>
  54. mail(html_entity_decode($email), "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  56. mysql_close($polaczenie);
  57. }
  58. }
  59. mysql_close($polaczenie);
  60. }
  61.  
  62. // tworzenie formularza HTML
  63. echo <<< KONIEC
  64.  
  65.   <div class="formularz">
  66.   <form class="form" action="rejestracja.php" method="post">
  67.   <input type="hidden" name="wyslane" value="TRUE" />
  68.  
  69. <p>
  70. <div class="label"><label for="login">Login:</label></div>
  71. <input type="text" name="login" id="login" />
  72. </p>
  73.  
  74. <p>
  75. <div class="label"><label for="haslo">Hasło:</label></div>
  76. <input type="password" name="haslo" id="haslo" />
  77. </p>
  78.  
  79. <p>
  80. <div class="label"><label for="haslo2">Powtórz hasło:</label></div>
  81. <input type="password" name="haslo2" id="haslo2" />
  82. </p>
  83.  
  84. <p>
  85. <div class="label"><label for="email">Email:</label></div>
  86. <input type="text" name="email" id="email" />
  87. </p>
  88.   <p class="submit">
  89.   <input type="submit" value="Zarejestruj mnie" />
  90.   </p></form>
  91. KONIEC;
  92.  
  93. } else {
  94. header('Location: /index.php');
  95. }
  96. ?>


Poprawione. Czy coś jeszcze?

questionmark.gif
Niktoś
Widzisz nie trzeba było od razu zadać pytania dlaczego nie działa mi wysyłaka e-mail i przedstawić skrypt.
Forumowicze pomogli,po zobaczeniu skryptu,niż zadawać takie trywialne pytania typu:
Cytat
Jak mogę coś takiego napisać ?
gorden
Przykład podany przez Niktosia to przykład. A Ty go po prostu skopiowałeś. Jak już wrócisz z błędem w linii 16 i zaczniesz tutaj pisać to odsyłam Cię z góry do kursu php.
SantaClaus
  1. <?php
  2. session_start(); // rozpoczÄ?cie sesji
  3. ?>
  4.  
  5. <?php
  6.  
  7. if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
  8.  
  9. include 'inc/db.php'; // połączenie się z bazą danych
  10. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  11.  
  12. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  13.  
  14. // filtrowanie treści wprowadzonych przez użytkownika
  15. $login = mysql_real_escape_string(trim($_POST["login"]));
  16. $haslo = mysql_real_escape_string(trim($_POST["haslo2"]));
  17. $haslo2 = mysql_real_escape_string(trim($_POST["haslo2"]));
  18. $email= mysql_real_escape_string(trim($_POST["email"]));
  19.  
  20. // system sprawdza czy prawidło zostały wprowadzone dane
  21. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  22. $blad++;
  23. echo '<span class="blad">Proszę poprawny wprowadzić login (od 3 do 30 znaków).</span>';
  24. } else {
  25. $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'");
  26. if (mysql_num_rows($wynik) <> 0) {
  27. $blad++;
  28. echo '<span class="blad">Podana nazwa użytkownika została już zajęta.</span>';
  29. }
  30. }
  31. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  32. $blad++;
  33. echo '<span class="blad">Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków).</span>';
  34. }
  35. if ($haslo !== $haslo2) {
  36. $blad++;
  37. echo '<span class="blad">Podane hasła nie są ze sobą zgodne.</span>';
  38. }
  39. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  40. $blad++;
  41. echo '<span class="blad">Proszę wprowadzić poprawnie adres email.</span>';
  42. }
  43.  
  44. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  45. if ($blad == 0) {
  46.  
  47. $haslo = md5($haslo); // zaszyfrowanie hasla
  48. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  49.  
  50. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$id', '$login', '$haslo', '$email', '$kod', NOW(), '')");
  51. if ($wynik) {
  52. $list = "Witaj $login !
  53. Kliknij w poniższy link, aby aktywować swoje konto. <a href="http://www.nazwa-twojej-strony.pl/weryfika...#036;kod&quot;;" target="_blank">http://www.nazwa-twojej-strony.pl/weryfika...#036;kod";</a>
  54. mail(html_entity_decode($email), "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  56. mysql_close($polaczenie);
  57. }
  58. }
  59. mysql_close($polaczenie);
  60. }
  61.  
  62. // tworzenie formularza HTML
  63. echo <<< KONIEC
  64.  
  65.   <div class="formularz">
  66.   <form class="form" action="rejestracja.php" method="post">
  67.   <input type="hidden" name="wyslane" value="TRUE" />
  68.  
  69. <p>
  70. <div class="label"><label for="login">Login:</label></div>
  71. <input type="text" name="login" id="login" />
  72. </p>
  73.  
  74. <p>
  75. <div class="label"><label for="haslo">Hasło:</label></div>
  76. <input type="password" name="haslo" id="haslo" />
  77. </p>
  78.  
  79. <p>
  80. <div class="label"><label for="haslo2">Powtórz hasło:</label></div>
  81. <input type="password" name="haslo2" id="haslo2" />
  82. </p>
  83.  
  84. <p>
  85. <div class="label"><label for="email">Email:</label></div>
  86. <input type="text" name="email" id="email" />
  87. </p>
  88.   <p class="submit">
  89.   <input type="submit" value="Zarejestruj mnie" />
  90.   </p></form>
  91. KONIEC;
  92.  
  93. } else {
  94. header('Location: /index.php');
  95. }
  96. ?>


Czy wszystko jest już dobrze? smile.gif
gorden
na oko dobrze, powinieneś sprawdzić czy działa i powiedzieć... i zapomniałeś zamienić ereg na preg
SantaClaus
Cytat
zapomniałeś zamienić ereg na preg


Faktycznie zajmę się tym zaraz. Co do działania po wejściu w rejestracja.php:
Cytat
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/webspy/public_html/rejestracja.php on line 27
gorden
daj do $wynik i mysql_num_rows mysql_error, zamień <> na >
SantaClaus
Cytat
daj do $wynik i mysql_num_rows mysql_error, zamień <> na >


Poprawione dzięki, a teraz pytanie czy zapytanie jest dobre.

ID - Automatyczne, użytkownik, ktory zarejestruje się jako 1 otrzyma ID = 1
LOGIN - nazwa użytkownika
Hasło - wiadomo...
Email - wiadomo

  1. CREATE TABLE IF NOT EXISTS `user` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. `login` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  4. `haslo` varchar(32) COLLATE utf8_polish_ci NOT NULL,
  5. `email` varchar(120) COLLATE utf8_polish_ci NOT NULL
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


Wszystko ok ?
gorden
zapytanie jest poprawne. co zwrócił mysql_error?
SantaClaus
Cytat
zapytanie jest poprawne. co zwrócił mysql_error?


W zasadzie to nic ponieważ poprawiłem całą linijkę i błąd zniknął..

  1. <?php
  2. session_start(); // rozpoczÄ?cie sesji
  3. ?>
  4.  
  5. <?php
  6.  
  7. if (!isset($_SESSION['login'])) { // dostęp dla zalogowanego użytkownika
  8.  
  9. include 'inc/db.php'; // połączenie się z bazą danych
  10. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  11.  
  12. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  13.  
  14. // filtrowanie treści wprowadzonych przez użytkownika
  15. $login = mysql_real_escape_string(trim($_POST["login"]));
  16. $haslo = mysql_real_escape_string(trim($_POST["haslo2"]));
  17. $haslo2 = mysql_real_escape_string(trim($_POST["haslo2"]));
  18. $email= mysql_real_escape_string(trim($_POST["email"]));
  19.  
  20. // system sprawdza czy prawidło zostały wprowadzone dane
  21. if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) {
  22. $blad++;
  23. echo '<span class="blad">Proszę poprawny wprowadzić login (od 3 do 30 znaków).</span>';
  24. } else {
  25. $wynik=mysql_query("SELECT * FROM user WHERE login='$login'") or die(mysql_error());
  26. if (mysql_num_rows($wynik)>0) { $blad++;
  27. echo "Wybrany login jest już używany przez innego użytkownika.";
  28. }
  29. }
  30.  
  31. if (strlen($haslo) < 6 or strlen($haslo) > 30 ) {
  32. $blad++;
  33. echo '<span class="blad">Proszę poprawnie wpisać hasło (od 6 znaków do 30 znaków).</span>';
  34. }
  35. if ($haslo !== $haslo2) {
  36. $blad++;
  37. echo '<span class="blad">Podane hasła nie są ze sobą zgodne.</span>';
  38. }
  39. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+\.)+[a-z]{2,4}$", $email)) {
  40. $blad++;
  41. echo '<span class="blad">Proszę wprowadzić poprawnie adres email.</span>';
  42. }
  43.  
  44. // jeżeli nie ma żadnego błedu, użytkownik zostaje zarejestronwany i wysłany do niego e-mail z linkiem aktywacyjnym
  45. if ($blad == 0) {
  46.  
  47. $haslo = md5($haslo); // zaszyfrowanie hasla
  48. $kod = uniqid(rand()); // tworzenie unikalnego kodu dla użytkownika
  49.  
  50. $wynik = mysql_query("INSERT INTO $tabela VALUES('', '$id', '$login', '$haslo', '$email', '$kod', NOW(), '')");
  51. if ($wynik) {
  52. $list = "Witaj $login !
  53. Kliknij w poniższy link, aby aktywować swoje konto. http://www.nazwa-twojej-strony.pl/weryfika...#036;kod";
  54. mail(html_entity_decode($email), "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p>Dziękujemy za rejestrację! W ciągu nabliższych 5 minut dostaniesz wiadomość e-mail z dalszymi wskazówkami rejestracji.</p>';
  56. mysql_close($polaczenie);
  57. }
  58. }
  59. mysql_close($polaczenie);
  60. }
  61.  
  62. // tworzenie formularza HTML
  63. echo <<< KONIEC
  64.  
  65.   <div class="formularz">
  66.   <form class="form" action="rejestracja.php" method="post">
  67.   <input type="hidden" name="wyslane" value="TRUE" />
  68.  
  69. <p>
  70. <div class="label"><label for="login">Login:</label></div>
  71. <input type="text" name="login" id="login" />
  72. </p>
  73.  
  74. <p>
  75. <div class="label"><label for="haslo">Hasło:</label></div>
  76. <input type="password" name="haslo" id="haslo" />
  77. </p>
  78.  
  79. <p>
  80. <div class="label"><label for="haslo2">Powtórz hasło:</label></div>
  81. <input type="password" name="haslo2" id="haslo2" />
  82. </p>
  83.  
  84. <p>
  85. <div class="label"><label for="email">Email:</label></div>
  86. <input type="text" name="email" id="email" />
  87. </p>
  88.   <p class="submit">
  89.   <input type="submit" value="Zarejestruj mnie" />
  90.   </p></form>
  91. KONIEC;
  92.  
  93. } else {
  94. header('Location: /index.php');
  95. }
  96. ?>


Podczas wykonywania 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 '`login` varchar(50) COLLATE utf8_polish_ci NOT NULL, `haslo` varchar(32) COLLA' at line 3
gorden
może spróbuj wielkimi literami varchar
SantaClaus
Niestety nic nie dało.
gorden
to wywal COLLATE utf8_polish_ci
SantaClaus
  1. CREATE TABLE IF NOT EXISTS `user` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. `login` VARCHAR(50),
  4. `haslo` VARCHAR(32),
  5. `email` VARCHAR(120),
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


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 '`login` VARCHAR(50), `haslo` VARCHAR(32), `email` VARCHAR(120), ) ENGINE=MyI' at line 3


Nadal nic. :/
Niktoś
Tak to jest jak się bezmyślnie robi kopiuj wklej i nawet za bardzo się wie co i jak dlaczego nie działa:
`id`
chyba jest różnica
'id'
dodaj te collate i popraw to wszystko.
SantaClaus
  1. CREATE TABLE IF NOT EXISTS ' user ' (
  2. ' id ' INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. ' login ' varchar(50) COLLATE utf8_polish_ci NOT NULL,
  4. ' haslo ' varchar(32) COLLATE utf8_polish_ci NOT NULL,
  5. ' email ' varchar(120) COLLATE utf8_polish_ci NOT NULL
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


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 '' user ' ( ' id ' INT NOT NULL AUTO_INCREMENT PRIMARY KEY ' login ' varchar(' at line 1
gorden
wywal przecinek w `email`
SantaClaus
Nie mam przecinka..
Niktoś
A mógłbyś się pozbyć tych spacji wszędzie?
' id ' na 'id'
SantaClaus
To nic nie dało.

  1. CREATE TABLE IF NOT EXISTS 'user' (
  2. 'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. 'login' varchar(50) COLLATE utf8_polish_ci NOT NULL,
  4. 'haslo' varchar(32) COLLATE utf8_polish_ci NOT NULL,
  5. 'email' varchar(120) COLLATE utf8_polish_ci NOT NULL,
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


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 ''user' ( 'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY 'login' varchar(50) CO' at line 1
Niktoś
Kolega Tobie wyżej napisał przecież żebyś usunął na końcu przecinek ,a ty dalej go masz
Cytat
'email' varchar(120) COLLATE utf8_polish_ci NOT NULL,

USUŃ GO
gorden
  1. CREATE TABLE IF NOT EXISTS `user` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. `login` VARCHAR(50) COLLATE utf8_polish_ci NOT NULL,
  4. `haslo` VARCHAR(32) COLLATE utf8_polish_ci NOT NULL,
  5. `email` VARCHAR(120) COLLATE utf8_polish_ci NOT NULL
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

?
ewentualnie zrób ręcznie phpmyadminem czy czymś
SantaClaus
Dobra dzięki gorden zapytanie działa. Lecz po zarejestrowaniu się na mojej stronie nie tworzy wpisu w bazie danych + przenosi ponownie do rejestracji. :/
Niktoś
No to jest dylemat na php nie działa na phpadmin tak,php musi być słabsze.
SantaClaus
To znaczy, że co ? biggrin.gif
Niktoś
Tzn.Jakbyś wcisnął polecenie gordena do skryptu php to takżę będzie działać.
SantaClaus
Tzn. mam dodać to zapytanie do rejestracja.php ?

Nie zrozumiałem Cię.


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.