Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wysłanie nowego hasła na email z zabezpieczeniem, Rozwiązany..
KriSsu
post 29.08.2008, 14:24:01
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 29.08.2008

Ostrzeżenie: (0%)
-----


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!');
}
}
?>


Ten post edytował KriSsu 30.08.2008, 19:33:33
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 23:29