Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: aktywacja konta przez kod w email'u
Forum PHP.pl > Forum > PHP
nikestylex7
Witam pogubiłem się całkowicie gdyż jestem początkującym programistą. Chciałbym zrobić aktywacje konta przez kod wysyłany podczas rejestracji. Po rejestracji do bazy zostaje dodany kod aktywacyjny oraz zostaje on wysłany na email nie wiem jak zrobić żeby id znajdowało się w w tablicy get oraz kod żebym później mógł to sprawdzić z bazą i zmienić wartość w tabeli aktywnosc na 1. Oto mój kod

  1. $akod = md5(uniqid(rand(), true));
  2. $user = htmlspecialchars($_POST['user']);
  3. $email = htmlspecialchars($_POST['email']);
  4. $id = ("SELECT id FROM user WHERE user = '".$user."' LIMIT 1") or die(mysql_error());
  5. $id = $_GET['id'];
  6. $akod2 = "http://semczak.xaa.pl/rejestracja_.php?id=".$id."&akod=".$akod;
  7. $mail_headers = "From: Mohergame.pl\r\nReply-To: Mohergame.pl\r\n";
  8. $mail_headers.= "Content-Type: text/html;\n";
  9. $mail_headers.= "\tcharset=\"UTF-8\"\n";
  10. $mail_headers.= "Content-Transfer-Encoding: 8bit\n\n";
  11. $temat = ("Kod aktywacyjny");
  12. mail($email, $temat, $akod2, $mail_headers);
  13. mysql_query("INSERT INTO user SET user='$user', haslo='$haslo', email='$email', przydomek='$przydomek', akod='$akod'");
!*!
  1. $akod = md5(uniqid(rand(), true));


Więcej tych parametrów się nie dało? wink.gif

Pobierz KOD z GET, porównaj go z tym w bazie, jeśli się zgadza, usuń/zmień wpis w niej. Poza tym dlaczego dajesz w linku aktywacyjny ID? Sam KOD nie wystarczy?
nikestylex7
Poprawiłem wszystko tylko nasuwa mi się pytanie jak już przeprowadzę rejestracje zmieni mi wartość aktywności to kod weryfikacyjny w bazie nie jest już mi potrzebny czyli mam zlecić po wykonaniu skryptu usunięcie kolumny kod ?
toaspzoo
nie usuwaj ich, cele archiwizacyjne
Shili
@up
Po co?

To nie są faktury, że trzeba je latami przechowywać.
Jeśli są niepotrzebne nie ma sensu obciążać bazy śmieciowymi informacjami, z których nigdy się nie skorzysta.
A przynajmniej zmniejsza się niebezpieczeństwo wygenerowania 2x tego samego hasha md5.
nikestylex7
Zrobiłem wszystko powinno grać a tak nie jest użytkownik tworzy się kod zostaje mu przydzielony lecz gdy kliknę w link to skrypt nie działa poprawnie nie rusza w ogóle od get aktywacja

  1. if($_POST["rej"]=="true")
  2. {
  3. $akod = uniqid('akod', true);
  4. $user = htmlspecialchars($_POST['user']);
  5. $email = htmlspecialchars($_POST['email']);
  6. $akod2 = "http://semczak.xaa.pl/rejestracja_.php?aktywacja=".$akod;
  7. $mail_headers = "From: Mohergame.pl\r\nReply-To: Mohergame.pl\r\n";
  8. $mail_headers.= "Content-Type: text/html;\n";
  9. $mail_headers.= "\tcharset=\"UTF-8\"\n";
  10. $mail_headers.= "Content-Transfer-Encoding: 8bit\n\n";
  11. $temat = ("Kod aktywacyjny");
  12. mail($email, $temat, $akod2, $mail_headers);
  13. mysql_query("INSERT INTO user SET user='$user', haslo='$haslo', email='$email', przydomek='$przydomek', akod='$akod', aktywacja=0");
  14. }
  15. elseif($_GET["aktywacja"]) {
  16. mysql_query("UPDATE user SET aktywacja=1 WHERE akod='$_GET[aktywacja]' ");
  17. {
  18. print"Aktywacja ukończona pomyślnie. Możesz się teraz zalogować używając loginu i hasła.";
  19. mysql_query("ALERT TABLE user DROP COLUMN akod");
  20. }
  21. else
  22. {
  23. print"Podano nieistniejący kod aktywacyjny, bądź kod został już użyty. <a href='wyslij_kod.php'>Wyślij</a> kod aktywacyjny jeszcze raz.";
  24. }
  25. }


Ok wszystko już śmiga dzięki wszystkim. Wesołych Świąt.
abort
Działa wszystko? Dziwne, bo według mnie nie powinno.

1. w listingu w linii 20 masz "ALERT" zamiast "ALTER".
2. jeśli nawet będzie "ALTER", które skasuje kolumnę "akod", to skasuje ją w całej tabeli - a to implikuje niemożność wygenerowania kodu dla innego usera (co zrobi INSERT z linii 13 jeśli nie będzie kolumny 'akod'? Bo imho wywali skrypta).
2a. wyobraź sobie sytuację, że dwóch użytkowników aktywuje się w zbliżonym czasie. Dodajesz dla dwóch userów wpis w kolumnie "akod". Potem jeden się aktywuje, loguje, kolumna "akod" zostaje skasowana - co się stanie w momencie próby aktywowania drugiego usera? Skrypt się wyburaczy w linii 16 (z listingu) - po klauzule "WHERE" warunek nie może przyjąć żadnej wartości logicznej, bo nie ma kolumny "akod", więc nie ma czego porównać z parametrami przekazanymi w $_GET.
3. poczytaj o SQL injection - mam nieodparte wrażenie, że ten kod jest podatny na taki atak

Moja rada: albo zostawiasz tabelę z kolumną "akod" na stałe, albo odpytujesz inną tabelę, np. o nazwie "aktywacja" - dla tych nowo aktywowanych użytkowników (a którą to tabelę można także wykorzystać np. na ponone wygenerowanie linku pozwalającego na zalogowanie się w serwisie - to może być przydatne w sytuacji "zapomniałem hasła".
nikestylex7
działa bo wszystko poprawiłem lecz tego tu nie oznajmiłem smile.gif tak też o tym myślałem, że nowo zarejestrowani będą nawzajem sobie kasować dlatego to zostawiam.
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.