

После того как пользователи внесут свои данные в форму (login.php) и отправят ее, должен запуститься сценарий member.php. Этот сценарий обеспечивает вход в систему. Кроме того, этот же сценарий отображает связанные с пользователями закладки. Это основная функциональность оставшейся части приложения.
member.php — этот сценарий является основой приложения
<?php
// Включить файлы функций для данного приложения
        require_once('bookmark_fns.php');
        session_start();
// Создать короткие имена переменных
        $username = $_POST['username'];
        $passwd = $_POST['passwd'];
if ($username && $passwd)
        // Пользователь только что попытался войти в систему
        {
        try
        {
        login($username, $passwd);
        // Если пользователь записан в базе данных,
        // зарегистрировать его идентификатор
        $_SESSION['valid_user'] = $username;
        }
        catch (Exception $e)
        {
        // Неудачный вход в систему
        $title = "Проблема";
        $description = "Проблема";
        $keywords = "проблема";
        do_html_header($title, $description, $keywords);
        blok_left();
        echo'<div id="blok_right">';
        echo '<div class="blok_text">';
        echo'<div class="text_top">';
        do_html_heading('Вход в систему невозможен');
        echo 'Вход в систему невозможен. '
        .'Для просмотра этой страница необходимо войти в систему.';
        do_html_url('login.php', 'Вход');
        echo '</div></div></div>';
        do_html_footer();
        exit;
        }
        }
        global $valid_user;
        if (isset($_SESSION['valid_user']))
        {
        $title = "Домашняя страница";
        $description = "Домашняя страница";
        $keywords = "Домашняя страница";
        do_html_header($title, $description, $keywords);
        blok_left();
        echo'<div id="blok_right">';
        echo '<div class="blok_text">';
        echo'<div class="text_top" align=left>';
        do_html_heading($title);
        echo 'Вы вошли в систему под именем '
        .stripslashes($_SESSION['valid_user']).'.';
        echo "<br>";
        // Извлечь все закладки, сохраненные этим пользователем
        if ($url_array = get_user_urls($_SESSION['valid_user']));
        display_user_urls($url_array);
// Вывести меню опций
        display_user_menu();
        echo '</div></div></div>';
        do_html_footer();
        }
        else
        {
        // Пользователь не вошел в систему
        $title = "Домашняя страница";
        $description = "Домашняя страница";
        $keywords = "Домашняя страница";
        do_html_header($title, $description, $keywords);
        blok_left();
        echo'<div id="blok_right">';
        echo '<div class="blok_text">';
        echo'<div class="text_top" align=left>';
        do_html_heading("Проблема:");
        echo "Вы не вошли в систему.<br />";
        do_html_url('login.php', 'Вход');
        echo '</div></div></div>';
        do_html_footer();
        exit;
        }
        ?>
Логика этого сценария должна быть узнаваема, поскольку мы уже использовали в ней некоторые идеи.
Во-первых, выполняется проверка, осуществил ли пользователь переход из титульной страницы. Другими словами, заполнил ли он форму входа в систему. Затем выполняется попытка пустить пользователя в систему:
if ($username && $passwd)
      // Пользователь только что попытался войти в систему
      {
      try
      {
      login($username, $passwd);
      // Если пользователь записан в базе данных,
      // зарегистрировать его идентификатор
      $_SESSION['valid_user'] = $username;
      }
Для входа в систему используется функция login(). Она содержится в библиотеке user_auth_fns.php и рассматривается ниже.
Если попытка входа в систему оказывается успешной, сеанс будет зарегистрирован, как это делалось ранее. При этом имя пользователя сохраняется в переменной сеанса valid_user.
Если все идет нормально, отображается страница зарегистрированных пользователей:
global $valid_user;
      if (isset($_SESSION['valid_user']))
      {
      $title = "Домашняя страница";
      $description = "Домашняя страница";
      $keywords = "Домашняя страница";
      do_html_header($title, $description, $keywords);
      blok_left();
      echo'<div id="blok_right">';
      echo '<div class="blok_text">';
      echo'<div class="text_top" align=left>';
      do_html_heading($title);
      echo 'Вы вошли в систему под именем '
      .stripslashes($_SESSION['valid_user']).'.';
      echo "<br>";
      // Извлечь все закладки, сохраненные этим пользователем
      if ($url_array = get_user_urls($_SESSION['valid_user']));
      display_user_urls($url_array);
// Вывести меню опций
      display_user_menu();
      echo '</div></div></div>';
Эта страница также формируется функциями вывода. Можно заметить, что в ней используется несколько новых функций — get_user_urls() из файла url_fns.php и display_user_urls() из файла outputjns.php.
Функция get_user_urls() извлекает закладки пользователя из базы данных, а display_user_urls() отображает закладки в браузере.
Код этих двух функцийбудет рассмотрен во время обзора процесса хранения и извлечения закладок.
Сценарий member.php завершает страницу отображением меню с использованием функции display_user_menu().
Пример вывода сценария member.php показан на рисунке.

Теперь более подробно рассмотрим функции login() и check_valid_user().
Функция login() библиотеки user_auth_fns.php — проверяет сведения о пользователе в базе данных
function login($username, $password)
        // Проверяет наличие имени пользователя и пароля в базе данных.
        // Если они там содержатся, возвращается значение true,
        // в противном случае генерируется исключение.
        {
        // Подключиться к базе данных
        $conn = db_connect();
// Проверить уникальность имени пользователя
        $result = $conn->query("select * from user
        where username='$username'
        and passwd = sha1('$password')");
        if (!$result)
        throw new Exception('Вход в систему невозможен');
if ($result->num_rows > 0)
        return true;
        else
        throw new Exception('Вход в систему невозможен');
        }
Функция подключается к базе данных и проверяет в ней наличие комбинации имени и пароля для данного пользователя. Если эти записи присутствуют, возвращается значение true, в противном случае, либо когда данные пользователя не могут быть проверены — false.
Как видно из рисунка, меню содержит ссылку Выход. Щелчок на этой ссылке приводит к вызову сценария logout.php.
logout.pnp — этот сценарий завершает сеанс пользователя
<?php
        // Включить файлы функций для этого приложения
        require_once('bookmark_fns.php');
        session_start();
        $old_user = $_SESSION['valid_user'];
        // Сохранить для проверки, если кто-то вошел в систему *ранее*
        unset($_SESSION['valid_user']);
        $result_dest = session_destroy();
// Начать вывод html-содержимого
        $title = "Выход";
        $description = "Выход";
        $keywords = "выход";
        do_html_header($title, $description, $keywords);
        blok_left();
        echo'<div id="blok_right">';
        echo '<div class="blok_text">';
        echo'<div class="text_top" align=left>';
        do_html_heading($title);
        if (!empty($old_user))
        {
        if ($result_dest)
        {
        // Если пользователь вошел в систему и теперь выходит из нее
        echo 'Успешный выход из системы.<br>';
        do_html_url('login.php', 'Вход');
        }
        else
        {
        // Пользователь вошел в систему и не может выйти из нее
        echo 'Выход из системы невозможен.<br >';
        }
        }
        else
        {
        // Если пользователь не входил в систему, но каким-то образом попал на эту страницу
        echo 'Вы не входили в систему, поэтому и выходить из нее не нужно.<br />';
        do_html_url('login.php', 'Вход');
        }
        echo '</div></div></div>';
        do_html_footer();
?>
