Создание динамического Web-сайта с использованием языка программирования PHP

Разработка Web-сайта с подключенной к нему базой данных для управления пользователями, их авторизацией и регистрацией. Подключение базы данных к сайту. Использование технологии AJAX. Виды SQL инъекций и способы защиты базы данных от попыток взлома.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 13.02.2016
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Курсовой проект

по дисциплине «Интернет технологии»

Тема:

Создание динамического Web-сайта с использованием языка программирования PHP

ОГЛАВЛЕНИЕ

  • Введение
  • 1. Создание Web-сайта для выбранного объекта
  • 2. Создание базы данных
  • 3. Язык программирования PHP
    • 3.1 Подключение базы данных к сайту
    • 3.2 Регистрация пользователя
    • 3.3 Авторизация пользователя
    • 3.4 Управление пользователями
    • 3.5 Гостевая книга
  • 4. Технология AJAX
  • 5. Способы защиты от SQL-инъекций
  • Выводы
  • Список использованной литературы

ВВЕДЕНИЕ

Сегодня очень сложно представить что-то популярнее интернета. А молодых специалистов в сфере web-программирования становится все больше. В современных ВУЗах открываются новые специальности, основным предметом изучения которых являются интернет технологии.

С 1962 года министерство обороны США активно вкладывало деньги в разработки технологий взаимодействия между компьютерами. Благодаря этим исследованиям, в 1969 году, американскими военными был создана локальная сеть - предшественница Интернета. С 1972 года функционирует всеми нами любимая электронная почта.

Переломным этапом в развитии интернет - технологий стали 90-е годы. С изобретением в 1993 году первого браузера, предполагаемые возможности Интернета стали приобретать глобальный характер. Появились многочисленные телекоммуникационные операторы, компании электронной торговли, разработчики программного обеспечения и т.п.

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

Технология PHP обладает несомненными преимуществами перед конкурентами из-за своей гибкости, безопасности, отличной интегрируемостью с серверными программными решениями как Apache и, конечно же, своей простоты и лёгкости применения. Количество сайтов на PHP уже исчисляется миллионами и постоянно растёт, откуда можно сделать вывод о возрастающей актуальности технологии в ближайшем будущем.

1. Создание Web-сайта для выбранного объекта

Интернет является огромной глобальной системой, которая состоит из взаимосвязанных гипертекстовых документов. Эти гипертекстовые документы мы называем web-сайтами. Другими словами сайт (от англ. website: web -- «паутина, сеть» и site -- «место», буквально «место, сегмент, часть в сети») -- совокупность электронных документов (файлов) частного лица или организации в компьютерной сети, объединённых под одним адресом (доменным именем или IP-адресом).

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

Объект, для которого мы будем разрабатывать сайт - автомобильный интернет-салон “KingAuto” (объект является выдуманным, любые совпадения с действительностью - случайны. Фирменный стиль разработан самостоятельно).

Сайт автомобильного интернет-салона “King Auto” - это информационный сайт, основной задачей которого является предоставление пользователям самой свежей и актуальной информации о товарах или услугах, которые предлагает фирма. На этом сайте будет собрана вся информация о марках и моделях автомобилей всего мира, их года выпуска и характеристики. Так как фирма специализируется на продаже автомобилей разных марок, то целевая аудитория, в основном, мужчины.

Рассмотрим структуру сайта:

Шапка сайта (логотип и название)

Меню

Новости

Реклама

Реклама

подвал

Рис. 1.1 Структура сайта

Перед тем как приступать к верстке, необходимо разработать макет сайта. Для этой цели используют любые графические редакторы. Одним из самых популярных является Photoshop, так как имеет необходимый набор инструментов и удобный интерфейс, им мы и воспользуемся для создания макета будущего сайта.

Рис. 1.2 Макет сайта в среде Photoshop

Сайт состоит из трех блоков: 1 блок - меню, состоящее из 5 ссылок на другие страницы сайта, 2 блок - разделы и 3 блок - новости. Что касается цветового решения, я остановила свой выбор на двух цветах, это темно-серый цвет и оранжевый.

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

Таким образом, мы имеем одну главную страницу, которая ссылается на остальные html страницы, как показано на рисунке 1.3. Стиль шрифтов, фоны, размер блоков описаны в файле CSS.

Рис. 1.3 Готовые HTML страницы

