[Из песочницы] Система хранения контактов

Доброго времени суток, хабражители! Недавно тут была стать о законе, который начинает действовать с 1 сентября 2016 года. Лично я хранил свои контакты в gmail — это было и удобно и безопасно. Но после разоблачения Сноуденом спецслужб и новости о возможном запрете использования зарубежных сервисов, мне пришла в голову идея сделать что-то своё для таких целей.Так получилась удобная система хранения контактов, которую можно установить на свой сервер (хостинг). Кому интересна реализация и исходный код — прошу под хабракат.Система написана на php и использует базу данных mysql. Профессиональные веб-программисты скорее всего ничего нового тут не узнают, но новичкам, надеюсь, будет интересно.

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

14972e2d4af1b0070008de8923731415.png

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

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

session_start (); if (!(isset ($_SESSION['autorized']) && $_SESSION['autorized'] != '')) { header («Location: login.php»); } Он проверяет, открыта ли сессия для пользователя (был ли успешный вход в систему). Если да, то продолжает выполнятся остальной код, если нет, то нас перекидывает на страницу login.php, где и происходит авторизация.

Все настройки системы «лежат» в файле confog.php, который инклудится во все остальные.

В нём записаны параметры для подключения к БД, а так же данные для авторизации в системе.

// Подключение к базе данных $baza['login'] = «root»; // Пользователь базы данных $baza['pass'] = »; // Пароль пользователя базы данных $baza['server'] = «localhost»; // Сервер базы данных $baza['baza'] = «sc-test»; // Название базы данных

// Настройки безопасности системы $login = «user»; // Имя пользователя для входа в систему $pass = »123456»; // Пароль для входа в систему Файл авторизации (login.php), представляет собой коротенький php код, которые сравнивает введённые данные с теми, что записаны в config-е, и, в случае успеха, открывает сессию и пускает нас к нашим контактам.

require ('config.php'); // Подключение файла настроек // Авторизация if (isset ($_POST['login']) && $_POST['login'] == $login && isset ($_POST['pass']) && md5($_POST['pass']) == md5($pass)) { session_start (); $_SESSION['autorized'] = «ok»; header («Location: index.php»); exit (); } Кроме того, он содержит простенькую форму, в которую и вводятся логин и пароль.



При успешной авторизации, мы попадаем в саму систему хранения:

3752e2c73de245a6d672780871901de0.png

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

При добавлении контакта скрипт считывает данные из формы в модальном окне и отправляет их в базу:

// Обработка добавления контакта if (! empty ($_POST)) { // Получение переменных $addcontactname = $_POST['name']; $addcontacttel = $_POST['tel']; $addcontactemail = $_POST['email']; $addcontactorg = $_POST['org']; $addcontacturl = $_POST['url']; $addcontactlocal = $_POST['local']; $addcontactnote = $_POST['note']; // Запись переменных в базу данных @mysql_connect ($baza['server'], $baza['login'], $baza['pass']); @mysql_select_db ($baza['baza']); $query = «INSERT INTO `contacts` (`name`, `tel`, `email`, `org`, `url`, `local`, `note`) VALUES ('».$addcontactname.»', '».$addcontacttel.»', '».$addcontactemail.»', '».$addcontactorg.»', '».$addcontacturl.»', '».$addcontactlocal.»', '».$addcontactnote.»');»; $addresult = mysql_query ($query); if ($addresult) header ('Location: index.php? status=add '); exit (); mysql_close (); } 21e588fd6f9b66551cc35cac7b01cfd4.png

После успешного добавления, идёт редирект на главную страницу, но уже с GET параметром статуса действия.Эти статусы тоже обрабатываются в index.php и выводятся в виде информационных сообщений.

// Получение переменной статуса действия if (isset ($_GET['status'])) { $getstatus = $_GET['status']; if ($getstatus == «add») { $status = »

Контакт успешно добавлен!
»; } elseif ($getstatus == «del») { $status = »
Контакт успешно удалён!
»; } elseif ($getstatus == «edit») { $status = »
Контакт успешно изменён!
»; } } Осталось в нужном нам месте HTML-разметки указать:

Редактированием контакта занимается отдельный файл edit.php, который получает данный о том, какой контакт редактировать из GET-параметра.

// Обработка получения данных if (isset ($_GET['user'])) { $userid = $_GET['user']; // Получаем id контакта для удаления // Получение информации из базы данных в переменные @mysql_connect ($baza['server'], $baza['login'], $baza['pass']); @mysql_select_db ($baza['baza']);

$sql = mysql_connect ($baza['server'], $baza['login'], $baza['pass']); mysql_select_db ($baza['baza'], $sql); $resultat = mysql_query («SELECT * FROM contacts WHERE id = $userid», $sql); $array = mysql_fetch_array ($resultat); mysql_close (); } // Обработка изменеия контакта if (! empty ($_POST)) { // Получение переменных от новых значений $addcontactname = $_POST['name']; $addcontacttel = $_POST['tel']; $addcontactemail = $_POST['email']; $addcontactorg = $_POST['org']; $addcontacturl = $_POST['url']; $addcontactlocal = $_POST['local']; $addcontactnote = $_POST['note']; // Запись переменных в базу данных @mysql_connect ($baza['server'], $baza['login'], $baza['pass']); @mysql_select_db ($baza['baza']); $query = «UPDATE `contacts` SET `name` = '».$addcontactname.»', `tel` = '».$addcontacttel.»', `email` = '».$addcontactemail.»', `org` = '».$addcontactorg.»', `url` = '».$addcontacturl.»', `local` = '».$addcontactlocal.»', `note` = '».$addcontactnote.»' WHERE `contacts`.`id` = '».$userid.»';»; $editresult = mysql_query ($query); if ($editresult) echo »»; exit (); mysql_close (); } 5e0b8c7b4a58c56eb538983f5ed07aff.png

При нажатии кнопки удаления контакта, браузер спрашивает, о подтверждении удаления, и, если мы согласны, отправляет нас на delete.php, отправляя ему и в GET-параметре ID выбранного контакта.

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

require ('config.php'); // Подключение файла настроек // Авторизация session_start (); if (!(isset ($_SESSION['autorized']) && $_SESSION['autorized'] != '')) { header («Location: login.php»); } После чего производит удаление контакта из базы данных и отправляет нас на главную страницу:

// Обработка удаления контакта if (isset ($_GET['user'])) { $userid = $_GET['user']; // Получаем id контакта для удаления // Удаление строки из базы данных @mysql_connect ($baza['server'], $baza['login'], $baza['pass']); @mysql_select_db ($baza['baza']); //$query = «DELETE FROM `contacts` WHERE `id` = ».$userid.»; $deluserresult = mysql_query («DELETE FROM `contacts` WHERE `id`= '».$userid.»'»); mysql_close (); header ('Location: index.php? status=del'); exit (); } header ('Location: index.php'); И самый маленький файл logout.php, который позволяет нам выйти из системы.

// Выход из системы if (isset ($_SERVER['HTTP_COOKIE'])) { $cookies = explode (';', $_SERVER['HTTP_COOKIE']); foreach ($cookies as $cookie) { $parts = explode ('=', $cookie); $name = trim ($parts[0]); setcookie ($name, '', time ()-1000); setcookie ($name, '', time ()-1000, '/'); } } // Редирект на главную (не на логин для проверки очистки куков) header («Location: index.php»); exit (); На него ведёт ссылка кнопки «Выход» в окне отображения контактов.

Установка: Для того, что бы установить системы нужен web-сервер (или просто хостин сайта) с поддержкой php и mysql.Предварительно нужно создать базу данных (например, в phpmyadmin) и импортировать в неё файл contacts.sql.После этого нужно указать все параметры в файле config.php и залить все файлы на сервер.Теперь Ваши контакты будут всегда у Вас, приятного использования!

Проект на GitHub (Исходный код) | Скачать

© Habrahabr.ru