Witam mam problem z systemem resetowania hasła na stronie. Nie wiem czy to jest idealne rozwiązanie ale na moje potrzeby raczej wystarczy, a konkretnie użytkownik po wpisaniu adresu email otrzymuje wiadomość z wygenerowanym kodem, który jest zapisywany w bazie danych (przypisany do tego użytkownika) wraz z linkiem do następnej podstrony gdzie musi wpisać kod otrzymany w wiadomości i jeżeli jest on poprawny to wyświetla się dodatkowe pole na wpisanie nowego hasła. I wszystko idzie zgodnie z planem aż do ostatniego etapu, a konkretnie hasło nie zmienia się. Próbowałem edytować kod na kilka sposobów jednak nie wiem gdzie leży problem.
Mam kilka plików
reset_pass.php
<h2>Zapomniałeś hasła?</h2>
<p>podaj adres e-mail i podążaj za instrukcjami</p>
<form action="resetuje.php" method="post">
Twój adres e-mail<br /> <input type="password" name="reset_password" /> <br />
<input type="submit" value="Zresetuj hasło" />
</form>
resetuje.php
<?php
if (isset($_POST['reset_password']))
{
$kod_email = $_POST['reset_password'];
$wszystko_OK=true;
function losowy_ciag($dlugosc){
$string = md5(time());
$string = substr($string,0,$dlugosc);
return($string);
}
$ciag_znakow=losowy_ciag(10);
require_once "connect.php";
mysqli_report(MYSQLI_REPORT_STRICT);
try
{
$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
if ($polaczenie->connect_errno!=0)
{
throw new Exception(mysqli_connect_errno());
}
if ($wszystko_OK==true)
{
//Hurra, wszystkie testy zaliczone, dodajemy gracza do bazy
if ($polaczenie->query("UPDATE uzytkownicy SET temporary_pass='$ciag_znakow' WHERE email='$kod_email'"))
{
$_SESSION['udanazmiana']=true;
}
else
{
throw new Exception($polaczenie->error);
}
}
$polaczenie->close();
}
catch(Exception $e)
{
echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o zmianę hasła w innym terminie!</span>';
echo '<br />Informacja developerska: '.$e;
}
$admin_email = $kod_email;
$email = '[email protected]';
$subject = 'Reset hasła w serwisie';
$comment = $ciag_znakow;
//wysyłamy email
mail($admin_email, "$subject", $comment, "From:" . $email);
//komunikat potwierdzający
echo "Kod resetujący hasło został wysłany na email!";
}
?>
nowe_pass.php
<h2>Wpisz kod z wiadomości email</h2>
<form action="nowe_pass.php" method="post">
Email: <br /> <input type="text" name="email" /> <br />
Kod podany w e-mailu: <br /> <input type="text" name="kod" /> <br />
<input type="submit" value="Wpisz kod" />
</form>
<?php
if (isset($_POST['email']))
{
require_once "connect.php";
$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
if ($polaczenie->connect_errno!=0)
{
echo "Error: ".$polaczenie->connect_errno;
}
else
{
$email=$_POST['email'];
$kod=$_POST['kod'];
$rezultat = $polaczenie->query("SELECT temporary_pass FROM uzytkownicy WHERE email='$email'");
$wiersz = $rezultat->fetch_assoc();
$kod_check = $wiersz['temporary_pass'];
if($kod=$kod_check)
{
echo'<form action="nowe_pass.php" method="post">
Email: <br /> <input type="text" name="email2" /> <br />
Nowe hasło: <br /> <input type="password" name="new_pass1" /> <br />
Powtórz nowe hasło: <br /> <input type="password" name="new2_pass" /> <br />
<input type="submit" value="Ustaw Nowe hasło" />';
if (isset($_POST['new_pass1']))
{
session_start();
$wszystko_OK=true;
$haslo3 = $_POST['new_pass1'];
$haslo3 = htmlentities($haslo3, ENT_QUOTES, "UTF-8");
$haslo4 = $_POST['new2_pass'];
$haslo4 = htmlentities($haslo4, ENT_QUOTES, "UTF-8");
$email2 = $_POST['email2'];
if ((strlen($haslo3)<8) || (strlen($haslo3)>20))
{
$wszystko_OK=false;
$_SESSION['e_haslo1']="Hasło musi posiadać od 8 do 20 znaków!";
}
if ($haslo3!=$haslo4)
{
$wszystko_OK=false;
$_SESSION['e_haslo1']="Podane hasła nie są identyczne!";
}
$haslo_hash1 = password_hash($haslo3, PASSWORD_DEFAULT);
$_SESSION['fr_haslo3'] = $haslo3;
$_SESSION['fr_haslo4'] = $haslo4;
require_once "connect.php";
mysqli_report(MYSQLI_REPORT_STRICT);
try
{
$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
if ($polaczenie->connect_errno!=0)
{
throw new Exception(mysqli_connect_errno());
}
if ($wszystko_OK==true)
{
//Hurra, wszystkie testy zaliczone, dodajemy gracza do bazy
if ($polaczenie->query("UPDATE uzytkownicy SET pass='$haslo_hash1' WHERE email='$email2'"))
{
$_SESSION['udanyedit']=true;
header('Location: panel.php');
}
else
{
throw new Exception($polaczenie->error);
}
}
$polaczenie->close();
}
catch(Exception $e)
{
echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o zmianę hasła w innym terminie!</span>';
echo '<br />Informacja developerska: '.$e;
}
}
}
}
}
?>
Nie wyświetlają się żadne błędy. Dodam jeszcze, że podobny skrypt, tyle, że zmiany hasła gdy użytkownik jest zalogowany i je zna wyglądający podobnie jak plik nowe_pass.php działa bez problemów. Pomoże ktoś?