Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Aktywacja konta nowo zarejestrowanego użytkownika
jg44
post
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 14
Dołączył: 14.07.2011
Skąd: Gliwice / Wrocław

Ostrzeżenie: (0%)
-----


Witam,
napisałem skrypt rejestrowania się nowych użytkowników na stronie i chciałbym, aby po wypełnieniu formularza rejestracyjnego użytkownik miał możliwość aktywowania konta poprzez kliknięcie linku. Napisałem takie coś i nie działa:
  1. // rejestracja.php
  2.  
  3. class Register
  4. {
  5. (...) kod klasy
  6.  
  7. function addNewUser()
  8. {
  9. $uniq1 = uniqid();
  10. $uniq2 = uniqid();
  11. $uniq = $uniq1.$uniq2;
  12.  
  13. (...) kod funkcji
  14.  
  15. mysql_query("INSERT INTO uzytkownicy ... "); // dodanie do bazy danych użytkownika
  16. echo "<h5 class=\"correct\">Rejestracja zakończona powodzeniem!</h5>";
  17.  
  18. echo "Kliknij w link aktywacyjny: <a href='http://adres/aktywuj.php?iden=$uniq'>Link</a>";
  19. }
  20. }


Plik, do którego zostaje przekierowany użytkownik, który się zarejestrował i chce aktywować konto:
  1. $iden = trim($_GET['iden']);
  2. mysql_query("UPDATE uzytkownicy SET status=1 WHERE identyfikator='$iden'");
  3. echo "<h5 class=\"correct\">Twoje konto zostało aktywowane.</h5>";
  4. echo "<a href=http://adres/portal>Strona główna</a>";

Po otwarciu drukowany jest tekst, że "Twoje konto zostało aktywowane.", ale tak niestety nie jest.
Mógłby ktoś pomóc i powiedzieć, co robię źle?
Z góry dziękuję.
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Wszystko wygląda dobrze, jednak dla klucza aktywacyjnego utworzyłbym osobną tabelę klucze, w której przechowywałbym id użytkownika i klucz. Jest to tylko kwestia tego, że z tabeli użytkowników z pewnością będziesz korzystał często, ale z tej unikalnej informacji jaką jest klucz aktywacyjny skorzystasz być może tylko raz. Zatem kolumna z kluczem w tabeli użytkowników jest rzeczą zbędną.

Pozostaje pytanie, dlaczego to nie działa. Może posługujesz się złymi kolumnami? A może w kolumnie identyfikator w tabeli w bazie danych nie możesz zapisać tylu znaków ile wygeneruje konkatenacja dwóch wyników uniqid() i w efekcie zapisujesz tylko część klucza.
Go to the top of the page
+Quote Post
jg44
post
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 14
Dołączył: 14.07.2011
Skąd: Gliwice / Wrocław

Ostrzeżenie: (0%)
-----


Faktycznie, pomysł z drugą tabelą jest dobry, zrobię tak. smile.gif
Na razie jednak sprawdzam, czy rzeczywiście nie ma jakiegoś głupiego błędu i widzę, że wszystko jest ok, posługuję się dobrymi kolumnami, w zapytaniu nie ma literówek, dodatkowo zapytanie UPDATE'ujące wykonałem w phpMyAdmin i wszystko pięknie zadziałało. Problem jest tylko z poziomu skryptu.
Co do nie mieszczenia się klucza w tabeli to raczej nie, gdyż uniqid() generuje ciąg 13-znakowy, czyli konkatenacja dwóch takich ciągów będzie miała 26 znaków. W tabeli ustawiłem pole dla klucza na VARCHAR(100), więc musi się mieścić.
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Porównaj zawartość $_GET['iden'] (wyświetl ją sobie tymczasowo na stronie) z zawartością tabeli w phpMyAdminie. Dodaj po mysql_query() kod sprawdzający, czy zapytanie zostało wykonane:
  1. mysql_query("UPDATE uzytkownicy SET status=1 WHERE identyfikator='$iden'") or die(mysql_error());


Ten post edytował mortus 16.11.2011, 16:48:52
Go to the top of the page
+Quote Post
jg44
post
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 14
Dołączył: 14.07.2011
Skąd: Gliwice / Wrocław

Ostrzeżenie: (0%)
-----


Już działa. smile.gif Jak dodałem mysql_error() to wyrzucił błąd, który wszystko wyjaśnił. Skoro pracuję na bazie danych, to warto by było nawiązać z nią połączenie wink.gif (po prostu w pliku aktywacji konta zapomniałem zainclude'ować dane bazy). Dziękuję, mortus, sam bym pewnie na to w końcu wpadł, ale minęłoby trochę czasu. smile.gif

Ten post edytował jg44 16.11.2011, 17:12:57
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 01:21