×
Закрытие
×

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

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

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

  • Создаем сайт для работы в Интернете

    1. Причины создания пошаговой инструкции по разработке самописного сайта
    2. Тема создаваемого сайта
    3. В чем будет заключаться монетизация
    4. Функционал
    5. Этапы создания
    6. Текущее состояние создаваемого сайта

    Здравствуйте уважаемый посетитель!

    Наверное, многие задаются вопросом, как можно самому создать сайт для работы в Интернете или просто для реализации своих интеллектуальных способностей.

    Причем чтобы такой сайт был создан не в стандартном исполнении на основе какой-нибудь бесплатной СMS, а заточенный под себя, с возможностью обеспечить ему должную безопасность и реализовать все свои индивидуальные потребности.

    Данный сборник статей и предназначен для того, чтобы показать на реальном примере, как можно самому с нуля создать интернет-ресурс, который в последствии можно использовать в качестве инструмента для своей работы.

    При этом в материалах сборника приводится не только подробное описание каждого этапа создаваемого самописного сайта, но и бесплатно предоставляются все исходные коды с соответствующими таблицами базы данных. Что существенно упрощает использования предоставляемого шаблона сайта под свои конкретные задачи.

    Следует к этому добавить, что при желании, после получения необходимых знаний и навыков в вопросах сайтостроения, вполне возможно заняться и созданием сайтов на заказ. Тем более, что эта работа очень интересна и достаточно хорошо оплачиваемая. И что немаловажно, ее можно выполнять удалено, занимаясь в любое время не выходя из дома. Для этого нужно всего лишь одно условие - подключение к сети Интернет, что в наше время не является какой-либо проблемой.

    И надеюсь, что данный материал позволит многим желающим не только создать свой сайт для работы в сети Интернет, но и поможет овладеть необходимой компетенцией для занятия профессиональным веб-программированием.

Самописный сайт своими руками!

Текущее состояние создаваемого сайта

Здесь можно посмотреть текущее состояние самописного сайта, который создается для работы в Интернете в рамках цикла статей Как сделать сайт.

Где в дополнительных материалах можно бесплатно скачать исходные файлы сайта с таблицами MySQL.

Вы здесь: Главная → Сборник статей → Авторизация  → Создаем личный кабинет


Автор: / Дата:

Создаем личный кабинет

Здравствуйте уважаемый посетитель!

В завершении рассмотрения вопросов по разработке системы авторизации создадим личный кабинет, который в нашем случае будет содержать 3 раздела, такие как:

  1. Мои заказы;
  2. Профиль;
  3. Добавить заказ.

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

Однако, основные моменты, которые будут рассмотрены в статье, вполне возможно использовать и в других подобных случаях. Особенно это касается взаимодействия с базой данных MySQL, так как ее использование необходимо для работы любого личного кабинета.

Поэтому в данной статье на примере "Мои заказы" мы посмотрим, каким образом пользователь личного кабинета может получить интересующую его информацию, причем доступную только для него. И как он может в предназначенные для него данные внести свои изменения.

По остальным двум разделам: "Профиль" и "Добавить заказ" подробного рассмотрения приводить здесь не будем, так как они сформированы аналогичным образом. Непосредственно с их кодом можно ознакомиться в исходных файлах сайта в файлах "profile.php" и "add-order.php", расположенных в папке "user" каталога "articles".

Содержание


  • Формируем состояние активности кнопок меню Личного кабинета
  • О месте расположения контента страниц личного кабинета
  • В разделе 'Мои заказы' выводим данные о существующих заказах пользователя
  • Вносим изменения в данные о заказах пользователя
  • Исходные файлы сайта

Формируем состояние активности кнопок меню Личного кабинета


Ранее при создании системы авторизации мы сформировали кнопки меню личного кабинета со ссылками на его разделы. Эти кнопки на текущий момент имеют три состояния:

  • исходное;
  • наведение курсора;
  • нажатое (удерживаемая кнопкой мыши).

Но для того, чтобы пользователь мог визуально видеть, какая страница личного кабинета в данный момент отображается в области основного содержания, не лишне будет добавить кнопкам меню еще одно состояние, назовем его активное.