Итак, открыв наш сайт через какой-либо браузер, получаем следующий результат:

Рис. 1.4 Сайт автомобильного интернет салона «King Auto»

На данном этапе сайт нельзя назвать динамичным, так как страницы нашего сайта - это простой набор HTML кода.

Динамический сайт -- сайт, состоящий из динамичных PHP-страниц-- шаблонов, контента, скриптов и прочего, в виде отдельных файлов. Страница сайта, показываемая в итоге браузеру пользователя, формируется на стороне сервера динамически, по запросу, из страницы-шаблона и отдельно хранимого содержимого (информации, скриптов и др.).

Для того, что бы сайт стал динамичным, усовершенствуем его с помощью языка web-программирования PHP: создадим базу данных и подключим её к сайту, настроим авторизацию и регистрацию пользователя и т.д.

2. Создание базы данных

База данных (БД) -- совокупность связанных данных, организованных по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования, независимая от прикладных программ.

Для понятия «база данных» существует несколько классификаций. По модели представления данных БД можно классифицировать следующим образом: картотеки, иерархические, сетевые, многомерные, объектно-ориентированные, дедуктивные и реляционные. Далее речь пойдет о реляционной модели.

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

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

Создавать БД можно как и с помощью PHP сценария, так и с помощью готовой среды разработки баз данных PHPMyAdmin.

PHPMyAdmin является программой "визуального" управления базами данных MySQL. Данная программа написана на PHP и служит для наглядного вывода содержимого базы данных, а так же для простого и понятного управления ею.

Перед созданием реляционной модели базы данных необходимо определится с предметной областью, а также создать ER-диаграмму.

Пусть фирма специализируется на продаже автомобилей, а также предоставляет услуги по оформлению необходимых документов для покупки автомобиля. Продажу автомобилей фирма осуществляет с помощью посредников, имея прямые связи с фирмами, которые производят автомобили, тем самым, заказывать автомобиль через фирму «King Auto» выгодней и дешевле. Тогда проектируемая база данных состоит из 3-х сущностей: поставщики - услуги фирмы - заказчики. Рассмотрим ER-диаграмму:

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рис. 2.1 ER-диаграмма проектируемой базы данных

Таким образом, можем создать реляционную модель базы данных для автомобильного интернет-салона «King Auto» рис. 2.2:

Код

Маш.

Имя

Маш.

Код

Мод

Имя

Мод.

Год

Вып

Код

Куз.

Кол. дв.

тип

Кол.

мест

Код

Двиг.

V

Топл.

1

Audi

1

Audi A3

1998

1

4

Х

4

1

1576

Б

1

Audi

2

Audi A4

2006

2

5

С

4

2

1657

Б

Цилинд.

Код. Пост.

Имя Фирм.

Лицо

Код Зак.

Имя зак.

4

1

Audi

И.

1

П

4

1

Audi

И.

2

Ф

Рис. 2.2 Не нормализированная реляционная модель БД

Приведя БД к третьей нормальной форме и используя интерфейс программы PHPMyAdmin создадим базу данных для нашего сайта.

Рис. 2.3. База данных, созданная в среде PHPMyAdmin

3. Язык программирования PHP

PHP (англ. PHP: Hypertext Preprocessor -- «PHP: препроцессор гипертекста»; первоначально Personal Home Page Tools[3] -- «Инструменты для создания персональных веб-страниц») -- скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов

В 1994 году датский программист Расмус Лердорф создал набор скриптов на Perl/CGI для вывода и учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML-документов. Лердорф назвал набор Personal Home Page (Личная Домашняя Страница). Вскоре функциональности и быстроты Perl -- интерпретатора скриптов -- перестало хватать, и Лердорф разработал с использованием языка C новый интерпретатор шаблонов PHP/FI (англ. Personal Home Page / Forms Interpreter -- «Личная Домашняя Страница /Интерпретатор форм»).

Сегодня в области программирования для сети Интернет PHP -- один из популярных скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности, кроссплатформенности и распространению исходных кодов на основе лицензии PHP.

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

· автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;

· взаимодействие с большим количеством различных систем управления базами данных;

· автоматизированная отправка HTTP-заголовков;

· работа с HTTP-авторизацией;

· работа с cookies и сессиями;

· работа с локальными и удалёнными файлами, сокетами;

· обработка файлов, загружаемых на сервер;

· работа с XForms.

