Розробка інформаційного web-ресурсу громадської організації "Файне місто" на основі технології PHP MYSQL

Проектування web-ресурсу міста для інформування про цілі, пріоритети, програмні напрямки, конкурси та підтримані проекти організації. Найменування та область застосування сайту; організація зв'язку із соціальними мережами. Розробка структури web-ресурсу.

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

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

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

- Функції SQL реалізовані з використанням високо оптимізованої бібліотеки класів і повинні виконуватися гранично швидко. Як правило, будь-якого розподілу пам'яті після ініціалізації запиту не виконується.

- Код MySQL протестованний за допомогою інструментів пошуку витоку пам'яті, як комерційних, так і з відкритим вихідним кодом.

- Сервер доступний як окрема програма для використання в клієнт- серверній мережному середовищу. Крім того, він також поставляється у вигляді бібліотеки, що може бути убудована в окремі автономні додатки. Такі додатки можуть застосовуватися в ізольованому середовищі або середовищі, що не має доступ до мережі.

- Типи стовпців

- Безліч типів даних для стовпців таблиць: знакові/беззнакові цілі довжиною в 1, 2, 3, 4 і 8 байт; типи FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM і просторові типи OpenGIS.

- Запису фіксованої й змінної довжини.

- Оператори й функції.

- Повна підтримка операцій і функцій у конструкціях SELECT і WHERE запитів, наприклад: mysql> SELECT CONCAT(first_name, ' ', last_name) -> FROM citizen -> WHERE income/dependents > 10000 AND age > 30;

- Повна підтримка конструкцій GROUP BY і ORDER BY. Підтримка групових функцій (COUNT (), COUNT (DISTINCT . . .), AVG(), STD(), SUM(), MAX(), MIN() І GROUP_CONCAT()).

- Підтримка LEFT OUTER JOIN і RIGHT OUTER JOIN як із синтаксисом SQL, так і із синтаксисом ODBC.

- Підтримка псевдонімів для таблиць і стовпців, як того вимагає стандарт SQL.

- Оператори DELETE, insert, REPLACE і UPDATE повертають кількість рядків, які були змінені. Замість цього можна задати повернення кількості рядків, що відповідають запиту, для чого буде потрібно встановити відповідний прапор при підключенні до сервера.

- Специфічна для MySQL команда SHOW може бути використана для добування інформації про бази даних, таблицях і індексах. Команда EXPLAIN дозволяє переглянути, як оптимізатор виконує запит.

- Імена функцій не конфліктують з іменами таблиць і стовпців. Наприклад, ABS -- абсолютно коректне ім'я стовпця. Єдине обмеження, що накладається на виклик функцій, - це те, що між ім'ям функції й наступної за ним відкриваючою дужкою ' (' не повинне бути пробілів.

- Можна змішувати таблиці з різних баз даних в одному запиті (як в MySQL 3.22).

- Безпека.

- Система, заснована на паролях і привілеях, є винятково гнучкою і безпечною й дозволяє організувати верифікацію засобами хоста. Паролі захищені, оскільки весь трафік паролів під час з'єднання із сервером шифрується.

- Масштабованість і обмеження.

- Підтримує роботу баз даних величезних обсягів. Наприклад, компанія MySQL AB застосовує сервер MySQL для обслуговування бази даних, утримуючих 50 мільйонів записів. Відома також організація, що використовує сервер MySQL для обслуговування бази даних з 60 000 таблиць, що зберігає близько 5 мільярдів записів.

- Дозволяється мати до 64 індексів на таблицю (у версіях, що передують MySQL 4.1.2, допускалося до 32 індексів). Кожний індекс може містити від 1 до 16 стовпців або частин стовпців. Максимальна ширина індексу становить 1000 байт (500 байт у версіях, що передують MySQL 4.1.2). Для індексу може застосовуватися префікс стовпців з типами CHAR, VARCHAR, BLOB і TEXT.

- Мережна зв'язність

- Клієнти можуть підключатися до сервера MySQL, використовуючи сокети TCP/IP на будь-якій платформі. В Windows-Системах сімейства NT (NT, 2000 або ХР) клієнти можуть підключатися з використанням іменованих каналів. У системах на базі UNIX клієнти можуть підключатися через файли сокетів UNIX-Доменів.

- Інтерфейс Connector/ODBC дозволяє MySQL підтримувати клієнтські програми, які використовують ODBC-З'єднання. Наприклад, для підключення до сервера MySQL можна використовувати MS Access. Клієнтське програмне забезпечення може виконуватися під керуванням Windows або UNIX. Вихідні тексти інтерфейсу Connector/ODBC доступні. Підтримуються всі функції ODBC 2.5, так само як і безліч інших.

- Інтерфейс Connector/JDBC дозволяє MySQL взаємодіяти із клієнтськими програмами на Java, у яких використовуються JDBC-Підключення. Клієнтське програмне забезпечення може виконуватися під керуванням Windows або UNIX. Вихідні тексти інтерфейсу Connector/JDBC доступні.

- Локалізація

- Сервер може видавати клієнтам повідомлення про помилки на різних мовах.

- Повністю підтримуються кілька кодових таблиць, включаючи latinl (ISO- 8859- 1), german, big5, ujis і інші. Наприклад, в іменах таблиць і стовпців дозволяється застосовувати скандинавські символи на зразок 'а', 'а' і 'б'. Починаючи з версії MySQL 4.1, також забезпечується підтримка Unicode.

- Всі дані зберігаються в обраному кодуванні. Всі порівняння стовпців з нормальними рядками чутливі до регістра.

- Сортування виконується відповідно до обраного кодування (за замовчуванням використовуються шведський набір). Під час запуску сервера MySQL це можна змінити. Як приклад досить зробленого сортування рекомендується звернути увагу на код сортування для чеської мови. Сервер MySQL підтримує безліч різних кодувань, причому вони можуть бути зазначені як під час компіляції, так і під час виконання.

