Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Weryfikacja na maila
Forum PHP.pl > Forum > Przedszkole
pioteer
Zrobiłem formularz rejestracji wraz z zapisem do bazy oraz weryfikacją wpisanych danych, m.in mail czy password.

Chciałbym teraz, aby po zakończeniu rejestracji na adres mailowy został wysłany kod, a raczej link aktywujący, po czym jak się odwiedzi tą stronę, konto w serwisie będzie w pełni aktywne. Do czasu, gdy uzytkownik nie odwiedzi strony aktywującej, nie będzie możliwości zalogowania się.

Nie mam jednak pojęcia jak zrobić, aby ten link był generowany automatycznie i za każdym razem był inny.

Możecie mi pomóc.

Nie proszę o napisanie kodu lecz drobne wskazówki, które mogą mnie nakierować na wykonanie tego skryptu.
kwiateusz
aby był unikalny to imo starczy

  1. <?php
  2. md5(uniqid(rand(), true));
  3. ?>


(Przykład prosto z manuala smile.gif)
pioteer
A jak zrobić, żeby dopóki nie kliknie na link aktywacyjny nie mógł się zalogować, i jak aby już po kliknięciu miał taką możliwośc?
Ociu
Zrób aktywację.
Jeśli kliknął dajesz active = true jeśli nie to active = false. i potem tylko sprawdzasz czy jest aktywny, czy nie.
misiek172
dodaj do bazy pole w którym bedzisz bedzie przechowywana wartość 0 i 1, gdy kliknie link aktywacyjny wartość zmieni się na 1 i bedzie mógł się logować. Poprostu przy logowaniu ma sprawdzać czy jest 0 czy 1, jeśli 1 to zaloguje jeśli 0 to wyświetla komunikat że jego konto jest nie aktywne.
pioteer
Wiem o tej zmiennej, że wartość ma się zmieniać, ale skąd będzie wiadomo,że użytkownik już odwiedził tamtą stronę tzn. kliknął w link aktywacyjny?

Bo przecież kodu dla linku akt. nie napiszę, bo za każdym razem będzie inny adres. Chyba, że jakiś if, ale jak sprawdzić, czy był na tej stronie?

Wie ktoś jak to zrobić?

Dzięki za pomoc.
maryaan
cos Ci sie chyba pomieszalo... dlaczego "za kazdym razem bedzie inny adres"? hmm? adres bedzie zawsze ten sam - bedzie to adres skryptu sprawdzajacego czy przeslany token jest wlasnie tym ktory wyslales luserowi na maila.
Czyli w skrocie:
- luser sie rejestruje
- generujesz dla niego jakis token i wysylasz mu na maila linka w postaci
http://bla.lol/act.php?id=xxxx&costam=jakisCiagZnakow
id to id uzytkownika w bazie, costam to token wygenerowany dla uzytkownika.
- zapisujesz wygenerowany token w bazie, razem z data wyslania i z id uzytkownika
- klient klika w link a skrypt act.php sprawdza
--- czy token jest jeszcze aktywny
--- czy wartosc z linku zgadza sie z tym co masz w bazie
jesli jest aktywny i sie zgadza to aktywujesz, jesli nie to papa
pioteer
Dziękuję za pomoc.

W razie jakiś błędów będę pisał.
bastek8989
moze poprostu zrob md5 na login - ten zawsze jest unikalny smile.gif
pioteer
Pytanie może proste, ale nie wiem dlaczego mi nie wysyła wiadomości na maila. Oto kod:
  1. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  2. <?php 
  3.  function connect_mysql()
  4. {
  5.  $db_host = 'localhost';
  6.  $db_user = 'root';
  7. $db_pass = 'krasnal';
  8. $db_name = 'db'; 
  9.  
  10. $connect = mysql_pconnect($db_host, $db_user, $db_pass);
  11. if(!$connect)
  12. {
  13.  echo "Wystąpił błąd: Połączenie z bazą nie powiodło się.";
  14.  exit; }
  15.  
  16.  
  17. if(!@mysql_select_db($db_name, $connect)) {
  18. echo '<b>Baza danych chwilowo niedostepna. Przepraszamy.</b>';
  19. exit;  }
  20.  
  21. } 
  22.  
  23. $login=$_POST['login'];
  24. $pass=$_POST["pass"];
  25. $passw=$_POST["passw"];
  26. $email=$_POST['email'];
  27. $mail=$_POST['mail'];
  28. $gg=$_POST["gg"];
  29. $jabber=$_POST['jabber'];
  30. $www=$_POST['www'];
  31. $hobby=$_POST['hobby']; 
  32. $ip=$_SERVER['REMOTE_ADDR'];
  33. $browser=$_SERVER['HTTP_USER_AGENT'];
  34.  
  35. if (empty($pass) || empty($passw) || $pass != $passw){
  36. echo "Wpisane hasła nie zgadzają się <br/ >";
  37. $error='true';
  38. }
  39. if (!ereg("^[a-zA-Z1-9]{1,10}[^@]+@([a-zA-Z]+.)+[a-z]{2,4}$", $mail) and !ereg("^[a-zA-Z1-9]{1,10}[^@]+@([a-zA-Z]+.)+[a-z]{2,4}$", $email)|| empty($mail) || empty($email) || $mail != $email )
  40. {
  41. echo "Wpisane adresy e-mail różnią się bądź mają niepoprawną formę. <br/ >";
  42. $error='true';
  43. }
  44.  
  45. connect_mysql();
  46.  $wynik = mysql_query("select * from users where login='$login'");
  47. if (mysql_num_rows($wynik)>0)
  48. {
  49. $error='true';
  50. echo "Użytkownik o takiej nazwie jest już zarejestrowany, spróbuj inny login<br />"; 
  51.  
  52. }
  53. $zapytanie = "INSERT into users (nr,login, pass, passw, mail, email, gg, jabber, www, hobby, time, ip, brows
    er) values ('','$login','$pass','$passw','$mail','$email','$gg','$jabber','$www','$hobby', NOW(), '$ip', '$browser' )"
    ;
  54. $wykonaj = mysql_query($zapytanie);
  55. if($error=='true'){
  56. echo "Wróć do strony <a href="form_registration.php">z formularzem</a> i uzupełnij poprawnie dane.<br />" ;
  57. }else{
  58. echo "Dziękuje za wypełnienie formularza<br />";
  59. mail($email,'Rejestracja', 'Lorem ipsum Lorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLo
    rem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem 
    ipsumLorem ipsumLorem ipsumLorem ipsum'
    );
  60. }
  61. ?>
hansikkk
Witam,
Jestem tak jak i Ty początkującym zacząłbym od dopisania takiego czegoś:
  1. <?php
  2. echo "Dziękuje za wypełnienie formularza<br />";
  3. echo "$email"; // sprawdzi czy email jest w ogole wprowadzany do funkcji mail
  4. mail($email,'Rejestracja', 'Lorem ipsum Lorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLo
    rem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem ipsumLorem 
    ipsumLorem ipsumLorem ipsumLorem ipsum'
    );
  5. }
  6. ?>

Jeżeli jest wszystko ok, proponuje poczytac manual o konfiguracji mail.
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.