В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу корпорации TIOBE, базирующемся на данных поисковых систем, в апреле 2011 года PHP находился на 5 месте среди языков программирования. К крупнейшим сайтам, использующим PHP, относятся Facebook, Wikipedia и др.

Входит в LAMP -- распространённый набор программного обеспечения для создания и хостинга веб-сайтов (Linux, Apache, MySQL, PHP).

3.1 Подключение базы данных к сайту

Есть несколько способов работы с MySQL в PHP. Все эти способы появлялись, затем устаревали, заменяясь новыми. И на данный момент самый популярный способ - это объекто-ориентированная модель общения с MySQL. Именно с использованием этого способа мы и будем работать с базами данных.

Алгоритм подключения БД следующий:

1. Подключение.

2. Отправка запросов и получение результата.

3. Закрытие подключения.

Подключиться к базе данных через PHP можно следующим образом:

<?php $mysqli = new mysqli('localhost', 'Admin', 'pass', 'mybase');

?>

Тут мы создаём экземпляр объекта MySQLI, передавая конструктору следующие параметры:

1. Имя хоста, на котором работает MySQL.

2. Имя пользователя.

3. Пароль.

4. Имя базы данных, с которой мы хотим работать.

Если какие-нибудь данные будут неверные, то, соответственно, конструктор вернёт ошибку, и подключения не будет.

Но, если будет ошибка подключения, то выполнение скрипта не будет остановлено. В результате, он начнёт дальше выполнять наш код. В большинстве случаев, при ошибке подключения требуется прекратить выполнение скрипта, поэтому пишут так:

<?php $mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase'); if

(mysqli_connect_error())

{ echo "Подключение невозможно: ".mysqli_connect_error();}?>

Здесь мы проверяем: если были какие-либо ошибки при подключении, то выводим их и заканчиваем выполнение скрипта.

Далее выполним закрытие подключения. В примере ниже мы подключаемся к базе данных, а после проверки на успешность подключения, закрываем это соединение:

<?php $mysqli = @new mysqli('localhost', 'Admin', 'pass', 'mybase'); if

(mysqli_connect_errno())

{ echo "Подключение невозможно: ".mysqli_connect_error(); } $mysqli-

>close();?>

3.2 Регистрация пользователя

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

Для регистрации пользователя создадим файл write.php , который будет содержать следующий код:

<?php

if (isset($_POST['name']) and isset($_POST['sname']) and

isset($_POST['tel']) and isset($_POST['city'])) // проверяем заполнены ли

поля

{

include 'config.php';

$dcnx=mysql_connect("$HOST", "$USER", "$PASS"); // подключаемся к

базе данных

if(!$dcnx) exit(mysql_error());

if (!mysql_select_db($DB,$dcnx)) exit(mysql_error());

$query = mysql_query("INSERT INTO Zakazchiki (id_zak,familia,

name_zak, city, tel)

VALUES('".$_POST["id"]."','".$_POST["sname"]."','".$_POST["name"]."',

'".$_POST["city"]."','".$_POST["tel"]."');"); // пишем запрос на

добавление пользователя в существующую базу данных

if(!$query)

{

echo "<p>Ошибка в запросе</p>";

exit();

}

else echo "Пользователь ".$_POST['name']." был успешно создан";

}

else

{

echo "

<form method=post align=center action=write.php>

ID:<br> <input type=text name=id><br>

//Создание полей регистрационной формы

Фамилия:<br> <input type=text name=sname><br>

Имя: <br> <input type=text name=name><br>

Город: <br><input type=text name=city><br>

Телефон:<br> <input type=text name=tel><br>

<input type=submit value='Зарегистрироваться'>

</form>

";

echo "";

}

?>

В файле config.php содержится следующая информация:

<?php

$HOST = "localhost"; // имя сервера

$USER = "root"; // пользователь базы данных MySQL

$PASS = ""; // пароль для доступа к серверу MySQL

$DB = "KingAuto"; // название создаваемой базы данных

?>

Результат запроса приведен на рисунках 3.1. и 3.2.

Рис. 3.1 Регистрация пользователя

Рис. 3.2 Регистрация пользователя

3.3 Авторизация пользователя

Для реализации авторизации пользователя создадим файл index.php со следующим кодом:

<?php

if($_GET['ex']==1) // функция для закрытия сессии

