Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: rejestracja i logowanie na stronie - problem
Forum PHP.pl > Forum > PHP
Th0e
Witam! znalazłem tutaj:
http://www.webskrypt...i-uzytkownikow/
skrypt na logowanie i rejestrację, trochę go przerobiłem (pierwotna wersja też nie działała)

tak więc.

1) do PHPmyAdmin do zapytań SQL wkleiłem

  1. CREATE TABLE `uzytkownik` (
  2.  
  3. `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `imie` VARCHAR(100) NOT NULL,
  5. `nazwisko` VARCHAR(100) NOT NULL,
  6. `login` VARCHAR(30) NOT NULL,
  7. `haslo` VARCHAR(50) NOT NULL,
  8. `email` VARCHAR(100) NOT NULL,
  9. `kod` VARCHAR(32) NOT NULL,
  10. `data` DATETIME NOT NULL,
  11. `status` TINYINT(1) DEFAULT 0,
  12.  
  13. PRIMARY KEY (`id`)
  14.  
  15. )
  16.  
  17. ENGINE=MyISAM DEFAULT CHARACTER SET latin1
  18.  
  19. COLLATE latin1_general_cs AUTO_INCREMENT=0;


z powodzeniem stworzyło tabelę.




2)stworzyłem plik db.php

  1. <?php
  2.  
  3. //stałe bazy danych
  4. $mysql_host = 'localhost';
  5. $mysql_login = 'root';
  6. $mysql_haslo = '';
  7. $mysql_baza = 'baza1';
  8.  
  9. // połączenie z bazą danych
  10. $polaczenie = mysql_connect($mysql_host, $mysql_login, $mysql_haslo) or die('Błąd: nie udało się nawiązać połączenia z bazą danych.');
  11.  
  12. // połączenie ze schematem bazy danych
  13. mysql_select_db($mysql_baza) or die('Błąd: nie udało się wybrać schematu bazy danych.');
  14.  
  15. ?>





3)stworzyłem rejestracja.php

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



4) Stworzyłem logowanie.php

  1. <?php
  2.  
  3. session_start(); // rozpoczęcie sesji
  4.  
  5. if (!isset($_SESSION['login'])) { // dostęp dla niezalogowanego użytkownika
  6.  
  7. if ($_POST['wyslane']) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  8.  
  9. include 'db.php'; // połączenie się z bazą danych
  10. $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
  11.  
  12. $login = $_POST["login"];
  13. $haslo = $_POST["haslo"];
  14.  
  15.  
  16.  
  17. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  18. login='$login' and haslo='$haslo' and status=0");
  19.  
  20.  
  21.  
  22. // jeżeli wszystko jest dobrze, użytkownik się loguje
  23. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  24. login='$login' and haslo='$haslo' and status=1");
  25.  
  26. if (mysql_num_rows($wynik) == 1) {
  27. $informacja = mysql_fetch_array($wynik);
  28. $_SESSION["login"] = $informacja["login"];
  29. header('Location: index.php ');
  30. } else {
  31. echo '<p>Zostały wprowadzone nieprawidłowe dane</p>';
  32. }
  33. mysql_close($polaczenie);
  34. }
  35.  
  36. // tworzenie formularza HTML
  37. echo <<< KONIEC
  38.  
  39. <form action="logowanie.php" method="post">
  40. <input type="hidden" name="wyslane" value="TRUE" />
  41.  
  42. <p>Login: <input type="text" name="login" /></p>
  43. <p>Hasło: <input type="password" name="haslo" /></p>
  44.  
  45. <p><input type="submit" value="zaloguj" /></p>
  46.  
  47. </form>
  48. KONIEC;
  49.  
  50. } else {
  51. header('Location: index.php '); // zalogowany użytkownik zostaje przekierowany na stronę główną
  52. }
  53.  
  54. if ($_GET["wylogowanie"] == "tak") {
  55. // niszczenie sesji użytkownika
  56. header('Location: / '); // przekierwanie na stronę główną
  57. }
  58.  
  59. ?>



5) a index.php na odwal się:

  1. <?php
  2. echo "lubie placki";
  3. ?>


i mimo tego wszystkiego nie da się zalogować bo pisze
Zostały wprowadzone nieprawidłowe dane


obserwowałem tabelę w phpmyadmin i dane naprawdę dobrze się tam zapisuja.

Jakieś pomysły?
untorched
  1. $wynik=mysql_query("SELECT * FROM `$tabela` WHERE login='".$login."' and haslo='".$haslo."' and status=1");
  2.  
  3. if (mysql_num_rows($wynik) > 0) {
  4. $informacja = mysql_fetch_array($wynik);
  5. $_SESSION["login"] = $informacja[0]['login'];
  6. header('Location: index.php ');
  7. } else {
  8. echo '<p>Zostały wprowadzone nieprawidłowe dane</p>';
  9. }
  10. mysql_close($polaczenie);
  11. }


A teraz?
red.orel
Zostaw to spaghetti code, oszczędź swojego i naszego czasu.
b4rt3kk
Nie wiem za co odpowiada kolumna status w tabeli i po co ona jest? Natomiast sam skrypt logowania jest strasznie udziwniony, po co dwukrotnie wykonujesz to samo zapytanie? Sprawdzenie czy hasło i login są prawidłowe:

  1. SELECT COUNT(id) FROM $tabela WHERE login='$login' AND haslo='$haslo'


i to w zupełności starcza.

Jeżeli ktoś się zalogował to znaczy to że wprowadził prawidłowy login, nie ma konieczności pobierania loginu z bazy po raz wtóry, proste przypisanie:

  1. $_SESSION["login"] = $login;


I z tego co widzę, właśnie owy status jest tutaj problematyczny, ponieważ domyślnie ma wartość 0, więc zapytanie:

  1. "SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo' and status=1"


nie zwróci wyników (num rows == 0), czyli warunek:

  1. if (mysql_num_rows($wynik) == 1)


nie zostanie nigdy spełniony. Więc albo się pozbądź sprawdzania statusu, albo wywal ten fragment kodu:

  1. // jeżeli wszystko jest dobrze, użytkownik się loguje
  2. $wynik=mysql_query("SELECT * FROM $tabela WHERE
  3. login='$login' and haslo='$haslo' and status=1");


i powinno śmigać.
Th0e
Cytat(untorched @ 30.09.2012, 23:46:36 ) *
  1. $wynik=mysql_query("SELECT * FROM `$tabela` WHERE login='".$login."' and haslo='".$haslo."' and status=1");
  2.  
  3. if (mysql_num_rows($wynik) > 0) {
  4. $informacja = mysql_fetch_array($wynik);
  5. $_SESSION["login"] = $informacja[0]['login'];
  6. header('Location: index.php ');
  7. } else {
  8. echo '<p>Zostały wprowadzone nieprawidłowe dane</p>';
  9. }
  10. mysql_close($polaczenie);
  11. }


A teraz?



a z jakiej strony to jest kod? logowanie, czy rejestracja? i czy to jest cały kod, czy jedynie fragment strony?

PS: co do kodu, to pisze że nie jest mój, moja wiedza o mysql jest ledwie podstawowa, kolega pisał mi że logowanie można zrobić w kilka linijek kodu -,- widać co znalazłem.
jeśli ten kod nadal nie będzie działać to
może ma ktoś z was najprostszy z możliwych kod rejestracji i logowania do nauki? z masą komentarzy?
adbacz
Logowanie nie jest w cale takie trudne. Najlepiej to weź sobie kartkę i długopis i wypisz w punktach co sie dzieje pokolei podczas logowanie i osobno rejestracji. Np.:

1. Sprawdzenie poprawności loginu i hasła, validacja
2. Sprawdzenie istnienia tych danych w bazie danych razem (tzn. w jednym rekordzie)
3. Walidacja statusu konta (ewentualnie, aczkolwiek na razie możesz to pominąć)
4. Ustawienie wartości zalogowania w: sesja, ciacho, baza danych, gdziekolwiek chcesz...

To już zależy od Ciebie. Jak już sobie napiszesz to na kartce to przemyśl czy to co napisałeś jest takie jak powinno. Jeśli jestes początkujący to nie myśl z byt dużo, nauczysz się na swoich błędach wink.gif

Jak już taki kod napiszesz to w tedy dawaj do oceny. Będziesz wiedział za co konkretnie odpowiada dana linijka i będziesz nam mógł więcej pomóc gdy będziemy się pytali o ten kod - bo ten wyżej podany nie jest Twój i założę się, że nie wiesz wielu rzeczy co się w nim dzieje i dlaczego dana rzecz tam jest.
Th0e
raczej tak, ale prosił bym o jakiś wzór prostego skryptu do rejestracji i logowania, bym mógł go sobie przestudiować i się nauczyć.
Th0e
już nie mam siły... to nie działa... ten sposób też nie: http://www.webtips.pl/topic/7371-phpmysqlw...do-bazy-danych/

(po wprowadzeniu danych w dodaj.html wyskakuje błąd
Kod
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Unknown: Failed opening required 'C:/Program Files/WebServ/httpd/wysyłanie danych/dodaj.php' (include_path='.;C:\php5\pear') in Unknown on line 0
i przenosi mnie na stronę
Kod
http://localhost/wysy%C5%82anie%20danych/dodaj.php
- wymiękam.)

Ktoś poda chociaż sposób jak wysłać dane do bazy?
viking
Na początek wyrzuć te polskie znaki z nazw plików i katalogów.
Th0e
Cytat(viking @ 1.10.2012, 15:10:51 ) *
Na początek wyrzuć te polskie znaki z nazw plików i katalogów.

już się uporałem z problemem - ściągnąłem inny skrypt smile.gif 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.