- Клієнти й інструменти.

- Сервер MySQL має убудовану підтримку SQL-Операторів для перевірки, оптимізації й відновлення таблиць. Ці оператори можна виконувати в режимі командного рядка, використовуючи клієнтський додаток mysqlcheck. MySQL включає також myisamchk - дуже швидку утиліту командного рядка для реалізації тих же операцій над таблицями MylSAM.

- Всі програми MySQL можна запускати на виконання з опцією -help або -? для одержання швидкої підказки.

Для розробки web-рисурсу було використано: PHP, HTML, каскадні таблиці стилів CSS, СУБД MySQL версії 5. Головним інструментом розробки був Notepad++ 6.6.3 Додатково використовувалося Adobe Photoshop CS5 та Paint.NET.

3. Вибір архітектури та інструментальних засобів розробки

3.1 Вимоги до технічних засобів

Програма потребує наявності сервера та комп'ютера користувача, але при необхідності, комп'ютер користувача може виконувати роль сервера

Програма може бути встановлена у будь-якій з розповсюджених на сьогоднішній день операційних систем - Windows 9x/NT/XP/2003/Vista, Linux, Unix, та ін. Мінімальні вимоги до системи такі:

1. Процесор - 300 Мгц 2. Оперативна память - 32 Мб 3. Відеокарта та монітор - 640x480, 256 кольорів при частоті розгортки 75 Гц (TCO95) 4. Клавіатура - довільна 5. Миша - довільна 6. Вільний дисковий простір - 50 Мб (для встановлення серверів Apache та MySQL).

Наведена конфігурація не перевищує рівень оснащення комп'ютерів користувачів на даний момент часу, тому програма буде доступною широкому колу користувачів.

3.2 Вимоги до програмного забезпечення

В якості веб-сервера представленої розробки використано пакет "Денвер".

Джентльменський набір Web-розробника ("Д.н.w.р", "Денвер") - проект Дмитра Котерова, набір дистрибутивів (Apache, PHP, MySQL, Perl і т. п.) і програмна оболонка, які використовуються Web-розробниками для розробки сайтів на "домашній" (локальній) Windows-машині без необхідності виходу в Інтернет. Головна особливість Денвера - зручність при віддаленій роботі одразу над кількома незалежними проектами і можливість розміщення на Flash-накопичувачі.

Базовий пакет Денвера містить більшість необхідних програм та утиліт:

?Інсталятор (підтримує також інсталяцію на flash-накопичувач).

?Apache, SSL, SSI, mod_rewrite, mod_php.

?PHP5 з підтримкою GD, MySQL.

?MySQL5.

?Система управління віртуальними хостами

?Система управління запуском и завершенням усіх компонентів Денвера.

?phpMyAdmin - система управління MySQL через Web-інтерфейс.

?Емулятор sendmail і SMTP-сервера

Також нам необхідно встановити на нашому комп'ютері відповідне програмне забезпечення, яке буде необхідне нам у майбутньому, а саме:

- Internet Explorer (версія 6 та вище);

- Opera (версія 9 та вище);

- Mozilla Firefox (версія 3.0 та вище)

- Safari.

- Google Chrome 26.0 або вище;

- Notepad++ 6.6.3

- Adobe Photoshop CS5

3.3 Вибір архітектури розробки

Для реалізації даного проекту було обрано архітектуру "клієнт-сервер".

Архітектура "клієнт-сервер" сьогодні являє собою домінуючу концепцію у створенні мережевих розробок і передбачає взаємодію та обмін даними між ними. Вона передбачає такі основні компоненти:

?набір серверів, які надають інформацію або інші послуги програмам, які звертаються до них;

?набір клієнтів, які використовують сервіси, що надаються серверами;

?мережа, яка забезпечує взаємодію між клієнтами та серверами.

Сервери є незалежними один від одного. Клієнти також функціонують паралельно і незалежно один від одного. Немає жорсткої прив'язки клієнтів до серверів. Більш ніж типовою є ситуація, коли один сервер одночасно обробляє запити від різних клієнтів; з іншого боку, клієнт може звертатися то до одного сервера, то до іншого. Клієнти мають знати про доступні сервери, але можуть не мати жодного уявлення про існування інших клієнтів.

Клієнти та сервери - це програмні модулі. Найчастіше вони знаходяться на різних комп'ютерах, але бувають ситуації, коли обидві програми - і клієнтська, і серверна, фізично розміщуються на одній машині; в такій ситуації сервер часто називається локальним.

Типовим прикладом клієнт-серверної взаємодії є WWW. Існує величезна кількість веб-серверів, на яких розміщується та або інша інформація. У найпростішому випадку ця інформація являє собою набір веб-сторінок, які можуть зберігатися на сервері у вигляді файлів, розмічених за допомогою мови розмітки HTML. Але ситуація, як правило, є більш складною; значна частина веб-ресурсів на сучасному етапі є динамічними, тобто вони не існують в заздалегідь підготовленому вигляді, а створюються безпосередньо в процесі обробки запиту від користувача.

Для запиту до веб-сервера клієнтська програма повинна задати місцезнаходження комп'ютера, на якому розміщується серверна програма; назву потрібного документа і, можливо, інші дані, які специфікують запит. Мережа забезпечує знаходження сервера і передачу йому клієнтського запиту. Серверні програми обробляють цей запит; відповідь пересилається по мережі клієнтові.

Модель клієнт-серверної взаємодії визначається перш за все розподілом обов'язків між клієнтом та сервером. Логічно можна виокремити три рівні операцій:

?рівень представлення даних, який по суті являє собою інтерфейс користувача і відповідає за представлення даних користувачеві і введення від нього керуючих команд;

?рівень управління даними, який забезпечує зберігання даних та доступ до них.

Для роботи з системою користувач використовує стандартне програмне забезпечення - звичайний браузер. Це позбавляє його необхідності завантажувати та інсталювати спеціальні програми (хоча інколи така необхідність все-таки виникає). Але користувачеві слід надати в розпорядженні інтерфейс, який дозволяв би йому взаємодіяти з системою і формувати запити до неї; форми, що визначають цей інтерфейс, розміщуються на веб-сторінках та завантажуються разом з ними.

Браузер формує запит та пересилає його до сервера, який здійснює обробку. При необхідності сервер викликає серверні програмні модулі, які забезпечують обробку запиту і в разі потреби звертаються до сервера даних. Сервер даних здійснює операції з даними, що зберігаються в системі та складають її інформаційну основу. Зокрема, він може здійснити вибірку з інформаційної бази відповідно до запиту та передати її модулю проміжного рівня для подальшої обробки. Дані, з якими працює сервер даних, організовані як реляційна база даних MySQL.

4. Розробка web-ресурсу

4.1 Розробка структури

Традиційно етап планування сайту (як і будь-якого проекту) може бути трохи стресовим. У кожного є власна думка щодо того, як сайт повинен бути зроблений. І часто ці думки будуть конфліктувати один з одним. Нашою головною метою має бути створення сайту, корисного для людей, які будуть ним користуватися. Насправді не важливо навіть, що говорить ваш начальник, хлопець з докторським ступенем з розробки програмного забезпечення, що сидить вниз по коридору; не важливі навіть ваші особисті уподобання. В кінці дня, якщо ви створюєте сайт для певної групи людей, має значення тільки їх думка.

Практично любий сайт є сукупністю сторінок, які містять тексти, картинки, мультимедійні чи інші об'єкти. Для комфортного перебування відвідувача на сайті і для полегшення пошуку потрібної інформації, сайт повинен мати чітку і продуману структуру.

Структура сайту - це внутрішній устрій сайту, його "кістяк", розташування сторінок, розділів, підрозділів, додаткових матеріалів. І першочерговим завданням дизайнера є створення стрункого порядку з хаотичного скупчення інформації.

З позиції розробника, структуру сайту умовно можна поділити на два рівні -- логічний і фізичний.

На логічному рівні структура сайту є сукупністю сторінок, які об'єднані між собою єдиним дизайном, стилем і посиланнями.

На фізичному рівні структура сайту є впорядкованим набором файлів різного типу (HTML-сторінки, зображення, програми, мультимедійні файли). Продумана і зручна файлова структура допомагає розробнику оптимізувати свою роботу, а також буде зрозумілою для інших фахівців, що працюють над проектом.

Слідуючи сучасним тенденціям, мною було розроблено web-ресурсу для громадської організації "Файне місто".

Структура сайту складається з декількох пунктів: головна, про організацію, відділи, заявка на вступ та контакти(Рис. 4.1).

Рис. 4.1

Сторінка першого ряду може містити:

- Головна , яка складається з горизонтального меню та останніх новин. Такі сторінки мають фреймову структуру і для зручності користування розбиті на дрібні підтеми.

- Про організацію - тут знаходиться вся інформація про діяльність громадської організації.

- Відділи - містить інформацію про структуру організації, її відділи та опис кожного з відділів чим він займається.

- Заявки на вступ, в даному розділі знаходиться інформація та умови подання заявки на всеп в організацію, а також форма подачі заявки.

- Контакти в цьому пункті меню знаходиться всі контакти організації за якими можна зв'язатися з потрібним відділом чи головою організації а також дізнатись місце знаходження організації.

Структурну схему сторінки web-ресурсу можна побачити на рисунку 4.2.

Рис. 4.2

Структура сторінки складатиметься з наступних блоків:

- Шапка сайту, в якій буде знаходитись логотип організації та слоган;

- Горизонтальне меню складається з пунктів меню;

- Контент, це основна область сторінки в якій буде відображатись різна інформація, така як: новини, події, форма реєстрації адміністратора і т.д.

- Пошук на сайті буде полегшувати пошук потрібної інформації на сайті результати будуть виводитись в блок контент;

- Партнери, в цьому блоці буде відображено логотипи партнерів громадської організації;

- Реклама, тут будуть розміщені банери;

- Футер, в цій частині сторінки буде розміщено посилання на соціальні мережі та копірайт.

Всі сторінки створюваного сайту повинні бути виконані в єдиному стилі , хіба що компонування текстової області у головної сторінки може бути трохи більш складною , ніж у внутрішніх сторінок .

Моє головне завдання полягає в тому , щоб продумати дизайн початкової сторінки і сторінок рівня , який дозволяє зв'язати воєдино всі сторінки сайту і з максимальною ефективністю використовувати можливості Internet.

На даному етапі структура веб-проекту складається з декількох папок: images - містить всі графічні елементи сайту; css - де зберігаються файли дизайну та інтерфейсу посібника; html файли - в файлах з таким розширенням знаходяться всі коди які відповідають за структуру та наповненя сторінок.

Потрібно створити всі ключові сторінки сайту, які відрізняються одна від одної структурою html-коду. Всі ключові сторінки які є html файлами потрібно пере форматувати в tpl-файли.

Оскільки HTML - документи записуються в ASCII -форматі , то для її створення може бути використаний будь-який текстовий редактор. Зазвичай HTML - документ - це файл з розширенням html або htm, в якому текст

розмічений HTML - тегами (англ. tag - спеціальні вбудовані вказівки ). Засобами HTML задаються синтаксис і розміщення тегів, відповідно до яких, браузер