{

unset($_SESSION["name"]);

unset($_SESSION["sname"]);

session_destroy();

}

include "config.php";

$auth=false; //Изначально при открытии страницы сайта, пользователь

не авторизирован

if ((isset($_POST['name']) and isset($_POST['sname'])) or

(isset($_SESSION['name']) and isset($_SESSION['sname']))) // проверяем

заполнены ли поля авторизации

{

$dcnx=mysql_connect("$HOST", "$USER", "$PASS"); // подключаемся к

базе данных

if(!$dcnx) exit(mysql_error());

if (!mysql_select_db($DB,$dcnx)) exit(mysql_error());

$query = mysql_query("SELECT * FROM Zakazchiki;"); // пишем запрос

о том, что бы выбрать пользователя из таблицы БД Zakazchiki

if(!$query)

{

echo "<p>Ошибка в запросе</p>";

exit();

}

else

{

while ($row=mysql_fetch_array($query))

{

if(($row['name']==$_POST['name'] and

$row['secondname']==$_POST['sname']) or

($row['name']==$_SESSION['name'] and

$row['secondname']==$_SESSION['sname']))

$auth=true; // Если введенные данные совпадают с данными из базы

данных, авторизация проходит успешно.

}

}

if($auth)

{

session_start(); // Открывает сессию

$_SESSION['name'] = $_POST['name'];

$_SESSION['sname'] = $_POST['sname'];

echo "Поздровляю ".$_POST['name'].", вы успешно

авторизированы<br><a href=index.php?ex=1>выход</a>";

}

}

else

{

echo "

//Оформляем поля ввода

<div style='float:left'>

<form method=post action=read.php>

<input type=submit value='Управление пользователями'>

</form>

<form method=post action=write.php>

<input type=submit value='Регистрация'>

</form>

</div>

<div style='float:right'>

<form method=post action=index.php>

Имя: <input type=text name=name><br>

Фамилия: <input type=text name=sname><br>

<input type=submit value='вход'>

</form>

</div>";

}

?>

Рис. 3.3 Авторизация пользователя

Рис. 3.4 Авторизация пользователя

сайт база данный пользователь

Рис. 3.5 Выход пользователя из системы

3.4 Управление пользователями

Для управления пользователями через базу данных, создадим файл read.php, который будет считывать информацию из нашей базы данных и delete.php, с помощью которого мы сможем удалять пользователей из базы данных. Таким образом файл read.php содержит следующий код:

<?php

include 'config.php';

$dcnx=mysql_connect("$HOST", "$USER", "$PASS"); //подключение к

БД

if(!$dcnx) exit(mysql_error());

if (!mysql_select_db($DB,$dcnx)) exit(mysql_error());

