Доброго времени суток, читатели!
Недавно тут была стать о законе, который начинает действовать с 1 сентября 2016 года. Лично я хранил свои контакты в gmail — это было и удобно и безопасно. Но после разоблачения Сноуденом спецслужб и новости о возможном запрете использования зарубежных сервисов, мне пришла в голову идея сделать что-то своё для таких целей.
Так получилась удобная система хранения контактов, которую можно установить на свой сервер (
Система написана на php и использует базу данных mysql. Профессиональные веб-программисты скорее всего ничего нового тут не узнают, но новичкам, надеюсь, будет интересно.
При открытии в браузере адреса, по которому установлена система, перед нами открывается окно входа (если не сделать ошибок при настройке, о ней мы поговорим позже).
Дизайн системы сделан на основе 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();
}
Кроме того, он содержит простенькую форму, в которую и вводятся логин и пароль.
<form action="" method="post">
<input type="text" class="form-control" name="login" placeholder="Логин"><br>
<input type="password" class="form-control" name="pass" placeholder="Пароль"><br>
<button type="submit" class="btn btn-default btn-lg btn-block">Войти</button>
</form>
При успешной авторизации, мы попадаем в саму систему хранения:
Тут можно добавить новый контакт, удалить или отредактировать имеющиеся.
При добавлении контакта скрипт считывает данные из формы в модальном окне и отправляет их в базу:
// Обработка добавления контакта
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();
}
После успешного добавления, идёт редирект на главную страницу, но уже с GET параметром статуса действия.
Эти статусы тоже обрабатываются в index.php и выводятся в виде информационных сообщений.
// Получение переменной статуса действия
if(isset($_GET['status'])) {
$getstatus = $_GET['status'];
if ($getstatus == "add") {
$status = "<div class='alert alert-success alert-dismissable'><button type='button 'class='close' data-dismiss='alert' aria-hidden='true'>×</button>Контакт успешно добавлен!</div>";
}
elseif ($getstatus == "del") {
$status = "<div class='alert alert-success alert-dismissable'><button type='button 'class='close' data-dismiss='alert' aria-hidden='true'>×</button>Контакт успешно удалён!</div>";
}
elseif ($getstatus == "edit") {
$status = "<div class='alert alert-success alert-dismissable'><button type='button 'class='close' data-dismiss='alert' aria-hidden='true'>×</button>Контакт успешно изменён!</div>";
}
}
Осталось в нужном нам месте HTML-разметки указать:
<?php echo $status; ?>
Редактированием контакта занимается отдельный файл 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 "<script type='text/javascript'>window.close();</script>";
exit();
mysql_close();
}
При нажатии кнопки удаления контакта, браузер спрашивает, о подтверждении удаления, и, если мы согласны, отправляет нас на delete.php, отправляя ему и в GET-параметре ID выбранного контакта.
<a href="#" onclick="if(confirm('Вы действительно хотите удалить контакт?'))location.href='delete.php?user='.$row['id'].'';" title="Удалить"><i class="glyphicon glyphicon-trash"></i></a>
Файл 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 (Исходный код) | Скачать
Автор: pingvi69
Здравствуйте. Неплохая статья. А как бы можно было бы скачать полный скрипт.
Ссылки Проект на GitHub (Исходный код) | Скачать не работают.
Скиньте на мой электронный адрес.