Для этого в список меню личного кабинета, находящийся в файле "aside.php" папки "blocks" добавим строки PHP-кода с условным оператором if. С помощью которого, при совпадении текущего адреса страницы с заданным пунктом меню, для соответствующего тега li будет применяться отдельный класс, выделяющий его от других элементов (в данном случае "activ-user").

  1. <h3>Личный кабинет</h3>

  2. <ul>

  3. <?php

  4. if ($_GET['section'] == 'user' && $_GET['rubric'] == 'account') echo '<li class="activ-user"><a href="/user/account.html">Профиль</a></li>';

  5. else

  6. echo '<li><a href="/user/account.html">Профиль</a></li>';

  7. if ($_GET['section'] == 'user' && $_GET['rubric'] == 'order') echo '<li class="activ-user"><a href="/user/order.html">Мои заказы</a></li>';

  8. else

  9. echo '<li><a href="/user/order.html">Мои заказы</a></li>';

  10. if ($_GET['section'] == 'user' && $_GET['rubric'] == 'add-order') echo '<li class="activ-user"><a href="/user/add-order.html">Добавить заказ</a></li>';

  11. else

  12. echo '<li><a href="/user/add-order.html">Добавить заказ</a></li>';

  13. ?>

  14. </ul>

Рис.1 фрагмент HTML-кода с активацией кнопок меню личного кабинета

Здесь видно, что при совпадении GET-параметров "rubric" и "page" со значениями адресов страниц личного кабинета (поз.4,7,10), соответствующему тегу li присваивается класс "activ-user" (поз.4,7,10). В противном случае тег li будет использоваться без этого класса (поз.6,9,12).

Что касается назначения свойств CSS для элементов активной кнопки меню (с классом "activ-user"), то для этого достаточно дополнить таблицу стилей соответствующим CSS-кодом.

В связи с тем, что оформление элементов с помощью стилей CSS достаточно подробно рассматривалось на ранних этапах создания сайта, начиная с раздела Верстка, и для данной статьи эти вопросы не столь уж актуальны, то мы здесь не будем отдельно приводить и рассматривать этот CSS-код.

При желании данный фрагмент можно посмотреть во внешней таблице стилей, находящейся в файле main.css, который в свою очередь можно скачать в прилагаемых исходных файлах сайта. В таблице стилей этот фрагмент находится в строках 973÷978.

После того, как мы сделали эти дополнения, авторизуемся на сайте и перейдем на какую-нибудь страницу личного кабинета, как показано на скриншоте (для авторизации будем использовать ранее созданный аккаунт с логином Audi387357 и паролем Z5nC89).

Активное состояние одного из пунктов меню личного кабинета

Рис.2 Активное состояние одного из пунктов меню личного кабинета

Таким образом мы получили нужный результат, а именно: при выборе одного из разделов личного кабинета, соответствующий пункт меню отображается в активном состоянии (в данном случае выбран раздел "Мои заказы").

О месте расположения контента страниц личного кабинета


При формировании страниц личного кабинета нам прийдется взаимодействовать с базой данных с использованием соответствующих PHP-скриптов. Поэтому в данном случае потребуется работать с содержимом контента, в котором должен будет присутствовать PHP-код.

Как ранее отмечалось, структура данного сайта создана таким образом, что контент для области основного содержания страниц можно размещать, как в базе данных (поле "content" таблицы "url"), так и непосредственно в файлах сайта. Причем контент, размещенный в базе данных, имеет больший приоритет по сравнению с файлами.

Т.е, контент из файла может быть выведен в область основного содержания только в том случае, если соответствующее поле "content" таблицы базы данных "url" пустое. Если же это поле будет чем-то заполнено, то в качестве контента будет использоваться содержимое не файла, а базы данных, извлеченное из поля "content".

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

Более подробно о том как это реализовано, можно посмотреть в статье, где на стадии оформления контента, в разделе "Подготовка к оформлению", был пояснен механизм такого способа работы с областью основного содержания. А также показан добавленный в шаблон главной страницы соответствующий фрагмент кода, обеспечивающий выбор нужного варианта использования контента.

Таким образом, исходя из адреса страниц ("/user/profile.html", "/user/order.html" и "/user/add-order.html"), файлы, с которыми мы сейчас будем работать, должны иметь имена "profile.php", "order.php" и "add-order.php", соответственно. И при этом должны находиться в папке "user" каталога "articles".

