Как сделать интерфейс базы данных в php

Обновлено: 06.07.2024

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

  • название (title);
  • автор (author);
  • описание (description);
  • альтернативное название (alternative);
  • изображение (photo).

Название и альтернативное название являются строками менее чем 255 символов длиной (т.е. имеют тип VARCHAR(255)), описание - текстовое поле (имеет тип TEXT ), а в полях " автор " и "изображение" содержатся идентификаторы автора из коллекции Persons и изображения экспоната из коллекции Images соответственно.

Построение интерфейса для добавления информации

Итак, у нас есть какая-то таблица в базе данных. Чтобы построить интерфейс для добавления информации в эту таблицу, нужно ее структуру (т.е. набор ее полей) отобразить в html-форму .

Разобьем эту задачу на следующие подзадачи:

  • установка соединения с БД ;
  • выбор рабочей БД ;
  • получение списка полей таблицы ;
  • отображение полей в html-форму .

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

Установка соединения

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

Данная функция устанавливает соединение с сервером MySQL и возвращает указатель на это соединение или FALSE в случае неудачи. Для отсутствующих параметров устанавливаются следующие значения по умолчанию:

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

Параметр client_flags - это комбинация следующих констант: MYSQL_CLIENT_COMPRESS (использовать протокол сжатия), MYSQL_CLIENT_IGNORE_SPACE (позволяет вставлять пробелы после имен функций), MYSQL_CLIENT_INTERACTIVE (ждать interactive_timeout секунд - вместо wait_timeout - до закрытия соединения).

Параметр new_link появился в PHP 4.2.0, а параметр client_flags - в PHP 4.3.0.

Соединение с сервером закрывается при завершении исполнения скрипта, если оно до этого не было закрыто с помощью функции mysql_close() .

Итак, устанавливаем соединение с базой данных на локальном сервере для пользователя nina с паролем "123" :

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

Создаваемый в этом уроке код PHP выполняет следующие функции.

Получает имя лица, введенного пользователем.

Отображение таблицы пожеланий этого лица.

Текущий документ является частью краткого учебного курса "Создание приложения, управляемого базой данных, в IDE NetBeans для PHP".

Создание проекта PHP

Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Windows и Linux, ⌘-Shift-N в ОС Mac). Создайте новый проект PHP с именем "wishlist". После создания проекта PHP по умолчанию он будет содержать файл индекса index.php . Для получения информации о создании и настройке проекта PHP см. Настройка проекта PHP.

Определение блок-схемы страницы

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

Пользователь просматривает список "Wish list" другого пользователя.

Пользователь регистрируется в качестве нового пользователя.

Пользователь входит в систему и создает собственный список пожеланий "Wish list".

Пользователь входит в систему и редактирует свой список пожеланий.

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

Первая страница index.php для входа в систему, регистрации и перехода к спискам "Wish list" других пользователей.

page flow diagram

После выполнения предварительных действий можно приступить к реализации базовой функциональности приложения. Начать следует с просмотра списка "Wish list" одного из пользователей. Для этой функции не требуется выполнять проверку допустимости, ее можно легко протестировать, поскольку в базу данных уже внесены тестовые данные. Функциональность компонента реализуются на двух страницах – index.php и wishlist.php.

Добавление формы к index.php

Файл index.php не содержит код PHP, таким образом, можно просто удалить следующий блок:

Файл index.php используется в двух целях.

Отображение страницы с элементами управления для ввода данных.

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

Эти действия выполняются с использованием формы HTML. Каждая форма HTML содержит следующее.

Набор полей, соответствующих элементам управления на странице.

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

Для добавления формы к index.php выполните следующее.

Перейдите к окну "Проекты", разверните узел проекта и узел "Файлы исходного кода", затем дважды щелкните файл index.php . Файл index.php откроется в основной области редактора IDE. Файл содержит шаблон для ввода кодов PHP и HTML.

Можно пропустить предупреждения от средства проверки HTML.

Удалите блок PHP. Файл index.php не содержит код PHP.

remove php block

