Лекция 5.2 Алгоритмизация и программирование. Создание бэкенда сайта продолжение

Презентация к лекции

rkpdf


Создание бэкенда сайта. Продолжение

Советы для проектирования интерфейса администратора

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

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

Специально для этого проекта создана база данных backend.

На данном этапе проектирования в этой базе создана пока одна таблица content

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

Поле content предназначено для хранения контента разделов. Контент будет формироваться с помощью редактора TinyMCE.

Файловая структура проекта

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

  • папка плагина tinymce;
  • файл db_include.php;
  • файл cp.php;
  • файл index.php

Папка tinymce содержит в себе файлы, необходимые для работы редактора tinimce. Описание редактора приведено в лекции «Лекция 5 Алгоритмизация и программирование. Применяем PHP »

Файл db_include.php содержит код для соединения и подключения к базе данных. Его описание содержится в лекции «Взаимодействие PHP и MySQL ».

Файл cp.php это наш бэкенд, административная часть. Название «cp» - аббревиатура Control Panel.

Файл index.php - фронтенд сайта.

Рекомендации по структуре и логике при разработке бэкенда (cp.php)

Файл состоит из двух логических разделов:

  • Раздел php скрипта;
  • Раздел HTML шаблона с вставками JavaScript кода и переменных php.

Раздел php скрипта включает в себя:

  • Подключение файла db_include.php;
  • Приём переменных, переданных сценарию методом GET и POST;
  • Сценарий удаления раздела
  • Формирование меню разделов;
  • Обработчик ссылки создания нового раздела
  • Сценарий создания нового раздела
  • Сценарий подготовки раздела к редактированию
  • Сценарий редактирования раздела

Раздел HTML шаблона включает в себя:

  • JavaScript код подключения плагина tinymce;
  • JavaScript код настройки работы плагина tinymce;
  • Форма, содержащая поле типа textarea, поле input типа text и кнопку типа submit для отправки формы;
  • Кнопки-ссылки «Удалить раздел» и «Создать раздел»
  • Меню разделов

Описание работы сценариев

При запуске файла cp.php происходит подключение к базе данных backend.

Потом запускается сценарий формирования меню разделов. 

  1. //Формирование меню разделов//
  2. $query="SELECT id, razdely from content";
  3. $result=mysql_query($query);
  4. if($result)
  5. {
  6. $menu='<table width="500" cellpadding="2" cellspacing="0" border="1" bordercolor="#CCCCCC" align="center">
  7. <tr>
  8. <th>ID</th>
  9. <th>Раздел</th>
  10. </tr>
  11. ';
  12. while ($row = mysql_fetch_assoc($result))
  13. {
  14. $menu.='<tr>
  15. <td><a href="?p=2&id='.$row['id'].'">'.$row['id'].'</a></td>
  16. <td>'.$row['razdely'].'</td>
  17. </tr>';
  18. }
  19. $menu.='</table>';
  20. }
  21.  

Этот сценарий отправляет запрос к таблице content базы данных на выборку записей значений, содержащихся в полях id и razdely. С помощью цикла while происходит получение данных, которые обёртываются в табличную форму и присваиваются переменной $menu. Эта переменная в результате работы сценария содержит полный HTML код меню разделов, упакованных в таблицу со столбцами ID и Раздел. При этом id оформляется в виде ссылки для отправки команды на редактирование разделов.

  1. <a href="?p=2&id='.$row['id'].'">'.$row['id'].'</a>

Ссылка содержит параметр p=2 и параметр id, равный id раздела, которые передаются методом GET сценарию редактирования разделов.

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

для создания раздела;

для редактирования раздела.

Для создания раздела необходимые параметры передаются при клике по кнопке «Создать раздел»

<a href="?p=1"><button>Создать раздел</button></a>

В этом случае запускается сценарий «Обработчик ссылки создания нового раздела». Он формирует переменную $action для создания раздела.

  1. ///Обработчик ссылки создания нового раздела///
  2. if($p==1)
  3. {
  4. $action='?ad=12';
  5. } 

Эта переменная вставлена в html код формы:

  1. <form method="post" action="‹?=$action;?›"›

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

Этот сценарий готовит запрос на добавление и отправляет его. В результате в таблице content появляется новая запись.

  1. //обработчик создания нового раздела/////
  2. if($ad==12)
  3. {
  4. $query="INSERT INTO `backend`.`content` (
  5. `id` ,
  6. `razdely` ,
  7. `content`
  8. )
  9. VALUES (
  10. NULL , '$razdely', '$incontent'
  11. )";
  12.  
  13. $res=mysql_query($query);
  14. if(!$res)
  15. {
  16. echo $query;
  17. }
  18. else
  19. header('location:?p=1');
  20. }
  21.  