відображає вміст Веб -документа. Текст самих тегів Веб -браузером не

відображається. Браузер, який читає HTML - документ, відображає його у вікні, використовуючи структуру HTML -тегів. У кожному HTML - документі повинні бути присутніми три головні частини:

- Оголошення HTML;

- Голова документу;

- Тіло документа;

- Оголошення HTML;

<HTML> І </ HTML>. Пара цих тегів повідомляє програмі перегляду (браузеру) що між ними укладено документ у форматі HTML, причому першим тегом в документі повинен бути тег <HTML> (на самому початку документа), а останнім - </ HTML> ( в самому кінці документа).

В голові документа знаходиться заголовок сторінки та мета дані такі як ключові слова, опис документу а також підключення css-стилів, скриптів і т.д.

<head>

<title>Головна</title>

<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>

<meta name="description" content="Опис"/>

<meta name="keywords" content="Ключові слова"/>

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

</head>

Даний уривок коду редагується і зберігається в файл з розширенням tpl з таким змістом:

<head>

<title>%title%</title>

<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>

<meta name="description" content="%meta_desc%"/>

<meta name="keywords" content="%meta_key%"/>

<link rel="stylesheet" href="%address%" type="text/css"/>

</head>

Суть цього методу полягає в тому, що в html коді заміняється всі дані які можуть змінюватись на сторінках на спеціальні ключі.

В результаті в нас получилися такі файли:

- article.tpl

- articles.tpl

- banner.tpl

- form_auth.tpl

- items.tpl

- main.tpl

- main_article.tpl

- menu_item.tpl

- message.tpl

- message_string.tpl

- number_page.tpl

- pagination.tpl

- reg.tpl

- search_no.tpl

- search_result.tpl

- section.tpl

- text_message.tpl

- user_artitle.tpl

Коли на сервер надходить запит зі сторони клієнта, тоді система управління генерує потрібну структуру сторінки з даних файлів.

Але в tpl-файлах знаходиться тільки html код, і ключі які підміняються на потрібну інформацію.

Головним файлом в даній структурі є main.tpl в якому знаходиться обов'язків код будь якої сторінки, і має такий вигляд.

<!DOCTYPE html>

<html>

<head>

<title>%title%</title>

<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>

<meta name="description" content="%meta_desc%"/>

<meta name="keywords" content="%meta_key%"/>

<link rel="stylesheet" href="%address%css/main.css" type="text/css"/>

</head>

<body>

<div id="heder">

<img src="image/shapka.jpg">

</div>

<hr />

<div id="heder_menu">

<div id="menu_h">

<ul>%menu%</ul>

</div>

<div id="serch">

<form name="serch" action="%address%" method="get">

<table>

<tr>

<td><input type="text" name="serch"></td>

<td><input type="submit" name="submit" value="пошук"></td>

<input type="hidden" name="view" value="search">

</tr>

</table>

</form>

</div>

<div class="clear"></div>

</div>

<div class="clear"></div>

<hr />

<div id="content">

<div id="left">

<h3>Меню</h3>

<ul>%menu%</ul>

</div>

<div id="right">

<h3>Реклама</h3>

%banners%

</div>

<div id="center">

<div>

%top%

%middle%

</div>

%pagination%

</div>

</div>

<div class="clear"></div>

<hr />

<div id="footer">

<p>Всі права захищені</p>

</div>

</body>

</html>

Інтерфейс інформаційного web-ресурсу побудований наступним чином:

- головна;

- про організацію;

- відділи;

- про організацію;

- контакти;

Будова всіх сторінок є схожою, відрізняється лише вміст. Всі сторінки сайту складаються з декількох частин:

- шапка сайту;

- горизонтальне меню;

- Основна частина;

- Правий сайт бар;

- Футер(підвал).

А зараз більш детально розглянемо кожну з частин. Шапка сайту (див. рис. 4.1.3) завжди незмінна і містить назву web-ресурсу, логотип та слоган громадської організації. Горизонтальне меню (див. рис. 4.1.4) містить пункти головного меню розділів.

Рис. 4.1.3 Шапка сайту

Рис. 4.1.4 Горизонтальне меню.

В основній частині розташований вміст того чи іншого розділу: чи то список новин, проектів, подій чи просто контактна інформація чи інша інформація.

Дані сторінки всі мають схожу структуру, відрізняється лише наповнення. Зразок сторінки з лекцією показано на рис. 4.1.5.

Рис. 4.1.5 Основна частина

В нижній частині знаходиться футер (підвал) сайту в якому знаходиться посилання на соціальні мережі і карта з позначенням місця знаходження громадської організації показано на рис. 4.1.6.

Рис. 4.1.6

4.2 Розробка структури бази даних

Сайт зроблений таким чином, що всі сторінки зберігаються в базі. Що в свою чергу полегшує додавання нових пунктів меню, сторінок, статей и т.д. Вибір потрібної сторінки з бази здійснюється шляхом обробки переданих значень.

Рис. 4.2.1 Таблиці бази даних

База даних містить 6 таблиць (рис 3.1.), які використовуються в проекті. Таблиці my_articles, my_banners, my_menu, my_registration, my_sections, my_user відповідають за зберігання всіх даних web-ресурсу. Враховуючи пріоритетність зміни, додавання, видалення статей було прийнято рішення зберігати всі тексти в базі даних. Що дозволило нам створити динамічний сайт.

Далі розібрані окремі таблиці бази даних докладно.

Рис. 4.2.2 Структура таблиці my_articles.

У даній таблиці знаходяться всі новини, події, проекти інформаційного web-ресурсу які виводяться на основну частину.

Рис. 4.2.3 Структура таблиці my_banners (для зберігання коду банерів на сайті)

Рис. 4.2.4 Структура таблиці my_menu (містить меню сайту)