Откройте "Палитру" из меню "Окно" или нажав Ctrl-Shift-8.

Из раздела Формы HTML палитры перетащите форму в раздел файла index.php .

form dnd

insert form dialog

Теперь файл выглядит следующим образом:

blank form

Между открывающим и закрывающим тегами формы введите текст "Показать список пожеланий: ".

Перетащите компонент "Ввод текста" из раздела Формы HTML палитры в пространство после текста "Показать список пожеланий: ". Откроется диалоговое окно "Вставка ввода текста".

Присвойте вводу название user . Выберите тип ввода text . Оставьте все поля пустыми и нажмите кнопку "ОК".

insert text input

Теперь файл выглядит следующим образом:

form with text input

Добавьте пустую сроку над тегом . В эту пустую строку перетащите компонент "Кнопка" из раздела * Формы HTML* палитры.

Откроется диалоговое окно "Вставить кнопку". Введите Go в поле "Метка" и нажмите кнопку "ОК".

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

Обратите внимание на следующие элементы формы.

Открывающий тег содержит атрибут action . Атрибут action указывает файл, в который форма передает данные. В данном случае файл имеет имя wishlist.php и находится в той же папке, что и файл index.php . (Этот файл будет создан в разделе Создание wishlist.php и тестирование приложения.)

Открывающий тег также содержит метод для применения к переданным данным (GET). PHP использует массив $_GET или $_POST для значений, переданных этой формой, в зависимости от значения атрибута method . В данном случае PHP использует $_GET .

Компонент ввода text . Этот компонент — текстовое поле для ввода имени пользователя, список пожеланий которого необходимо просмотреть. Начальное значение текстового поля — пустая строка. Имя этого поля — user . PHP использует имя поля при создании массива для значений поля. В данном случае массив для значений этого поля — htmlentities($_GET["user"]) .

Компонент ввода submit со значением "Go". Тип "submit" означает, что поле ввода отображается на странице как кнопка. Значение "Go" — это метка поля. При нажатии пользователем кнопки данные в компоненте text передаются в файл, указанный в атрибуте action .

[[Создание wishlist.php и тестирование приложения]]

В разделе Добавление формы к index.php была создана форма, с помощью которой пользователь отправляет имя лица, список пожеланий которого необходимо просмотреть. Имя передается странице wishlist.php . Однако этой страницы не существует. Если выполнить index.php , при отправке имени возникнет ошибка "404: Файл не найден". В этом разделе будет создан файл wishlist.php , затем будет выполнено тестирование приложения.

Для создания wishlist.php и тестирования приложения выполните следующее.

В созданном проекте 'wishlist' щелкните правой кнопкой мыши узел 'Исходные файлы' и выберите 'Создать > Файл PHP' в контекстном меню. Откроется мастер создания веб-страниц PHP.

Введите wishlist в поле "Имя файла" и нажмите кнопку "Готово".

Щелкните правой кнопкой мыши узел 'Источники' и выберите 'Выполнить проект' в контекстном меню или щелкните значок 'Выполнить главный проект' на панели инструментов, если проект задан как главный.

Замечание: данный класс не является эталонным, на который стоит равняться. Цель данного урока показать, как можно все удобно сгруппировать для комфорта создания CMS в будущем.

Скелет класса PHP для работы с базой данных

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

Во-первых, нам понадобиться два метода:

для того, чтобы соединится с базой;


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

для дисконнекта с базой.

Во-вторых, в скелет класса войдет группа методов дляредактирование определенных таблиц базы данных. Например, вставка, удаление, выборка – insert, delete, select соответственно. Операции типа редактирование и т.п. будет вам как домашнее задание. Напишите сами, тем самым дополнив базу данных новыми полезными компонентами, то есть методами.

На этом пока все.

Схематический скелет класса DBClass:

function__construct(); (метод, который вызывается автоматически, при создании класса)

Пишем метод __construct();

В этот метод извне мы будет передавать 4 параметра: хост, имя пользователя, пароль, имя базы данных. Потом присвоим эти переменные аналогичным классовым переменным. И конечно, же вызовем метод открытия соединения сMySQL.