Нам не раз уже приходилось создавать новые файлы, поэтому сложностей в этом не должно возникнуть. При необходимости, можно посмотреть, как мы это делали на этапе верстки сайта.

На скриншоте показано размещение созданных файлов, предназначенных для работы личного кабинета, которые располагаются в папке "user" каталога "articles" сайта.

Вновь созданные файлы личного кабинета

Рис.3 Вновь созданные файлы личного кабинета

Таким образом мы определили место, где будут размещаться файлы личного кабинета. И дальше, на примере страницы "Мои заказы" посмотрим, как можно реализовать взаимодействие личного кабинета с базой данных.

В разделе 'Мои заказы' выводим данные о существующих заказах пользователя


Для формирования страницы "Мои заказы", в первую очередь сформируем элементы вывода информации о выполненных заказах, представляющие собой таблицы с двумя столбцами. Первый столбец - наименование параметра заказа, второй - значение. Для чего поместим в созданный файл "order.php" следующий код:

  1. <div class="article">

  2. <h1>Личный кабинет</h1>

  3. <div class="chapter">

  4. <hr>

  5. <h2>Мои заказы</h2>

  6. <?php

  7. if ($session_check == 1) { //При разрешающем флаге авторизации

  8. $table = 'orders';

  9. $column = 'client-login';

  10. $value = $_SESSION['login'];

  11. if ($data_bd = getAllLine($table, $column, $value)) {

  12. for ($i = 0; $i < count ($data_bd); $i++) {

  13. $number_order++;

  14. $date = $data_bd[$i]['date'];

  15. $marka = $data_bd[$i]['marka'];

  16. $model = $data_bd[$i]['model'];

  17. $year = $data_bd[$i]['year'];

  18. $vin = $data_bd[$i]['vin'];

  19. $insurance = $data_bd[$i]['insurance'];

  20. $namer_order = $data_bd[$i]['namer-order'];

  21. $center_price = $data_bd[$i]['center-price'];

  22. $discount_price = $data_bd[$i]['discount-price'];

  23. if (!empty($marka)) {

  24. ?>

  25. <h3>Заказ №<?php echo $number_order;?></h3>

  26. <table class="order">

  27. <tr>

  28. <td>Дата:</td>

  29. <td><?php echo $date;?></td>

  30. </tr>

  31. <tr>

  32. <td>Марка автомобиля:</td>

  33. <td><?php echo $marka;?></td>

  34. </tr>

  35. <tr>

  36. <td>Модель:</td>

  37. <td><?php echo $model;?></td>

  38. </tr>

  39. <tr>

  40. <td>Год выпуска:</td>

  41. <td><?php echo $year;?></td>

  42. </tr>

  43. <tr>

  44. <td>Последние 6 цифр VIN:</td>

  45. <td><?php echo $vin;?></td>

  46. </tr>

  47. <tr>

  48. <td>Страховая компания:</td>

  49. <td><?php echo $insurance;?></td>

  50. </tr>

  51. <tr>

  52. <td>Вид маркировки:</td>

  53. <td><?php echo $namer_order;?></td>

  54. </tr>

  55. <tr>

  56. <td>Цена сервис-центра:</td>

  57. <td><?php echo $center_price;?></td>

  58. </tr>

  59. <tr>

  60. <td>Цена со скидкой:</td>

  61. <td><?php echo $discount_price;?></td>

  62. </tr>

  63. </table>

  64. <?php

  65. }

  66. else {

  67. ?>

  68. <p>В настоящее время у Вас нет заказов.</>

  69. <?php

  70. }

  71. }

  72. ?>

  73. </div>

  74. <?php

  75. }

  76. }

  77. else {

  78. ?>

  79. <p>Личный кабинет доступен только для авторизованных пользователей. Для входа в него необходимо авторизоваться на сайте со своим логином и паролем в соответствующей форме.</>

  80. <?php

  81. }

  82. ?>

  83. </div>

Рис.4 Файл "order.php" с выводом информации о выполненных заказах на странице "Мои заказы"

