ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Смена паролей пользователями сайта

Смена паролей

Если пользователь выберет опцию меню Изменить пароль, отобразится форма, показанная на рисунке.

Сценарий chenge_passwd_form.php предоставляет форму для смены пароля

Эта форма сгенерирована сценарием chenge_passwd_form.php. Он достаточно прост и использует лишь функции библиотеки вывода.

chenge_passwd_form.php —предоставляет форму для смены пароля

<?php
require_once('bookmark_fns.php');
session_start();
$title = "Изменить пароль";
$description = "Изменить пароль";
$keywords = "Изменить пароль";
do_html_header($title, $description, $keywords);
blok_left();
?>
<div id="blok_right">
<div class="blok_text">
<div class="text_top" align="left">
<?php
do_html_heading($title);
check_valid_user();

display_password_form();

display_user_menu();
echo '</div></div></div>';
do_html_footer();
?>

В сценарии используется новая функция check_valid_user().

Функция check_valid_user() не выполняет повторного соединения с базой данных, однако проверяет, что с пользователем связан зарегистрированный сеанс. Другими словами, он вошел в систему ранее.

Функция check_valid_user() библиотеки user_auth_fns.php — проверяет, что с пользователем связан сеанс

function check_valid_user()
// Определяет, вошел ли пользователь в систему и,
// если нет, выводит соответствующее уведомление
{
global $valid_user;
if (isset($_SESSION['valid_user']))
{
echo 'Вы вошли в систему под именем '
.stripslashes($_SESSION['valid_user']).'.';
echo "<br />";
}
else
{
// Пользователь не вошел в систему
do_html_heading("Проблема:");
echo "Вы не вошли в систему.<br />";
do_html_url('login.php', 'Вход');
do_html_footer();
exit;
}
}

Если пользователь не вошел в систему, функция укажет ему, что это необходимо выполнить, чтобы данная страница отобразилась, и предоставит ему ссылку на страницу входа.

После отправки формы запускается на выполнение сценарий chenge_passwd.php.

change_passwd.php — этот сценарий выполняет попытку смены пароля

<?php
require_once('bookmark_fns.php');
session_start();
$title = "Смена пароля";
$description = "Смена пароля";
$keywords = "Смена пароля";
do_html_header($title, $description, $keywords);
blok_left();
?>
<div id="blok_right">
<div class="blok_text">
<div class="text_top" align="left">
<?php
do_html_heading($title);
// Создать короткие имена переменных
$old_passwd = $_POST['old_passwd'];
$new_passwd = $_POST['new_passwd'];
$new_passwd2 = $_POST['new_passwd2'];

try
{
check_valid_user();
if (!filled_out($_POST))
throw new Exception('Вы не заполнили корректно форму. '
.'Пожалуйста, попытайтесь еще раз.');
if ($new_passwd != $new_passwd2)
throw new Exception('Введенные пароли не совпадают. '
.'Изменение невозможно.');
if (strlen($new_passwd) < 6)
throw new Exception('Новый пароль должен иметь длину, как минимум, '
.'6 символов. Повторите попытку.');

// Попытка обновить БД
change_password($_SESSION['valid_user'], $old_passwd, $new_passwd);
echo 'Пароль изменен.';
}
catch (Exception $e)
{
echo $e->getMessage();
}

display_user_menu();
echo '</div></div></div>';
do_html_footer();
?>

Этот сценарий проверяет, что пользователь вошел в систему (функция check_valid_user()), заполнил форму ввода пароля (filled_out()), в обоих полях введены одинаковые пароли и длина их является допустимой. Если все правильно, вызывается функция change_passwd():

change_password($_SESSION['valid_user'], $old_passwd, $new_passwd);
echo 'Пароль изменен.';

Эта функция содержится в библиотеке user_auth_fns.php.

Функция change_password() библиотеки user_auth_fns.php — выполняет попытку обновления пароля в базе данных

function change_password($username, $old_password, $new_password)
// Заменяет старый пароль новым.
// Возвращает значение true или генерирует исключение
{
// Если прежний пароль введен правильно,
// он заменяется новым и возвращается значение true,
// в противном случае генерируется исключение
login($username, $old_password);
$conn = db_connect();
$result = $conn->query( "update user
set passwd = password('$new_password')
where username = '$username'"
);
if (!$result)
throw new Exception('Пароль не может быть изменен.');
else
return true; // Пароль успешно изменен
}

Эта функция проверяет правильность ввода прежнего пароля с помощью уже расcмотренной функции login(). Если пароль указан верно, функция соединяется с базой данных и обновляет пароль новым значением.