метод select();

Цель метода состоит в возвращении массива значений выбранных полей в запросе. С полученным массивом в будущем будет намного проще работать. Разберем словесно алгоритм работы метода.

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

Формируем запрос ($sql) в MySQL и отправляем его mysql_query($sql)

Начало цикла $i

Далее у нас идет цикл for, в котором мы перебираем выбранные из MySQL строки по очереди. Количество строк узнаем при помощи функции mysql_num_rows()

В цикле мы по очереди извлекаем результирующий ряд (строку) как ассоциативный массив, с которого сразу же возвращаем все ключи массива в переменную $key

Считаем количество элементов массива $key ($numKeys = count($key);)

Начало цикла $x

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

Конец цикла $x

Конец цикла $i

Далее else(елсами) возвращаем при неудаче false к соответствующим ифам (if).

Метод select() готов.


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Вид полученного массива:

класс базы данных

метод insert();

Здесь все очень просто. Давайте вспомним как формируетсязапрос вставки в MySQL. Примерно так: $sql = ‘NSERT INTO table VALUES (……..)’. Конечно, можно ещё указать в какие поля вставлять.

Алгоритм метода просто:

Сначала мы формируем сам SQL запрос.

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

теперь превращаем массив $values в строку, разделяя элементы массива запятой.

далее mysql_query($insert) и проверка на истинность выполнения запроса.

метод delete();

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

метод closeConnection();

Метод, при вызове которого закрывается соединение с Базой Данных.

Сначала мы проверяем на истинность, открыто ли соединение.

Если открыто, закрываем его и ставим идентификатору соединение значение false и возвращаем значение метода true.

Простая демонстрация использования класса

Файл dbclass.php целиком

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

Всего доброго. С уважением Паук Владислав.

Автор: Влад Паук

Редакция: Рог Виктор и Андрей Бернацкий. Команда webformyself.


Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока


Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (10)

Лишь высказал свое мнение

То что защиты никакой это минус, а так статья полезная.

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

Полностью поддерживаю Дмитрия. И зачем так все усложнять с SELECT. я имею в виду формирование массива. Ведь можно просто так:
$arr = array();
while($row = mysql_fetch_assoc($query)) $arr[] = $row;
>

Этот урок ориентирован на тех, кто совсем немного знаком с PHP и Объектно-Ориентированным Программированием (ООП) и хотят создать простое веб приложение.

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

Обзор серии уроков

Нам необходимо изучить очень много материала. Вот план:

Часть №1 - Создаем проект и создаем первый класс

- создаем набросок проекта
- создаем файлы и папки
- создаем класс для операций с базой данной: DB.class.php

Часть №2 - Доделываем серверную чаcть

Часть №3 - Создаем внешний интерфейс

- Формы
- Обработка форм
- Отображение информации сессий

Начинаем наш проект!

Создаем план действий

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

Структура Файлов и Папок

ООП PHP программирование использует классы и объекты для выполнения необходимых для приложения операций. При планировке Вам необходимо подумать о том, какие классы Вам понадобятся. Для данного проекта мы создадим 3 класса. Первый класс - User (будет содержать информацию о пользователе с функцией простого сохранения save()), второй - UserTools (будет содержать функции, которые необходимы пользователям, такие как login(), logout() и другие. ), третий - класс БД (он будет выполнять роль связующего звена - подсоединение к БД, внесение изменений, вставка новых рядов, и многое другое).

Кроме классов, мы также будем использовать файл с названием global.inc.php. Этот файл будет вызываться с каждой страницы и выполнять обычные операции, которые нам понадобятся. К примеру, в этом файле мы будем выполнять подключение к БД на каждой странице.

Другие файлы - это страницы для пользователей: index.php, register.php, login.php, logout.php, settings.php и welcome.php.

Общая структура у нас будет выглядеть так:


Создание Базы Данных и таблицы users

