Skocz do zawartości

Akceptacja przez e-mail


RoyMaster

Rekomendowane odpowiedzi

Kolejne małe pytanie. Jak do tego skryptu dodać aktywację e-mail? Czytałem, że najlepiej zrobić new bazę która będzie trzymać dane przez 24h po czym po aktywacji przenoszą się one do głównej. Coś tam próbowałem z kodem ale ni jak to działało. Mój kod rejestracji wygląda tak:

   <?php
 include 'config.php';
 db_connect();

 // sprawdzamy czy user nie jest przypadkiem zalogowany
 if(!$_SESSION['logged']) {
  // jeśli zostanie naciśnięty przycisk "Zarejestruj"
  if(isset($_POST['name'])) {
   // filtrujemy dane...
   $_POST['name'] = clear($_POST['name']);
   $_POST['password'] = clear($_POST['password']);
   $_POST['password2'] = clear($_POST['password2']);
   $_POST['email'] = clear($_POST['email']);
   $_POST['email2'] = clear($_POST['email2']);

   // sprawdzamy czy wszystkie pola zostały wypełnione
   if(empty($_POST['name']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])|| empty($_POST['email2'])) {
    echo '<p><font color="red">Musisz wypełnić wszystkie pola.</font></p>';
   // sprawdzamy czy podane dwa hasła są takie same
   } elseif($_POST['password'] != $_POST['password2']) {
    echo '<p><font color="red">Podane hasła różnią się od siebie.</font></p>';
   } elseif($_POST['email'] != $_POST['email2']) {
    echo '<p><font color="red">Podane e-mail różnią się od siebie.</font></p>';
   // sprawdzamy poprawność emaila
   } elseif(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {
    echo '<p><font color="red">Podany email jest nieprawidłowy.</font></p>';
   } else {
    // sprawdzamy czy są jacyś uzytkownicy z takim loginem lub adresem email
    $result = mysql_query("SELECT Count(user_id) FROM `users` WHERE `user_name` = '{$_POST['name']}' OR `user_email` = '{$_POST['email']}'");
    $row = mysql_fetch_row($result);
    if($row[0] > 0) {
	 echo '<p>Już istnieje użytkownik z takim loginem lub adresem e-mail.</p>';
    } else {
	 // jeśli nie istnieje to kodujemy haslo...
	 $_POST['password'] = codepass($_POST['password']);
	 // i wykonujemy zapytanie na dodanie usera

	 mysql_query("INSERT INTO `users` (`user_name`, `user_password`, `user_email`, `user_regdate`) VALUES ('{$_POST['name']}', '{$_POST['password']}', '{$_POST['email']}', '".time()."')");
	 echo '<p><font color="green">Zostałeś poprawnie zarejestrowany! Możesz się teraz <a href="login.php">zalogować</a>.</font></p>';
    }
   }
  }

i tam dalej formularz ale to odpowiada za całość

Katalog filmów online https://www.boxfilm.pl/

Odnośnik do komentarza
Udostępnij na innych stronach

@Jak do tego skryptu dodać aktywację e-mail?

Kolego na ogólnych zasadach programowania w tym wypadku w PHP.

Nie wklejaj całych kodów, bo nie na tym polega pomoc, by za kogoś implementować funkcje.

Zasada jest taka:

- W treści emaila musi być podany link którego wywołanie wywoła skrypt który wykona akcje potwierdzenia w bazie danych.

W tabeli `users` możesz dodać pole typu Enum ('0','1') po potwierdzeniu zmienisz z 0 na 1 ;

Klucz do aktywacji możesz wygenerować na podstawie ID + nicka jako skrót MD5 i takie same zapytanie WHERE sprawdzające.

Jak wysłać emalie z poziomu PHP masz wyjaśnione z przykładami w https://php.net/manual/pl/index.php tak samo jak obsługiwać bazę danych.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Prosty schemat wymyślony na szybko:

- do tabeli z użytkownikami dodajesz dwa pola - jedno typu int o nazwie `aktywowany` z domyślną wartością 0 oraz pole `hash` typu varchar o długości powiedzmy 20 znaków

- przy rejestracji (po wpisaniu danych użytkownika i wysłaniu formularza, ale przed wpisaniem danych do bazy) generujesz hash o długości 20 znaków i wrzucasz go do bazy danych wraz z danymi użytkownika, hash możesz wygenerować na wiele sposobów, np.

$hash = str_shuffle('abcdefghijklmnoprstu');

jednocześnie wysyłając do użytkownika email z linkiem do aktywacji, przykładowo skrypt.php?do=activate&hash=wygenerowanyhash

- w skrypcie skrypt.php (patrz punkt wyzej) obsługujesz zdarzenie aktywacji - wybierasz z bazy danych rekord z tym hashem (w ten sposób sprawdzasz czy istnieje i czy konto zostalo aktywowane) typu SELECT `aktywowany` FROM `tabela` WHERE `hash` = 'hashzadresu' - jezeli zapytanie nie zwroci nic, znaczy ze hash jest bledny, jezeli pole aktywowany bedzie rowne 0 - wtedy aktywujesz konto (UPDATE `tabela` SET `aktywowany` = '1' WHERE `hash` = 'hashzadresu'), bądź jeżeli ma wartość 1 - wyświetlasz info że konto jest już aktywne.

Nie zapomnij o sprawdzaniu danych wejściowych. :)