$query = mysql_query("SELECT DISTINCT z.familia, z.name_zak, z.city,

z.tel

FROM Zakazchiki z;"); // запрос о выводе всей информации о

пользователе

if(!$query)

{

echo "<p>Ошибка в запросе</p>";

exit();

}

else

{

$number = mysql_num_rows($query);//считаем количество учетных

записей

if ($number == 0)

{

echo "Учетных записей не существует";

}

else

{//создаем таблицу пользователей

echo "<table width=600 align=center>";

echo "<tr>";

echo "<th collspan=5>";

echo "Количество учетных записей: $number";

echo "</th>";

echo "</tr>";

echo "<tr>";

echo "<th>";

echo "Фамилия";

echo "</th>";

echo "<th>";

echo "Имя";

echo "</th>";

echo "<th>";

echo "Город";

echo "</th>";

echo "<th>";

echo "Телефон";

echo "</th>";

echo "</tr>";

echo "<tr>";

while ($row=mysql_fetch_array($query))

{

echo "<td>";

echo $row['familia'];

echo "</td>";

echo "<td>";

echo $row['name_zak'];

echo "</td>";

echo "<td>";

echo $row['city'];

echo "</td>";

echo "<td>";

echo $row['tel'];

echo "</td>";

echo "<td>";

echo "<a href=delete.php?name=".$row['tel']."><img src=images/close.png

width=20 height=20></a>";// картинка является ссылкой на файл

delete.php в который методом get передается имя пользователя

echo "</td>";

echo "</tr>";

}

echo "</table>";

}

}

?>

Рис. 3.6 Управление пользователями

Рис. 3.7 Удаление пользователя из базы данных

3.5 Гостевая книга

Создание гостевой книги не многим отличается от коментирования материалов сайта. Гостевая книга проще в связи с однозначностью базы данных (она ведь не делиться на отдельные темы), о количестве записей в ней не требуется куда-либо сообщать. Но отображать их лучше в обратном порядке. То есть, если коментарии логично отображать последовательно, один за другим, то в гостевой книге, скорее, приемлем обратный порядок: новые записи впереди, а старые в конце. Это будет правильным, поскольку для всех важнее новое сообщение в гостевой книге, а старые, возможно, утратили свое значение, поскольку ситуация с момента их записи могла в корне изменится. Таким образом, получается, что основная концепция гостевой книги такова:

1. Вся гостевая книга должна храниться в одном файле.

2. Она должна открываться по щелчку на ссылке.

3. Поскольку большое количество сообщений в гостевой книге приведет к громоздкости страницы, требуется ограничить допустимую длину сообщения и количество сообщений на 1 странице (последнее правило определяет постраничный вывод записей некоторыми порциями).

4. Поскольку сообщения гостевой книги должны сортироваться в обратном порядке, для их вывода в страницу должны применяться методы, допускающие такую сортировку.

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

Таким образом, создаем ссылку на файл index1.php, который в свою очередь имеет следующий код:

<? //Создаем Скрипт, который записывает данные формы и

переадресовывает запрос

function check($str){

$str=ereg_Replace("(<([^>])*>|>|<)","",$str); //Вытащить текст из тегов

$str=str_replace("|",'&#124;',$str); //Заменить вертикальную черту

(символ 124) кодом, черта будет использоваться как разделитель полей

$str=str_replace("`",'&#096;',$str); //Заменить оператор выполнения

(символ 96) кодом

$str=str_replace("'",'&#039;',$str); //Заменить одинарные кавычки их

кодами

$str=str_replace('"','&quot;',$str); //Заменить двойные кавычки их кодами

(теперь никакие кавычки не попадут в страницу)

$str=str_replace("\r",'',$str); //Удаляем перевод каретки (иначе нарушится

структура базы данных)

$str=str_replace("\n",'<br>',$str); //Заменить начало строки HTML-кодом

(иначе нарушится структура базы данных)

return ($str);

}

if (@$warn) {unset($warn);}

$maxlines=10; // сообщений на странице

$maxlen=35; // длина полей

$maxlenMes=1000;// длина сообщения

$filename = "guest.csv"; // Занесем имя файла в переменную

if (@$_POST['add']) {

if (empty($_POST['name']) or empty($_POST['mess'])) {// проверка

наличия обязательных полей (именно в методе ПОСТ)

$warn="Не заполнены обязательные поля!";

}else{

$warn="";

if(strlen($_POST['name']) > $maxlen)

{

$name=substr(check($_POST['name']),0,$maxlen);

$warn="Слишком длинное имя. Сократите до $maxlen символов! ";

}else{

$name=check($_POST['name']);

}

if(strlen($_POST['mail']) > $maxlen)

{

$mail=substr(check($_POST['mail']),0,$maxlen);

$warn="Слишком длинное имя. Сократите до $maxlen символов! ";

}elseif($_POST['mail'] and ! eregi("([0-9a-z\.-_]+)@([0-9a-z\.-_]+)\.([a-

z]{2,}) *$",$_POST['mail'])){

$warn.="Таких электронных адресов не бывает! ";

}else{

$mail=check($_POST['mail']);

}

if(strlen($_POST['url']) > $maxlen)

{

$url=substr(check($_POST['url']),0,$maxlen);

$warn.="Слишком длинный адрес. Сократите до $maxlen символов!";

}else{

$url=check($_POST['url']);

}

if(strlen($_POST['city']) > $maxlen)

{

$city=substr(check($_POST['city']),0,$maxlen);

$warn.="Слишком длинное название города. Сократите до $maxlen

символов!";

}else{

$city='';

}

if(strlen($_POST['mess']) > $maxlenMes)

{

$mess=substr(check($_POST['mess']),0,$maxlenMes);

$warn.="Слишком длинное сообщение. Сократите до $maxlenMes

символов!";

}else{

$mess=check($_POST['mess']);

}

}

