Ocena użytkowników: 0 / 5

Gwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywnaGwiazdka nieaktywna
 

Wszystkie działające aplikacje umożliwiające logowanie, powinny również posiadać możliwość zmiany hasła. Fragment kodu zajmujący się tym problemem jest przedstawiony na listingu 1. Zmiana hasła realizowana jest w instrukcji warunkowej if.

 

Listing 1. Zmiana hasła, przykład


$user_id = 16;
$old_password = '123456';
$new_password = 'NoweHasło.';

if(AdminFactory::sqlUpdatePassword($user_id, $old_password, $new_password, 'autor')) {
echo "Hasło zostało zmienione.";
} else {
echo "Wprowadzone hasło nie jest właściwe, albo wystąpił błąd i nie mogło zostać zmienione. Spróbuj ponownie!";
}

 

Metoda odpowiedzialna za uaktualnienie hasła sqlUpdatePassword() działa dla wszystkich kont, jest pokazana na listingu 2. Na początku występuje kodowanie obecnego hasła i nowego kluczem MD5. Dzięki możliwości podania w wartościach nazwy tabeli metoda jest uniwersalna. W całej funkcji korzysta się z operatora metody statycznej, który w tym przypadku jest zaletą (nie trzeba tworzyć obiektu korzystając z operatora new).

 

Listing 2. Metoda odpowiedzialna za zmianę hasła, klasa AdminFactory

...
/**
* Metoda statyczna odpowiedzialna za zmianę hasła wybranemu użytkownikowi.
* @param integer $id – klucz główny z tabeli np.: autor
* @param string $old_password – stare hasło
* @param string $new_password – nowe hasło
* @param string $table_name - Nazwa tabeli z bazy danych, na której będą przeprowadzane operacje.
* @return boolean
*/

public static function sqlUpdatePassword($id, $old_password , $new_password, $table_name) {
$old_password = md5($old_password);
$new_password = md5($new_password);

// Sprawdza czy podane hasło przy zmianie jest prawdziwe, jeśli tak można kontynuować.
$sql = "SELECT id_".$table_name." FROM ".$table_name." WHERE id_".$table_name." = '$id' AND md5_haslo='$old_password'";

$result = mysqli_query(DataManager::_getConnection(), $sql);

if (! ($result && mysqli_num_rows($result))) {
return false; // Niepowodzenie, stare hasło.
} else {
// Jeśli stare hasło zgadza się z tym zapisanym w bazie danych.
// Następuje zapisanie nowego hasła wybranemu użytkownikowi.

$sql = "UPDATE ".$table_name." SET ";
$sql .= "md5_haslo = '$new_password' WHERE id_".$table_name." = '$id'";

$result = mysqli_query(DataManager::_getConnection(), $sql);

if (!$result)
return false;

return true;
}
}
...

 

W przykładzie wykorzystano bazę danych opisaną w artykule „Przykładowy projekt bazy danych strony internetowej”.

 

Warto przeczytać:

Wybrane książki:

Książki Helion