Система хранения контактов

в 13:18, , рубрики: mysql, php, безопасность, интернет в России

Доброго времени суток, читатели!
Недавно тут была стать о законе, который начинает действовать с 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

Источник

  1. Сергей:

    Здравствуйте. Неплохая статья. А как бы можно было бы скачать полный скрипт.
    Ссылки Проект на GitHub (Исходный код) | Скачать не работают.
    Скиньте на мой электронный адрес.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js