По существу приведенный фрагмент состоит из двух основных частей. В первой части с использованием PHP-кода выполняются следующие действия:

  1. Проверяется, авторизован ли пользователь (поз.7). И если да, то выполняется дальнейшая работа скрипта. В противном случае на страницу выводится информационное сообщение о том, что личный кабинет доступен только для авторизованных пользователей, и что для входа в него требуется авторизоваться (поз.79). После чего работа скрипта завершается.

  2. Из таблицы базы данных "orders" выводятся все данные, относящиеся к заказам авторизованного пользователя. Для этого предусмотрен вызов функции getAllLine() (поз.11), которая из таблицы извлекает все записи удовлетворяющие условию, что в поле "client-login" (поз.9) имеется значение, совпадающее с логином авторизованного пользователя.

    При этом необходимые аргументы передаются функции в виде переменных $table (поз.8), $column (поз.9) и $value (поз.10).

  3. После вызова функции getAllLine() выполняется цикл for (поз.12), в котором имеющиеся в ассоциативном массиве $data_bd данные переносятся в PHP-переменные (поз.14÷22). Эти данные будут в дальнейшем использоваться для вывода информации о заказах.

Вторая часть состоит их HTML-кода, предназначенного для вывода информации в табличном виде. Для этого используются соответствующие таким случаям элементы <table>,<tr> и <td> (поз.26÷63).

При этом в качестве значений ячеек таблиц используются ранее полученные переменные $date (поз.29), $marka (поз.33), $model (поз.37), $year (поз.41), $vin (поз.45), $insurance (поз.49), $namer_order (поз.53), $center_price (поз.57), $discount_price (поз.61).

Что касается оформления созданных таблиц, то назначенные для этих элементов свойства CSS можно посмотреть во внешней таблице стилей, находящейся в прилагаемых дополнительных материалах в файле main.css. Данный фрагмент кода находится в строках 827÷856.

Таким образом мы составили скрипт вывода данных из таблицы MySQL и сформировали необходимые таблицы.

Однако, в используемом скрипте мы применили функцию вывода набора строк по заданному условию getAllLine(), которая на данный момент отсутствует в нашей библиотеке, расположенной в файле functions.php папки mysql.

Сейчас в библиотеке имеется функция getLine() (строки 11÷16 в файле functions.php), предназначенная для вывода по заданному условию только одиночной строки, которую мы ранее неоднократно использовали.

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

  1. <?php

  2. //----Универсальная функция вывода набора строк по заданному условию-------------

  3. function getAllLine($table, $column, $value) {

  4. global $mysqli;

  5. if (!$result = $mysqli->query("SELECT * FROM `$table` WHERE `$column`='$value'")) {

  6. die ('При извлечении записей возникла ошибка: '.$mysqli->errno.' - '.$mysqli->error);

  7. }

  8. $array = array();

  9. while (($row = $result->fetch_assoc()) != false) {

  10. $array[] = $row;

  11. }

  12. return $array;

  13. }

  14. ?>

Рис.5 Универсальная функция вывода набора строк по заданному условию

В данной функции в отличие от getLine() в цикле "while" (поз.9÷11) при каждом обращении к методу "fetch_assoc()" через промежуточную переменную "$row" в массив $array[] (поз.10) будут записываться данные очередной строки.

Причем, одним из ключей массива будет порядковый номер строки (по умолчанию начиная от нуля), а второй - названия полей таблицы. И таким образом мы получим двумерный массив со всеми записями, которые удовлетворяют условию, указанному в запросе (поз.5).

Дополнив этой функцией нашу библиотеку (файл functions.php) попробуем теперь открыть созданную страницу "Мои заказы". И посмотрим, как будет на ней отображаться полученная из базы данных информация о заказах пользователя.

Вывод информации о заказах в табличном виде

Рис.6 Вывод информации о заказах в табличном виде

Как видно, у пользователя с логином Audi387357 в настоящее время имеется два заказа: один на приобретение набора для самостоятельной маркировки (автомобиль Audi A6), другой - на маркировку с индивидуальным дизайном (автомобиль BMW X3).

При этом текст в таблице вполне хорошо виден благодаря применению различного шрифта в ее столбцах и чередованию цвета фона в строках.

Таким образом вопрос вывода в личном кабинете данных о существующих заказах пользователя мы закрыли. И теперь посмотрим, как можно в личном кабинете их изменять.

Вносим изменения в данные о заказах пользователя


