System przywracania hasła

0

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ś?

1
function losowy_ciag($dlugosc){
  $string = md5(time());
  $string = substr($string,0,$dlugosc);
  return($string);
}

Losowy w c**** :D

0

Nie masz błędów powiadasz? A wiesz co robi znak @ którego używasz w niektórych miejscach?

0
axelbest napisał(a):

Nie masz błędów powiadasz? A wiesz co robi znak @ którego używasz w niektórych miejscach?
wiem ale nawet bez nich nie ma błędów. W sumie nie ma znaczenia czy to jest czy nie

2

Dlaczego funkcje definiujesz w scopie if’a ? 7 linijka w resetuje.php. Napisz jeszcze jak debugujesz swój kod, bo zakładam ze debuggera nie używasz. A jeśli nie debugujesz wcale to dawaj w istotnych miejscach w kodzie te sławetne echo "dupa"

0

Powiem szczerze, że z php i programowaniem mam niedługo do czynienia. Cały kod robiłem po prostu w notepad++ i jak zrobiłem jakieś zmiany to wrzucałem plik na ftp hostingu gdzie sprawdzałem czy działa, a jeżeli były błędy to starałem się je naprawić. Jeżeli o to ci konkretnie chodzi.

0

Czemu nie ściągniesz aplikacji Laravela? Tam już jest przywracanie hasła gotowe.

0

Udało mi się samemu edytować plik na tyle żeby działało, ale mam jeszcze 1 pytanie. Ponieważ w moim pliku wielokrotnie użytkownik musi wpisywać email, który potem przez formularz wysyłany jest do następnego pliku chciałbym to pominąć. Obecnie mam takie coś

echo'<form action="zmieniam.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" />';

Chciałbym żeby zamiast tego pole email było ukryte i była tam zmienna. Próbowałem zrobić tak ale nie działa

echo"<form action=\"zmieniam.php\" method=\"post\">
<input type=\"hidden\" name=\"email2\" value=\"'$email2'\" />
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\" />";

Wyświetla się błąd Exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[email protected]''' at line 1 in /var/www/vhosts/icoh.5v.pl/httpdocs/logowanie/zmieniam.php:45 Stack trace: #0 {main}

1 użytkowników online, w tym zalogowanych: 0, gości: 1