39634

Сайт бесплатных объявлений и рекламы

Дипломная

Информатика, кибернетика и программирование

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

Русский

2013-10-08

13.12 MB

37 чел.

МИНОБРНАУКИ  РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Юго-Западный государственный университет»

Кафедра «Программное обеспечение вычислительной техники»

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА БАКАЛАВРА

на соискание квалификации бакалавр  _________________ ________

 Сайт бесплатных объявлений и рекламы                                               ми

по направлению подготовки   230105.65 Программное обеспечение

  вычислительной техники и автоматизированных систем                             

Автор работы                   Милешко Владимир Викторович

                        (подпись, дата)

Группа  ПО-91

Руководитель работы                    Е.А.Петрик       (подпись, дата)

Нормоконтроль                    В. Г. Белов         (подпись, дата)

  

Технологический контроль                В. Г. Белов        (подпись, дата)   

Работа допущена к защите

И.о. заведующего кафедрой                    В. В. Апальков         (подпись, дата)

Оценка______________Протокол ГЭК № ________ от_____________

Председатель ГЭК                                 (подпись, дата)

Курск, 2013 г.

МИНОБРНАУКИ  РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Юго-Западный государственный университет»

Кафедра «Программное обеспечение вычислительной техники»

УТВЕРЖДАЮ:

     И.о.заведующего кафедрой

____________  В.В.Апальков

      (подпись, инициалы, фамилия)

«___» _____________ 20___ г.

ЗАДАНИЕ НА ВЫПУСКНУЮ КВАЛИФИКАЦИОННУЮ РАБОТУ БАКАЛАВРА

Студент Милешко Владимир Викторович шифр 349036  группа ПО-91

1. Тема «Сайт бесплатных объявлений и рекламы»  утверждена  приказом по ЮЗГУ № 2039-с   от  «28» мая   2013  г.

2. Срок представления проекта к защите «21» июня 2013 г.

3. Исходные данные для проектирования: задание на дипломную работу, операционная система Microsoft Windows 7, стандартный язык разметки документов HTML, скриптовый язык программирования PHP и Java script.

4. Содержание пояснительной записки:

Титульный лист

Задание (ТЗ)

Реферат

Содержание

Определения, обозначения и сокращения

Введение

1 Техническое задание

1.1 Основание для разработки

1.2 Назначение разработки

1.3 Рассмотренные альтернативы

1.4 Стандарты

1.5 Требования к программному изделию

1.6 Описания прецедентов

1.7 Диаграмма вариантов использования

2 Технический проект

2.1 Реализация прецедентов при помощи диаграммы последовательностей системных операций

2.2 Тестовые наборы, построенные по данным вариантов использования

2.3 Концептуальная модель предметной области

2.4 Верификация модели предметной области на полноту и непротиворечивость.

2.5 Реализация системных операций в виде диаграмм взаимодействия

2.6 Тестовые наборы, построенные на основании покрытий диаграмм взаимодействия

2.7 Диаграммы модулей

2.8 Спецификация модулей на языке OCL

2.9 Тестовые наборы

3 Рабочий проект

3.1 Классы и объекты интерфейса пользователя

3.2 Тестовые наборы для отладки интерфейса пользователя

3.3 Программная реализация модулей

3.4 Диаграмма активностей

Заключение

Список использованных источников

Приложение А. Текст программы

Приложение Б. Внешний вид графического материала

5. Перечень графического материала:

лист 1: Постановка задачи

лист 2: Описание прецедентов, диаграмма вариантов использования

лист 3: Интерфейс стартового окна

лист 4: Подача объявления

лист 5: Последние объявления

лист 6: Диаграмма развертывания

лист 7: Диаграмма активностей

лист 8: Диаграмма модулей

лист 9: Концептуальная модель предметной области

лист 10:Тестовые наборы

Руководитель проекта:       Е.А.Петрик

    (подпись, дата)

  

Задание принял к исполнению               В.В. Милешко

                                                        (подпись, дата)  


Реферат

Данный текстовый документ имеет объем 139 страниц, количество иллюстраций – 20, таблиц – 7, приложений – 2. При работе над дипломной работой было использовано 7 источников литературы. Имеется графический материал в объеме 11 листов.

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

Объектом разработки является возможность подачи и просмотра бесплатных объявлений и рекламы.

Целью работы является разработка сайта - доски объявлений.

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


Содержание

Введение 10

1 Техническое задание 11

1.1 Основание для разработки 11

1.2 Назначение разработки 11

1.3 Рассмотренные альтернативы 11

1.4 Стандарты 11

1.5 Требования к программному изделию 12

1.5.1 Требования пользователя по функциональному составу 12

1.5.2 Входные и выходные данные 13

1.5.3 Информационная совместимость 13

1.5.4 Программные ограничения, совместимость 13

1.5.5 Результирующие компоненты изделия 14

1.5.6 Носители информации 14

1.5.7 Требования к надежности 14

1.5.8 Рестарт 14

1.5.9 Требования к составу и параметрам технических средств 14

1.6 Описания прецедентов 15

1.6.1 Перечень прецедентов программы 15

1.6.2 Прецедент «Доступ к системе через форму регистрации» 16

1.6.3 Прецедент «Работа с сайтом без ввода регистрационных данных»…………………………………………………………………………..18

1.6.4 Прецедент «Последние объявления» 18

1.6.5 Прецедент «Подать объявление» 19

1.6.6 Прецедент «Мои объявления» 19

1.6.7 Прецедент «Записная книжка» 20

1.6.8 Прецедент «Личные данные» 20

2 Технический проект 22

2.1 Реализация прецедентов при помощи диаграммы последовательностей системных операций 22

2.1.1 Реализация прецедента «Доступ к системе через форму регистрации» 22

2.2 Тестовые наборы, построенные по данным вариантов использования 23

2.3 Концептуальная модель предметной области 24

2.4 Верификация модели предметной области на полноту и непротиворечивость. 26

2.5 Реализация системных операций в виде диаграмм взаимодействия…………………………………………………………………..27

2.6 Тестовые наборы, построенные на основании покрытий диаграмм взаимодействия 29

2.7 Диаграммы модулей 30

2.8 Спецификация модулей на языке OCL 31

2.9 Тестовые наборы 32

3 Рабочий проект 36

3.1 Классы и объекты интерфейса пользователя 36

3.1.1 Концептуальный класс «Категория Рубрики» 36

3.1.2  Концептуальный класс «Последние объявления» 38

3.1.3  Концептуальный класс «Подать объявление» 39

3.1.4  Концептуальный класс «Авторизация» 40

3.1.5 Концептуальный класс «Мои объявления» 41

3.1.6 Концептуальный класс «Записная книжка» 42

3.1.7 Концептуальный класс «Личные данные» 42

3.2 Тестовые наборы для отладки интерфейса пользователя 43

3.3 Программная реализация модулей 47

3.4 Диаграмма активностей 48

Заключение 49

Список использованных источников 50

Приложение А 51

Приложение Б 129


Определения, обозначения и сокращения

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

доска объявлений: Набор объявлений коммерческого и/или некоммерческого характера и размещается как на платной, так и на бесплатной основе, в зависимости от конкретного сайта.

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

браузер:  Программное обеспечение для просмотра веб-сайтов, то есть для запроса веб-страниц (преимущественно из Сети), их обработки, вывода и перехода от одной страницы к другой;

ссылка:  Фрагмент HTML-документа, указывающий на другой файл, который может быть расположен в Интернете.


Введение

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

Актуальность выбранной темы определяется тем, что имеющиеся программные продукты аналогичного назначения имеют высокую стоимость и часто имеют сложный в обращении интерфейс. При разработке продукта не использовались движки или шаблоны вроде WordPress или Joomla!, что значительно облегчает его структуру и исключает наличие лишних модулей и плагинов. Приложение устанавливается на интернет-сервере, доступ пользователей к приложению осуществляется через WEB-интерфейс с помощью браузера, например MS Internet Explorer. Таким образом подразумевается, что работа с приложением будет вестись только через HTTP-протокол.

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

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


 Техническое задание

 Основание для разработки

Основанием для разработки программного продукта служит задание на дипломную работу  «Сайт бесплатных объявлений и рекламы», утвержденное на основании приказа по ЮЗГУ № 2039-с   от  «28» мая   2013  года.

 Назначение разработки

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

 Рассмотренные альтернативы

При постановке задачи на разработку программы был произведен поиск альтернативных программных продуктов в Курске, позволяющих просматривать и размещать объявления и рекламу онлайн, таких как: AVITO, Slando и Моя реклама. Отличие дано системы от рассмотренных альтернативных вариантов заключается в обсолютно бесплатном размещениим пользовательстких объявлений и простоте интерфейса.

 Стандарты

Разработка программной документации и программного продукта должна производиться согласно ГОСТ 19.701-90, ГОСТ 2.304-88. Текстовый материал пояснительной записки должен соответствовать требованиям  стандарта университета СТУ 04.02.030-2008. Все артефакты проектирования должны быть разработаны в соответствии со стандартом UML.

  Требования к программному изделию

 Требования пользователя по функциональному составу

  1.  программа должна выполнять поиск объявлений и др. информации;
  2. программа должна быть оснащена рубриками и подрубриками для разделения и классификации информации;
  3. в целях обеспечения порядка и безопасности объявления могут добавлять только зарегистрированные пользователи;
  4. программа должна включать личные кабинеты пользователей, с возможностью редактирования личных данных;
  5. программа должна иметь возможность аутентификации пользователей;
  6. программа должна иметь режим администрирования с возможностью редактирования основных параметров электронной доски объявлений, таких как название, число объявлений, отображаемых на одной странице, включение или выключение почтовой рассылки;
  7. администратор может создавать и удалять разделы и подразделы каталога доски объявлений, просматривать список зарегистрированных пользователей, а так же удалять пользователей;
  8. программа должна отображать количество объявлений, размещенных в каждой рубрике (подрубрике);
  9. программа должна отображать информацию о выбранном объявлении или рекламе;
  10. программа должна предоставлять возможность редактирования и удаления собственных объявлений;
  11. наличие программной документации;
  12. возможность оповещения пользователя сообщениями от системы;
  13. программа должна использовать файлы с расширениями *.txt, *.php, *.html, *.css, *jpg, *gif, *png.

 Входные и выходные данные

Входными данными являются:

  1. файл index.php, который содержит данные, размещенные на сайте, информация представлена на скриптовом языке программирования и языке разметки документов;
  2. файлы st_blue.css, st_wood.css, wood2.css, которые содержат информацию о каскадных таблицах стилей сайта, используется язык разметки документов.

Выходными данными являются:

  1. страницы, запрашиваемые пользователем нажатием по ссылке;
  2. сообщения, сформированные приложением для пользователя;

 Информационная совместимость

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

В качестве входных данных программа должна использовать файлы формата *.txt, *.php, *.html, *.css, *jpg, *gif, *png. Выходными данными должен быть файл формата *.html.

 Программные ограничения, совместимость

Программа должна быть написана на стандартном языке разметки документов HTML, скриптовом языке программирования PHP, прототипно-ориентированном скриптовом языке программирования JavaScript и работать под управлением операционной системы Microsoft Windows, Linux, Mac OS с установленной программой для отображения веб-страниц и программой Adobe Flash Player для отображения анимации.

 Результирующие компоненты изделия

В программное изделие должны входить следующие компоненты:

  1.  исполняемые файлы программного приложения,
  2.  программная документация на разработку.

 Носители информации

Программа должна размещаться в виде файлов на жестком диске компьютера пользователя.

 Требования к надежности

Программный продукт должен функционировать на всех разработанных тестах. Тесты требуется разработать на этапе рабочего проекта.

 Рестарт

Предусматривать автосохранение вводимых данных при расчете не требуется, так как работа ведется в режиме реального времени. В случае сбоя необходимо перезапустить приложение, обновив страницу браузера.

 

 Требования к составу и параметрам технических средств

Программное изделие должно работать на компьютере со следующими характеристиками:

  1. процессор не менее 800 МГц;
  2. оперативная память объемом не менее 128 Мб;
  3. адаптер SVGA с цветным дисплеем;
  4. клавиатура;
  5. наличие доступа в сеть Интернет (требуется для доступа к программному продукту в случае размещения на хостинге).

1.5.10  Внешний вид интерфейса

В соответствии с требованиями пользователя по функциональному составу внешний вид приложения должен соответствовать рисунку 1.1.

Рисунок 1.1 – Внешний вид приложения

 Описания прецедентов

 Перечень прецедентов программы

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

  1. Настройку параметров, необходимых для заполнения формы подачи объявления, внешнего вида приложения. В связи с этим должны быть реализованы следующие прецеденты:
  2. «доступ к системе через форму регистрации»,
  3. «работа с сайтом без ввода регистрационных данных».
  4. Средство просмотра последних объявлений. В связи с этим должны быть реализован прецедент:
  5. «последние объявления».
  6. Средства подачи объявлений. В связи с этим должен быть реализован прецедент:
  7. «подать объявление».
  8. Средства для просмотра личных объявлений пользователя. В связи с этим должен быть реализован прецедент:
  9. «мои объявления».
  10. Средства для подписки на интересующие пользователя рубрики. В связи с этим должен быть реализован прецедент:
  11. «записная книжка».
  12. Средства для изменения личной информации. В связи с этим должен быть реализован прецедент:
  13. «личные данные».

  Прецедент «Доступ к системе через форму регистрации»