Внесение в личном кабинете изменений в данные пользователя мы рассмотрим на примере записи в таблицу "orders" даты выполнения заказа. Для этого добавим в одну из строк таблицы во фрагменте кода страницы "Мои заказы" (рис.4) дополнительную форму, с помощью которой будем сохранять введенную дату в соответствующее поле нужной строки таблицы базы данных.

Ниже показан файл "order.php" с этим дополнением (добавленные строки выделены светлым фоном).

  1. <div class="article">

  2. <h1>Личный кабинет</h1>

  3. <div class="chapter">

  4. <hr>

  5. <h2>Мои заказы</h2>

  6. <?php

  7. if ($session_check == 1) { //При разрешающем флаге авторизации

  8. $table = 'orders';

  9. $column = 'client-login';

  10. $value = $_SESSION['login'];

  11. if ($data_bd = getAllLine($table, $column, $value)) {

  12. $check_order++;

  13. for ($i = 0; $i < count ($data_bd); $i++) {

  14. $number_order++;

  15. $date = $data_bd[$i]['date'];

  16. $make_date = $data_bd[$i]['make-date'];

  17. if (empty($make_date)) $status = 'Ожидание';

  18. else

  19. $status = 'Выполнено';

  20. $marka = $data_bd[$i]['marka'];

  21. $model = $data_bd[$i]['model'];

  22. $year = $data_bd[$i]['year'];

  23. $vin = $data_bd[$i]['vin'];

  24. $insurance = $data_bd[$i]['insurance'];

  25. $namer_order = $data_bd[$i]['namer-order'];

  26. $center_price = $data_bd[$i]['center-price'];

  27. $discount_price = $data_bd[$i]['discount-price'];

  28. if (!empty($marka)) {

  29. ?>

  30. <h3>Заказ №<?php echo $number_order;?></h3>

  31. <table class="order">

  32. <tr>

  33. <td>Дата:</td>

  34. <td><?php echo $date;?></td>

  35. </tr>

  36. <tr>

  37. <td>Статус:</td>

  38. <td><input type="text" value="<?php echo $status;?>"></td>

  39. </tr>

  40. <tr>

  41. <td>Дата выполнения*:</td>

  42. <td>

  43. <form name="result" action="/user/order.html" method="post">

  44. <div><?php echo $make_date;?></div>

  45. <?php

  46. if (empty($make_date)) {

  47. ?>

  48. <div><input type="date" name="date-result"></div>

  49. <div><input type="submit" name="result-button" value="Отправить"></div>

  50. <div>

  51. <div><input type="text" name="marka-result" value="<?php echo $marka;?>"></div>

  52. <div><input type="text" name="vin-result" value="<?php echo $vin;?>"></div>

  53. </div>

  54. <?php

  55. }

  56. ?>

  57. </form>

  58. </td>

  59. </tr>

  60. <tr>

  61. <td>Марка автомобиля:</td>

  62. <td><?php echo $marka;?></td>

  63. </tr>

  64. <tr>

  65. <td>Модель:</td>

  66. <td><?php echo $model;?></td>

  67. </tr>

  68. <tr>

  69. <td>Год выпуска:</td>

  70. <td><?php echo $year;?></td>

  71. </tr>

  72. <tr>

  73. <td>Последние 6 цифр VIN:</td>

  74. <td><?php echo $vin;?></td>

  75. </tr>

  76. <tr>

  77. <td>Страховая компания:</td>

  78. <td><?php echo $insurance;?></td>

  79. </tr>

  80. <tr>

  81. <td>Вид маркировки:</td>

  82. <td><?php echo $namer_order;?></td>

  83. </tr>

  84. <tr>

  85. <td>Цена сервис-центра:</td>

  86. <td><?php echo $center_price;?></td>

  87. </tr>

  88. <tr>

  89. <td>Цена со скидкой:</td>

  90. <td><?php echo $discount_price;?></td>

  91. </tr>

  92. </table>

  93. <?php

  94. }

  95. else {

  96. ?>

  97. <p>В настоящее время у Вас нет заказов.</>

  98. <?php

  99. }

  100. }

  101. if (!empty($check_order) && !empty($marka)) {

  102. ?>

  103. <p>* - для возможности контроля со стороны пользователей учета выполнения заказов, большая просьба, в поле "Дата выполнения" отметить реальную дату оказанных услуг.</>

  104. <?php

  105. }

  106. ?>

  107. </div>

  108. <?php

  109. }

  110. }

  111. else {

  112. ?>

  113. <p>Личный кабинет доступен только для авторизованных пользователей. Для входа в него необходимо авторизоваться на сайте со своим логином и паролем в соответствующей форме.</>

  114. <?php

  115. }

  116. ?>

  117. </div>