Рис. 4.2.5 Структура таблиці my _registration (містить подані користувачами заявки на вступ в громадську організацію)

Рис. 4.2.6 Структура таблиці my_sections (зберігає інформацію про відділи громадської організації)

Рис. 4.2.7 Структура таблиці my_user(дані адміністраторів сайту )

Меню навігації генерується автоматично використовуючи базу даних. З бази даних отримуємо пункти менню, які зберігається в полі tiitle таблиці my_menu (рис 1.4). У свою чергу браузер вже отримує готовий html код, до якого застосовує клас CSS.

У результаті виходить динамічне горизонтальне меню навігації. Додана сторінка першого рівня, автоматично відображається в меню навігації .

Що дає можливість не змінювати програмний код і уникати зайвих витрат, пов'язаних з викликом програміста для додавання матеріалу на сайт.

4.3 Розробка структури web-ресурсу

У даному дипломному проекті використовуються такі методи передачі даних:

1. Метод GET. При використанні цього методи дані передаються через рядок адреси. До URL-адреси додається знак "?", після якого перераховуються параметри та їх значення. Наприклад:

http://fainemisto.te.ua /index.php?page_id=1

В даному прикладі скрипту index.php передається параметр з ім'ям "page_id", значення якого рівне "1". Для того, щоб зчитати передане значення використовується асоціативний масив $_GET. Наприклад: $_GET[`page_id'].

При передачі кількох параметрів за допомогою GET-метода, вони розділяються за допомогою символа "&". Наприклад:

<http://fainemisto.te.ua/admin.php?mod=Admins&EditAdmin=1&admin_id=2>

2. Метод POST. Даний метод передає значення параметрів за допомогою рядка, який є прихованим від користувача. Більшість форм, які реалізовано у представленій роботі, передають дані саме за допомогою цього метода. Наприклад, форма для подання заявки на вступ має такий вигляд:

<form method="post" name="useraddform">

Імя:<input type="text" name="user_name"><br>

Прізвище:<input type="text" name="user_suename">

Пошта:<input type="text" name="user_mail">

Телефон:<input type="text" name="user_phone">

</form>

Для того, щоб прочитати введений користувачем особистих даних, у скриптах використовується масив $_POST. Наприклад:

$_POST[`user_name'], $_POST[`user_surname'].

Сеансові змінні. Основу сесій (сеансів) складає механізм ідентифікації користувача та механізм збереження оточення. При першому старті сеансу сесії генерується унікальний ідентифікатор - SID. Далі, цей ідентифікатор зберігається у користувача на комп'ютері через кукі. Одночасно, на сервері, у деякій директорії, створюється файл з назвою SID. При повторному звернені користувача до ресурсу, якщо в кукі або РНР знайде ідентифікатор, який співпаде з ім'ям тимчасового файла, РНР автоматично завантажить з цього файлу всі змінні та їх значення. Цей спрощений опис механізму роботи сесій повинен дати уявлення про можливі способи їх використання.

Для початку роботи з сесіями в роботі використано наступні функції:

?session_start() - розпочати роботу із сесією;

?session_destroy() - завершення роботи із сесією; знищує усі дані, які зберігалися у сесії;

?session_id() - отримати SID;

?session_register($name1, $name2, …) - зареєструвати у сесії змінні;

?session_unregister($name) - видалити змінну $name із сесії;

Для того, щоб отримувати доступ до даних сесії використовується асоціативний масив $_SESSION.

На фізичному рівні структура сайту є впорядкованим набором файлів різного типу (HTML-сторінки, зображення, програми, мультимедійні файли). Продумана і зручна файлова структура допомагає розробнику оптимізувати свою роботу, а також буде зрозумілою для інших фахівців, що працюють над проектом.

Слідуючи сучасним тенденціям, мною було розроблено web-ресурсу для громадської організації "Файне місто".

Фізична структура даного сайту показана на Рис. 1.9.

Рис. 1.9 Структура веб-сервера та веб-сайту

В якості веб-сервера використано пакет Denwer, тому цим і обумовлена наступна структура веб-сервера:

?denwer - папка містить скрипти для запуску, перезапуску та зупинки роботи веб-сервера.

?home - тут розміщуються папки віртуальних хостів;

?tmp - зберігає тимчасові файли;

?usr - у цій папці розміщуються файли веб-сервера Apache, мови програмування PHP, сервера баз даних MySQL і т.п.

База даних MySQL зберігається на сервері у папці:

Z:\usr\local\mysql5\data\mybase

Всі скрипти сайту розміщуються у папці Z:\home\faynemisto.te.ua\www.

Веб-сайт має таку структуру:

?css - у папці зберігаються каскадні таблиці стилів для нашого web-ресурсу.

?data - містить графічні файли, архіви, текстові документи, які неможливо розмістити у базі даних;

?fonts - містить шрифти які потрібні для правильного відображення тексту на сторінках ;

?image - містить в собі всі необхідні графічні матеріали, які потрібні для формування дизайну сайту.

?tpl - папка яка містить в собі файли з розширенням .tpl з яких система формує готову сторінку .

?lib - у даній папці знаходяться всі модулі, які встановлюють з'єднання з базою даних і керують вмістом баз даних також формують всі сторінки сайту;

?index.php - головний файл сайту.

Скрипти та класи, які реалізують ядро портальної системи.

Index.php

<?php

mb_internal_encoding("UTF-8");

require_once "lib/database_class.php";

require_once "lib/frontpagecontent_class.php";

require_once "lib/sectioncontent_class.php";

require_once "lib/articlecontent_class.php";

require_once "lib/regcontent_class.php";

require_once "lib/messagecontent_class.php";

$db = new DataBase();

$view = $_GET["view"];

switch ($view) {

case "":

$content = new FrontPageContent($db);

break;

case "section":

$content = new SectionContent($db);

break;

case "articles":

$content = new ArticlesContent($db);

break;

case "reg":

$content = new RegContent($db);

break;

case "message":

$content = new MessageContent($db);

break;

default: exit;

}

echo $content->getContent();

?>

database_class.php

<?php

require_once "config_class.php";

require_once "checkvalid_class.php";

class DataBase{

private $config;

private $mysqli;

private $valid;

public function __construct(){

$this->config = new Config();

$this->valid = new CheckValid();

$this->mysqli = new mysqli($this->config->host, $this->config->user, $this->config->password, $this->config->db);

$this->mysqli->query("SET NAMES 'utf-8'");

}

private function query($query){

return $this->mysqli->query($query);

}

private function select ($table_name, $fields, $where="", $order="", $up=true, $limit=""){

for ($i =0; $i < count($fields); $i++){

if((strpos($fields[$i], "(") === false) && ($fields[$i] != "*")) $fields[$i] = "`".$fields[$i]."`";

}

$fields = implode(",", $fields);

$table_name = $this->config->db_prefix.$table_name;

if(!$order) $order = "ORDER BY `id`";

else{

if ($order != "RAND() ") {

$order = "ORDER BY `$order`";

if (!$up) $order .= " DESC";

}

else $order = "ORDER BY $order";

}

if($limit) $limit = "LIMIT $limit";

if($where) $query = "SELECT $fields FROM $table_name WHERE $where $order $limit";

else $query ="SELECT $fields FROM $table_name $order $limit";

$result_set= $this->query($query);

if(!$result_set) return false;

$i = 0;

while($row = $result_set->fetch_assoc()){

$data[$i] = $row;

$i++;

}

$result_set->close();

return $data;

}

public function insert($table_name, $new_values){

$table_name = $this->config->db_prefix.$table_name;

$query = "INSERT INTO $table_name(";

foreach ($new_values as $field => $value) $query .="`".$field."`,";

$query =substr($query, 0, -1);

$query .=") VALUES(";

foreach ($new_values as $value) $query.= "'".addslashes($value)."',";

$query = substr($query, 0, -1);

$query .=")";

return $this->query($query);

}

private function updata($table_name, $upd_fields, $where){

$table_name = $this->config->db_prefix.$table_name;

$query ="UPDATA $table_name SET";

foreach ($upd_fields as $field => $value) $query .= "`$field` = '".addslashes($value)."',";

$query= substr($query, 0, -1);

if($where) {

$query .= "WHERE $where";

return $this->query($query);

}

else return false;

}

public function delete($table_name, $where="") {

$table_name = $this->config->db_prefix.$table_name;

if($where) {

$query = "DELETE FROM $table_name WHERE $where";

return $this->query($query);

}

else return false;

}

public function deleteAll($table_name) {

$table_name = $this->config->db_prefix.$table_name;

$query = "TRUNCATE TABLE `$table_name`";

return $this->queet($query);

}

public function getField($table_name, $field_out, $field_in, $value_in) {

$data = $this->select($table_name, array($field_out), "`$field_in` = '".addslashes($value_in)."'");

if(count($data) != 1)return false;

return $data[0][$field_out];

}

public function getFieldOnID($table_name, $id, $field_out) {

if(!$this->existsID($table_name, $id)) return false;

return $this->getField($table_name, $field_out, "id", $id);

}

public function getAll($table_name, $order, $up) {

return $this->select($table_name, array("*"), "", $order, $up);

}

public function getAllOnField($table_name, $field, $value, $order, $up) {

return $this->select($table_name, array("*"), "`$field` ='".addslashes($value)."'", $order, $up);

}

public function getLastID($table_name) {

$data = $this->select($table_name, array("MAX(`id`)"));

return $data[0] ["MAX(`id`)"];

}

public function deleteOnID($table_name, $id) {

if (!$this->existsID($table_name, $id)) return false;

return $this->delete($table_name, "`id` = '$id'");

}

public function setField($table_name, $field, $value, $field_in, $value_in) {

if (!$this->existsID($table_name, $id)) return false;

return $this->updata($table_name, array($field => $value), "`$field_in` ='".addslashes($value_in)."'");

}

public function setFieldOnID($table_name, $id, $field, $value) {

if (!$this->existsID($table_name, $id)) return false;

return $this->setField($table_name, $field, $value, "id", $id);

}

public function getElementOnID($table_name, $id){

if (!$this->existsID($table_name, $id)) return false;

$arr = $this->select($table_name, array("*"), "`id` = '$id'");

return $arr[0];

}

public function getRandomElements($table_name, $count) {

return $this->select($table_name, array("*"), "", "RAND()", true, $count);

}

public function getCount($table_name) {

$data = $this->select($table_name, array("COUNT(`id`)"));

return $data[0]["COUNT(`id`)"];

}

public function isExists($table_name, $field, $value) {

$data = $this->select($table_name, array("id"), "`$field` ='".addslashes($value)."'");

if(count($data) === 0) return false;

return true;

}

private function existsID($table_name, $id) {

if(!$this->valid->validID($id)) return false;

$data = $this->select($table_name, array("id"), "`id`='".addslashes($id)."'");

if(count($data) === 0) return false;

return true;

}

public function __destruct() {

if($this->mysqli) $this->mysqli->close();

}

}

?>

Modules_class.php

<?php

require_once "config_class.php";

require_once "articles_class.php";

require_once "section_class.php";

require_once "user_class.php";

require_once "menu_class.php";

require_once "banner_class.php";

require_once "message_class.php";

abstract class Modules {

protected $config;

protected $articles;

protected $section;

protected $user;

protected $menu;

protected $banner;

protected $message;

protected $data;

public function __construct($db) {

session_start();

$this->config = new Config();

$this->articles = new Articles($db);

$this->section = new Section($db);

$this->user = new User($db);

$this->menu = new Menu($db);

$this->banner = new Banner($db);

$this->message = new Message();

$this->data = $this->secureData($_GET);

}

public function getContent() {

$sr["title"] = $this->getTitle();

$sr["meta_desc"] = $this->getDescription();

$sr["meta_key"] = $this->getKeyWords();

$sr["menu"] = $this->getMenu();

$sr["auth_user"] = $this->getAuthUser();

$sr["banners"] = $this->getBanners();

$sr["top"] = $this->getTop();

$sr["middle"] = $this->getMiddle();

$sr["pagination"] = $this->getBottom();

return $this->getReplaceTemplate($sr, "main");

}

abstract protected function getTitle();

abstract protected function getDescription();

abstract protected function getKeyWords();

abstract protected function getMiddle();

protected function getMenu() {

$menu = $this->menu->getAll();

for ($i = 0; $i < count($menu); $i++) {

$sr["title"] = $menu[$i]["title"];

$sr["link"] = $menu[$i]["link"];

$text .=$this->getReplaceTemplate($sr, "menu_item");

}

return $text;

}

protected function getAuthUser() {

$sr["message"] = "";

return $this->getReplaceTemplate($sr, "form_auth");

}

protected function getBanners() {

$banners = $this->banner->getAll();

for ($i = 0; $i < count($banners); $i++) {

$sr["code"] = $banners[$i]["code"];

$text .= $this->getReplaceTemplate($sr, "banner");

}

return $text;

}

protected function getTop() {

return "";

}

protected function getBottom() {

return "";

}

private function secureData($data) {

foreach ($data as $key => $value) {

if (is_array($value)) $this->secureData($value);

else $data[$key] = htmlspecialchars($value);

}

return $data;

}

protected function getBlogArticles($articles, $page) {

$start = ($page - 1) * $this->config->count_blog;

$end = (count($articles) > $start + $this->config->count_blog)? $start + $this->config->count_blog: count($articles);

for ($i = $start; $i < $end; $i++) {

$sr["title"] = $articles[$i]["title"];

$sr["intro"] = $articles[$i]["intro_text"];

$sr["date"] = $this->formatDate($articles[$i]["date"]);

$sr["link_article"] = $this->config->address."?view=articles&amp;id=".$articles[$i]["id"];

$text .=$this->getReplaceTemplate($sr, "articles");

}

return $text;

}

protected function formatDate($time) {

return date("Y-m-d H:i:s", $time);

}

protected function getMessage() {

$message = $_SESSION["message"];

unset($_SESSION["message"]);

$sr["message"] = $this->message->getText($message);

return $this->getReplaceTemplate($sr, "message_string");

}

protected function getPagination($count, $count_on_page, $link) {

$count_page = ceil($count / $count_on_page);

$sr["number"] = 1;

$sr["link"] = $link;

$page = $this->getReplaceTemplate($sr, "number_page");

$sym = (strpos($link, "?") !==false)? "&amp;": "?";

for ($i = 2; $i <= $count_page; $i++) {

$sr["number"] = $i;

$sr["link"] = $link.$sym."page=$i";

$page .= $this->getReplaceTemplate($sr, "number_page");

}

$els["page"] = $page;

return $this->getReplaceTemplate($els, "pagination");

}

protected function getTemplate($name) {

$text = file_get_contents($this->config->dir_tmpl.$name.".tpl");

return str_replace("%address%", $this->config->address, $text);

}

protected function getReplaceTemplate($sr, $template) {

return $this->getReplaceContent($sr, $this->getTemplate($template));

}

private function getReplaceContent($sr, $content) {

$search = array();

$replace = array();

$i = 0;

foreach ($sr as $key => $value) {

$search[$i] = "%$key%";

$replace[$i] = $value;

$i++;

}

return str_replace($search, $replace, $content);

}

}

?>

Checkvalid_class.php

<?php

require_once "config_class.php";

class CheckValid {

private $config;

public function __construct(){

$this->config = new Config();

}

public function validID($id){

if(!$this->isIntNumber($id)) return false;

if ($id <= 0) return false;

return true;

}

public function validLogin($login){

if ($this->isContainQuotes($login)) return false;

if (preg_match("/^\d*/", $login)) return false;

return $this->validString($login, $this->config->min_length, $this->config->max_length);

}

public function validHase($hase){

if (!$this->validString($hase, 32, 32)) return false;

if (!$this->isOnlyLettersAndDigits($hase)) return false;

return true;

}

public function validTimeStamp($time){

return $this->isNegativeInteger($time);

}

private function isIntNumber($number){

if( !is_int($number) && !is_string($number)) return false;

if (!preg_match("/^-?(([1-9][0-9]*|0))$/", $number)) return false;

return true;

}

private function isNegativeInteger($number){

if (!$this->isIntNumber ($number)) return false;

return true;

}

private function isOnlyLettersAndDigits($string) {

if (!is_int ($string) && (!is_string($string))) return false;

if (!preg_match("/[a-zа-я0-9]*/i", $string)) return false;

return true;

}

private function validString($string, $min_length, $max_length){

if (!is_string($string)) return false;

if (strlen($string) < $min_length) return false;

if (strlen($string) > $min_length) return false;

return true;

}

private function isContainQuotes($string) {

$array = array("\"", "'", "&quot;", "&apos;");

foreach ($array as $key =>$value) {

if (strpos($string, $value) !== false) return true;

}

return false;

}

}

?>

Global_class.php

<?php

require_once "config_class.php";

require_once "checkvalid_class.php";

require_once "database_class.php";

abstract class GlobalClass {

private $db;

private $table_name;

protected $config;

protected $valid;

protected function __construct($table_name, $db) {

$this->db = $db;

$this->table_name = $table_name;

$this->config = new Config();

$this->valid = new CheckValid();

}

protected function add($new_values) {

return $this->db->insert($this->table_name, $new_values);

}

protected function edit($id, $upd_fields) {

return $this->db->updataOnID($this->table_name, $id, $upd_fields);

}

public function delete($id) {

return $this->db->deleteOnID($this->table_name, $id);

}

public function deleteAll() {

return $this->db->deleteAll($this->table_name);

}

protected function getField($field_out, $field_in, $value_in) {

return $this->db->getField($this->table_name, $field_out, $field_in, $value_in);

}

protected function getFieldOnID($id, $field) {

return $this->db->getFieldOnID($this->table_name, $id, $field);

}

protected function setFieldOnID($id, $field, $value) {

return $this->db->setFieldOnID($this->table_name, $id, $field, $value);

}

public function get($id) {

return $this->db->getElementOnID($this->table_name, $id);

}

public function getAll($order ="", $up = true) {

return $this->db->getAll($this->table_name, $order, $up);

}

protected function getAllOnField($field, $value, $order = "", $up = true) {

return $this->db->getAllOnField($this->table_name, $field, $value, $order, $up);

}

public function getRandomElement($count) {

return $this->db->getRandomElements($this->table_name, $count);

}

public function getLastID() {

return $this->db->getLastID($this->table_name);

}

public function getCount() {

return $this->db->getCount($this->table_name);

}

protected function isExists($field, $value) {

return $this->db->isExists($this->table_name, $field, $value);

}

}

?>

Config_class.php

<?php

class Config {

var $sitename = "Test.local";

var $address = "http://fainemisto.te.ua/";

var $secret ="vanya1991";

var $host ="localhost";

var $db ="mybase";

var $db_prefix ="my_";

var $user ="root";

var $password ="";

var $admname ="Auksters Ivan";

var $admemail = "auksters2@gmail.com";

var $min_login = 3;

var $max_login = 255;

var $dir_text = "lib/text/";

var $dir_tmpl = "tpl/";

var $count_blog = 3;

}

?>

Fontpagecontent_class.php

<?php

require_once "modules_class.php";

class FrontPageContent extends Modules {

protected $articles;

private $page;

public function __construct($db) {

parent::__construct($db);

$this->articles = $this->articles->getAllSortDate();

$this->page = (isset($this->data["page"]))? $this->data["page"]: 1;

}

protected function getTitle() {

if($this->page > 1) return "Довідник PHP - Сторінка".$this->page;

else return "Довідник PHP";

}

protected function getDescription() {

return "Довідник PHP.";

}

protected function getKeyWords() {

return "Довідник PHP, Довідник PHP функцій";

}

protected function getTop() {

return $this->getTemplate("main_article");

}

protected function getMiddle() {

return $this->getBlogArticles($this->articles, $this->page);

}

protected function getBottom() {

return $this->getPagination(count($this->articles), $this->config->count_blog, $this->config->address);

}

}

?>

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


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

  • Переваги технології асинхронного обміну даних (AJAX), огляд створених на її основі Інтернет-проектів. Алгоритм роботи веб-ресурсу, що надає можливість обміну повідомленнями між користувачами за допомогою AJAX-технології. Програмна реалізація веб-додатку.

    дипломная работа [398,3 K], добавлен 18.12.2013

  • Мова розмітки гіпертекстових сторінок HTML. Каскадні таблиці стилів CSS. Розробка інформаційного Web-сайту: меню навігації, структура та інтерфейс сайту. Тестування, впровадження та тестування розробленого проекту. Безпека умов праці при використанні ПК.

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

  • Основні особливості функціонування, переваги та недоліки даних CMS. Створення інформаційного ресурсу для будівельної компанії "Фарлеп". Встановлення Drupal та зміна теми сайту. Покращення функціональних можливостей CMS Drupal за допомогою модулів.

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

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

    курсовая работа [983,7 K], добавлен 01.02.2015

  • Серверна мова програмування PHP. База даних MySQL. Мова та стандарти XML. Рівні та способи взаємодії засобів розробки. Засоби трансформації XML. Розробка інтернет-додатку з використанням PHP, MYSQL, XML. Розрахунок трудомісткості створення системи.

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

  • Розробка динамічних та статичних зображень для сайту за допомогою відеоредактора Adobe After EffectCS6 та графічного редактора Adobe Photosop CS6. Розробка структури сайту. Багатоваріантний аналіз розв’язку задачі. Створення анімованого логотипу.

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

  • Побудова апаратної структури для серверу, встановлення операційної системи і програмного забезпечення, розробка веб-сайту. Розрахунок річної суми економічного ефекту від впровадження комп’ютерної мережі. Проектування освітлення, засобів пожежогасіння.

    дипломная работа [5,6 M], добавлен 02.07.2015

  • Ознайомлення з системами CMS. Розділення інформаційного наповнення, структура та дизайн. Призначення СMS typo3, режими роботи, базові модулі. Можливості BackEnd для адміністраторів сайту. Робота з шаблонізатором TemplaVoila. Створення форми авторизації.

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

  • Реалізація портальної системи, на основі якої працює веб-сайт ПП "Агромат". Розробка системи адміністрування веб-сайтом для редагування контенту веб-сайту за допомогою веб-браузера з використанням мови програмування РНР та сервера баз даних MySQL.

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

  • Опис інформаційного забезпечення системи для розробки сайту. Технічне завдання на розробку web-сторінки. Комплект засобів, проектування та завантаження сторінок. Тестування сайту в різних браузерах. Розрахунок собівартості та ціни програмного продукту.

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

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