Основной исполнитель. Пользователь.

Заинтересованные лица и их требования. Пользователь. Хочет просмотреть свои объявления, внести коррективы, изменить личные данные, просмотреть рубрики, на которые он подписан.

Предусловия. Пользователь открыл окно браузера, ввел адрес сайта доски объявлений и перешел на выбранную веб-страницу.

Результат (Постусловие). На экране пользователя отобразится главная страница сайта, страница авторизации, будет предоставлен список рубрик и количество объявлений в каждой из них.

Основной успешный сценарий (или основной процесс):

  1. Пользователь нажимает на меню «Войти».
  2. Загружается страница ввода регистрационных данных.
  3. Пользователь заполняет необходимые поля и нажимает на кнопку «Войти».
  4. Система проверяет факт и правильность заполнения необходимых полей. При неверном заполнении система выдает сообщение «Такой логин с паролем не найдены в базе данных». При верном заполнении осуществляется моментальный вход в систему с отображением имени зарегистрированного пользователя.
  5. Система добавляет запись нового пользователя в раздел зарегистрированных пользователей.
  6. Пользователь в форму входа вводит логин и пароль и нажимает кнопку «Войти».
  7. Система сохраняет данные.
  8. Пользователь выбирает необходимую информацию и работает с ней.

Расширения (или альтернативные потоки):

1а. Пользователь загружает страницу сайта, не используя регистрационную форму.

  1. Система не выполняет никаких действий по изменению параметров доступа.

3а.  Пользователь в поля ввода регистрационных данных не вводит никаких значений или вводит неверные значения регистрации.

  1. Система выдает сообщение «Пользователь с таким электронным адресом не найден».

 

 Прецедент «Работа с сайтом без ввода регистрационных данных»

Основной исполнитель. Пользователь.

Заинтересованные лица и их требования. Пользователь. Хочет ознакомится с общей информацией не прибегая к форме регистрации.

Предусловия.  Пользователь открыл окно браузера, ввел адрес сайта доски объявлений и перешел на выбранную веб-страницу.

Результат (Постусловие). На экране пользователя отобразится главная страница сайта, страница авторизации.

Основной успешный сценарий (или основной процесс):

Пользователь изучает информацию на сайте, пользуется доступными ему ссылками, не подаёт объявлений.

 Прецедент «Последние объявления»

Основной исполнитель. Пользователь, система.

Заинтересованные лица и их требования. Пользователь. Хочет просмотреть последние опубликованные объявления.

Предусловия. Пользователь открыл главную страницу сайта и перешел в раздел «Последние объявления».

Результат (Постусловие). На странице отобразится список последних размещенных объявлений.

Основной успешный сценарий (или основной процесс):

  1. Пользователь нажимает на пункт меню «Последние объявления».
  2. Система генерирует страницу со списком последних объявлений.
  3. Пользователь просматривает и, при необходимости, нажимает на выбранное объявление.
  4. Система генерирует страницу информацией по выбранному объявлению.

 

 Прецедент «Подать объявление»

Основной исполнитель. Пользователь.

Заинтересованные лица и их требования. Пользователь. Хочет разместить своё объявление.

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

Результат (Постусловие). На экране пользователя появится страница,  отображающая форму для подачи объявления.

Основной успешный сценарий (или основной процесс):

  1. Пользователь нажимает на раздел меню «Подать объявление».
  2. Система генерирует форму заполнения для подачи объявления.

Расширения (или альтернативные потоки):

1а.   Пользователь перешел в раздел не авторизовавшись.

  1.  Система выдает форму для авторизации.

          Прецедент  «Мои объявления»

Основной исполнитель. Пользователь.

Заинтересованные лица и их требования. Пользователь. Хочет просмотреть свои объявления.

Предусловия. Пользователь открывает главную страницу сайта, автаризируется и нажимает на кнопку «Мои объявления».

Результат (Постусловие). На экране пользователя появится страница,  отображающая список объявлений, опубликованных пользователем.

Основной успешный сценарий (или основной процесс):

  1. Пользователь нажимает на кнопку «Мои объявления».
  2. Система генерирует страницу со списком объявлений пользователя.

Расширения (или альтернативные потоки):

1а.   Пользователь перешел в раздел не авторизовавшись.

  1.  Система выдает форму для авторизации.

 Прецедент «Записная книжка»

Основной исполнитель. Пользователь.

Заинтересованные лица и их требования. Пользователь. Хочет просмотреть свои подписки на рубрики.

Предусловия. Пользователь открывает главную страницу сайта, автаризируется и нажимает на кнопку «Записная книжка».

Результат (Постусловие). На экране пользователя появится страница,  отображающая список рубрик, на которые он подписан.

Основной успешный сценарий (или основной процесс):

  1. Пользователь нажимает на кнопку «Записная книжка».
  2. Система генерирует страницу со списком рубрик, на которые подписан пользователь.

Расширения (или альтернативные потоки):

1а.   Пользователь перешел в раздел не авторизовавшись.

  1. Система выдает форму для авторизации.

1б. Пользователь не подписан ни на одну рубрику.

  1. Система выдает сообщение «Нет подписки ни на одну из рубрик»

 Прецедент «Личные данные»

Основной исполнитель. Пользователь.

Заинтересованные лица и их требования. Пользователь. Хочет просмотреть или изменить свои личные данные.

Предусловия. Пользователь открывает главную страницу сайта, автаризируется и нажимает на кнопку «Личные данные».

Результат (Постусловие). На экране пользователя появится страница,  отображающая форму, содержащую данные пользователя.

Основной успешный сценарий (или основной процесс):

  1. Пользователь нажимает на кнопку «Личные данные».
  2. Система генерирует форму, содержащую данные пользователя.
  3. Пользователь заполняет необходимые поля и нажимает кнопку Изменить личную информацию.
  4. Система сохраняет новые данные.

Расширения (или альтернативные потоки):

1а.   Пользователь перешел в раздел не авторизовавшись.

  1. Система выдает форму для авторизации.


Технический проект

 Реализация прецедентов при помощи диаграммы последовательностей системных операций

 Реализация прецедента «Доступ к системе через форму регистрации»

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

На рисунке 2.1 показана диаграмма последовательности действий системы, разработанная на основе прецедента «Доступ к системе через форму регистрации». Исполнителем сценария прецедента «Доступ к системе через форму регистрации» является Пользователь. Диаграмма была построена в соответствии с правилами и обозначениями языка UML.

Рисунок 2.1 – Диаграмма последовательности действий системы

Тестовые наборы, построенные по данным вариантов использования

Рассмотрим прецедент «Доступ к системе через форму регистрации».

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

  1. Случай использования: Пользователь запускает систему авторизации, нажимая на кнопку «Войти».

Предусловие: Были верно заполнены поля «Имя пользователя (логин)» или «Пароль».

Тестовый случай: Выполняется авторизация уже зарегистрированного пользователя.

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

  1. Случай использования: Пользователь запускает систему авторизации, нажимая на кнопку «Войти».

Предусловие: Были неверно заполнены поля «Имя пользователя (логин)» или «Пароль».

Тестовый случай: Выполняется авторизация уже зарегистрированного пользователя, но в процессе заполнения требуемых полей произошла ошибка.

Ожидаемый результат: Системное сообщение «Такой логин с паролем не найдены в базе данных».

  1. Случай использования: Пользователь запускает систему авторизации, нажимая на кнопку «Войти».

Предусловие: Были не заполнены поля «Имя пользователя (логин)» или «Пароль».

Тестовый случай: Попытка авторизации с незаполненными полями.

Ожидаемый результат: Системное сообщение «Пользователь с таким электронным адресом не найден».

  1. Случай использования: Пользователь нажимает ссылку «Забыли пароль?».

Предусловие: Авторизация пользователя не производилась.

Тестовый случай: Попытка авторизации с забытым паролем или логином.

Ожидаемый результат: Системное сообщение «Напомнить пароль. Введите адрес электронной почты, указанный при регистрации». Отображается форма для ввода электронного адреса пользователя.

  1. Случай использования. Пользователь нажимает ссылку «зарегестрируйтесь».

Предусловие: Авторизация пользователя не производилась.

Тестовый случай: Пользователь пытается зарегистрироваться.

Ожидаемый результат: На экран будет выведена анкета с полями «Ваше Имя:», «Электронная почта:», «Пароль:», «Пароль ещё раз:», «Защитный код:» обязательными для заполнения и кнопка «Зарегистрироваться».

Концептуальная модель предметной области

При разработке модели предметной области были выполнены следующие действия:

  1. Составлен список кандидатов на роль концептуальных классов: «Категория Рубрики», «Категория Последние объявления», «Категория Подать объявление», «Авторизация», «Возможные ошибки», «Верхнее меню», «Правое меню выбора темы оформления».
  2. Добавлены необходимые ассоциации, отражающие связи, для которых требуется выделение памяти и кратность. Разработанные ассоциации представлены в таблице 2.1.

Таблица 2.1 – Разработанные ассоциации

Объекты

Ассоциации

Кратность

1

2

3

Верхнее меню - Категория Рубрики

Включает

1 - *

Верхнее меню – Категория Последние объявления

Возможно генерирует

1 - *

Верхнее меню – Категория Подать объявление

Возможно генерирует

1 - *

Категория Подать объявление – Возможные ошибки

Возможно генерирует

1 - *

Правое меню – Выбор темы оформления

Включает

1 - *

Категория театр - Возможные ошибки

Возможно генерирует

1 - *

Авторизация – Возможные ошибки

Возможно генерирует

1 – 1 .. *

Авторизация

Использует

1 – 1 .. *

  1. Добавлены атрибуты, необходимые для выполнения информационных требований.

На рисунке 2.2 показана концептуальная модель предметной области, разработанная на основе текстового описания прецедента «Доступ к системе через форму регистрации».

Рисунок 2.2 – Концептуальная модель предметной области

Верификация модели предметной области на полноту и непротиворечивость.

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

Все эти понятия представлены в разработанной модели предметной области как концептуальные классы или атрибуты концептуальных классов. Это указывает на полноту модели.

Противоречия в функциональности сущностей отсутствуют, значит, прецеденты удовлетворяют условиям полноты и непротиворечивости. Это подтверждает непротиворечивость разработанной модели.

Реализация системных операций в виде диаграмм взаимодействия.

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

Рассмотрим реализацию модуля бронирования билета.

На рисунке 2.3 представлена диаграмма коопераций, отражающая взаимодействие объектов в процессе выполнения модуля подачи объявления. Диаграмма была построена в соответствии с правилами  и обозначениями языка UML.

Add_categories

Добавить рубрику в записную книжку

Записная книжка

Подать объявление

Объявление размещено

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

Success_Notification

Published

Autorization

Рубрика

Подрубрика

Текст

Фото

Рисунок 2.3 – Диаграмма коопераций, реализующая прецедент «Подать объявление»

Операция: Authorization.

Ссылки:  Прецеденты: Доступ к системе через форму регистрации.

Предусловия: Открыто окно программы, которая отображает веб-страницы, набран адрес сайта, заполнены поля для авторизации, нажата кнопка «Войти».

Постусловия: В верхнем меню страницы отображается имя (логин) пользователя. Появляется возможность заполнения полей в форме раздела подачи объявлений.

 

Операция: Published.

Ссылки:  Прецеденты: Подать объявление.

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

Постусловия: Появляется возможность разместить объявление, нажав кнопку «опубликовать».         

Операция: Add_ categories.

Ссылки:  Прецеденты: Подать объявление.

Предусловия: Заполнены поля формы подачи объявления, нажата кнопка «опубликовать», вызвана операция Published.

Постусловия: Появляется возможность добавить рубрику в записную книжку, нажав на кнопку «Добавить рубрику в записную книжку».

Операция: Success_ Notification.

Ссылки:   Прецеденты: Подать объявление.

Предусловия: Заполнены поля формы подачи объявления, нажата кнопка «опубликовать», вызвана операция Published.

Постусловия: Объявление размещено в соответственной рубрике, отображается системное сообщение «Ваше объявление успешно размещено».

Тестовые наборы, построенные на основании покрытий диаграмм взаимодействия

На основании покрытий диаграмм взаимодействия были построены следующие тестовые наборы:

  1. Операция: Authorization.

Предусловие теста: Имеются регистрационные данные конкретного пользователя, введенные в поля авторизации.

Тестовый случай: Выполняется проверка данных с уже имеющимися регистрационными данными.

Ожидаемый результат: Авторизация успешна.

  1. Операция: Published.

Предусловие теста: Пользователь вводит текст объявления и пытается опубликовать его, не выбрав рубрику и подрубрику.  

Тестовый случай: Выполняется проверка заполнения всех полей формы.

Ожидаемый результат: Сообщение системы «Корректно выберите рубрику».

  1. Операция: Authorization.

Предусловие теста: Имеются некорректные регистрационные данные, введенные в поля авторизации.

Тестовый случай: Выполняется проверка данных с уже имеющимися регистрационными данными.

Ожидаемый результат: Авторизация отклонена.

  1. Операция: Published.

Предусловие теста: Выбраны рубрика и подрубрика, и не введен текст объявления.

Тестовый случай: Выполняется проверка заполнения всех полей формы.

Ожидаемый результат: Сообщение системы «Напишите текст объявления».

Диаграммы модулей

Система содержит следующие модули:

  1. модуль рубрики, который содержит список тем объявлений;
  2. модуль последних объявлений, который содержит всю информацию о последних опубликованных объявлениях;
  3. модуль подачи объявления, который генерирует форму для подачи объявления;
  4. модуль личных объявлений пользователя, который содержит информацию о размещенных пользователем объявлений;
  5. модуль записной книжки, который содержит информацию о рубриках, на которые подписан пользователь;
  6. модуль личных данных, который содержит всю информацию о личных данных зарегистрированного пользователя;
  7. модуль авторизации, который  содержит информацию для авторизации;
  8. модуль пользовательского интерфейса, который отвечает за внешний вид сайта.

На рисунке 2.4 показана главная диаграмма модулей в логическом представлении модели.


Рисунок 2.4 – Диаграмма взаимодействия модулей

Спецификация модулей на языке OCL

Для спецификаций операций модулей используется формальный объектный язык ограничений OCL. На рисунке 2.5 представлена спецификация модуля авторизации в соответствии с правилами и требованиями языка OCL.

Context Authorization (input: String, pas: Integer, password: Integer, login: string, iter: Boolean)inv:

self.password > 6 and self.password <20

self.login > 3 and self.login <20

self.input ->size()> 1 and

(self.iter = true or self.iter = false)

context Authorization ()::Initializelogin()

pre:self.input <> null

post: self.pas = self.input

context Authorization::PasswordNet()

pre:self.activation <> null

post: return = self.net

context Authorization:: Activation()

pre: self.net <> null

post: return = self.activation

Рисунок 2.5 – Спецификация модуля авторизации

 Тестовые наборы 

Тестирование модулей охватывает виды деятельности, ассоциированные с проверкой реализации модуля на точное соответствие  спецификации этого модуля.

Тестовые наборы для отладки модуля авторизации представлены в таблице 2.2. Тестовые наборы для отладки системы представлены в таблице 2.3


Таблица 2.2 – Тестовые наборы для отладки модуля авторизации

Описание

Ввод

Вывод

Состояние

Событие

Состояние

Исключительные ситуации

1

2

3

4

5

test default constructor

нет

OUT = APPEND BLANK

OUT. login = 0,

OUT.password =0

OUT.login_ber = 0,

OUT. loginst = 0,

нет

Запись допустимого логина

(login> 3) and (login<= 20)

нет

REPLACE obsl_ber. login WITH “USERKIN”

OUT. login =“USERKIN”

нет

Запись недопустимого логина:

login < 3

REPLACE obsl_ber. login  WITH “VА

OUT. login =“VА

«Недопустимый логин»

Запись недопустимого логина:

login >20

REPLACE obsl_ber. login WITH “ВАМРGGGGDSFDDSFDFDGDGGG”

OUT. login = “ВАМРGGGGDSFDDSFDFDGDGGG”

«Недопустимый логин»

Запись допустимого пароля:

(password > 6) and (password < 20)

нет

REPLACE obsl_ber. password WITH 123456

OUT. login = 123456

нет

        Запись допустимого пароля

password < 6

REPLACE obsl_ber.password WITH 12

OUT. password = 12

«Недопустимый пароль»

Запись недопустимой даты анализа

password >20

REPLACE obsl_ber.password WITH 123456789012345678901

OUT. password = 123456789012345678901

«Недопустимый пароль»

Запись Логина

нет

REPLACE obsl_ber.login WITH “ВАМР

OUT.login = “ВАМР

нет

Запись уже существующего логина

(login_ber= loginst)

REPLACE obsl_ber.login WITH  “DARK”

OUT. login_ber = loginst

“DARK” = “DARK”

«Логин уже существует»

Таблица 2.3 – Тестовые наборы для отладки системы

Описание

Ввод

Вывод

Состояние

Событие

Состояние

Системные сообщения

1

2

3

4

5

Запуск приложения

Приложение не запущено

Запуск приложения

Приложение запущено

нет

Повторный запуск приложения

Приложение запущено

Повторный запуск приложения

Приложение запущено

нет

Авторизация

Запущено приложение. Активизировано меню «Войти».

Пользователь вводит верный логин и пароль

Система сравнивает введенные логин и пароль с уже имеющимися на сайте

нет

Авторизация

Запущено приложение. Активизировано меню «Войти».

Пользователь вводит неверный логин и пароль

Система сравнивает введенные логин и пароль с уже имеющимися на сайте

«Пользователь с таким электронным адресом не найден»

Подача объявления

Запущено приложение.

Пользователь авторизован. Активизировано меню «Подать объявление».

Пользователь, нажимает левой кнопкой мыши на кнопку «опубликовать»

Система проверяет, заполнены ли все поля формы

«Корректно выберите рубрику», «Напишите текст объявления»

Окончание таблицы 2.3

1

2

3

4

5

Подача объявления

Запущено приложение.

Пользователь авторизован. Активизировано меню «Подать объявление».

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

Система выдает список рубрик

Нет

Подача объявления

Запущено приложение.

Пользователь авторизован. Активизировано меню «Подать объявление».

Пользователь заполнил все поля формы подачи объявления и нажимает левой кнопкой мыши на кнопку «опубликовать»

Система проверяет, заполнены ли все поля формы и генерирует запрос на сохранение объявления и размещения его в соответствующей рубрике

«Ваше объявление успешно размещено»

Просмотр последних объявлений

Запущено приложение.

Пользователь авторизован. Активизировано меню «Последние объявления».

Пользователь нажимает левой кнопкой мыши на пункт меню «Последние объявления»

Система генерирует список последних опубликованных объявлений в компактном виде

нет

Просмотр последних объявлений

Запущено приложение.

Пользователь авторизован. Активизировано меню «Последние объявления».

Выбрано объявление.

Пользователь нажимает левой кнопкой мыши на чье-либо объявление из списка последних объявлений

Система отображает всю информацию об объявлении в расширенной форме

нет


  1.  Рабочий проект

Классы и объекты интерфейса пользователя

 Концептуальный класс «Категория Рубрики»

Концептуальный класс «Категория Рубрики» реализован в виде программного кода HTML, описание которого содержится в приложении А.

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

Таблица 3.1 – Структура ссылок категории «Рубрики»

Название ссылки

Назначение

Продаю

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Продаю»

Куплю

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Куплю»

Сдаю

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Сдаю»

Сниму

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Сниму»

Меняю

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Меняю»

За рубежом

Ссылка предназначена для ознакомления пользователя с объявлениями категории «За рубежом»

Ремонт

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Ремонт»

Аренда

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Аренда»

Автоперевозки

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Автоперевозки»

Требуются

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Требуется»

Продолжение таблицы 3.1

Ищу

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Ищу»

Сотрудничество

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Сотрудничество»

Опека

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Опека»

Обучение

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Обучение»

Знакомства

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Знакомства»

Спорт, отдых

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Спорт, отдых»

Подразделения

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Подразделения»

Потери

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Потери»

Находки

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Находки»

Предлагаю

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Предлагаю»

Воспользуюсь

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Воспользуюсь»

Другое

Ссылка предназначена для ознакомления пользователя с объявлениями категории «Другое»

Последние объявления

Ссылка предназначена для ознакомления пользователя с последними опубликованными объявлениями

Подать объявление

Ссылка предназначена для подачи пользовательского объявления

На рисунке 3.1 представлен внешний вид категории «Рубрики».

Рисунок 3.1 – Внешний вид категории «Рубрики»

3.1.2  Концептуальный класс «Последние объявления»

Концептуальный класс «Последние объявления» реализован в виде программного кода HTML, описание которого содержится в приложении А.

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

На рисунке 3.2 представлен внешний вид категории «Последние объявления».

Рисунок 3.2 - Внешний вид категории «Последние объявления»

3.1.3  Концептуальный класс «Подать объявление»

Концептуальный класс «Подать объявление» реализован в виде программного кода HTML, описание которого содержится в приложении А.

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

Таблица 3.3 – Структура ссылок категории «Подать объявление»

Название элемента

Назначение

Рубрика

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

Текст

Поле для ввода текста объявления

Фото

Поле для прикрепления фотографии

Опубликовать на «__» дней

Выпадающий список количества дней, на которые будет опубликовано объявление. По умолчанию выбрано на 7 дней.

Опубликовать

Кнопка, завершающая формирования объявления

На рисунке 3.3 представлен внешний вид категории «Подать объявление».

Рисунок 3.3 – Внешний вид категории «Подать объявление»

3.1.4  Концептуальный класс «Авторизация»

Концептуальный класс «Авторизация» реализован в виде программного кода HTML, описание которого содержится в приложении А.

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

Таблица 3.4 – Структура полей для заполнения и ссылок класса «Авторизация»

Название

Назначение

Электронный адрес

Поле предназначено для ввода логина

Пароль

Поле предназначено для ввода пароля

Забыли пароль?

Ссылка предназначена для восстановления пароля

Зарегистрироваться

Ссылка предназначена для регистрации нового пользователя

На рисунке 3.4 представлен внешний вид класса «Авторизация».

Рисунок 3.4 – Внешний вид класса «Авторизация»

  1.  Концептуальный класс «Мои объявления»

Концептуальный класс «Мои объявления» реализован в виде программного кода HTML, описание которого содержится в приложении А.

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

На рисунке 3.5 представлен внешний вид категории «Мои объявления».

Рисунок 3.5 – Внешний вид класса «Мои объявления»

 Концептуальный класс «Записная книжка»

Концептуальный класс «Записная книжка» реализован в виде программного кода HTML, описание которого содержится в приложении А.

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

На рисунке 3.6 представлен внешний вид категории «Записная книжка».

Рисунок 3.6 – Внешний вид класса «Записная книжка»

 Концептуальный класс «Личные данные»

Концептуальный класс «Личные данные» реализован в виде программного кода HTML, описание которого содержится в приложении А.

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

Таблица 3.5 – Структура ссылок категории «Личные данные»

Название элемента

Назначение

Пароль

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

Имя

Поле для ввода, в котором пользователь может ввести своё имя в том виде, в котором он желает его видеть отображаемым в системе

Область/край

Поле для ввода области или края, в котором живет пользователь

Город

Поле для ввода названия города, в котором живет пользователь

Телефон

Поле для ввода номера контактного телефона пользователя

Продолжение таблицы 3.5

Факс

Поле для ввода факса пользователя

ICQ

Поле для ввода номера icq пользователя

Web-адрес

Поле для ввода Web-адреса пользователя

Доп. Инф.

Поле для ввода дополнительной информации пользователя

Изменить личную информацию

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

На рисунке 3.7 представлен внешний вид категории «Подать объявление».

Рисунок 3.7 – Внешний вид класса «Личные данные»

Тестовые наборы для отладки интерфейса пользователя

Для отладки интерфейса разработаны следующие тестовые наборы:

  1.  Случай использования: Регистрация нового пользователя.

Предусловие: Пользователь нажал на ссылку «Зарегистрируйтесь» в меню системы.

Тестовый случай: Пользователь вводит данные для регистрации и нажимает кнопку «Зарегистрироваться».

Ожидаемый результат: Система создает нового пользователя. Данный тестовый случай отображен на рисунке  3.8.

Рисунок 3.8 – Регистрация нового пользователя

  1.  Случай использования: Восстановление пароля.

Предусловие: Пользователь нажал на ссылку «Забыли пароль?» в меню авторизации.

Тестовый случай: Пользователь вводит данные для восстановления пароля.

Ожидаемый результат: Система высылает код проверки на указанный e-mail адрес. Данный тестовый случай отображен на рисунке 3.9.

Рисунок 3.9 – Восстановление пароля

  1. Случай использования: Авторизация пользователя.

Предусловие: Заполнены поля авторизации.

Тестовый случай: Пользователь нажимает на кнопку «Войти».

Ожидаемый результат: Система проверяет учетную запись пользователя. Данный тестовый случай отображен на рисунке  3.10.

Рисунок 3.7 – Авторизация пользователя

  1. Случай использования: Подача объявления.

Предусловие: Пользователь авторизован и нажал на ссылку «Подать объявление».

Тестовый результат: Пользователь заполнил необходимые поля и нажал на кнопку «Опубликовать».

Ожидаемый результат: Система проверяет заполнены ли все необходимые поля и формирует объявление. Выдает системное сообщение «Ваше объявление успешно размещено». Данный тестовый случай отображен на рисунке 3.11.

Рисунок 3.11 – Подача объявления

  1. Случай использования: Добавление рубрики в записную книжку.

Предусловие: Пользователь опубликовал объявление и нажал на ссылку «Добавить рубрику в записную книжку».

Тестовый результат: Пользователь добавляет интересующую его рубрику в личную записную книжку.

Ожидаемый результат: Системное сообщение «Ваше объявление успешно размещено» и ссылка «Добавить рубрику в записную книжку» изменяются на «Вы подписаны на данную рубрику». Данный тестовый случай отображен на рисунке 3.12.

Рисунок 3.11 – Подписка на рубику

Программная реализация модулей

На основе диаграмм модулей, разработанных ранее, были созданы базовые определения модулей на стандартном языке разметки документов HTML и скриптовом языке программирования PHP. Пример описания фрагмента модуля myboard.php представлен на рисунке 3.13.

Рисунок 3.13 – Описание фрагмента модуля myboard.php

Описание всех модулей представлено в приложении А данной работы.

Диаграмма активностей

Для реализации модуля регистрации и авторизации была создана диаграмма активностей. Диаграмма активностей приведена на рисунке 3.14.

Рисунок 3.14 – Диаграмма активностей


Заключение

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

Взаимодействие приложения с пользователем было выполнено в виде простого и интуитивно-понятного WEB-интерфейса.

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

Для защиты работы был подготовлен графический материал для сопровождения доклада, который приведен в приложении Б.


Список использованных источников

1   Дейтел, Х. Как программировать для Internet и WWW [Текст]: пер. с англ. / Х. Дейтел; М.: ЗАО «Издательство БИНОМ», 2010. 1184 с.

  1. Ларман, К. Применение UML и шаблонов проектирования [Текст]: пер. с англ. / К. Ларман; М.: Издательский дом «Вильямс», 2004. 624 с.
  2. Макгрегор, Д. Тестирование объектно-ориентированного программного обеспечения [Текст]: практическое пособие: пер. с англ. / Д. Макгрегор, Д. Сайкс; К.: ООО «ТИД «ДС», 2002. 432 с.
  3. Кватрани, Т. Rational Rose 2000 и UML. Визуальное моделирование [Текст]: пер. с англ. / Т. Кватрани; М.: ДМК Пресс, 2001. 176 с.
  4. СанПиН 2.2.2/2.4.1340—03.
  5. Л. Ульман. Основы программирования на РНР. Издательство: ДМК-Пресс, 2001. 288 с.
  6. Котеров Д.В.. Самоучитель PHP 4 Издательство: "БХВ-Петербург", 2000 г. 576 с.


Приложение А

Текст программы

st_wood1.css

@charset "windows-1251";

body {

margin:0;

font-family: Arial, Helvetica, sans-serif;

font-size:14px;

color:#000000;

background-image:url(pic/wood_them1/wood-background.png);

background-size: 100%;

}

.toppic1{

position: absolute;

background: url(pic/toppic_left.png);

background-size: 32px 32px;

width: 32px;

height:32px;

margin-left: 12%;

}

.toppic2{

position: absolute;

background: url(pic/toppic_right.png);

background-size: 32px 32px;

width: 32px;

height:32px;

margin-left: 86%;

}

.verh{

background: url(pic/wood_them1/fon_verh.png);

background-size: 100% 100px ;

}

.footer{

background: url(pic/wood_them1/footer.png);

margin-top: 10px;

background-size: 100%;

}

.menu{

background: url(pic/wood_them1/menu.png) no-repeat;

background-size: 920px 47px;

height: 47px; border:0; padding:0;  

border-collapse:collapse;

margin-top:1px;

}

//---------------------------Тема 2-----------------------------

h1 {

color:#ff9900;

font-size:16px;

margin-bottom:10px;

margin-top:10px;

text-align:center;

}

h2 {

font-size:12px;

color:#000000;

padding:7px 10px 7px 10px;

background-color:#b6f7d5;    //cccccc;

}

h4 {

color:#ff9900;

font-size:16px;

margin-bottom:0px;

margin-top:0px;

}

ul {

margin:0px;

}

li {

margin:0px;

}

form {

margin:0px;

padding:0px;

}

a {

text-decoration:none;

color: #ff6600;     //0ac305;

}

a:hover {

text-decoration:underline;

}

td {

font-size:14px;

}

input {

border:1px solid #99eef1;   //f199bf;

color:#333333;

background-color:#f3fefe;   //fef3f7;

margin:0;

padding:0;

padding:2px;

}

textarea {

border:1px solid #99dbf1;  //f199bf;

color:#555555;

background-color:#f3fefe;   //fef3f7;

padding:2px;

}

img {

border:0;

}

.bginp1 {

BACKGROUND-COLOR: #ffffff;

}

.bginp2 {

BACKGROUND-COLOR: #dbf1fd;  //fef3f7;

}

.kr {

font-size:16px;

color: #ffff99;

}

.kr2 {

font-size:11px;

color: #0021ec;  //ec008c;

}

.ch {

color: #000000;

}

.ser {

color: #333333;

}

.sersm {

color: #333333;

font-size:11px;

}

.alert {

color:#0021ec;  //ec008c;

font-size:12px;

width:844px;

text-align:left;

border-bottom:1px solid #99f1ec; //f199bf;

border-top:1px solid #99f1ec  //f199bf;

padding:10px 0 10px 40px;

background-color: #f3f6fe;  //fef3f7;

background-image:url(pic/allert.png);

background-repeat:no-repeat;

margin:20px 0 0 0;

}

.ok {

color:#333333;

font-size:12px;

width:844px;

text-align:left;

border-bottom:1px solid #333333;

border-top:1px solid #333333;

padding:10px 0 10px 40px;

background-color: #f2f2f2;

background-image:url(pic/ok.png);

background-repeat:no-repeat;

margin:20px 0 0 0;

}

.sm {

font-size:10px;

color:#333333;

}

.sm2 {

font-size:12px;

color:#000000;

font-family: fantasy;

}

.sm3 {

font-size:2px;

color:#666666;

}

.sm4 {

font-size:12px;

color:#666666;

margin:0 0 0 0;

}

.zag {

color:#ec008c;

font-size:16px;

padding-bottom:8px;

margin-top:15px;

border-bottom:1px solid #666666;

}

.zag2 {

color:#0021ec;  //ec008c;

font-size:20px;

padding-bottom:8px;

margin-top:0px;

}

.zag3 {

color:#555555;

font-size:14px;

padding-bottom:5px;

border-bottom:1px solid #555555;

}

.data {

color:#666666;

font-size:12px;

margin-bottom:10px;

margin-top:10px;

}

.data2 {

color:#777777;

font-size:12px;

}

.datasm {

background-color:#f2f2f2;

color:#999999;

font-size:10px;

padding:3px;

margin-bottom:3px;

margin-top:12px;

width:140px;

}

.data3 {

background-color:#f2f2f2;

color:#333333;

font-size:12px;

padding:5px;

margin-bottom:8px;

margin-top:2px;

}

.tema {

color:#000000;

font-size:14px;

}

 

.nav2 {

font-size:13px;

color:#111111;

padding:7px 15px 7px 15px;

background-color:#cccccc;

border:1px solid:#ececec;

font-weight:bold;

}

a.nav2 {

background-color:#f5f5f5;

font-weight:normal;

}

a.nav2:hover {

background-color:#ececec;

text-decoration:none;

}

.nav {

font-size:18px;

font-family: Georgia, Arial;

color:#ff3300;

padding:10px 20px 10px 20px;

border:1px solid:#000000;

margin-top:10px;

//font-weight:bold;

}

a.nav {

font-weight: bolder;

text-decoration: none;

font-weight:normal;

//font-weight:bolder;

}

a.nav:hover {

height: 58px;

text-decoration:underline;

font-weight:bolder;

}

.navbar

{

color:#FFF;

margin-top:35px;

}

.zag5 {

font-size:12px;

color:#222222;

padding:7px 10px 7px 10px;

background-color:#f2f2f2;

border:1px solid:#ececec;

}

/* форма логина */

#login {

width:320px;

height:500px;

}

#login div.close {

top:0;

right:0;

}

/* общее для модальных окон */

div.overlay {

 background-image:url(pic/okno.png);

width:350px;

height:220px;  

display:none;

}

div.overlay div.close {

background-image:url(pic/close.png);

position:absolute;

right:5px;

top:5px;

cursor:pointer;

height:35px;

width:35px;

}

.baza {

width:800px;

background-color:#FFFFFF;

border:1px solid #0021ec;  //ec008c;

margin-top:30px;

padding:20px;

}

.ob {

border-bottom:1px solid #777777;

padding:12px;

font-size:12px;

}

.ob:hover  {

background-color: #e6e6e6;

}

.tbl {

font-size:12px;

}

.tbl tr:hover {

background-color: #e6e6e6;

}

.hid {

display:none;

}

Verh.php

<table class="verh" width="100%" border="0" align="center" cellpadding="0" cellspacing="0" >

 <tr>

   <td align="center">

<table width="950" border="0" align="center" cellpadding="0" cellspacing="0">

 <tr>

   <td width="200" height="100"><a href="http://bullet-board.ru/myboard.php">

   <img title="MyBoard v1.0" src="pic/logo.png" width="230" height="90" border="0"></a></td>

   <td style='padding: 0 10px 0 10px;'>&nbsp;</td>

   <td style='font-size: 12pt; font-style: italic;' align="left"><br/>Размещайте<span class="kr"> свои объявления</span> на Bullet board <span class="kr"> абсолютно бесплатно!</span></td>

   <td width="65" align="left">

   <a href="index.php"><img border="0" src="pic/home.png" width="35" height="22" alt="начало" /></a></td>

 </tr>

</table>

</td>

 </tr>

</table>

Niz.php

<table class="footer" width="100%" border="0" align="center" cellpadding="0" cellspacing="0" >

 <tr>

   <td align="center"><table width="850" height="60" border="0" align="center" cellpadding="0" cellspacing="0">

     <tr>

       <td align="left" width="350"><div class="sm">Доска объявлений <span class="kr">Bullet-Board</span> версия 1.0<br />

         Работает на PHP + MySQL </div></td>

       <td width="210" align="center">

       <div class="sm2">

        Дипломный проект

        <br/>студента группы ПО-91

        <br/>Милешко В. В.

        <br/>Курск 2013

         </div></td>

       <td width="33">&nbsp;</td>

       <td align="right"><!--counter-->

        <!-- <a href="http://www.easycounter.com/">

 <img src="http://www.easycounter.com/counter.php?cha1000000" border="0" alt="счетчик посещений"></a>-->

 <script type="text/javascript"><!--

 my_id = 129448;

 my_width = 88;

 my_height = 41;

 my_alt = "MyCounter - счётчик и статистика";

//--></script>

 <script type="text/javascript"

 src="http://scripts.mycounter.ua/counter2.0.js">

 </script><noscript>

 <a target="_blank" href="http://mycounter.ua/">

 <img src="http://get.mycounter.ua/counter.php?id=129448" title="MyCounter - счётчик и статистика" alt="MyCounter - счётчик и статистика"

width="88" height="41" border="0" /></a></noscript>

         <!--//counter-->

         </td>

       <td width="33" align="right"></td>

     </tr>

   </table></td>

 </tr>

</table>

Index.php

<?

header('Location: myboard.php');

exit;

?>

Myboard.php

<? session_start();

include ("db.php");

if (isset($_POST['act'])) { $act = $_POST['act']; $act = trim($act); $act = stripslashes($act); $act = htmlspecialchars($act); }

if (isset($_POST['ok'])) { $ok = $_POST['ok']; $ok = trim($ok); $ok = stripslashes($ok); $ok = htmlspecialchars($ok); }

if (isset($_POST['cat_id'])) { $cat_id = $_POST['cat_id']; $cat_id = trim($cat_id); $cat_id = stripslashes($cat_id); $cat_id = htmlspecialchars($cat_id); }

if (isset($_POST['ob_id'])) { $ob_id = $_POST['ob_id']; $ob_id = trim($ob_id); $ob_id = stripslashes($ob_id); $ob_id = htmlspecialchars($ob_id); }

if (isset($_POST['acton'])) { $acton = $_POST['acton']; $acton = trim($acton); $acton = stripslashes($acton); $acton = htmlspecialchars($acton); }

if (isset($_POST['ob_text'])) { $ob_text = $_POST['ob_text']; $ob_text = trim($ob_text); $ob_text = stripslashes($ob_text); $ob_text = htmlspecialchars($ob_text); }

if (isset($_POST['ob_do'])) { $ob_do = $_POST['ob_do']; $ob_do = trim($ob_do); $ob_do = stripslashes($ob_do); $ob_do = htmlspecialchars($ob_do); }

if (isset($_GET['acton'])) { $acton = $_GET['acton']; $acton = trim($acton); $acton = stripslashes($acton); $acton = htmlspecialchars($acton); }

if (isset($_GET['act'])) { $act = $_GET['act']; $act = trim($act); $act = stripslashes($act); $act = htmlspecialchars($act); }

if (isset($_GET['cat_id'])) { $cat_id = $_GET['cat_id']; $cat_id = trim($cat_id); $cat_id = stripslashes($cat_id); $cat_id = htmlspecialchars($cat_id); }

if (isset($_GET['ob_id'])) { $ob_id = $_GET['ob_id']; $ob_id = trim($ob_id); $ob_id = stripslashes($ob_id); $ob_id = htmlspecialchars($ob_id); }

if (isset($_GET['kol'])) { $kol = $_GET['kol']; $kol = trim($kol); $kol = stripslashes($kol); $kol = htmlspecialchars($kol); }

function russian_date() {

$translation = array("am" => "дп", "pm" => "пп", "AM" => "ДП", "PM" => "ПП", "Monday" => "Понедельник", "Mon" => "Пн", "Tuesday" => "Вторник", "Tue" => "Вт", "Wednesday" => "Среда", "Wed" => "Ср", "Thursday" => "Четверг", "Thu" => "Чт", "Friday" => "Пятница", "Fri" => "Пт", "Saturday" => "Суббота", "Sat" => "Сб", "Sunday" => "Воскресенье", "Sun" => "Вс", "January" => "Января", "Jan" => "Янв", "February" => "Февраля", "Feb" => "Фев", "March" => "Марта", "Mar" => "Мар", "April" => "Апреля", "Apr" => "Апр", "May" => "Мая", "May" => "Мая", "June" => "Июня", "Jun" => "Июн", "July" => "Июля", "Jul" => "Июл", "August" => "Августа", "Aug" => "Авг", "September" => "Сентября", "Sep" => "Сен", "October" => "Октября", "Oct" => "Окт", "November" => "Ноября", "Nov" => "Ноя", "December" => "Декабря", "Dec" => "Дек", "st" => "ое", "nd" => "ое", "rd" => "е", "th" => "ое",);

  if (func_num_args() > 1) {

     $timestamp = func_get_arg(1);

     return strtr(date(func_get_arg(0), $timestamp), $translation);

  } else {

     return strtr(date(func_get_arg(0)), $translation);

  };

}

//настройки

$vrem = time();

//выход

if (isset($_GET['logout']))

{

if (isset($_SESSION['ses_user'])) { unset($_SESSION['ses_user']); }

if (isset($_SESSION['pass'])) { unset($_SESSION['pass']); }

setcookie('user_id', '', 0, "/");

setcookie('user_pass', '', 0, "/");

header('Location: myboard.php');

exit;

}

//вход, если запомнили

if (isset($_COOKIE['user_id']) && isset($_COOKIE['user_pass']))

{

 $_SESSION['ses_user'] = $_COOKIE['user_id'];

 $_SESSION['pass'] = $_COOKIE['user_pass'];

}

//проверка

if (isset($_SESSION['ses_user']) && isset($_SESSION['pass']))

{

$ses_user = (isset($_SESSION['ses_user'])) ? mysql_real_escape_string($_SESSION['ses_user']) : '';

$pass = (isset($_SESSION['pass'])) ? mysql_real_escape_string($_SESSION['pass']) : '';

$mybase = mysql_query("SELECT `user_id`,`user_login`,`user_pass`,`user_prava`,`user_email`

FROM `myboard_users` WHERE `user_pass`='{$pass}' AND `user_id`='{$ses_user}' LIMIT 1",$db) or die(mysql_error());

 if (mysql_num_rows($mybase) == 1)

 {

  $myrow = mysql_fetch_array($mybase);

  $prava = $myrow['user_prava'];

  $name =  $myrow['user_login'];

  $user_email = $myrow['user_email'];

 }

 else { echo '<link href="st.css" rel="stylesheet" type="text/css"><center><br /><div class="alert">Попытка взлома. Работа скрипта остановлена</div><br /></center>'; exit(); }

}

//добавление фото

  if (isset ($_FILES['file']['name']) && !empty($_FILES['file']['name']))

  {

   //изменение картинки

   function file_sm2($bil, $stal, $width, $height, $quality=100)

    {

      if (!file_exists($bil)) return false;

      $size = getimagesize($bil);

      if ($size === false) return false;

      $icfunc = imagecreatefromstring(file_get_contents($bil));

      $x_ratio = $width / $size[0];

      $y_ratio = $height / $size[1];

      $ratio       = min($x_ratio, $y_ratio);

      $use_x_ratio = ($x_ratio == $ratio);

      $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);

      $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);

      $isrc = $icfunc;

      $idest = imagecreatetruecolor($new_width, $new_height);

      imagecopyresampled($idest, $isrc, 0, 0, 0, 0,

      $new_width, $new_height, $size[0], $size[1]);

      imagejpeg($idest, $stal, $quality);

      imagedestroy($isrc);

      imagedestroy($idest);

      return true;

    }

      //добавление изображений

      $filedir = "foto";

      $filename = $_FILES['file']['name'];

      $filesize = $_FILES['file']['size'];

      $dopus=array("gif","jpg","jpeg","png");

      $rash = strtolower(substr($filename, 1 + strrpos($filename, ".")));

      $filename = $vrem.".".$rash;

      

      if (!in_array($rash, $dopus))

      {

       $oshibka .= "<center><div class='alert'>

       Разрешены изображения с расширениями: gif, jpg, jpeg, png</div></center>"; $osh=1; }

       $tochka = substr_count($filename, ".");

       if ($tochka > 1)

       { $oshibka .= "<center><div class='alert'>Запрещенный файл! Более одной точки</div></center>\r\n";

       }

       if (!preg_match("/^[a-z0-9\.\-_]+\.(jpg|gif|png|)+$/is",$filename))

       { $oshibka .= "<center><div class=alert>

       Название изображения содержит запрещенные символы</div><br /></center>";

       }

       $filekb = round($filesize/10.24)/100;

       $filexy=getimagesize($_FILES['file']['tmp_name']);

       $gor = $filexy[0];

       $ver = $filexy[1];

       if ($filesize > "0" && !isset($oshibka))

       {

       copy ($_FILES['file']['tmp_name'], $filedir."/".$filename);

          if ($gor > 700 or $ver > 600)

          {

          file_sm2("$filedir/$filename", "$filedir/$filename", 700, 600);

          }

          if ($gor > 140)

          {

           if (file_sm2("$filedir/$filename", "$filedir/sm_$filename", 140, 200))

           { echo ''; }

           else  

           { $oshibka .= '<div class=alert>Ошибка маштабирования</div>'; }

          }

          else { copy ($filedir."/".$filename, $filedir."/sm_".$filename); }

          $ob_foto = "da";

       }

       else { $oshibka .= "<center><div class=alert>Изображение не загружено!</div></center>";

       }

  }

//завершение добавления фото ^^

//подача объявления

if (isset($_SESSION['ses_user']) && isset($_SESSION['pass']) && $act=="pod" && $acton == "pod")

{

 $mybasecatv = mysql_query("SELECT `cat_name` FROM `myboard_cat` WHERE `cat_papa`='{$cat_id}'",$db) or die(mysql_error());

  if (mysql_num_rows($mybasecatv) > 0)

  {

  $oshibka = "<center><div class='alert'>Корректно выберите рубрику</div></center>";

  }

  if (empty($ob_text)) {$oshibka .= "<center><div class=alert>Напишите текст объявления</div></center>"; }

  if (!isset($oshibka))

  {

   $user_id =$_SESSION['ses_user'];

   if ($ob_foto =="da") { $ob_foto = $filename; } else { $ob_foto = 0; }

   $vremdo = $vrem + $ob_do * 3600 * 24;

   $mydobob = mysql_query ("INSERT INTO `myboard_ob`

        (`ob_cat`,`ob_user`,`ob_text`,`ob_foto`,`ob_ot`,`ob_do`)

    VALUES ('{$cat_id}','{$user_id}','{$ob_text}','{$ob_foto}','{$vrem}','{$vremdo}')",$db);

   

   //отсылаем подписчикам

    $mybasezap = mysql_query("SELECT `podpis_email` FROM `myboard_podpiska` WHERE `podpis_cat`='{$cat_id}'",$db)

    or die(mysql_error());

   if (mysql_num_rows($mybasezap) > 0)

   {

   $myrowzap = mysql_fetch_array($mybasezap);

   $vremdob = russian_date("j F, Y года, в G:i",$vrem);

   $mybaseobid = mysql_query("SELECT `ob_id` FROM `myboard_ob`

         WHERE `ob_ot`='{$vrem}' AND `ob_user`='{$user_id}' LIMIT 1",$db) or die(mysql_error());

   $myrowobid = mysql_fetch_array($mybaseobid);

   $mybasecatn = mysql_query("SELECT `cat_name` FROM `myboard_cat`

         WHERE `cat_id`='{$cat_id}' LIMIT 1",$db) or die(mysql_error());

   $myrowcatn = mysql_fetch_array($mybasecatn);

    do {

      $headers=null;

      $headers.="Content-Type: text/html; charset=windows-1251\r\n";

      $headers.="From: MyScript.ru@mail.v2\r\n";

      $headers.="X-Mailer: Mail\r\n";

      $msg="<html><head><meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>

      <style>BODY {FONT-FAMILY: arial,helvetica; FONT-SIZE: 12px; COLOR: #333}

      TD {FONT-SIZE: 12px; COLOR: #333} .sm {FONT-SIZE: 9px;}</style>

      </head>

      <body>

      Здравствуйте, Вы подписаны на рубрику: <strong>".$myrowcatn['cat_name']."</strong><br /> На доске объявлений:

      <a title='перейти в доску объявлений' href='http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."'>

      ".$nazv_dos."</a><br /><br /><br />

      ".$vremdob." <br />В рубрику <strong>«".$myrowcatn['cat_name']."»</strong> было добавлено объявление

      <br />

      <a href='http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."?act=ob&cat_id=".$cat_id."&ob_id=".$myrowobid['ob_id']."'>ПОСМОТРЕТЬ</a><br />

      <br /><br /><br />

      <span class='sm'>Это письмо было сгенерировано автоматически, отвечать на него не надо</span><br /><br /><hr /> </body></html>";

      mail($myrowzap['podpis_email'], "Новое объявление в рубрику «".$myrowcatn['cat_name']."» на доске объявлений — ".$nazv_dos, $msg, $headers);

     }

    while ($myrowzap = mysql_fetch_array($mybasezap));

   }

   $ok = "<center><div class='ok'>Ваше объявление успешно размещено</div></center>";

   $act="cat";

  }

}

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

if (!empty($_POST) && $act=="reg")

{

 function usersol($n=3)

 {

  $key = '';

  $pattern = '1234567890abcdefghijklmnopqrstuvwxyz.,*_-=+';

  $counter = strlen($pattern)-1;

  for($i=0; $i<$n; $i++)

  {

   $key .= $pattern{rand(0,$counter)};

  }

  return $key;

 }

$user_login = (isset($_POST['user_login'])) ? mysql_real_escape_string($_POST['user_login']) : '';

$user_pass = (isset($_POST['user_pass'])) ? mysql_real_escape_string($_POST['user_pass']) : '';

$user_pass2 = (isset($_POST['user_pass2'])) ? mysql_real_escape_string($_POST['user_pass2']) : '';

$user_email = (isset($_POST['user_email'])) ? mysql_real_escape_string($_POST['user_email']) : '';

 

//проверка ввода имени

if (empty($user_login)) { $oshibka .= '<center><div class=alert>Обязательно введите Имя</div></center>'; }

 

//проверка ввода е-майла

 if (empty ($user_email)) { $oshibka .= "<center><div class=alert>Поле Электронная почта должно быть заполнено</div></center>"; }

 else {  

 if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $user_email)) {  }

 else { $oshibka .= "<center><div class=alert>Правильно напишите Электронный адрес</div></center>"; }

 }

//проверка ввода пароля

if (empty($user_pass)) { $oshibka .= '<center><div class=alert>Обязательно введите пароль.</div></center>'; }

else {

 if (empty($user_pass2)) {$oshibka .= '<center><div class=alert>Обязательно введите подтверждение пароля.</div></center>';}

 else {

  if ($user_pass != $user_pass2)

  { $oshibka .= '<center><div class=alert>Пароль и подтверждение пароля не совпадают.</div></center>'; }

  }

 }

 

// проверяем совпадение емаил

$mybase = mysql_query("SELECT `user_login` FROM `myboard_users`

        WHERE `user_email`='{$user_email}' LIMIT 1") or die(mysql_error());

if (mysql_num_rows($mybase)==1)

{

 $myrow = mysql_fetch_array($mybase);

 $oshibka .= "<center><div class=alert>Пользователь <strong>".$myrow['user_login']." </strong>уже зарегистрировал адрес электронной порчты — ".$user_email."</div></center>";

}

//проверка цифр антиспама

 if(count($_POST)>0){

 if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])

 {  }

 else{

  $oshibka .= "<center><div class=alert>Правильно введите цифры защитного кода</div></center>";

 }

}

unset($_SESSION['captcha_keystring']);

// если ошибок нет, то добавляем юзера

if (!$oshibka)

{

 // генерируем пароль

 $user_sol = usersol();

 $code_pass = md5(md5($user_pass) . $user_sol);

 $user_ip = $_SERVER['REMOTE_ADDR'];

 $data = time();

 $mybase = mysql_query("INSERT INTO `myboard_users` SET `user_login`='{$user_login}',`user_pass`='{$code_pass}',

         `user_email`='{$user_email}',`user_regtime`='{$data}',`user_sol`='{$user_sol}',

         `user_ip`='{$user_ip}'",$db) or die(mysql_error());

 

 $mybaselogin = mysql_query("SELECT `user_id` FROM `myboard_users` WHERE `user_email`='{$user_email}'

           AND `user_pass`='{$code_pass}' LIMIT 1",$db) or die(mysql_error());

 $myrowlogin = mysql_fetch_assoc($mybaselogin);

   $time = 400;

   setcookie('user_id', $myrowlogin['user_id'], time()+$time, "/");

   setcookie('user_pass', $code_pass, time()+$time, "/");

 //  перекидываем

  header('Location: myboard.php');

  exit;

}

}

//вход

if (!empty($_POST) && $act=="login")

{

$user_email = (isset($_POST['user_email'])) ? mysql_real_escape_string($_POST['user_email']) : '';

$user_pass = (isset($_POST['user_pass'])) ? mysql_real_escape_string($_POST['user_pass']) : '';

$mybaselogin = mysql_query("SELECT `user_sol` FROM `myboard_users` WHERE `user_email`='{$user_email}' LIMIT 1",$db)

    or die(mysql_error());

if (mysql_num_rows($mybaselogin) == 1)

{

 $myrowlogin = mysql_fetch_assoc($mybaselogin);

 $user_sol = $myrowlogin['user_sol'];

 $user_pass = md5(md5($_POST['user_pass']) . $user_sol);

 $mybaselogin = mysql_query("SELECT `user_id`,`user_login`,`user_pass`,`user_prava` FROM `myboard_users`

        WHERE `user_email`='{$user_email}'

           AND `user_pass`='{$user_pass}' LIMIT 1",$db) or die(mysql_error());

 if (mysql_num_rows($mybaselogin) == 1)

 {

  $myrowlogin = mysql_fetch_assoc($mybaselogin);

  $_SESSION['ses_user'] = $myrowlogin['user_id'];

  $_SESSION['pass'] = $myrowlogin['user_pass'];

  $name =  $myrowlogin['user_login'];

  $prava = $myrowlogin['user_prava'];

  if ($prava==5) {  header('Location: myboardadm.php'); exit;}

  if (isset($_POST['zapomnit']))

  {

   $time = 86400; // кук на 150 суток

   setcookie('user_id', $myrowlogin['user_id'], time()+$time, "/");

   setcookie('user_pass', $user_pass, time()+$time, "/");

  }

 if (isset ($cat_id) && !empty($cat_id)) {$act = "cat";}

 else {unset($act);}

 if (isset ($acton) && !empty($acton)) {$act = "pod";}

 }

 else

 {

  $oshibka = "<center><br /><div class='alert'>Такой логин с паролем не найдены в базе данных.</div><br /></center>";

 }

}

else

{

 $oshibka = "<center><br /><div class='alert'>Пользователь с таким электронным адресом не найден</div><br /></center>";

}

}

//отправить новый пароль

if (isset($act) && $act=="novpass")

{

$user_email = (isset($_POST['user_email'])) ? mysql_real_escape_string($_POST['user_email']) : '';

if (empty ($user_email)) { $oshibka = "<center><div class=alert>Обязательно введите свой адрес электронной почты</div></center>";

$act ="zabpass"; }

else {  

 if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $user_email))

 {

  $mybasenewpass = mysql_query("SELECT `user_login`,`user_email` FROM `myboard_users` WHERE `user_email`='{$user_email}' LIMIT 1",$db)

  or die(mysql_error());

 

  if (mysql_num_rows($mybasenewpass) == 1)

  {

   $myrownewpass = mysql_fetch_assoc($mybasenewpass);

   function usersol($n=3)

   {

    $key = '';

    $pattern = '1234567890abcdefghijklmnopqrstuvwxyz.,*_-=+';

    $counter = strlen($pattern)-1;

    for($i=0; $i<$n; $i++)

    {

     $key .= $pattern{rand(0,$counter)};

    }

    return $key;

   }

   $user_sol = usersol();

   $newpass = usersol(7);

   $code_pass = md5(md5($newpass) . $user_sol);

   

   $mybase = mysql_query("UPDATE `myboard_users` SET `user_pass`='{$code_pass}',`user_sol`='{$user_sol}' WHERE `user_email`='{$user_email}'",$db) or die(mysql_error());

        $headers=null;

        $headers.="Content-Type: text/html; charset=windows-1251\r\n";

        $headers.="From: MyScript.ru@Mail.v2\r\n";

        $headers.="X-Mailer: Mail\r\n";

        $msg="<html><head><meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>

        <style>BODY {FONT-FAMILY: arial,helvetica; FONT-SIZE: 12px; COLOR: #333}

        TD {FONT-SIZE: 12px; COLOR: #333} .sm {FONT-SIZE: 9px;}</style>

        </head>

        <body>

        Здравствуйте, <strong>".$myrownewpass['user_login']."</strong><br />

        Вы сделали запрос на восстановление пароля к доске объявлений —

        <a title='перейти в доску объявлений' href='http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."'>

        ".$nazv_dos."</a><br /><br /><br />

        <i>Ваши регистрационные данные:</i><br /><br />

        e-mail для входа: <strong>".$user_email."</strong><br />

        пароль: <strong>".$newpass."</strong><br />

        <br /><br /><br />

        <span class='sm'>Это письмо было сгенерировано автоматически, отвечать на него не надо</span>

        <br /><br /><hr /></body></html>";

        $email = $myrowadminu['otmail_adminu'];

        mail($user_email, "Восстановление пароля к доске объявлений — ".$nazv_dos, $msg, $headers);

   $ok ="<center><div class='ok'><strong>".$myrownewpass['user_login']."</strong>,

   пароль успешно отправлен по адресу — <strong>".$user_email."</strong></div></center>";

   $act = "login";

  }

  else  { $oshibka .= "<center><div class='alert'>Такого почтового адреса в системе не найдено</div></center>";

  $act ="zabpass"; }

 }

 else {

 $oshibka .= "<center><div class='alert'>Правильно напишите свой электронный адрес</div></center>"; $act ="zabpass"; }

 }

}?>

<html xml:lang="ru" xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title>Доска объявлений <? echo $nazv_dos; if (isset($titl)) { echo " — ".$titl; } ?></title>

<link rel="shortcut icon" href="pic/pod.png">

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

<script src="scripts/jquery.tools.min.js"></script>

<script type="text/javascript" src="scripts/ajax.js"></script>

<script type="text/javascript" src="scripts/chained.js"></script>

<script type="text/javascript" src="scripts/jquery.fancybox-1.2.1.pack.js"></script>

<SCRIPT language="JavaScript" type="text/javascript">

function GoUrl(s)

{       var d = s.options[s.selectedIndex].value

       window.top.location.href = d

       s.selectedIndex=0

}

</script>

<script type="text/javascript">

$(document).ready(function() {

   $("a.gallery").fancybox();

});

</script>

<script language="javascript">

function Display(which) {

 ma=document.getElementById("rubr");

 ph=document.getElementById("podrubr");

 if (which=="rubr") ma.style.display="block";

   else ma.style.display="none";

 if (which=="podrubr") ph.style.display="block";

   else ph.style.display="none";

}

function Display1(which) {

 ma=document.getElementById("mail");

 ph=document.getElementById("phone");

 if (which=="mail") ma.style.display="block";

   else ma.style.display="none";

 if (which=="phone") ph.style.display="block";

   else ph.style.display="none";

}

</script>

<script type="text/javascript">

function showlayer(layer){

var myLayer=document.getElementById(layer);

if(myLayer.style.display=="none" || myLayer.style.display==""){

 myLayer.style.display="block";

} else {

 myLayer.style.display="none";

 }

}

</script>

</head>

      

<body>

<? include ("verh.php"); ?>

<script type="text/javascript">

var linkStyles='<link rel="stylesheet" type="text/css" href="';

function setcookie(a,b,c) {if(c){var d = new Date();d.setDate(d.getDate()+c);}if(a && b) document.cookie = a+'='+b+(c ? '; expires='+d.toUTCString() : '');else return false;}

function getcookie(a) {var b = new RegExp(a+'=([^;]){1,}');var c = b.exec(document.cookie);if(c) c = c[0].split('=');else return false;return c[1] ? c[1] : false;}

function clearSet(L){if(L){setcookie("changeStyle",L,30);$("link[rel='stylesheet']:first").replaceWith(linkStyles+L+'"/>')}}

var Lmem=getcookie("changeStyle");clearSet(Lmem);

</script>

<style>

#desk {background: url(pic/desk.png) no-repeat; background-size: 100% 200px; width: 150px; height: 200px; top:110px; left: 89%; position:absolute; }

#changeStyle img{ width: 120px; height:35px; border:solid 2px transparent;}

.STYLselect {border-color:red;}

</style>

<div id="desk">

<div id="changeStyle" style="z-index:120; margin-left:15px; margin-top: 10px;">

<img src="pic/button1.png" alt="st_blue.css"/>

<br>

<img src="pic/button2.png" alt="st_wood1.css"/>

<br>

<img src="pic/button3.png" alt="wood2.css"/>

<br>

</div>

</div>

<script>$("#changeStyle img[alt='"+Lmem+"']").addClass("STYLselect");$('#changeStyle img[alt]').click(function(){L=$(this).attr("alt");$('#changeStyle img[alt]').removeClass("STYLselect");$(this).addClass("STYLselect");clearSet(L)});</script>

<!-- html_header -->

<div class="toppic1"></div><div class="toppic2"></div>

<table class="menu" align='center' width='920' >

<tr>

   <td style=' padding:10;' valign='middle' align="left" height="37">

<?

if (!isset($act) or $act=="rubr") { echo " <span class='nav'>Рубрики</span>"; }

   else { echo " <a class='nav' href='myboard.php?act=rubr' title='перейти к рубрикам'>Рубрики</a>"; }

   if ($act=="posl") { echo " <span class='nav'>Последние объявления</span>"; }

else { echo " <a class='nav' href='myboard.php?act=posl' title='просмотреть последние объявления'>Последние объявления</a>"; }

if (isset($_SESSION['ses_user']) && isset($_SESSION['pass']))

{ echo " <a class='nav' href='myboard.php?act=pod";

if (isset($cat_id) && !empty($cat_id)) {echo "&cat_id=".$cat_id;}

echo"' title='Подать объявление'>Подать объявление</a>"; }

 else { echo " <a class='nav' href='myboard.php?act=login&acton=pod";

if (isset($cat_id) && !empty($cat_id)) {echo "&cat_id=".$cat_id;}

echo "' title='Войдите в систему для подачи объявления'>Подать объявление</a>"; }

?>     

   </td>

<?

if (isset($_SESSION['ses_user']) && isset($_SESSION['pass']))

{ echo "

 <td style='padding-right:10px;' width='200' align='right' class='zag2'>

 ".$name."</td>

<td width='80'>

<a class='nav' href='myboard.php?logout' title='Выйти'>Выйти</a></td>"; }

else { echo "

<td style='padding-right:10px;' width='200' align='right' class='kr2'><a href='myboard.php?act=login'>Войдите</a> или <a href='myboard.php?act=reg'>зарегистрируйтесь</a>, чтобы подать объявление</td>

<td width='80'>

<a class='nav' href='#' onClick=$('#login').overlay().load(); title='Войти'>Войти</a></td>"; }

?>

</tr>

<?

////////////////////////////////////////////////////

//пользовательское меню

if (isset($_SESSION['ses_user']) && isset($_SESSION['pass']))

{

echo "<tr><td colspan='3' align='right' height='30'>

<a href='myboard.php?act=moiob' class='nav2'>Мои объявления</a>

<a href='myboard.php?act=zapis' class='nav2'>Записная книжка</a>

<a href='myboard.php?act=lich' class='nav2'>Личные данные</a>";

if ($prava==5) { echo " <a href='myboardadm.php' class='nav2'>Администрирование</a>"; }

echo "</td></tr>";

}

?>

</table>

<form action="myboard.php" method="post">

<table style='margin-top:17px;' align='center' width='884' border='0' cellspacing='0' cellpadding='0'>

<tr><td>

<input onblur="inputBG(this,0)"  onfocus="inputBG(this,1)" name="acton" type="text" style="width:810px;" />

<input name="act" type="hidden" value="poisk"/></td><td>

<input style="height:22px; width:60px; padding:0px; margin:0px;" type="submit" value="найти" />

</td></tr>

</table>

</form>

<?

if (isset($oshibka)) { echo $oshibka; }

if (isset($ok)) { echo $ok; }

?>

     <!--общая табл -->

<table style='margin-top:17px; padding-left: 50px;' align='center' width='960' border='0' cellspacing='0' cellpadding='0'>

<?

//путь по открытым рубрикам

//категории

if (isset($cat_id) && !empty($cat_id) && $act != "login")

{

$cat_idput = $cat_id;

echo "<tr><td height='35' valign='top'>";

for ($i = 0; ; $i++)

{

$mybaseput = mysql_query("SELECT `cat_id`,`cat_name`,`cat_papa` FROM `myboard_cat` WHERE `cat_id`='{$cat_idput}'",$db)

or die(mysql_error());

  $myrowput = mysql_fetch_array($mybaseput);

  $catput = "<a class='sm4' href='myboard.php?act=cat&cat_id=".$myrowput['cat_id']."'>

  ".$myrowput['cat_name']."</a> / ".$catput;

  if ($myrowput['cat_papa']==0) { break;}

  $cat_idput = $myrowput['cat_papa'];

}

  echo "<div class='kr'><a title='к рубрикам' href='myboard.php'><img style='margin-right:2px;' src='pic/papka.png'

  width='16' height='15' border='0'></a> ".$catput."</div>";

echo "</td></tr>";

}

</div>

<!-- ^^ форма логина -->

<? echo "<br /><center>"; include ("niz.php"); ?>

</body>

</html>

myboard_db.sql

---

-- Структура таблицы `myboard_cat`

--

CREATE TABLE `myboard_cat` (

 `cat_id` int(4) NOT NULL auto_increment,

 `cat_papa` int(4) default NULL,

 `cat_name` varchar(50) NOT NULL,

 `cat_pic` varchar(50) NOT NULL,

 PRIMARY KEY  (`cat_id`)

) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=1000 ;

--

-- Дамп данных таблицы `myboard_cat`

--

INSERT INTO `myboard_cat` VALUES (100, 0, 'Недвижимость', '100.png');

INSERT INTO `myboard_cat` VALUES (200, 0, 'Строительство, ремонт', '200.png');

INSERT INTO `myboard_cat` VALUES (300, 0, 'Авторынок', '300.png');

INSERT INTO `myboard_cat` VALUES (400, 0, 'Работа и обучение', '400.png');

INSERT INTO `myboard_cat` VALUES (500, 0, 'Предметы быта', '500.png');

INSERT INTO `myboard_cat` VALUES (600, 0, 'Услуги', '600.png');

INSERT INTO `myboard_cat` VALUES (700, 0, 'Досуг', '700.png');

INSERT INTO `myboard_cat` VALUES (800, 0, 'Сообщения', '800.png');

INSERT INTO `myboard_cat` VALUES (101, 11, 'Продаю комнаты', '');

INSERT INTO `myboard_cat` VALUES (102, 12, 'Куплю комнаты', '');

INSERT INTO `myboard_cat` VALUES (103, 13, 'Сдаю комнаты', '');

INSERT INTO `myboard_cat` VALUES (104, 14, 'Сниму комнаты', '');

INSERT INTO `myboard_cat` VALUES (105, 15, 'Меняю комнаты', '');

INSERT INTO `myboard_cat` VALUES (111, 11, 'Продаю 1-комн.кв.', '');

INSERT INTO `myboard_cat` VALUES (112, 12, 'Куплю 1-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (113, 13, 'Сдаю 1-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (114, 14, 'Сниму 1-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (115, 15, 'Меняю 1-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (121, 11, 'Продаю 2-комн.кв.', '');

INSERT INTO `myboard_cat` VALUES (122, 12, 'Куплю 2-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (123, 13, 'Сдаю 2-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (124, 14, 'Сниму 2-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (125, 15, 'Меняю  2-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (131, 11, 'Продаю 3-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (132, 12, 'Куплю 3-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (133, 13, 'Сдаю 3-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (134, 14, 'Сниму 3-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (135, 15, 'Меняю  3-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (141, 11, 'Продаю 4-комн.кв.', '');

INSERT INTO `myboard_cat` VALUES (142, 12, 'Куплю 4-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (143, 13, 'Сдаю 4-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (144, 14, 'Сниму 4-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (145, 15, 'Меняю 4-комн. кв.', '');

INSERT INTO `myboard_cat` VALUES (151, 11, 'Продаю дома', '');

INSERT INTO `myboard_cat` VALUES (152, 12, 'Куплю дома', '');

INSERT INTO `myboard_cat` VALUES (153, 13, 'Сдаю дома', '');

INSERT INTO `myboard_cat` VALUES (154, 14, 'Сниму дома', '');

INSERT INTO `myboard_cat` VALUES (155, 15, 'Меняю дома', '');

INSERT INTO `myboard_cat` VALUES (161, 11, 'Продаю дачи, участки', '');

INSERT INTO `myboard_cat` VALUES (162, 12, 'Куплю  дачи, участки', '');

INSERT INTO `myboard_cat` VALUES (163, 13, 'Сдаю дачи, участки', '');

INSERT INTO `myboard_cat` VALUES (164, 14, 'Сниму дачи, участки', '');

INSERT INTO `myboard_cat` VALUES (165, 15, 'Меняю  дачи, участки', '');

INSERT INTO `myboard_cat` VALUES (171, 11, 'Продаю гаражи', '');

INSERT INTO `myboard_cat` VALUES (172, 12, 'Куплю гаражи', '');

INSERT INTO `myboard_cat` VALUES (173, 13, 'Сдаю гаражи', '');

INSERT INTO `myboard_cat` VALUES (174, 14, 'Сниму гаражи', '');

INSERT INTO `myboard_cat` VALUES (175, 15, 'Меняю гаражи', '');

INSERT INTO `myboard_cat` VALUES (181, 11, 'Продаю по СНГ', '');

INSERT INTO `myboard_cat` VALUES (186, 15, 'Меняю Подмосковье', '');

INSERT INTO `myboard_cat` VALUES (187, 15, 'Меняю на Подмосковье', '');

INSERT INTO `myboard_cat` VALUES (185, 15, 'Меняю по СНГ', '');

INSERT INTO `myboard_cat` VALUES (199, 100, 'Другое', '');

INSERT INTO `myboard_cat` VALUES (182, 12, 'Куплю по СНГ', '');

INSERT INTO `myboard_cat` VALUES (183, 13, 'Сдаю по СНГ', '');

INSERT INTO `myboard_cat` VALUES (184, 14, 'Сниму по СНГ', '');

INSERT INTO `myboard_cat` VALUES (501, 51, 'Продаю мебель', '');

INSERT INTO `myboard_cat` VALUES (502, 52, 'Куплю мебель', '');

INSERT INTO `myboard_cat` VALUES (505, 55, 'Меняю мебель', '');

INSERT INTO `myboard_cat` VALUES (511, 51, 'Продаю быт. технику', '');

INSERT INTO `myboard_cat` VALUES (512, 52, 'Куплю быт. технику', '');

INSERT INTO `myboard_cat` VALUES (515, 55, 'Меняю быт. технику', '');

INSERT INTO `myboard_cat` VALUES (521, 51, 'Продаю теле-видео-аудио-фото', '');

INSERT INTO `myboard_cat` VALUES (522, 52, 'Куплю теле-видео-аудио-фото', '');

INSERT INTO `myboard_cat` VALUES (525, 55, 'Меняю теле-видео-аудио-фото', '');

INSERT INTO `myboard_cat` VALUES (531, 51, 'Продаю оргтехнику', '');

INSERT INTO `myboard_cat` VALUES (532, 52, 'Куплю оргтехнику', '');

INSERT INTO `myboard_cat` VALUES (535, 55, 'Меняю оргтехнику', '');

INSERT INTO `myboard_cat` VALUES (541, 51, 'Продаю одежду, обувь', '');

INSERT INTO `myboard_cat` VALUES (542, 52, 'Куплю одежду, обувь', '');

INSERT INTO `myboard_cat` VALUES (545, 55, 'Меняю одежду, обувь', '');

INSERT INTO `myboard_cat` VALUES (271, 21, 'Продаю стройматериалы', '');

INSERT INTO `myboard_cat` VALUES (272, 22, 'Куплю стройматериалы', '');

INSERT INTO `myboard_cat` VALUES (275, 25, 'Меняю стройматериалы', '');

INSERT INTO `myboard_cat` VALUES (281, 21, 'Продаю оборудование', '');

INSERT INTO `myboard_cat` VALUES (282, 22, 'Куплю оборудование', '');

INSERT INTO `myboard_cat` VALUES (285, 25, 'Меняю оборудование', '');

INSERT INTO `myboard_cat` VALUES (581, 51, 'Продаю другие товары', '');

INSERT INTO `myboard_cat` VALUES (301, 31, 'Продаю автомобили', '');

INSERT INTO `myboard_cat` VALUES (302, 32, 'Куплю автомобили', '');

INSERT INTO `myboard_cat` VALUES (305, 35, 'Меняю автомобили', '');

INSERT INTO `myboard_cat` VALUES (311, 31, 'Продаю мототехнику', '');

INSERT INTO `myboard_cat` VALUES (312, 32, 'Куплю мототехнику', '');

INSERT INTO `myboard_cat` VALUES (315, 35, 'Меняю мототехнику', '');

INSERT INTO `myboard_cat` VALUES (321, 31, 'Продаю велотехнику', '');

INSERT INTO `myboard_cat` VALUES (322, 32, 'Куплю велотехнику', '');

INSERT INTO `myboard_cat` VALUES (325, 35, 'Меняю велотехнику', '');

INSERT INTO `myboard_cat` VALUES (331, 31, 'Продаю запчасти', '');

INSERT INTO `myboard_cat` VALUES (332, 32, 'Куплю запчасти', '');

INSERT INTO `myboard_cat` VALUES (335, 35, 'Меняю запчасти', '');

INSERT INTO `myboard_cat` VALUES (341, 39, 'Предлагаю (ремонт авто)', '');

INSERT INTO `myboard_cat` VALUES (342, 39, 'Воспользуюсь (ремонт авто)', '');

INSERT INTO `myboard_cat` VALUES (351, 31, 'Продаю автотехнику', '');

INSERT INTO `myboard_cat` VALUES (352, 32, 'Куплю автотехнику', '');

INSERT INTO `myboard_cat` VALUES (355, 35, 'Меняю автотехнику', '');

INSERT INTO `myboard_cat` VALUES (202, 26, 'Строительные и ремонтные работы', '');

INSERT INTO `myboard_cat` VALUES (506, 56, 'Изготовление и ремонт мебели', '');

INSERT INTO `myboard_cat` VALUES (516, 56, 'Ремонт быт. техники', '');

INSERT INTO `myboard_cat` VALUES (536, 56, 'Ремонт оргтехники', '');

INSERT INTO `myboard_cat` VALUES (602, 61, 'Юридические услуги', '');

INSERT INTO `myboard_cat` VALUES (603, 61, 'Медуслуги', '');

INSERT INTO `myboard_cat` VALUES (405, 400, 'Обучение', '');

INSERT INTO `myboard_cat` VALUES (604, 61, 'Рекламно - издательские услуги', '');

INSERT INTO `myboard_cat` VALUES (350, 300, 'Автоперевозки', '');

INSERT INTO `myboard_cat` VALUES (607, 61, 'Парикмахер, косметолог', '');

INSERT INTO `myboard_cat` VALUES (546, 56, 'Пошив, вязание, ремонт', '');

INSERT INTO `myboard_cat` VALUES (605, 61, 'Помощь по дому', '');

INSERT INTO `myboard_cat` VALUES (606, 61, 'Видео-, фотосъемка', '');

INSERT INTO `myboard_cat` VALUES (608, 61, 'Торжества, юбилеи, свадьбы', '');

INSERT INTO `myboard_cat` VALUES (609, 600, 'Воспользуюсь', '');

INSERT INTO `myboard_cat` VALUES (761, 76, 'Женщины', '');

INSERT INTO `myboard_cat` VALUES (762, 76, 'Мужчины', '');

INSERT INTO `myboard_cat` VALUES (402, 400, 'Ищу', '');

INSERT INTO `myboard_cat` VALUES (401, 400, 'Требуются', '');

INSERT INTO `myboard_cat` VALUES (403, 400, 'Сотрудничество', '');

INSERT INTO `myboard_cat` VALUES (701, 71, 'Продаю коллекции и предметы искусства', '');

INSERT INTO `myboard_cat` VALUES (702, 72, 'Куплю коллекции и предметы искусства', '');

INSERT INTO `myboard_cat` VALUES (705, 75, 'Меняю коллекции и предметы искусства', '');

INSERT INTO `myboard_cat` VALUES (711, 71, 'Продаю книги, журналы', '');

INSERT INTO `myboard_cat` VALUES (712, 72, 'Куплю книги, журналы', '');

INSERT INTO `myboard_cat` VALUES (715, 75, 'Меняю книги, журналы', '');

INSERT INTO `myboard_cat` VALUES (721, 71, 'Продаю муз. инструменты', '');

INSERT INTO `myboard_cat` VALUES (722, 72, 'Куплю муз. инструменты', '');

INSERT INTO `myboard_cat` VALUES (725, 75, 'Меняю муз. инструменты', '');

INSERT INTO `myboard_cat` VALUES (731, 71, 'Продаю спортинвентарь', '');

INSERT INTO `myboard_cat` VALUES (732, 72, 'Куплю спортинвентарь', '');

INSERT INTO `myboard_cat` VALUES (735, 75, 'Меняю спортинвентарь', '');

INSERT INTO `myboard_cat` VALUES (751, 77, 'Спорт', '');

INSERT INTO `myboard_cat` VALUES (741, 77, 'Клубы, рестораны, кафе', '');

INSERT INTO `myboard_cat` VALUES (771, 71, 'Продаю животных', '');

INSERT INTO `myboard_cat` VALUES (772, 72, 'Куплю животных', '');

INSERT INTO `myboard_cat` VALUES (781, 71, 'Продаю растения', '');

INSERT INTO `myboard_cat` VALUES (782, 72, 'Куплю растения', '');

INSERT INTO `myboard_cat` VALUES (776, 79, 'Другое (животные)', '');

INSERT INTO `myboard_cat` VALUES (404, 400, 'Опека', '');

INSERT INTO `myboard_cat` VALUES (830, 800, 'Находки', '');

INSERT INTO `myboard_cat` VALUES (820, 800, 'Потери', '');

INSERT INTO `myboard_cat` VALUES (810, 800, 'Поздравления', '');

INSERT INTO `myboard_cat` VALUES (840, 800, 'Другое (сообщения)', '');

INSERT INTO `myboard_cat` VALUES (610, 600, 'Другое (услуги)', '');

INSERT INTO `myboard_cat` VALUES (188, 100, 'За рубежом', '');

INSERT INTO `myboard_cat` VALUES (191, 11, 'Продаю ком.недвиж.', '');

INSERT INTO `myboard_cat` VALUES (192, 12, 'Куплю ком.недвиж.', '');

INSERT INTO `myboard_cat` VALUES (193, 13, 'Сдаю ком.недвиж.', '');

INSERT INTO `myboard_cat` VALUES (194, 14, 'Сниму ком.недвиж.', '');

INSERT INTO `myboard_cat` VALUES (195, 15, 'Меняю ком.недвиж.', '');

INSERT INTO `myboard_cat` VALUES (303, 38, 'Сдаю в аренду', '');

INSERT INTO `myboard_cat` VALUES (304, 38, 'Возьму в аренду', '');

INSERT INTO `myboard_cat` VALUES (286, 26, 'Ремонт оборудования', '');

INSERT INTO `myboard_cat` VALUES (291, 21, 'Продаю сантехнику', '');

INSERT INTO `myboard_cat` VALUES (292, 22, 'Куплю сантехнику', '');

INSERT INTO `myboard_cat` VALUES (295, 25, 'Меняю сантехнику', '');

INSERT INTO `myboard_cat` VALUES (296, 26, 'Сантехнические работы', '');

INSERT INTO `myboard_cat` VALUES (201, 26, 'Ландшафт и дизайн', '');

INSERT INTO `myboard_cat` VALUES (526, 56, 'Ремонт теле-видео-аудио-фото', '');

INSERT INTO `myboard_cat` VALUES (551, 51, 'Продаю телефоны', '');

INSERT INTO `myboard_cat` VALUES (552, 52, 'Куплю телефоны', '');

INSERT INTO `myboard_cat` VALUES (555, 55, 'Меняю телефоны', '');

INSERT INTO `myboard_cat` VALUES (556, 56, 'Ремонт телефонов', '');

INSERT INTO `myboard_cat` VALUES (561, 51, 'Продаю все для детей', '');

INSERT INTO `myboard_cat` VALUES (562, 52, 'Куплю все для детей', '');

INSERT INTO `myboard_cat` VALUES (565, 55, 'Меняю все для детей', '');

INSERT INTO `myboard_cat` VALUES (299, 200, 'Другое', '');

INSERT INTO `myboard_cat` VALUES (786, 79, 'Другое (растения)', '');

INSERT INTO `myboard_cat` VALUES (399, 31, 'Продаю другое (авто)', '');

INSERT INTO `myboard_cat` VALUES (902, 32, 'Куплю другое (авто)', '');

INSERT INTO `myboard_cat` VALUES (901, 35, 'Меняю другое (авто)', '');

INSERT INTO `myboard_cat` VALUES (582, 52, 'Куплю другие товары', '');

INSERT INTO `myboard_cat` VALUES (585, 55, 'Меняю другие товары', '');

INSERT INTO `myboard_cat` VALUES (799, 79, 'Другое (досуг)', '');

INSERT INTO `myboard_cat` VALUES (601, 61, 'Финансы', '');

INSERT INTO `myboard_cat` VALUES (571, 51, 'Продаю продукты', '');

INSERT INTO `myboard_cat` VALUES (572, 52, 'Куплю продукты', '');

INSERT INTO `myboard_cat` VALUES (575, 55, 'Меняю продукты', '');

INSERT INTO `myboard_cat` VALUES (752, 77, 'Отдых', '');

INSERT INTO `myboard_cat` VALUES (753, 77, 'Театры, музеи', '');

INSERT INTO `myboard_cat` VALUES (754, 77, 'За рубежом', '');

INSERT INTO `myboard_cat` VALUES (755, 77, 'В России', '');

INSERT INTO `myboard_cat` VALUES (361, 31, 'Продаю сельхозтехнику', '');

INSERT INTO `myboard_cat` VALUES (362, 32, 'Куплю сельхозтехнику', '');

INSERT INTO `myboard_cat` VALUES (586, 59, 'Приму в дар', '');

INSERT INTO `myboard_cat` VALUES (587, 59, 'Отдам', '');

INSERT INTO `myboard_cat` VALUES (326, 39, 'Ремонт велотехники', '');

INSERT INTO `myboard_cat` VALUES (756, 77, 'Другое', '');

INSERT INTO `myboard_cat` VALUES (11, 100, 'Продаю', '');

INSERT INTO `myboard_cat` VALUES (12, 100, 'Куплю', '');

INSERT INTO `myboard_cat` VALUES (13, 100, 'Сдаю', '');

INSERT INTO `myboard_cat` VALUES (14, 100, 'Сниму', '');

INSERT INTO `myboard_cat` VALUES (15, 100, 'Меняю', '');

INSERT INTO `myboard_cat` VALUES (21, 200, 'Продаю', '');

INSERT INTO `myboard_cat` VALUES (22, 200, 'Куплю', '');

INSERT INTO `myboard_cat` VALUES (25, 200, 'Меняю', '');

INSERT INTO `myboard_cat` VALUES (26, 200, 'Ремонт', '');

INSERT INTO `myboard_cat` VALUES (31, 300, 'Продаю', '');

INSERT INTO `myboard_cat` VALUES (32, 300, 'Куплю', '');

INSERT INTO `myboard_cat` VALUES (35, 300, 'Меняю', '');

INSERT INTO `myboard_cat` VALUES (38, 300, 'Аренда', '');

INSERT INTO `myboard_cat` VALUES (39, 300, 'Ремонт', '');

INSERT INTO `myboard_cat` VALUES (51, 500, 'Продаю', '');

INSERT INTO `myboard_cat` VALUES (52, 500, 'Куплю', '');

INSERT INTO `myboard_cat` VALUES (55, 500, 'Меняю', '');

INSERT INTO `myboard_cat` VALUES (56, 500, 'Ремонт', '');

INSERT INTO `myboard_cat` VALUES (59, 500, 'Другое', '');

INSERT INTO `myboard_cat` VALUES (61, 600, 'Предлагаю', '');

INSERT INTO `myboard_cat` VALUES (71, 700, 'Продаю', '');

INSERT INTO `myboard_cat` VALUES (72, 700, 'Куплю', '');

INSERT INTO `myboard_cat` VALUES (75, 700, 'Меняю', '');

INSERT INTO `myboard_cat` VALUES (76, 700, 'Знакомства', '');

INSERT INTO `myboard_cat` VALUES (79, 700, 'Другое', '');

INSERT INTO `myboard_cat` VALUES (77, 700, 'Спорт, отдых', '');

-- --------------------------------------------------------

--

-- Структура таблицы `myboard_nastr`

--

CREATE TABLE `myboard_nastr` (

 `nastr_id` int(2) NOT NULL auto_increment,

 `nastr_nazv` varchar(100) NOT NULL,

 `nastr_admemail` varchar(100) NOT NULL,

 `nastr_tr` int(2) NOT NULL,

 PRIMARY KEY  (`nastr_id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

--

-- Дамп данных таблицы `myboard_nastr`

--

INSERT INTO `myboard_nastr` VALUES (1, 'Проект Доски объявлений MyBoard ver 1.0', 'admin@mystudio.ru', 3);

-- --------------------------------------------------------

--

-- Структура таблицы `myboard_ob`

--

CREATE TABLE `myboard_ob` (

 `ob_id` int(7) NOT NULL auto_increment,

 `ob_cat` int(4) default NULL,

 `ob_user` int(5) NOT NULL,

 `ob_tema` varchar(50) NOT NULL,

 `ob_text` text NOT NULL,

 `ob_foto` varchar(16) default NULL,

 `ob_view` int(11) NOT NULL,

 `ob_ot` int(14) NOT NULL,

 `ob_do` int(14) NOT NULL,

 `ob_vgaz` int(1) NOT NULL default '0',

 `ob_publ` int(1) default '0',

 `ob_zak` int(1) NOT NULL default '0',

 PRIMARY KEY  (`ob_id`)

) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=1 ;

--

-- Дамп данных таблицы `myboard_ob`

--

--------------------------------------------------------

--

-- Структура таблицы `myboard_podpiska`

--

CREATE TABLE `myboard_podpiska` (

 `podpis_id` int(5) NOT NULL auto_increment,

 `podpis_cat` int(11) default NULL,

 `podpis_email` varchar(100) NOT NULL,

 `podpis_user` int(5) NOT NULL,

 PRIMARY KEY  (`podpis_id`)

) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=1 ;

--

-- Дамп данных таблицы `myboard_podpiska`

--

-- --------------------------------------------------------

--

-- Структура таблицы `myboard_users`

--

CREATE TABLE `myboard_users` (

 `user_id` int(11) NOT NULL auto_increment,

 `user_icq` int(10) NOT NULL,

 `user_web` varchar(100) NOT NULL,

 `user_email` varchar(100) NOT NULL,

 `user_emailview` int(1) default '0',

 `user_login` varchar(50) NOT NULL,

 `user_pass` varchar(32) NOT NULL,

 `user_sol` char(3) NOT NULL,

 `user_tel` varchar(30) NOT NULL,

 `user_fax` varchar(30) NOT NULL,

 `user_gorod` varchar(20) NOT NULL,

 `user_obl` varchar(25) NOT NULL,

 `user_regtime` int(14) NOT NULL,

 `user_vizit` int(14) NOT NULL,

 `user_osebe` varchar(255) NOT NULL,

 `user_prava` int(1) NOT NULL default '0',

 `user_ip` varchar(15) NOT NULL,

 `user_ras` int(1) NOT NULL default '0',

 PRIMARY KEY  (`user_id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=2 ;

--

-- Дамп данных таблицы `myboard_users`

--

INSERT INTO `myboard_users` VALUES (1, 0, 'myscript.ru', 'email@email.ru', 0, 'Администратор', 'a18afd57d8ad36a5a24ea681ca67f410', 'qsx', '', '', '', '', 1047563998, 1268312603, '', 5, '195.34.38.34', 0);

Приложение Б

Внешний вид графического материала

Графический материал, выполненный в виде отдельных листов, представлен на рисунках Б.1 – Б.10

Рисунок Б.1 – Постановка задачи


Рисунок Б.2 – Описание прецедентов, диаграмма вариантов использования

Рисунок Б.3 – Интерфейс стартового окна

Рисунок Б.4 – Подача объявления

Рисунок Б.5 – Последние объявления

Рисунок Б.6 – Диаграмма развертывания

Рисунок Б.7 – Диаграмма активностей

Рисунок Б.8 – Диаграмма модулей

Рисунок Б.9 – Концептуальная модель предметной области

Рисунок Б.10 – Тестовые наборы


 

А также другие работы, которые могут Вас заинтересовать

34198. Денежно-кредитное регулирование экономики 14.71 KB
  Понятие денежнокредитного регулирования Теории спроса и предложения денег равновесие на денежном рынке являются научной основой для проведения государством обоснованной взвешенной кредитноденежной политики направленной на стабилизацию экономического развития. Совокупность государственных мероприятий в области денежного обращения и кредита называется денежнокредитной политикой. Денежнокредитная политика представляет собой комплекс мероприятий в области денежного обращения и кредита направленных на регулирование экономического роста...
34199. Государство в переходный период в экономике России 15.78 KB
  Государственное регулирование одна из основных форм участия государства в экономической жизни состоящая в прямом или косвенном воздействии на распределение ресурсов и формирование пропорций. В настоящее время выделяют следующие формы экономического регулирования: 1 административное регулирование за счет использования лицензирования и квотирования контроля над ценами доходами валютным курсом а также других форм; 2 правовое регулирование на основе гражданского и хозяйственного законодательства путем установления системы норм и...
34200. Организм и среда 16.95 KB
  Область распространения живых существ на Земле образует особую оболочку называемую биосферой. Биосфера возникла с появлением на Земле живых существ: она занимает всю поверхность суши все водоёмы Земли – океаны моря озёра реки проникает в атмосферу – большинство организмов поднимается в воздух более чем на 50 – 70 м а споры бактерий и грибов заносятся на высоту до 22 км. Условия существования на земле очень разнообразны и определяются факторами как неорганического так и органического порядка. Все организмы на земле живут сообществами...
34201. Необратимость в эволюции 23.15 KB
  Основное направление эволюции связано с усложнением строения организмов. Но наблюдается и упрощение дегенерация организмов. Правда иногда наблюдается появление признаков когдато имевшихся у предков затем исчезнувших у последующих организмов а потом вновь появившихся у потомков. Для каждой стратиграфической единицы характерны свои группы организмов которые после вымирания вновь не могут возникнуть.
34202. Некоторые закономерности эволюции 20.63 KB
  Причины и процессы развития органического имеют определённые законы что составляет содержание теории эволюции. Эволюция – это законы развития органического мира основные положения которого разработаны Ч. процесс исторического развития органического мира может происходить только про сочетании трёх условий триада Дарвина: изменчивости наследственности естественного отбора. Выпадение из триады любого из трех факторов приводит к остановке развития органического мира.
34203. Классификация, систематика и номенклатура 24.63 KB
  Наука которая занимается систематизацией распределением животных и растений по группам получила название систематики или таксономии. Рэй который ввёл категории “ви䆓род†и бинарную номенклатуру состоящую из двух слоёв: первое слово название рода второе – вида. Бинарное название было сокращено. Вид имеет двойное название бинарное.
34204. Подцарство Protozoa – простейшие (одноклеточные) 26.16 KB
  Всю внутреннюю полость раковины заполняет эндоплазма. Наиболее простыми являются однокамерные раковины. Многокамерные раковины распространённые особо широко состоят из многочисленных камер отделённых друг от друга перегородками – септами. Чаще всего многокамерные раковины имеют спиральное строение.
34205. Тип Spongiata (губковые) 19.68 KB
  Класс Spongi губки.1417Губки прикрепляются неподвижно к грунту или подводным предметам. Тело губки пронизано многочисленными порами через которые во внутреннюю полость поступает вода приносящая пищу и кислород. Такое направление движения воды создаётся колебанием жгутиков особых клеток выстилающих внутреннюю полость губки.
34206. Тип Archaeocyath. Класс Археоциоты 17.72 KB
  Одиночные археоциаты обладают конической цилиндрической воронковидной формой а колониальные – имеют массивный или ветвистый скелет. Археоциаты вели прикреплённый образ жизни. При оптимальных условиях на глубине 2030 м в теплых нормальносолёных морях археоциаты совместно с синезелёными водорослями строили биостромы и биогермы. Археоциаты участвовали в образовании органогенных известняков.