Рис.7 Дополненный файл "order.php" для ввода изменений в данные пользователя

Следует обратить внимание, что здесь в зависимости от полученного из базы данных значения даты выполнения заказа (переменная $make_date), элементы в форму подключаются в следующем порядке:

  • При отсутствии в базе данных отметки о дате выполнения заказа, и соответственно при пустом значении переменной $make_date (поз.46), в форме будут присутствовать элементы поля ввода даты (поз.48) и кнопки отправки формы (поз.49).
  • Если же эта дата уже ранее была сохранена в базе данных, то переменная $make_date должна будет иметь какое-либо определенное значение. И в этом случае вместо поля ввода даты и кнопки должно отображаться текстовое поле со значением даты (поз.44).

Что касается полей "marka-result" и "vin-result" (поз.51,52), то они здесь используются только для того, чтобы передать значение марки автомобиля и его VIN-номера в обработчик формы. Вывод этих элементов на экран браузера заблокирован с помощью стилей CSS.

Также следует добавить, что таблица вывода данных о заказе дополнена еще одной строкой, в которой отображается статус выполнения заказа (поз.36÷39).

При этом значение переменной $status со словами "Ожидание" или "Выполнено" формируется в зависимости от значения той же переменной $make_date, подобным образом, как и в предыдущем случае:

  • При пустом значении переменной $make_date (поз.17) статусу $status присваивается состояние "Ожидание" (поз.17).
  • Если же $make_date имеет какое-либо определенное значение, то переменной $status присваивается "Выполнено". (поз.19).

Что касается оформления дополненных строк таблицы, то используемые для этих элементов свойства CSS можно посмотреть во внешней таблице стилей, находящейся в прилагаемых дополнительных материалах в файле main.css. Данный фрагмент кода находится в строках 857÷895.

