• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przywracanie hasła- błąd biblioteki PDO

Object Storage Arubacloud
0 głosów
481 wizyt
pytanie zadane 6 maja 2019 w PHP przez manager96 Bywalec (2,050 p.)

Cześć. Próbuję napisać skrypt przywracania hasła. Jak narazie mój kod jest tak złożony:

	<?php

	session_start();
	
	

	require_once "connect.php";

	$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	
	{
			
			if(isset($_POST['reset_password'])){
				if(!isset($_POST['login']) || empty($_POST['login'])){
					$_SESSION['blad'] = '<span style="color:red">Nie podano loginu!</span>';
					header("location: ind.php");
					exit;
				}	
				
				$login = $_POST['login'];
				$acces_token = md5(mt_rand());
				
	$reset = $polaczenie -> Prepare("UPDATE `uzytkownicy` SET `acces_token` = :acces_token WHERE `user` LIKE :user");
				$reset -> bindParam(':acces_token', $acces_token, PDO::PARAM_STR);
				$reset -> bindParam(':user', $login, PDO::PARAM_STR);
				$reset -> Execute();
				$_SESSION['wyslany'] = '<span style="color:red">Wysłano maila resetującego hasło na Twojego maila.</span>';
				header("Location: ind.php");
				exit;
			}
		
		
		$polaczenie->close();
	}
	
?>


		<div id="loginind">
			<form action="odzyskaj.php" method="post">
	
				Login:  <input type="text" name="login" /> 
				<br></br>
				Hasło:  <input type="password" name="haslo" /> 
				<br></br>
						
				
			 <input type="submit" value="Zaloguj się" /> 
		<input type="submit" value="Odzyskaj hasło" name="reset_password" />
				
				<div style="clear:both;"></div>
	
			</form>
		</div>

No i wyskakuje mi fatal error przy lini 24:

Fatal error: Uncaught Error: Call to a member function bindParam() on bool in C:\xampp\nowy\htdocs\liga\odzyskaj.php:24 Stack trace: #0 {main} thrown in C:\xampp\nowy\htdocs\liga\odzyskaj.php on line 24.

 

Linia 24 to:

				$reset -> bindParam(':acces_token', $acces_token, PDO::PARAM_STR);

 

Ktoś może wyjaśnic co mam źle i co poprawić? Pierwszy raz próbuję ustawić tą bibliotekę PDO.

 

Dodam jeszcze że mój submit "Odzyskaj hasło" działa identycznie jak "Zaloguj się"... Zamiast metody przywracania hasła teraz dwa przyciski mają dokładnie to samo działanie :/

komentarz 6 maja 2019 przez adrian17 Ekspert (344,860 p.)

Chwila, ale nie używasz tutaj PDO, tylko mysqli...?

$polaczenie = @new mysqli

 

komentarz 6 maja 2019 przez manager96 Bywalec (2,050 p.)

No i jeszcze includuję z klasy dbconnect

<?php

	$host = "localhost";
	$db_user = "root";
	$db_password = "";
	$db_name = "liga";
	$port ="3306";


try{
	$pdo = new PDO('mysql:host='.$host.';dbname='.$db_name.';port='.$port, $db_user, $db_password );
	echo 'Połączenie nawiązane!';
}catch(PDOException $e){
	echo 'Połączenie nie mogło zostać utworzone.<br />';
}

 

1 odpowiedź

0 głosów
odpowiedź 6 maja 2019 przez Comandeer Guru (601,110 p.)

Na pewno chcesz dopasowywać nazwę użytkownika do wzoru (LIKE), a nie ustawić kod tam, gdzie nazwa użytkownika jest równa tej z formularza?

Dodatkowo w tym przykładzie używasz modułu mysqli, nie PDO. Przydałoby się wiedzieć, jaki błąd wywaliło prepare → https://php.net/mysqli_error

komentarz 6 maja 2019 przez manager96 Bywalec (2,050 p.)
A czemu klikając na przycisk "odzyskaj hasło" uzyskuje taki sam rezultat jak dla przycisku "zaloguj się" który defacto napisałem w mysqli
komentarz 6 maja 2019 przez manager96 Bywalec (2,050 p.)

Czy to wszystko przez pomieszanie tych dwóch struktur ??

Jeszcze wrzucę cały kod stronki zaloguj.php

	<?php

	session_start();
	
	if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location: ind.php');
		exit();
	}

	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
	{
		$login = $_POST['login'];
		$haslo = $_POST['haslo'];
		
		$login = htmlentities($login, ENT_QUOTES, "UTF-8");
	
		if ($rezultat = @$polaczenie->query(
		sprintf("SELECT * FROM uzytkownicy WHERE user='%s'",
		mysqli_real_escape_string($polaczenie,$login))))
		{
			$ilu_userow = $rezultat->num_rows;
			if($ilu_userow>0)
			{
				$wiersz = $rezultat->fetch_assoc();
				
				if (password_verify($haslo, $wiersz['pass']))
				{
					$_SESSION['zalogowany'] = true;
					$_SESSION['id'] = $wiersz['id'];
					$_SESSION['user'] = $wiersz['user'];
				
					
					unset($_SESSION['blad']);
					$rezultat->free_result();
					header('Location: gra.php');
				}
				else 
				{
					$_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
					header('Location: ind.php');
				}
				
			} else {
				
				$_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
				header('Location: ind.php');
				
			}
			
			if(isset($_POST['reset_password'])){
				if(!isset($_POST['login']) || empty($_POST['login'])){
					$_SESSION['blad'] = '<span style="color:red">Nie podano loginu!</span>';
					header("location: ind.php");
					exit;
				}	
				
				$login = $_POST['login'];
				$acces_token = md5(mt_rand());
				
	$reset = $polaczenie -> Prepare("UPDATE `uzytkownicy` SET `acces_token` = :acces_token WHERE `user` LIKE :user");
				$reset -> bindParam(':acces_token', $acces_token, PDO::PARAM_STR);
				$reset -> bindParam(':user', $login, PDO::PARAM_STR);
				$reset -> Execute();
				$_SESSION['wyslany'] = '<span style="color:red">Wysłano maila resetującego hasło na Twojego maila.</span>';
				header("Location: ind.php");
				exit;
			}
		}
		
		$polaczenie->close();
	}
	
?>

 

komentarz 7 maja 2019 przez Comandeer Guru (601,110 p.)
Co to znaczy "ten sam efekt"?
komentarz 10 maja 2019 przez manager96 Bywalec (2,050 p.)
oby dwoma przyciskami można się zalogować.  Mają tą samą interakcję

Podobne pytania

0 głosów
3 odpowiedzi 839 wizyt
pytanie zadane 6 sierpnia 2016 w PHP przez Mistrz0000000 Bywalec (2,780 p.)
0 głosów
1 odpowiedź 137 wizyt
+1 głos
2 odpowiedzi 503 wizyt
pytanie zadane 16 sierpnia 2020 w PHP przez mn130496 Gaduła (3,530 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...