Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Aktywacja konta nowo zarejestrowanego użytkownika
Forum PHP.pl > Forum > Przedszkole
jg44
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ę.
mortus
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.
jg44
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ć.
mortus
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());
jg44
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
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.