Webmastering, kodowanie & programowanie

Więcej informacji na moim profilu

Zapraszam na PW

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra przed funkcją która dodaje do bazy użytkownika dodałem kod


$nowe = md5(uniqid());
						    $nowe = substr($nowe,0,10);
						    $szyfruj = md5($nowe);
						    $strona['link'] = "moja_strona.pl";

														    $message = "<html><body>

								    Aktywuj konto kikajac na ponizszy link aktywacyjny<br/><br/><br/>
								    Potwierdź je, klikając na link: https://".$strona['link']."/reg.php?kod=".$szyfruj."
								    </body>
								    </html>";



								    $to = $email;
								    $from =  "email@wp.pl";
								    $replay =  "email@wp.pl";
								    $subject = 'temat';
								    $subject = "=?utf-8?B?".base64_encode($subject)."?=";

								    $headers = "From: " . $from . "\r\n";
								    $headers .= "Reply-To: ". $replay . "\r\n";
								    $headers .= "MIME-Version: 1.0\r\n";
								    $headers .= "Content-Type: text/html; charset=utf-8\r\n";
								    $headers .= "Content-Transfer-Encodin: 8bit\r\n";
								    if (mail($to, $subject, $message, $headers)) {

Lecz po kliknięciu rejestruj wyskakują 2 błędy

Notice: Undefined variable: email in C:\xampp\htdocs\register.php on line 107


Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\register.php on line 121

1 naprawię sam lecz problem z 2 pisze tam, że nie może się połączyć z pocztą. Tylko teraz nie wiem jakie tam dane wpisać aby wiadomości były wysyłane z g-mail.com. Tzn nie wiem gdzie te dane konkretnie wpisać.

Mimo iż e-mail nie doszedł to i tak dodaje użytkownika do bazy jako zarejestrowany.

Katalog filmów online https://www.boxfilm.pl/

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra ale skrypt który będzie odpowiedzialny za aktywacje tzn za wysłanie e mail musi być umiejscowione mniej więcej po funkcji

<textarea name="tresc" style="font-size: 10pt; width: 500px; height: 100px"></textarea>

A co to ma w ogóle wspólnego z "Akceptacja przez e-mail" - NIC

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Ty zacznij myśleć i analizować to co wklejasz = uczyć się programowania, bo to co znowu wkleiłeś nadal nie ma nic wspólnego z tym zagadnieniem !

"Dobra ale skrypt który będzie odpowiedzialny za aktywacje tzn za wysłanie e mail musi być umiejscowione mniej więcej po funkcji"....

Ten kod wstawi dane, a ty musisz zrealizować update na podstawie jakiegoś identyfikatora usera przesłanego zadaniu GET wykonanym po kliknięciu w link aktywacyjny z maila.

Pisanie kodu i programowanie nie plaga na wklejaniu na forum na chybił trafił jego kawałków, ale logiczną analizę to co dany kod na realizować.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

@Musisz klucz zapisywać w bazie,

Nie musi nic dodatkowo zapisywać. Może wykorzystać skrót / funkcję MD5 dla danych już zapisanych w bazie jak login, hasło email itd i oczywiście ich kombinację .

@a w e-mailu go podawać w adresie i potem metodą get odczytać na odpowiedniej podstronie ze skryptem.

To się zgadza...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności