Диплом (1218689), страница 5
Текст из файла (страница 5)
И правую где при нажатии на кнопки в шапке сайта открываютсяформы с возможностью добавления информации в базу данных (рисунок 23).Рисунок 23 – Дизайна тела web-страницы личного кабинетаДанная возможность реализован с помощью CSS и JavaScript функцийslideDown сворачивания и slideUp для разворачивания блоков с формами$('#news').click(function(){if(state==false) {$('.dei2').slideDown('fast', function() {state = true;});} else {$('.dei2').slideUp('fast', function() {state= false;}); }});38Так же при нажатии кнопки добавить происходит запуск AJAX запроса который передает информацию на сервер и при соответствующей информации добавляет ее в базу данных.AJAX технология реализована с помощью библиотеки для JavaScript Jqueryc помощью функции ajax() [29]:$.ajax({url: "php/logout.php",cache: false,success: function(){document.location.reload();}});Весь дизайн личного кабинета предназначена для максимального удобнойработы с базой данных для администрации и модераторов данного проекта.3.2 Создания серверной части web-сайтаСерверная часть web-сайта реализована на языке PHP.
Она реализует генерацию web-страниц, проверки данных с форм, а так же реализации Sql запросов. Начала работы PHP сценариев начинается с открытия скобок <?php код выполняемый сервером ?> , это нужно для того что бы сервер мог интерпретировать данный код , не как обычный текст, а код необходимый для выполнения.Для работы с базами данных используется модуль MySqli который реализует проверку подключения к базе данных:$dbhost ='localhost';$dbname='obpl';$dbuser='root';$dbpass='';$mysqli = new mysqli($dbhos, $dbuser,$dbpass, $dbname);39if ($mysqli->connect_error) {die('oshibka podl (' .
$mysqli->connect_errno . ') '.$mysqli->connect_error);}Для того чтобы пользователь мог войти на сайт необходима проверка пароляиз базы данных с веденным паролям пользователя. Данная функция реализуетсяв три этапа.Первый этап это удалении стрип-тегов, HTML-тегов и Sql-тегов, что быобезопасить работу с базой данных и не получить утечку информации, для этого существуют стандартные функции работы со строкам PHP strip_tags(),mysql_real_escape_string(), htmlentities() и другие.
Они обеспечат защиту от отактипа Sql-иньекций. Для быстрой обработки этих данных была написана функция sanString реализующая очистку строки от потенциально опасных элементов:function sanString ($var){$var=strip_tags($var);$var=htmlentities($var);$var=stripslashes($var);return mysql_real_escape_string($var);}Вторым этапом является генерация хеша-пароля введенного пользователя.Так как для безопасности хранения пароля в базе данных используется не хранения самого пароля, а его хеша, необходимо выбрать тип шифрования. В PHPверсии 5.5 существует стандартные алгоритмы шифрования MD5 и SHA1, ноони являются довольна слабые в совершенных реалиях. Поэтому был выбраналгоритм шифрования Bcrypt.
[30]40Новый API хэширования паролей предоставляет четыре простых функции:– password_hash() – используется для хэширования пароля.– password_verify() – используется для проверки пароля на соответствиехэшу.– password_needs_rehash() – используется для проверки новый хэш.–password_get_info() – возвращает имя алгоритма хешированияПолучения хеша пароля выгляди следующим образом:$hash = password_hash($password, PASSWORD_DEFAULT);Третьим этапом является выборка данных из базы данных и проверки на соответствие хеши паролей из базы данных и введенм паролем.
Для выборки избазы данных необходимо создать Sql запрос:$query = "SELECT Login,Pwd FROM user_test WHERE Login='$login' ANDPwd='$pwd'";И выполнить его данный запрос с помощью метода модуля mysqli$mysqli→query($query).Далеенеобходимосверитьхешиметодомpassword_verify(). И если логин и пароль совпали, необходимо создания сессиипользователя. Для этого есть необходимо выполнить метод session_start(); И добавить в глобальную переменную $_SESSION[''] информацию, например Loginи пароль:$_SESSION['user']=$login;$_SESSION['pass']=$pwd;Это позволить пользователю при перемещении по разным web-страницамweb-сайта оставаться в сети и не нуждаться в перезаходе на web-сайт при выполнении каких либо действий.Так как для при входе на сайт была создана сессия и добавлены cookie привыходе с сайта необходимо уничтожить сессию и cookie, для удаления cookie41нужно повторно установить с настройкой даты истечения срока действия напрошедшее время.[31] При этом важно, чтобы все параметры нового вызовафункции setcookie, за исключением timestamp, в точности повторяли те параметры, которые указывались при создании cookie, в противном случае удалениене состоится.
Поэтому для удаления ранее созданного cookie нужно воспользоваться следующей строкой кода:setcookie("username", 'Hannah', time() – 25 92000, '/');Поскольку указано уже прошедшее время, cookie будет удален. Здесь использовано время, равное 2 592 000 с в прошлом (что соответствует одному месяцу). Это сделано в расчете на неправильную установку даты и времени накомпьютере клиента. Для завершения работы сессии можно воспользоватьсяфункцией session_destroy. Для быстрого выхода была написана функцияdSession для полного уничтожения сессии с очисткой всех переменных сессии:function dSession(){$_SESSION=array();if(session_id()!=""||isset($_COOKIE[session_name()]))setcookie(session_name(),'',time()-2592000,'/');session_destroy();}После того как были добавлена возможность входа на сайт, необходимо добавить реализовать вывод на экран какой либо информации, генерация HTMLдокумента.
Для вывода на экран элементов HTML в которых не используетсяэлементы PHP кода можно просто писать за пределами действия кода PHP:<body><H1> <?php код программы ?> </H2><?php код программы на ?>42</body>Или производить вывод текста, HTML тегов из самого PHP кода для этогоможно воспользоваться функцией print или echo, Так же для вывода большихчастей текста можно воспользоваться конструкцией echo <<< _END котораяпозволить генерировать большие части кода. Это нужно, на пример, для генерации нескольких одинаковых блоков:<?phpif ($lg){echo $_SESSION['user'];echo ' <a href="#" title="logout" id="logout"> Выйти</a> ';}Так как вся информация о новостях, членов, мероприятиях и прочие данныесовета хранится в базе данных и эта номинация будет добавляться в базу данных. Необходимо реализовать функцию добавления данных в базу данных.
Дляэтого необходимо в клиентской части сайта создать форму обратной связи которая будет отправлять GET или POST запрос на сервер, где будет хранитьсяскрипт обработки запроса. Так же как и с обработкой формы для проверкиаутентификации пользователя необходимо для начала очистить строки переданных данных от потенциально опасных элементов с помощью написанной функции sanString. Для этого необходимо передать в функцию строку полученногополя:<?php$Titile =sanString($_POST['title']);$text=sanString($_POST['text']);… ?>43Так же для избежания добавления данных людьми не имеющие для этогодоступ необходимо проверить во первых наличие сессии и если пользовательвошел на сайт проверить его полномочия для работы с базой данных.Если пользователь удовлетворяет всем требованиям всем требованием томожно создавать Sql запрос который будет обработан MySqli модулем и данныебудут отправлены в базу данных.Для реализации функции добавления членов совета из личного кабинетаадминистратором сайта был создан сценарий add_members.php добавления данныхДля проверки входа на сайт и уровня доступа отправителя данных проводиться проверка сравнения данных из базы сессии со стандартом доступа:if($login==""&& $lvl=1){echo "вы не вошли на сайт или у вам нет нужного уравня доступа";}Если уровень доступа является удовлетворительным и пользователь зашелна сайт то производиться создания Sql запроса для добавления данных в таблицу user_info:else{$query="INSERT INTO mp (Fnamr, Lname, Tname, info, position) VALUE(‘$Fnamr’, ‘$Lname’, ‘$Tname’, ‘$info’, ‘$position’)";После создания запроса его необходимо выполнить методом query классаmysqli который нам вернет результат добавились ли данные в базу данных:if($result = $mysqli->query($query)){echo "Данные добавлены ";}44else{echo"ошибка добавления данных";}}Аналогично добавлению членов совета происходит и добавления новостей имероприятий и других данных на сайт.
В случаях где необходимо добавить текущую дату и время в базу данных используется PHP метод date c форматом дляSql года, месяц, день Y-m-d H:i:s:$datep=date("Y-m-d H:i:s");Основным исключением в обработки подобных форм является возможностьдобавления загрузки файлов на сервер, данная технология используется для загрузки документов нормативной базы и фотографий новостей. Во первых необходимо в форму на клиентской части необходимо установить атрибут enctypeсо значением multipart/form-data и выбрать метод отправки данных POST. Послеоправки данных на сервер файл помещается в массив $_FILE. Необходимо проверить содержит ли массив какие либо данные данная проверка осуществляется с помощью инструкции:if ( $_FILE ){Когда программа обнаружиит, что файл был загружен, его имя, каким онобыло прочитано из компьютера то оно помещается в переменную name:$name=$_FILE['filename']['name'];Теперь необходимо перенести файл из временного хранилища файлов PHPв постоянное место хранения.