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ć:
- Laura Lemay, Rafe Colburn, Jennifer Kyrnin: HTML, CSS i JavaScript dla każdego. Wydanie VII, Wydawnictwo Helion, 2016.
- Robin Nixon: PHP, MySQL i JavaScript. Wprowadzenie. Wydanie IV, Wydawnictwo Helion, 2015.
- Matt Zandstra: PHP. Obiekty, wzorce, narzędzia. Wydanie IV, Wydawnictwo Helion, 2014.
- Jon Duckett: HTML i CSS. Zaprojektuj i zbuduj witrynę WWW, Wydawnictwo Helion, 2014.
- Marcin Lis: Tworzenie bezpiecznych aplikacji internetowych (z przykładami w PHP), Wydawnictwo Helion, 2014.
- Luke Welling, Laura Thomson: PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie czwarte, Wydawnictwo Helion, 2009.