На Вашем сервере должен быть установлен MySQL. Для начала необходимо создать новую базу данных для Вашего приложения. В этой БД создайте таблицу users, которую мы будем использовать для этого урока. Можете использовать следующий код SQL:

Первичным ключом у нас выступает поле “id”, и именно его мы будем использовать для идентификации наших пользователей.

Уникальным полем у нас также будет “username”. Другие необходимые поля “password”, “email”, и “join_date”.

Создаем класс DB.class.php

Цель данного класса очень проста: как можно больше уменьшить использование SQL при обращении к БД, а также организовать данные в удобный для нас формат.

Ниже приведен код:

Объяснение кода

После создания класса Вы видите 4 переменные: $db_name, $db_user, $db_pass, и $db_host. В них необходимо внести данные для подключения к БД. $db_host обычно localhost. Перед этими переменными указано "protected" - это означает, что они будут не доступны вне этого класса. Внутри же класса их можно выводить используя $this->db_name, $this->db_user, и т.д.

Первая функция называется connect(). Эта функция содержит защищенные значения для соединения с БД. Это соединение будет открыто для использования в любом месте текущей страницы (не только внутри класса).

Вот пример использования этой функции вне класса:

Вторая функция называется processRowSet(). Цель данной функции - взять объект результата mysql и конвертировать его в ассоциативный массив, в котором ключами являются название колонок. Функция проходит по каждому ряду и функция mysql_fetch_assoc() преобразовывает каждый ряд в массив. Ряд далее передается массиву и возвращается с помощью функции.

Существует второй аргумент $singleRow, который содержит значение по умолчанию. Если значение true, выводится только один ряд вместо массива. Это очень полезно, если Вы ожидаете получить один результат (например, при выборе юзера из БД используя уникальный id).

Последние 3 функции выполняют простые функции MySQL: select, insert, update. Цель данных функций минимизировать количество SQL кода, который необходимо использовать где-либо в другом месте приложения. Каждая функция создает SQL запрос на основе переданного значения и выполняет этот запрос. В случае select(), результаты форматируются и выводятся. В случае update(), выводится true при успешном выполнении. В случае insert(), выводится id нового ряда.

Вот пример как Вы можете изменить данные пользователя в БД используя функцию update():

Вот и все на сегодня! До следующих частей!

Вторая часть урока тут, третья - тут

5 последних уроков рубрики "PHP"

Фильтрация данных с помощью zend-filter

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

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

PHP-подключение к БД MySQL (Два Способа с Примерами)

Если вы новичок в разработке сайтов, вам может пригодиться это руководство, объясняющее, как настроить подключение к БД MySQL посредством PHP-скрипта. С помощью этого навыка вы сможете изменять, просматривать и управлять таблицами, созданными в базе данных MySQL. И сейчас мы покажем вам самые простые способы это сделать. Давайте начнём!

Получите скидку до 85% на наши тарифы хостинга с поддержкой PHP.

Создание Базы Данных MySQL (При необходимости)

Этот шаг можно пропустить, если у вас уже есть база данных MySQL. Если вы являетесь пользователем Hostinger, вы можете легко создать новую БД через hPanel — панель управления хостингом Hostinger, следуя простой инструкции:

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

Запишите учётные данные только что созданной базы данных MySQL для следующего шага. А также не забудьте имя пользователя и пароль к БД!

Два способа PHP-подключения к БД MySQL

Есть два метода подключения к базе данных MySQL с помощью PHP: MySQLi и PDO.

MySQLi расшифровывается как MySQL Improved. Это эксклюзивное расширение MySQL, которое добавляет новые функции в интерфейс базы данных. Функции MySQLi являются как процедурными, так и объектно-ориентированными, причём первую парадигму расширение унаследовало от более ранней версии MySQL.

Сама MySQL разбивает задачу на линейные, пошаговые процедуры, что затрудняет внесение изменений, поскольку вам приходится редактировать код сверху. Между тем MySQLi рассматривает данные как набор взаимозаменяемых объектов с функциями, позволяя пользователям легко добавлять или удалять данные.