Таким образом форму для отправки даты выполнения заказа мы сформировали, осталось теперь только ее обработать. Для этого создадим обработчик формы, который разместим в этом же файле "order.php" (добавленный код выделен светлым фоном).

  1. <?php

  2. if (!empty($_POST["result-button"])) {

  3. $table = 'orders';

  4. $column = 'make-date';

  5. $value = htmlspecialchars($_POST['date-result']);

  6. $column_1 = 'marka';

  7. $value_1 = htmlspecialchars($_POST['marka-result']);

  8. $column_2 = 'vin';

  9. $value_2 = htmlspecialchars($_POST['vin-result']);

  10. $success = rihgtOneColumnTwoСondition($table, $column, $value, $column_1, $value_1, $column_2, $value_2);

  11. if (!$success) $alert = 'Ошибка при отправке формы';

  12. else

  13. $alert = 'Вы успешно внесли дату выполнения и изменили статус заявки на Выполнено. Спасибо!';

  14. include"alert.php";

  15. }

  16. ?>

  17. <div class="article">

  18. <h1>Личный кабинет</h1>

  19. <div class="chapter">

  20. <hr>

  21. <h2>Мои заказы</h2>

  22. <?php

  23. if ($session_check == 1) { //При разрешающем флаге авторизации

  24. $table = 'orders';

  25. $column = 'client-login';

  26. $value = $_SESSION['login'];

  27. if ($data_bd = getAllLine($table, $column, $value)) {

  28. $check_order++;

  29. for ($i = 0; $i < count ($data_bd); $i++) {

  30. $number_order++;

  31. $date = $data_bd[$i]['date'];

  32. $make_date = $data_bd[$i]['make-date'];

  33. if (empty($make_date)) $status = 'Ожидание';

  34. else

  35. $status = 'Выполнено';

  36. $marka = $data_bd[$i]['marka'];

  37. $model = $data_bd[$i]['model'];

  38. $year = $data_bd[$i]['year'];

  39. $vin = $data_bd[$i]['vin'];

  40. $insurance = $data_bd[$i]['insurance'];

  41. $namer_order = $data_bd[$i]['namer-order'];

  42. $center_price = $data_bd[$i]['center-price'];

  43. $discount_price = $data_bd[$i]['discount-price'];

  44. if (!empty($marka)) {

  45. ?>

  46. <h3>Заказ №<?php echo $number_order;?></h3>

  47. <table class="order">

  48. <tr>

  49. <td>Дата:</td>

  50. <td><?php echo $date;?></td>

  51. </tr>

  52. <tr>

  53. <td>Статус:</td>

  54. <td><input type="text" value="<?php echo $status;?>"></td>

  55. </tr>

  56. <tr>

  57. <td>Дата выполнения*:</td>

  58. <td>

  59. <form name="result" action="/user/order.html" method="post">

  60. <div><?php echo $make_date;?></div>

  61. <?php

  62. if (empty($make_date)) {

  63. ?>

  64. <div><input type="date" name="date-result"></div>

  65. <div><input type="submit" name="result-button" value="Отправить"></div>

  66. <div>

  67. <div><input type="text" name="marka-result" value="<?php echo $marka;?>"></div>

  68. <div><input type="text" name="vin-result" value="<?php echo $vin;?>"></div>

  69. </div>

  70. <?php

  71. }

  72. ?>

  73. </form>

  74. </td>

  75. </tr>

  76. <tr>

  77. <td>Марка автомобиля:</td>

  78. <td><?php echo $marka;?></td>

  79. </tr>

  80. <tr>

  81. <td>Модель:</td>

  82. <td><?php echo $model;?></td>

  83. </tr>

  84. <tr>

  85. <td>Год выпуска:</td>

  86. <td><?php echo $year;?></td>

  87. </tr>

  88. <tr>

  89. <td>Последние 6 цифр VIN:</td>

  90. <td><?php echo $vin;?></td>

  91. </tr>

  92. <tr>

  93. <td>Страховая компания:</td>

  94. <td><?php echo $insurance;?></td>

  95. </tr>

  96. <tr>

  97. <td>Вид маркировки:</td>

  98. <td><?php echo $namer_order;?></td>

  99. </tr>

  100. <tr>

  101. <td>Цена сервис-центра:</td>

  102. <td><?php echo $center_price;?></td>

  103. </tr>

  104. <tr>

  105. <td>Цена со скидкой:</td>

  106. <td><?php echo $discount_price;?></td>

  107. </tr>

  108. </table>

  109. <?php

  110. }

  111. else {

  112. ?>

  113. <p>В настоящее время у Вас нет заказов.</>

  114. <?php

  115. }

  116. }

  117. if (!empty($check_order) && !empty($marka)) {

  118. ?>

  119. <p>* - для возможности контроля со стороны пользователей учета выполнения заказов, большая просьба, в поле "Дата выполнения" отметить реальную дату оказанных услуг.</>

  120. <?php

  121. }

  122. ?>

  123. </div>

  124. <?php

  125. }

  126. }

  127. else {

  128. ?>

  129. <p>Личный кабинет доступен только для авторизованных пользователей. Для входа в него необходимо авторизоваться на сайте со своим логином и паролем в соответствующей форме.</>

  130. <?php

  131. }

  132. ?>

  133. </div>

Рис.8 Дополненный файл "order.php" для ввода изменений в данные пользователя

Приводить подробные пояснения работы обработчика формы (поз.2÷14), наверное, здесь не стоит. Так как подобный скрипт ранее достаточно подробно разбирался в разделе Работа с формами HTML.

При необходимости можно обратиться непосредственно к статье, в которой был рассмотрен механизм, обеспечивающий отправку данных формы в базу данных MySQL.

Нужно лишь отметить, что здесь при отправке данных используется функция rihgtOneColumnTwoСondition() (поз.10), которая должна обеспечить запись данных в поле "make-date" по заданному условию в двух полях - "marka" и "vin".

На данный момент этой функции в нашей библиотеки нет, поэтому нам ее нужно создать. Ранее мы уже создавали функции для записи данных с использованием PHP, например, функцию записи данных в таблицу 'url_php'. Но в отличие от ранее созданных, в новой функции должно учитываться определенное условие, при котором запись должна выполняться, а именно:

  • в поле "marka" должно иметь значение, соответствующее марки автомобиля пользователя;
  • в поле "vin" - значение последних 6-ти цифр VIN-номера.
  1. <?php

  2. ///----Универсальная функция записи данных в одно поле по заданному условию в двух полях----

  3. function rihgtOneColumnTwoСondition($table, $column, $value, $column_1, $value_1, $column_2, $value_2) {

  4. global $mysqli;

  5. $success = $mysqli->query("UPDATE `$table` SET `$column`='$value' WHERE `$column_1`='$value_1' AND `$column_2`='$value_2'");

  6. return $success;

  7. }

  8. ?>

