Php і mysql - пишемо свою cms - php

Частина 1. Запис в таблиці бази даних MySQL

По суті своїй CMS - це інструмент для запису в базу даних всієї інформації про сайт. Все це повинно міститися в таблицях, і у адміністратора сайту повинен бути зручний спосіб для введення інформації в таблиці, її зміни або видалення.

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

Запустимо локальний хост і створимо за допомогою phpMyAdmin базу даних з ім'ям simple_cms, а в ній - таблицю pages з двома полями title і content. Для цього увійдіть в розділ SQL на панелі phpMyAdmin і виконайте такий запит:

і phpMyAdmin побудує вам цю таблицю.

якщо ви знайомі з базами даних хоча б на рівні Microsoft Access, то ви пам'ятаєте, що кожне поле таблиці має ряд властивостей. В даному випадку ми присвоїли полю content властивість text. Здавалося б, логічно, адже воно і призначене для зберігання текстів. Але слід пам'ятати, що розмір цього поля обмежений, тому, якщо ви хочете зберегти в ньому текст "Війни і миру", то краще визначити його як longtext.

Таблиця бази даних - pages

Щоб керувати такою таблицею з адмінки, нам знадобиться форма, що складається з простого текстового поля (input type = "text") для введення заголовка, текстової області (textarea) для введення вмісту і кнопка "Відправити" (input type = "submit").

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

Введіть назву сторінки

Помістимо цю форму в файл page.php

Створимо файл config.php, який буде здійснювати підключення до бази даних.

Тепер, коли у нас з'явилося підключення до бази даних і скрипт для введення в неї потрібної інформації, залишається організувати відправку туди вмісту текстового поля з ім'ям my_title і текстової області my_text. З цією метою ми визначили в формі метод POST для передачі даних файлу admin.php -

.

Коли адміністратор внесе в поля форми інформацію і натисне кнопку "Відправити", цей метод присвоїть змінній $ _POST [ 'my_title'] значення текстового поля my_title, а змінної $ _POST [ 'my_text'] - значення текстової області my_text.

Щоб упевнитися в цьому, додамо невеликий код в початок файлу page.php:

Запустимо файл page.php. Якщо в програмі немає помилок, то ви побачите ваш заголовок і текст у вікні броузера.

Прекрасно! Залишилося тільки організувати запис цієї інформації в нашу базу даних. Для цього нам доведеться звернутися до мови запитів SQL, а точніше - до MySQL.

Щоб записати нові дані в таблицю бази даних, яка завдяки функції

вже підключена до роботи, нам слід використовувати оператор INSERT мови MySQL. Щоб не захаращувати код сторінки, вставте цей фрагмент у файл page.php замість коду виведення на друк:

Тобто, якщо від кнопки "Відправити" методом POST був переданий $ send (див. Name цієї кнопки!), То повинен виконатися даний запит (функція mysql_query), і в таблицю бази даних буде записано вміст полів форми.

Запис ця спочатку здається важким для читання, і в ній можна просто заплутатися в численних простих і подвійних лапках. Тому розглянемо її в "чистому вигляді".

Параметром функції mysql_query (); є сам SQL-запит, який можна представити у вигляді:

Так воно, начебто, зрозуміліше.

Тепер відкрийте phpMyAdmin і переконайтеся, що записи внесені до поля таблиці. Але це всього лише півсправи. Нам потрібно навчитися "витягувати" з таблиць необхідні дані, щоб працювати з ними в адмінці, а головне - показувати їх на сайті.

В остаточному вигляді файл page.php повинен виглядати так:

Про це - в наступній частині.

Частина 2. Читання з таблиць бази даних MySQL

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

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

Якщо в таблиці знаходяться вже декілька записів, то в "чистому" вигляді конструкція видасть нам тільки останню з них, адже значення змінної $ title весь час оновлюються в циклі while. Але ми застосуємо маленьку хитрість. У тому ж циклі будемо виводити їх на екран всі записи, одну за одною.

Для цього намалюємо таблицю, і частина її помістимо всередину циклу:

Для цього створимо файл editor.php з наступним кодом.

Розберемо основні конструкції цього скрипта.

Коли користувач натискає на такий лінк, він повертається на ту ж саму сторінку, але вже з певним значенням змінної $ page_title.

Наступний фрагмент коду шукає в базі даних таблицю pages, а в ній - значення поля content для якого поле title збігається зі значенням змінної $ page_title.

Знайшовши таке поле, він передає його вміст змінної $ content, яка і роздруковує його в текстовій області.

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

Частина 3. Редагування записів з таблиць бази даних MySQL

Додамо в початок файлу editor.php наступні фрагменти коду (виділено червоним):

А в самому кінці цього файлу допишемо:

Цей прийом називається сесії. Про те, як працюють сесії можна прочитати в численних підручниках по PHP, тут же я хочу відзначити, що сесія нам знадобиться для того, щоб у змінній запам'ятати сторінку, яку ми редагуємо. Хоча ми і натиснули на кнопку Редагувати, і отримали значення змінної $ page_title (заголовок редагованої сторінки), після того, як ми внесемо зміни і натиснемо на кнопку Зберегти, сторінка editor.php перезавантажиться, і значення $ page_title буде втрачено. Ось тому ми і збережемо його в $ _SESSION [ 'id'].

А коли форма відправить методом POST на перезавантажених сторінку editor.php значення змінної $ text_edit (таке ім'я ми дали текстової області), то нам вдасться запустити наступний код:

де save - це ім'я кнопки Зберегти.

Сподіваюся, ви зрозуміли, навіщо нам знадобилася змінна $ _SESSION [ 'id'].

Повний скрипт файлу editor.php буде виглядати так:

Звичайно, було б красивіше, щоб відредагований текст залишався в вікні тексту та після натискання кнопки Зберегти. Але я впевнений, що ви без особливих зусиль зможете дописати потрібний фрагмент коду.

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

Частина 4. Видалення записів з таблиць бази даних MySQL

Додамо ще одну клітинку до таблиці файлу editor.php:

Абсолютно неважливо, яке значення ми передамо змінної $ delete, можете написати delete = 1 або delete = abcd, а важливо те, що тепер можна написати умова, за допомогою якого ми видалимо обраний запис:

В остаточному вигляді наш файл editor.php виглядає так:

Ось, мабуть, і все, що я хотів розповісти про принципи роботи адмінки. Звичайно ж, у цій CMS все окремі модулі (а у нас їх поки три: page.php, editor.php і службовий файл config.php) працюють під управлінням головного файлу index.php, який одноразово підключає всі модулі до бази даних і по бажанням користувача може приєднувати до себе модуль створення сторінок, модуль редагування, а також масу інших модулів (модуль меню сайту, модуль управління гостьовою книгою, банерами і т.п.). Важливо тільки розуміти, що будь-які модулі, будь-які дії в адмінці засновані на чотирьох головних операторах мови SQL:

  • INSERT - вставити запис в базу даних;
  • SELECT - вибрати записи з бази даних;
  • UPDATE - змінити запис;
  • DELETE - видалити запис.

Так що нічого надскладного немає в тому, щоб написати свою власну адмінку. Будь-які CMS, навіть такі гіганти як Joomla, працюють на одному і тому ж принципі.

А вже підключити до адмінки сам сайт - це взагалі простіше простого, після того, як ви написали скрипт самої адмінки.