PDO расшифровывается как PHP Data Object, или объект данных PHP. В отличие от MySQLi, PDO является только объектно-ориентированным методом. Он поддерживает ряд различных типов баз данных, использующих PHP, таких как MySQL, MSSQL, Informix и PostgreSQL.

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

Одна из наиболее важных функций, которую поддерживают оба метода — это подготовленные выражения (prepared statements). Она сокращает время, необходимое MySQL для выполнения повторяемого запроса. Эта функция также используется для предотвращения SQL-инъекций при внесении изменений в базу данных.

Какой бы метод вы ни использовали, вам понадобится правильная информация для подключения к созданной вами базе данных MySQL. Здесь вам пригодятся ранее сохранённые данные БД.

Вам также потребуется правильное имя сервера, или имя хоста для конфигурации. Hostinger использует “localhost” в качестве имени хоста своего сервера MySQL. Это имя, которое вы будете использовать, если загрузите свой PHP-скрипт на тот же сервер, что и база данных.

С другой стороны, если вы подключаетесь к базе данных из удалённого места (например, со своего компьютера), вам придётся использовать IP-адрес MySQL-сервера. Чтобы получить дополнительную информацию, обратитесь к своему хостинг-провайдеру. Он предоставит вам актуальную информацию о том, какое имя использовать в качестве имени хоста.

PHP-подключение к БД MySQL с MySQLi

Выполните следующие действия, чтобы подключить PHP-скрипт к MySQL посредством MySQLi:

  1. Перейдите в Файловый менеджер ->public_html.
  2. Создайте новый файл, щёлкнув на соответствующую иконку в верхнем меню.
  3. Сохраните его как databaseconnect.php. Вы можете заменить имя на любое другое, просто убедитесь, что в качестве расширения используется php.
  4. Дважды щёлкните по файлу, чтобы открыть его. Скопируйте и вставьте в него следующие строки кода. Замените первые четыре значения после Объяснение Кода MySQLi

Основным методом, используемым в этом скрипте, является mysqli_connect (). Это внутренняя функция PHP для установления нового соединения с сервером MySQL.

В начале нашего кода мы видим несколько объявлений переменных и значений, присвоенных этим переменным. Обычно нам нужно четыре из них, чтобы установить правильное соединение с базой данных: $servername, $database, $username и $password. В коде мы указываем наши данные для доступа к БД как значения для этих переменных, чтобы их можно было передать в функцию.

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

PHP-подключение к БД MySQL с PDO

Другой метод подключения к БД MySQL с использованием PHP-скрипта — через PDO. В целом он похож на предыдущий, но с некоторыми особенностями:

    В public_html создайте файл с названием pdoconfig.php и вставьте следующий код. Как всегда, не забудьте заменить значения плейсхолдеров информацией из вашей базы данных. Сохраните и закройте его, когда закончите.

Объяснение Скрипта PDO

Для подключения к базе данных PDO необходимо создать новый объект PDO с именем источника данных (DSN), именем пользователя и паролем.

DSN определяет тип базы данных, имя базы данных и любую другую информацию, относящуюся к базе данных, если это необходимо. Это переменные и значения, указанные нами в файле dbconfig.php, на которые один раз ссылается строка require_once в файле databaseconnect.php.

Проверка Подключения и Устранение Распространённых Ошибок

Чтобы проверить, успешно ли установлено соединение, войдите в свой домен так: vashdomen/databaseconnect.php. Если вы назвали PHP-файл другим именем, обязательно укажите правильное название.

Ошибка при Неправильном Пароле

Эта ошибка возникает, если мы меняем пароль или какие-либо учётные данные в PHP-коде (но не меняем их в реальной базе данных).

Не Удаётся Подключиться к MySQL-серверу

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

Журнал находится в той же папке, где запущен скрипт. Например, если мы запускаем сценарий в public_html, error_log будет в той же папке.

Итоги

В этом руководстве мы показали, как происходит PHP-подключение к БД MySQL с помощью MySQLi и PHP Data Objects (PDO).

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

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

Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.

Читайте также: