Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wysłanie nowego hasła na email z zabezpieczeniem
Forum PHP.pl > Forum > Gotowe rozwiązania
KriSsu
Witam, jestem tu nowy na forum.
Wiec tak.. Postępowałem według opisu "lukaswoj" z tego tematu http://forum.php.pl/index.php?showtopic=16...mp;hl=aktywacja


Zbudowałem skrypt który będzie wysyłał losowe hasło do użytkownika kiedy go zapomni. Hasła mam w kodowane w md5 w bazie danych dlatego użyłem skryptu który losuje nowe. Skrypt działa w następujący sposób: Wypełniasz formularz, jeśli email sie zgadza, wysyłany jest do Ciebie link z wygenerowanym przy rejestracji hashu. Jeśli klikniesz w link zostajesz przekierowany na strone ktora sprawdza czy hash zgadza sie z tym w bazie danych, jeśli tak to wysyła nowe, losowe hasło na email i generuje nowy hash ktory jest wprowadzany do bazy danych.

No i niby wszystko pięknie, wypełniam formularz, confirm.php sprawdza czy email istnieje w bazie, jesli tak to wysyla link z hashem, email dochodzi i teraz zaczynaja sie schody.. gdy klikam na link wyskakuje biala strona, zero błędów, zrobilem wszystko wedlug opisu "lukaswoj" jednak nie wiem jak zrobic aby ten link dzialal i jak wogole powinnien dokladnie wygladac..

Prosze o pomoc, z góry dzięki.


//Edit: Udało mi sie rozwiązać mój problem, niżej podaje gotowy działający skrypt i prosze o przeniesienie do odpowiedniego działu np. z 'gotowcami'

Teraz kod.. pierw lost_pass.php

Kod
<?
// By: KriSsu
// E-mail: krzy49@gmail.com
// Róbcie z skryptem co chcecie ale zostawcie te linijki z prawami autora w spokoju;)
?>
<br>
<table width="540">
<form action="confirm.php" method="post">
<tr><td>Email:</td><td>
<input type="text" name="email"></td></tr>
<tr><td>
<br>
<input type="submit" value="Wy&#347lij nowe has&#322o!" />
</td></tr>
</form>
</table>
<br>


confirm.php:

Kod
<?
// By: KriSsu
// E-mail: krzy49@gmail.com
// Róbcie z skryptem co chcecie ale zostawcie te linijki z prawami autora w spokoju;)

$dbhost = 'localhost'; // Serwer bazy danych
$dbuser = 'root'; // Nazwa użytkownika bazy danych
$dbpass = 'kriss49'; // Hasło użytkownika bazy danych
$dbname = 'users'; // Nazwa bazy danych

// Połącz z bazą danych, jeśli wystąpią problemy, wyświetl błąd
$dbc = @mysql_connect ($dbhost, $dbuser, $dbpass) or die ('Nie można połączyć sie z bazą danych. Przepraszamy z niedogodności.');
mysql_select_db ($dbname) or die ('Problemy z baza danych. Przepraszamy z niedogodności');

// Pobierz dane gdzie email = '$_POST[email]'
$email = $_POST[email];
$uchwyt = mysql_query("SELECT * FROM users WHERE email='$_POST[email]'") or die(mysql_error());
$row = mysql_num_rows($uchwyt);

// Jeśli istnieje, wyślij email z hash'em
    if ($row == 1)
{
$query = "SELECT * FROM users WHERE email='$_POST[email]'";
$result = mysql_query ($query);
while($wiersz=mysql_fetch_array ($result)) 
{
$email_wiadomosc = "http://localhost/new_pass.php?id=$wiersz[id]hash=$wiersz[hash]";
}
$email_temat = "Nowe hasło";
  if(mail($email, $email_temat, $email_wiadomosc)){
    echo "Twoje nowe hasło zostało wysłane na podany adres e-mail.";
}
else {
    echo "Nie udało się wysłać wiadomości, przepraszamy.";
}
}
// Jeśli nie istnieje, wyświetl błąd
    elseif ($row == 0)
{
echo 'Podany adres e-mail nie znajduje w naszej bazie danych!';
}
?>


generator.php:

Kod
<?
// By: KriSsu
// E-mail: krzy49@gmail.com
// Róbcie z skryptem co chcecie ale zostawcie te linijki z prawami autora w spokoju;)

$tabelka = '1234567890qwertyuiopasdfghjkklzxcvbnm'; 
   $new_hash = ''; 
   for ($i=0; $i<30; $i++) // 30 to długość ciągu
   { 
       $new_hash .= $tabelka[rand()%(strlen($tabelka))]; 
   }
?>
<?
function random_string($length){
  $string = md5(time());
  $string = substr($string,0,$length);
  return($string);
}
$new_pass = random_string(8);
?>


i ostatni new_pass.php:

Kod
<?
// By: KriSsu
// E-mail: krzy49@gmail.com
// Róbcie z skryptem co chcecie ale zostawcie te linijki z prawami autora w spokoju;)

if (strlen($_GET['hash']) != 30){
die();
}
else
{
$dbhost = 'localhost'; // Serwer bazy danych
$dbuser = 'root'; // Nazwa użytkownika bazy danych
$dbpass = ''; // Hasło użytkownika bazy danych
$dbname = 'english_users'; // Nazwa bazy danych

// Połącz z bazą danych, jeśli wystąpią problemy, wyświetl błąd
$dbc = @mysql_connect ($dbhost, $dbuser, $dbpass) or die ('Nie można połączyć sie z bazą danych. Przepraszamy z niedogodności.');
mysql_select_db ($dbname) or die ('Problemy z baza danych. Przepraszamy z niedogodności');

// Pobierz dane gdzie hash = '$_GET[key]'
$uchwyt = mysql_query("SELECT * FROM users WHERE hash='$_GET[hash]'") or die(mysql_error());
$row = mysql_num_rows($uchwyt);

// Jeśli istnieje, wygeneruj nowy hash i wyślij email z nowym wygenerowanym hasłem
    if ($row == 1)
{
// Podłączanie skryptu generującego nowy hash i nowe hasło
include('generator.php');
// Pobieranie emaila użytkownika
$query = "SELECT * FROM users WHERE hash='$_GET[hash]'";
$result = mysql_query ($query);
while($wiersz=mysql_fetch_array ($result)) 
{
$email = "$wiersz[email]";
}
$email_temat = "Temat";
$email_wiadomosc = "$new_pass";
// Wysyłanie wiadomości z hasłem
  if(mail($email, $email_temat, $email_wiadomosc)){
    echo('Nowe hasło zostało wysłane na twój adres e-mail!');
}
else {
    echo "Nie udało się wysłać wiadomości, przepraszamy.";
}
$pytanie = "UPDATE `users` SET `hash`='$new_hash', `pass`='$new_pass' WHERE `id`='$_GET[id]'";
$edit = mysql_query ($pytanie);
}
// Jeśli nie istnieje, wyświetl błąd
    elseif ($row == 0)
{
echo('Błędy link potwierdzający!');
}
}
?>
rofik
dochodzi u mnie tylko do : confirm. php
Wysyła link aktywacyjny do hasla na poczte ale tylko w takiej postaci: "http://*****.pl/new_pass.php?id=hash="

CREATE TABLE `uzytkownicy` (
`ID` int(11) NOT NULL auto_increment,
`nick` varchar(32) NOT NULL default '',
`haslo` varchar(40) NOT NULL default '',
`email` varchar(64) NOT NULL default '',
`u_activation_key` varchar(40) NOT NULL default '',
`u_active` int(1) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;


czym to moze byc?
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-2024 Invision Power Services, Inc.