Для редактирования раздела необходимо в меню раздела кликнуть по ссылке на id раздела. При этом вступает в работу сценарий подготовки раздела к редактированию:

  1. //обработчик подготовки раздела к редактированию
  2. if($p==2)
  3. {
  4. $action='?ad=22&id='.$id;
  5. ///Формируем запрос выборки по id раздела
  6. $query="SELECT * from content WHERE id=".$id;
  7. $res=mysql_query($query);
  8. if($res)
  9. {
  10. $row=mysql_fetch_assoc($res);
  11. $incontent=$row['content'];
  12. $id=$row['id'];
  13. $razdely=$row['razdely'];
  14. }
  15. else echo $query;
  16. }

Данный обработчик формирует переменную $action для формы редактора где сформирован запрос GET, передающий параметры ad=22 и id= id редактируемой записи.

Далее формируется запрос к базе данных на выборку из таблицы content единственной строки, соответствующей переданному в сценарий id.

Сформированный запрос отправляется в базу данных функцией mysql_query(), результат, возвращаемый базой данных записывается в переменную $res.

Далее проверяется истинность переменной $res и если запрос выполнился успешно, производится формирование массива $row с помощью функции mysql_fetch_assoc() в параметр которой передан результат запроса $res.

Из сформированного ассоциативного массива $row мы получаем значения полей, используя в качестве ключей имена полей. Значения присваиваем переменным:

$row=mysql_fetch_assoc($res);
			$incontent=$row['content'];
			$id=$row['id'];
			$razdely=$row['razdely'];
 

>

Переменные $incontent и $razdely подставлены в форму в соответствующие поля в качестве значений по умолчанию:


<textarea name="incontent"><?=$incontent;?></textarea>
<input name="razdely" type="text" size="120" value="<?=$razdely;?>">

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

  1. /////обработчик редактирования раздела///
  2. if($ad==22)
  3. {
  4. $query="UPDATE `backend`.`content` SET `content` = '".$incontent."', `razdely` = '".$razdely."'
  5. WHERE `content`.`id` =".$id;
  6. $result=mysql_query($query);
  7. if($result)
  8. {
  9. header('location:?p=2&id='.$id);
  10. }
  11. else echo $query;
  12. }

Данный сценарий формирует запрос к базе данных на изменение.

Запрос отправляется в базу данных, результат возвращается в переменную $result.

$result=mysql_query($query);

В случае успешного результата управление передаётся на сценарий подготовки раздела к редактированию с помощью заголовка header():

header('location:?p=2&id='.$id);

В заголовке передаётся id редактируемого раздела. И форма снова готова для редактирования.

Для удаления созданного раздела необходимо кликнуть по кнопке «Удалить раздел» Эта кнопка оформлена в виде ссылки:

<a href="?del=1&id="><button>Удалить раздел<⁄button><⁄a>

Ссылка методом GET передаёт параметры del=1 и id удаляемого раздела, хранящегося в переменной $id.

При этом запускается сценарий удаления раздела:

  1. /////Удаление раздела/////////
  2. if($del==1)
  3. {
  4. $query="DELETE from content where id=".$id;
  5. $res=mysql_query($query);
  6. if(!$res) echo $query;
  7. }

Этот сценарий формирует т передаёт запрос к базе данных на удаление записи, которой соответствует переданный id.

Все переменные, значения которых передаются методом GET и POST принимают значения в блоке приёма переменных, переданных сценарию методом GET и POST:

  1. /////Приём переменных//////////
  2. $p=$_GET['p'];
  3. $ad=$_GET['ad'];
  4. $razdely=$_POST['razdely'];
  5. $incontent=$_POST['incontent'];
  6. $id=$_GET['id'];
  7. $del=$_GET['del'];
  8. $action='';

Описание html шаблона

В разделе body html шаблона размещается код формы, часть элементов которой обёрнуты в таблицу.

В элементы формы встроены php переменные, в которые описанными выше сценариями передаются подставляемые значения.

Ниже формы размещены ссылки-кнопки, обёрнутые в теги button и встроенные для красоты в таблицу.

Ниже встроена php переменная, в которую сценарием формирования меню разделов передаётся html код меню разделов.

Завершает html шаблон демонстрация содержимого переменной $incontent, в которой содержится контент раздела.

Прочие рекомендации

При формировании запросов SQL рекомендуется во избежание ошибок синтаксиса использовать конструктор запросов, прелоставляемый сервисом phpMyAdmin.


©  «Эксклюзивные интернет-решения для бизнеса»
© www.oknemuan.ru
2003-2023