И галопом по Европам...
Sla, если ты говоришь:
Отделяй мух от котлет
Представление от контроллера и модели
Т.е. html отдельно, php отдельно, sql отдельно
Не поверишь...
Я не знаю сколько должно быть файлов...
хоть один.
Это не суть важно...
Главное разделение сущностей
представление (view)
обработка (controller)
хранение (model)
То хоть потрудись объяснить, что это такое, если человек не знает.
Итак, в веб-приложении есть 2 места выполнения работы: сервер и клиент (браузер пользователя). Между собой они общаются по сети, по протоколу HTTP.
Браузер по протоколу посылает серверу:
- либо простой запрос страницы, когда пользователь открывает нужный URL в браузере,
- либо сложный запрос с данными формы, когда пользователь на странице с формой нажимает submit или если на странице есть JavaScript-код, который умеет программно посылать запросы.
Сервер, получив любой запрос, сначала анализирует URL и определяет, какой конкретно из файлов на сервере нужно принять в обработку. Если это просто HTML-файл, картинка, файл стилей CSS, документ типа PDF, TXT и т.д. - такой файл возвращается как есть. Если это файл определённого зарегистрированного на сервере типа - тот же PHP, такой файл запускается как программа при помощи одного из модулей сервера. Но итогом работы этой программы всё равно должен быть документ (обычно HTML), который потом уйдёт в браузер пользователю. Браузер что получил, то и покажет (или будет программно обрабатывать с помощью JavaScript-кода).
Если говорить о специальных языках для веб-программирования - каким является PHP, - есть два способа сформировать HTML документ как результат работы программы. Первый способ: с помощью разных echo и print записывать нужный текст, который образует собой HTML. Второй способ - использовать скобки <?php ... ?>. Всё, что между ними - то рассматривается как код программы для выполнения, что вне этих скобок рассматривается как текст, который передаётся браузеру без изменений. Вот в Википедии хорошая иллюстрация:
<html>
<head>
<title>Тестируем PHP</title>
</head>
<body>
<?php echo 'Hello, world!'; ?>
</body>
</html>
Из исполняемой программы тут только echo со строчкой.
Теперь о model, view, controller. Это такой приём при конструировании архитектуры, когда программа обработки запроса разделяется на три соответствующие части:
- controller - это такая программа, которая принимает любые (простые или сложные) запросы от пользователей, вносит изменения в модель;
- model - это та часть программы, которая работает с данными и отвечает в том числе за то, чтобы помнить, какой из пользователей что делает на сайте;
- view - это та часть программы, которая на основании данных модели формирует HTML или XML для передачи в браузер.
Таким образом, появляется рабочий цикл обработки запроса:
1) сначала инициализируется модель - она загружается, но ничего не делает;
2) затем запускается controller, вносит в изменения в model и запускает разные операции model,
3) в конце запускается view, чтобы по данным модели сформировать ответ на запрос - документ.
Вся эта тройка вместе вообще в программировании называется компонентом, хотя в веб-программировании она может называться страницей.
Вопрос о том, кто должен запускать view - controller или model - это вопрос открытый. Если это делает controller, соответствующая схеме model называется пассивной. Если это делает model, она называется активной, и тогда этого не делает controller. Это надо просто выбрать: как будет, а потом придерживаться этого правила.
Для чего вводится такое разделение на три части? Дело в том, что одна и та же модель может обслуживать много разных страниц, но каждая страница имеет свою однозначную пару controller и view. Более того, даже controller может быть один, с которым работают разные view (например, в том случае, когда нужно сделать на сайте отдельно страницу для мобильных телефонов, отдельно для больших компьютеров, или в том случае, когда пользователь на сайте может сам настроить способ отображения информации).
Всё описанное в целом называется архитектурой с тонким клиентом, потому что браузер только показывает HTML и больше никакой работы почти не делает. Сейчас, конечно, развиваются архитектуры с толстым клиентом, где браузер с помощью JavaScript реализует как controller, так и view самостоятельно, а сервер работает лишь как веб-сервис и реализует модель. Можно даже и так, что и модель в браузере, который обращается к разным сервисам в облаке.
Итак, судя по коду, мы тут делаем решение для тонкого клиента - т.е. вся обработка на сервере.
Теперь о разделении. В самом деле, можно разделить страницу на четыре документа. Для это будет: mypage-view.php, mypage-model.php, mypage-controller.php и mypage.php в качестве связки.
<?php
// Файл view по умолчанию
$view_file = 'mypage-view.php';
// Первым делом загружаем модель, пусть она проинициализируется,
// и будут доступны её функции для работы.
require('mypage-model.php');
// Дальше работает контроллер. Он принимает данные из формы,
// записывает в модель, запускает внутри модели какие-то операции.
require('mypage-controller.php');
// Либо модель - если она активная, либо контроллер, если модель пассивная,
// могут поменять значение $view_file, чтобы выбрать нужное view.
// В самом конце выбранное view формирует выходной документ.
// Для view также оказываются доступным функции модели.
require($view_file);
?>
Но, как и говорил
Sla, если кода мало, можно его на файлы не разделять, просто в одном файле будут чётко выделенные секции:
<?php // MODEL
// ...
?>
<?php // CONTROLLER
// ..
?>
<html>
<!-- тут HTML со вставками php в качестве view. -->
</html>
Затем я лично не понимаю, почему все дружно ломанулись создавать таблицы, когда ещё не отлажена работа формы без обращения к БД. Сначала нужно грамотно написать модель, в которой будут "заглушки" данных. Убедиться, что всё вместе: model, controller, view благополучно работают в том смысле, что введённые пользователем данные хотя бы запоминаются сервером и возвращаются обратно. И только потом начинать ковырять базу данных.