Рис.9 Универсальная функция записи данных в одно поле по заданному условию в двух полях

Как видно, в этой функции происходит вызов метода query (поз.5) с SQL-запросом, в котором используется команда UPDATE для таблицы "$table". При выполнении которой происходит обновление поля "$column" на значение "$value" при условии, что поле "$column_1" имеет значение "$value_1", а "$column_2" - "$value_2".

При этом наименования полей и их значения являются аргументами функции, переданными ей в виде PHP-переменных $table, $column, $value, $column_1, $value_1, $column_2 и $value_2.

После добавления данной функции в библиотеку, находящуюся в файле functions.php, можно теперь проверить работу личного кабинета после выполненных последних изменений. Для этого войдем в раздел "Мои заказы" и изменим дату выполнения заказа, как показано на скриншоте.

Ввод даты выполнения заказов

Рис.10 Ввод даты выполнения заказов

Как видно в первом заказе в поле "Дата выполнения" введена дата. А после отправки формы через кнопку "отправить" должно появиться диалоговое окно с сообщением об успешном изменении даты выполнения заказа.

Диалоговое окно с сообщением о результате отправки формы

Рис.12 Диалоговое окно с сообщением о результате отправки формы

В итоге, в таблице заказа №1, в котором были внесены изменения, мы получили ожидаемый результат - статус изменился на "Выполнено" и отобразилась введенная дата выполнения заказа.

Внесенные изменения в заказ №1

Рис.13 Внесенные изменения в заказ №1

При этом во втором заказе никаких изменений не произошло - в таблице остался прежний статус ожидания со строкой отправки формы.

В итоге мы сформировали раздел личного кабинета "Мои заказы". Где подробно рассмотрели взаимодействия с базой данных на примере ввода/вывода в личном кабинете данных пользователя.

Что касается других разделов личного кабинета, то принцип их создания аналогичен. И, как было ранее отмечено, с кодом этих страниц можно ознакомиться в исходных файлах сайта в файлах "profile.php" и "add-order.php", расположенных в папке "user" каталога "articles".

Ниже приводится лишь внешний вид созданных страниц личного кабинета "Профиль" и "Добавить заказ".

Страница Профиль личного кабинета

Рис.14 Страница "Профиль" личного кабинета

Страница Добавить заказ личного кабинета

Рис.15 Страница "Добавить заказ" личного кабинета

Развернуть
×

Что касается функционирование данных разделов личного кабинета, то это можно посмотреть на тестовом сайте "avtobezugona.ru одним из возможных вариантов:

  • здесь, во встроенном фрейме с использованием встроенного фрейма на текущем ресурсе,
  • либо либо непосредственно на домене avtobezugona.ru.

    скриншот 51


Таким образом, созданием личного кабинета мы завершили тему авторизации пользователей. При этом следует отметить, что две ссылки в форме авторизации, а именно: "Забыли логин?" и "Забыли пароль?" остались пока не раскрыты.

Обусловлено это тем, что для восстановления аккаунта необходимо использование электронной почты. Поэтому мы вернемся к этим вопросам при рассмотрении вопросов создания электронной почты на сайте.

Исходные файлы сайта


Знак папкиИсходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:

  • Файлы каталога www
  • Таблицы базы данных MySQL

При этом, временно сформированные в данной статье PHP-скрипты, размещенные в файле "main.php" папки "articles" корневого каталога, закомментированы. Для проверки рассмотренных здесь примеров, следует раскомментировать соответствующие фрагменты кода.

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

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

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

С уважением, Николай Гришин


Комментарии


Если у Вас возникли вопросы, или есть какие-либо пожелания по представлению материала, либо заметили какие-нибудь ошибки, а быть может просто хотите выразить свое мнение, пожалуйста, оставьте свои комментарии. Такая обратная связь очень важна для возможности учета мнения посетителей.

Буду Вам за это очень признателен!

comments powered by HyperComments