if (empty($warn)) {

$f=fopen($filename,"a") or die("Не могу открыть файл на запись!");

flock($f,LOCK_EX); // ждем, пока не станем единственными и

блокируем

fwrite($f, "$name|$mail|$url|$city|".time()."|$mess\r\n"); // записываем

данные в файл

fflush($f); // записываем все изменения на диск

flock($f,LOCK_UN); // говорим что, больше не будем работать с

файлом и разблокируем

fclose($f); // Закрываем файл

Header("Location: http://".$_SERVER["SERVER_NAME"].

$_SERVER["SCRIPT_NAME"].'?adet=1');

exit();

}

}

?>

<html><!-- Создаем оформление страницы -->

<head>

<meta http-equiv="content-type" content="text/html; charset=windows-

1251">

<title>Гостевая книга</title>

<META http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT">

<META http-equiv="Cache-Control" content="no-cache, must-revalidate">

<META http-equiv="Pragma" content="no-cache">

<META http-equiv="Last-Modified" content="<?=gmdate("D, d M Y

H:i:s");?>">

<META NAME="ROBOTS" CONTENT="noindex, nofollow">

<meta name="Description "content="">

<meta name="Keywords" content="">

<meta name="Author" content="Красносельский К. К.">

<link rel="stylesheet" href="/include/my.css" type="text/css">

<style type="text/css">

.p {color:#222222; font-size:11px; font-family:Verdana, Tahoma}

</style>

</head>

<body>

<center>

<div>

<?

if (@$adet==1):

echo "<P style='color:green'>Ваше сообщение добавлено</p>";

elseif (@$warn):

echo "<P style='color:red'>$warn</p>";

else:

echo "<P style='color:navy'>Оставьте Ваше сообщение</p>";

endif;

// Создаем Скрипт, который отображает данные из файла

function datestring($date){

$monstring=array("января","февраля","марта","апреля","мая","июня","и

юля","августа","сентября","октября","ноября","декабря");

$m=$monstring[$date['mon']-1];

$daystring=array("в воскресенье","в понедельник","во вторник","в

среду","в четверг","в пятницу","в субботу");

$d=$daystring[$date['wday']];

if(strlen($date['minutes'])==1)

{

$min="0".$date['minutes'];

}else{

$min=$date['minutes'];

}

return "Сообщение написано $d, ".$date['mday']." $m ".$date['year']."

года, в ".$date['hours']." ч. $min мин.";

}

if (is_readable($filename)) { // если файл читается

$data=file($filename);// весь файл в массив строк

$totlines=count($data);//сколько записей

if (!isset($totlines)) {$totlines=0;}

$int=(int)($totlines/$maxlines); // вычисляем количество страниц

if ($int*$maxlines < $totlines):

$pages=$int+1;

else:

$pages=$int;

endif;

if(@$page < 1 || @$page > $pages) {$page=1;} // текуцая страница

задается черес GET. Если не задана, значит первая

for ($link=1;$link<=$pages;$link++) // определяем ссылки на другие

страницы

{

if ($link!=$page)

{

@$line.="<a

href='".$_SERVER["SCRIPT_NAME"]."?page=$link'>[$link]</a>";

}

if ($link==$page)

{

@$line.=" $link ";

}

}

if (!isset($line)) {$line=1;}

echo "<p>Записей $totlines, Страницы <b>$line</b></P>";

}

?>

<!-- Создаем форму, определив, какие данные нас интересуют -->

<form action=<?echo $_SERVER["SCRIPT_NAME"];?>

name="Guestbook" method=post>

<table border=2 width=366px>

<tr><td align=right class=p>*Ваше имя:<input class=p type=text SIZE=39

MAXLENGTH=<?=@$maxlen;?> name=name

value="<?=@$name;?>"></td></tr>

<tr><td align=right class=p>E-mail:<input class=p type=text SIZE=39

MAXLENGTH=<?=@$maxlen;?> name=mail

value="<?=@$mail;?>"></td></tr>

<tr><td align=right class=p>Home Page:<input class=p type=text SIZE=39

MAXLENGTH=<?=@$maxlen;?> name=url

value="<?=@$url;?>"></td></tr>

<tr><td align=right class=p>Город:<input class=p type=text SIZE=39

MAXLENGTH=<?=@$maxlen;?> name=city

value="<?=@$city;?>"></td></tr>

<tr><td align=left class=p valign=top>*Сообщение (Не более

<?=@$maxlenMes;?> символов - до появления полос

прокрутки):<br><textarea class=p name=mess rows=19

COLS=54><?=@$mess;?></textarea></td></tr>

<tr><td class=p colspan=2><input class=p type=submit value=Отправить

name=add id=b> * - поля обязательные для заполнения.</td></tr>

</table>

</form>

<P>&nbsp;</p>

<?

// Запись строк

if (!isset($totlines)) {$totlines=0;}

if (!isset($page)) {$page=1;}

if (!isset($line)) {$line=1;}

$to=$totlines+(1-$page)*$maxlines; // $page*$maxlines-1;// от (поскольку

это массив и его можно получить по ключам, определим точное

положение самой свежей из должных отобразиться на странице)

$from=$to-$maxlines; // ($page-1)*$maxlines-1; // до (самая старая на

странице)

if ($from < 0) {$from=0;}

for($i=$to-1; $i >= $from; $i--) // от последней из требуемых, до

наиболее старой, что должна отобразится (поскольку массив

нумеруется с ноля, вычтем единицу из to)

{

list($name, $mail, $url, $city, $time, $mess) = explode("|",trim($data[$i]));

// перебросим массив в переменные

echo

<table border=1 width=90% cellpadding=2 cellspacing=1

bgcolor=#CCCCCC class=p>

<tr><td align=center bgcolor=#e8e8ff><b>$name</b> ($city)</td></tr>

<tr><td align=center bgcolor=#e8e8ff>E-mail: $mail<br>Home page:

$url</td></tr>

<tr><td bgcolor=#FFFFFF>$mess</td></tr>

<tr><td align=right >".datestring(getdate($time))."</td></tr>

</table>

<P>&nbsp;</p>

";

}

echo "<p>Записей $totlines, Страницы <b>$line</b>";

?>

Таким образом, получаем результат, который показан на рисунках 3.8. и 3.9.

Рис. 3.8 Форма гостевой книги

Рис. 3.9 Запись в гостевой книге

4. Технология AJAX

Впервые термин AJAX был публично использован 18 февраля 2005 года в статье Джесси Джеймса Гарретта (Jesse James Garrett) «Новый подход к веб-приложениям». Гарретт придумал термин, когда ему пришлось как-то назвать новый набор технологий, предлагаемый им клиенту.

Однако в той или иной форме многие технологии были доступны и использовались гораздо раньше, например, в подходе «Remote Scripting», предложенном компанией Microsoft в 1998 году, или с использованием HTML элемента IFRAME, появившегося в Internet Explorer 3 в 1996 году.

AJAX стал особенно популярен после использования его компанией Google в сервисах Gmail, Google Maps и Google Suggest.

AJAX -- не самостоятельная технология, а концепция использования нескольких смежных технологий. AJAX базируется на двух основных принципах:

· использование технологии динамического обращения к серверу «на лету», без перезагрузки всей страницы полностью, например:

· с использованием XMLHttpRequest (основной объект);

· через динамическое создание дочерних фреймов;

· через динамическое создание тега <script>.

· через динамическое создание тега <img>, как это реализовано в google analytics.

· использование DHTML для динамического изменения содержания страницы;

В качестве формата передачи данных могут использоваться фрагменты простого текста, HTML-кода, JSON или XML.

Очень часто перед вебмастером стоит задача дать посетителю сайта возможность выбора, так, чтобы второй вариант выбора динамически подставлялся в зависимости от первого. Допустим, наша база данных автомобилей насчитывает более 300 марок автомобилей и более 3000 моделей, конечно список из 3000 пунктов довольно неудобен. Эту проблему можно легко решить с помощью технологии AJAX. Для этого необходимо создать функцию, которая непосредственно осуществляла бы AJAX запрос, а так же новый файл ajax.php, где мы и напишем запрос к нашей базе данных. Таким образом, получаем следующий результат:

Рис. 4.1 Применение технологии AJAX

5. Способы защиты от SQL-инъекций

Внедрение SQL-кода (англ. SQL injection) -- один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.

Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц, удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.

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

Для защиты от SQL-инъекций сайта фирмы «King Auto» я применяла один из самых простых способов: необходимо «обрамлять» параметры SQL-запроса одиночными кавычками ('), поскольку, через GET- и POST-запрос невозможно передать символ одиночной кавычки (он будет автоматически заменен сочетанием символов - \' - т.е. экранироваться).

А также воспользовалась стандартными PHP функциями mysql_real_escape_string() и sprintf().

Функция mysql_real_escape_string() экранирует специальные символы строки, таким образом, изменяя синтаксис параметров SQL запроса и приводя его в негодность.

Функция sprintf() возвращает отформатированную строку. Нам пригодятся директивы вида %s - строка, и % d - целое число.

Способов защиты от SQL инъекции много, но не один из них не дает 100% гарантии защищенности. Ведь на каждое действие есть противодействие, и особенно заинтересованный опытный хакер наверняка найдет способ, как получить доступ к базе данных.

ВЫВОДЫ

Результат проделанной работы - динамический сайт, с подключенной к нему базой данных, возможностью управления пользователями, авторизацией и регистрацией пользователей. А также считывание информации из базы данных об автомобилях разных марок и моделей с использованием технологии Ajax.

Ознакомилась с видами SQL инъекций и способами защиты базы данных от попыток взлома.

Список использованной литературы

1. Кузнецов Максим, Симдянов Игорь. PHP . Практика создания Web-сайтов. -- 2-е изд. перераб. и доп. -- Спб.: «БХВ-Петербург», 2011. -- С. 1264.

2. Кузнецов Максим, Симдянов Игорь. PHP на примерах. -- 2-е изд. перераб. и доп. -- Спб.: «БХВ-Петербург», 2011. -- С. 400.

3. Кузнецов Максим, Симдянов Игорь. Объектно-ориентированное программирование на PHP. -- Спб.: «БХВ-Петербург», 2009. -- С. 608.

Размещено на Allbest.ru


Подобные документы

  • Процесс разработки Web-сайта. Состав и содержание работ по созданию подсистемы. Требования к Web-сайту. Определение сущностей модели базы данных. Разработка логической модели базы данных. Реализация PHP-скриптов и заполнение базы данных Web-сайта.

    дипломная работа [8,2 M], добавлен 29.06.2011

  • Классификация компьютерных сетей. Схема подключения к Интернету, каналы передачи и приема информации. Разработка сайта с использованием скриптового языка программирования PHP и базы данных MySQL (база данных о квартирах, предназначенных для продажи).

    контрольная работа [3,6 M], добавлен 09.05.2012

  • Разработка и программная реализация сайта и базы данных, наполнение базы данных тестовой информацией о товарах. Инструментальные средства создания сайта. Организация тестирования сайта, модуль визуализации интерфейса. Создание запросов в базе данных SQL.

    курсовая работа [1,4 M], добавлен 24.12.2012

  • Разработка приложения для работы с базой данных с использованием объектно-ориентированного и визуального программирования. Обзор языка элементов языка программирования Delphi. Проектирование базы данных автозаправки. Клиентская система приложения.

    курсовая работа [2,3 M], добавлен 31.01.2016

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

    дипломная работа [1,9 M], добавлен 06.07.2015

  • Создание программ, позволяющих создавать базы данных. Создание таблицы базы данных. Создание схемы данных. Создание форм, отчетов, запросов. Увеличение объема и структурной сложности хранимых данных. Характеристика системы управления базой данных Access.

    курсовая работа [2,1 M], добавлен 17.06.2013

  • Особенности создания страниц на языке APS.NET, создание и формы обращение к базам данных. Интерфейс автоматического вывода определнного столбца базы данных в элементы управления. Структура базы данных, принцип работы страниц сайта, настройка приложения.

    курсовая работа [387,3 K], добавлен 02.03.2010

  • Создание базы данных, построение на ее основе информационной системы в виде веб-сайта. Обоснование и выбор системы управления базой данных. Датологическое проектирование, разработка алгоритма решения задачи, создание форм. Результаты обработки данных.

    отчет по практике [904,1 K], добавлен 13.04.2015

  • Разработка сайта для профессионального училища №24. Выбор языка программирования. Характеристика ПУ №24: организационная структура, аппаратное и программное обеспечение. Дизайн сайта; создание базы данных, главного файла и модулей; система управления.

    отчет по практике [1,6 M], добавлен 25.01.2014

  • Создание базы данных в среде MS Access. Создание и работа с базой данных в ателье. Алгоритм решения задачи. Выбор пакета прикладных программ. Проектирование форм выходных документов с использованием СУБД MS Access. Структура записи таблиц базы данных.

    курсовая работа [1,6 M], добавлен 30.01.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.