Создание html страниц с помощью PHP. PHP в HTML с помощью short_open_tag
Одно из главнейших достоинств PHP - то, как он работает с формами HTML. Здесь основным является то, что каждый элемент формы автоматически становится доступным вашим программам на PHP. Для подробной информации об использовании форм в PHP читайте раздел . Вот пример формы HTML:
Пример #1 Простейшая форма HTML
Ваше имя:
Ваш возраст:
В этой форме нет ничего особенного. Это обычная форма HTML без каких-либо специальных тегов. Когда пользователь заполнит форму и нажмет кнопку отправки, будет вызвана страница action.php . В этом файле может быть что-то вроде:
Пример #2 Выводим данные формы
Здравствуйте,
.
Вам
лет.
Пример вывода данной программы:
Здравствуйте, Сергей. Вам 30 лет.
Если не принимать во внимание куски кода с htmlspecialchars() и (int) , принцип работы данного кода должен быть прост и понятен. htmlspecialchars() обеспечивает правильную кодировку "особых" HTML-символов так, чтобы вредоносный HTML или Javascript не был вставлен на вашу страницу. Поле age, о котором нам известно, что оно должно быть число, мы можем просто преобразовать в integer , что автоматически избавит нас от нежелательных символов. PHP также может сделать это автоматически с помощью расширения filter . Переменные $_POST["name"] и $_POST["age"] автоматически установлены для вас средствами PHP. Ранее мы использовали суперглобальную переменную $_SERVER , здесь же мы точно так же используем суперглобальную переменную $_POST , которая содержит все POST-данные. Заметим, что метод отправки (method) нашей формы - POST. Если бы мы использовали метод GET , то информация нашей формы была бы в суперглобальной переменной $_GET . Кроме этого, можно использовать переменную $_REQUEST , если источник данных не имеет значения. Эта переменная содержит смесь данных GET, POST, COOKIE.
15 years ago
According to the HTTP specification, you should use the POST method when you"re using the form to change the state of something on the server end. For example, if a page has a form to allow users to add their own comments, like this page here, the form should use POST. If you click "Reload" or "Refresh" on a page that you reached through a POST, it"s almost always an error -- you shouldn"t be posting the same comment twice -- which is why these pages aren"t bookmarked or cached.
You should use the GET method when your form is, well, getting something off the server and not actually changing anything. For example, the form for a search engine should use GET, since searching a Web site should not be changing anything that the client might care about, and bookmarking or caching the results of a search-engine query is just as useful as bookmarking or caching a static HTML page.
1 year ago
Worth clarifying:
POST is not more secure than GET.
The reasons for choosing GET vs POST involve various factors such as intent of the request (are you "submitting" information?), the size of the request (there are limits to how long a URL can be, and GET parameters are sent in the URL), and how easily you want the Action to be shareable -- Example, Google Searches are GET because it makes it easy to copy and share the search query with someone else simply by sharing the URL.
Security is only a consideration here due to the fact that a GET is easier to share than a POST. Example: you don"t want a password to be sent by GET, because the user might share the resulting URL and inadvertently expose their password.
However, a GET and a POST are equally easy to intercept by a well-placed malicious person if you don"t deploy TLS/SSL to protect the network connection itself.
All Forms sent over HTTP (usually port 80) are insecure, and today (2017), there aren"t many good reasons for a public website to not be using HTTPS (which is basically HTTP + Transport Layer Security).
As a bonus, if you use TLS you minimise the risk of your users getting code (ADs) injected into your traffic that wasn"t put there by you.
Последнее обновление: 1.11.2015
Одним из основных способов передачи данных веб-сайту является обработка форм. Формы представляют специальные элементы разметки HTML, которые содержат в себе различные элементы ввода - текстовые поля, кнопки и т.д. И с помощью данных форм мы можем ввести некоторые данные и отправить их на сервер. А сервер уже обрабатывает эти данные.
Создание форм состоит из следующих аспектов:
Создание элемента в разметке HTML
Добавление в этот элемент одно или несколько поле ввода
Установка метода передачи данных: GET или POST
Установка адреса, на который будут отправляться введенные данные
Итак, создадим новую форму. Для этого определим новый файл form.php , в которое поместим следующее содержимое:
Вход на сайт
Логин:
Пароль:
Атрибут action="login.php" элемента form указывает, что данные формы будет обрабатывать скрипт login.php , который будет находиться с файлом form.php в одной папке. А атрибут method="POST" указывает, что в качестве метода передачи данных будет применяться метод POST.
Теперь создадим файл login.php , который будет иметь следующее содержание:
Чтобы получить данные формы, используется глобальная переменная $_POST . Она представляет ассоциативный массив данных, переданных с помощью метода POST. Используя ключи, мы можем получить отправленные значения. Ключами в этом массиве являются значения атрибутов name у полей ввода формы.
Так как атрибут name поля ввода логина имеет значение login (), то в массиве $_POST значение этого поля будет представлять ключ "login": $_POST["login"]
И поскольку возможны ситуации, когда поле ввода будет не установлено, например, при прямом переходе к скрипту: http://localhost:8080/login.php . В этом случае желательно перед обработкой данных проверять их наличие с помощью функции isset() . И если переменная установлена, то функция isset() возвратит значение true .
Теперь мы можем обратиться к форме:
И по нажатию кнопки введенные данные методом POST будут отправлены скрипту login.php :
Необязательно отправлять данные формы другому скрипту, можно данные формы обработать в том же файле формы. Для этого изменим файл form.php следующим образом:
Вход на сайт
Логин:
Пароль:
Большое значение в PHP имеет организация безопасности данных. Рассмотрим несколько простых механизмов, которые могут повысить безопасность нашего веб-сайта.
Но вначале возьмем форму из прошлой темы и попробуем ввести в нее некоторые данные. Например, введем в поле для логина "alert(hi);", а в поле для пароля текст "пароль":
После отправки данных в html разметку будет внедрен код javascript, который выводит окно с сообщением.
Чтобы избежать подобных проблем с безопасностью, следует применять функцию htmlentities() :
If(isset($_POST["login"]) && isset($_POST["password"])){
$login=htmlentities($_POST["login"]);
$password = htmlentities($_POST["password"]);
echo "Ваш логин: $login
Ваш пароль: $password";
}
И даже после ввода кода html или javascript все теги будут экранированы, и мы получим следующий вывод:
Еще одна функция - функция strip_tags() позволяет полностью исключить теги html:
If(isset($_POST["login"]) && isset($_POST["password"])){
$login=strip_tags($_POST["login"]);
$password = strip_tags($_POST["password"]);
echo "Ваш логин: $login
Ваш пароль: $password";
}
Результатом ее работы при том же вводе будет следующий вывод.
Шаблоны в PHP
Разделение оформления и содержания – извечная проблема веб-разработчика. Для держателя небольшого сайта в несколько страниц такой проблемы не возникает и изменение дизайна, либо другая правка внешнего вида страниц для него не представляет трудностей. Однако для крупных веб-ресурсов и порталов смешение этих двух важнейших компонентов сайта – оформления и содержания – просто недопустимо. Иначе сайт становится настолько неповоротлив, что владелец ресурса теряет над ним управление.
Столкнувшись однажды с такой проблемой, сайтостроители начали ломать голову над тем, как сделать так, чтобы информация не привязывалась никоем образом к дизайну и наоборот, чтобы внешний вид всего сайта менялся буквально одним движением руки.
Необходимо сказать, что способа идеального разделения оформления и содержания в наши дни пока не найдено. Но все же созданы определенные наработки и технологии, которые позволяют максимально приблизиться к этому идеалу. Прежде всего это технология использования шаблонов.
Понятие "шаблон" довольно обширно. Но чаще всего под шаблоном понимается некий документ (обычно в формате HTML), содержащий в себе всё оформление ресурса, либо только его части, а также специальные метки, которые в процессе генерации страницы заменяются на информационные данные.
Для работы с шаблонами используются специальные веб-приложения (если говорить о веб-разработках), которые могут обладать различными свойствами и функциями. Но чаще всего их роль сводится к тому, чтобы заменять вышеуказанные метки на информационные блоки и соединять полученные части страниц в единое целое.
Наверное, во всех языках вебпрограммирования есть подобные инструменты для работы с шаблонами: в Perl это FastTemplate (который, кстати, существует и для PHP, но его использование не рекомендуется, так как приемлемые для работы версии относятся еще к третьей версии PHP), в отношении PHP – это крупный и многофункциональный Smarty, а также ряд других более мелких "шаблонизаторов".
Smarty – одна из самых крупных разработок подобного рода. Реализован он, как и практически все приложения подобного типа, в виде класса.
Этот "шаблонизатор" имеет огромное количество возможностей: он не только осуществляет замену выделенных участков шаблона указанными данными, но и предоставляет использование внутри шаблона исполняемых участков, функций, конфигурационных файлов и т.д.
Описывать все его возможности и правила использвования не имеет смысла из-за экономии времени, к тому же к нему написана довольно хорошая документация, а примеры использования прилагаются к самому Smarty.
Smarty – это настоящий монстр по работе с шаблонами. Но, как понимаете, за столь широкую функциональность приходится платить ресурсами сервера и временем исполнения скрипта на его основе. В некоторых случаях из-за своей громоздкости Smarty кажется неповоротливым. Поэтому для сравнительно небольших проектов использование Smarty – обычно далеко не лучший выбор. В этом случае следует обратить внимание на более мелкие и менее функциональные, но тем не менее достойные инструменты.
Рассмотрим более простой пример шаблонов.
Код шаблона помещается внутрь HTML страницы и занимается генерацией динамического содержимого.
Пример 10.1.1:
Простейшая страничка
Страница 1 | Страница 2 | Страница 3 |
// Начало пункта меню
$menuItemCellStart = "
// Конец пункта меню
$menuItemCellEnd = "
// Начало content"а страницы
$pageContentStart = "
// Конец content"а страницы
$pageContentEnd = "
";// Footer страницы
$pageFooter = "
(с) 2001 Вася Пупкин
";// Заголовок страницы
// Содержимое меню
// Подгружаем темплейты
include("templates.php");
// Выводим заголовок
echo $pageHeaderStart.$title.$pageHeaderEnd;
// Выводим меню
echo $menuStart;
for($i=0;$i"\x03","}}"=>"\x04"));
// Используем регулярное выражение чтобы получить массив всех мест внутри темплейта,
// которые должны быть заменены на результаты подстановки.
preg_match_all("/\{([^\}]+)\}/i",$template,$matches);
// Если не было найдено ни одного места для подстановки -
// просто возвращаем исходный текст темплейта.
if (sizeof($matches)==0)
return($template);
// В этот массив мы будем собирать тексты, которые будут исползованы для
// подстановок в темплейт.
$replaces = array();
// Нам необходимо преобразовать все найденные места для подстановок внутри темплейта
// в регулярные выражения для их поиска. Тогда мы сможем впоследствии выполнить
// все подстановки одновременно, используя замену по массиву регулярных выражений.
for ($i=0;$i"\x01")),"\x02"," ");
// Проверяем, что из себя представляет строка, которую мы пытаемся обработать
if (strpos($match,"\x01")!==false)
// Эта строка содержит в себе несколько частей. Это значит, что кроме имени эта
// строка содержит какие-то параметры, которые требуют дополнительной обработки.
// Поскольку основная синтаксическая структура у нас состоит из 2 частей - имени
// и значения по-умолчанию - получаем эти две основные части в виде отдельных переменных
list($key,$default) = explode("\x01",$match,2);
// Исправляем regular expression для дальнейшей замены
$matches[$i] = "/\{$key\ [^\}]+\}/";
// Проверяем, чем является параметр, переданный внутри темплейта. Если он начинается
// с одного из специальных символов, то необходима дополнительная обработка этого значения.
// Однако это необходимо делать толлько в случае, если в переданных в функцию данных для
// замены нет текста для этой подстановки (потому что данные, переданные в качестве
// аргумента имеют более высокий приоритет).
if ((in_array($default,array("#","!"))) && (!isset($params[$key])))
// Получаем список аргументов. Первый символ отбраcываем, потому что это признак
// спеуиальной обработки и не относится к имени.
$words = explode("\x01",substr($default,1));
// Поскольку первым в полученном списке стоит имя, которое будет использоваться
// обработчиком - берем его в отдельную переменную и убираем из массива аргументов.
// Теперь в массиве $words - только список аргументов.
$name = array_shift($words);
// Проверяем, если количество аргументов - нечетное (т.е. нам необходим еще один, поскольку
// все аргументы рассматриваются как пары "имя-значение"), то добавляем пустую строку.
if ((sizeof($words)%2)!=0)
// Формируем массив параметров. Он должен быть в том же виде, в котором он передается
// в данную функцию (т.е. имя параметра задается в виде ключа ассоциативного массива).
$params = array();
for ($j=0;$j"{","\x04"=>"}")));
Теперь посмотрим, как можно сгенерировать ту же самую простейшую страничку, используя приведенную выше функцию.
Файл templates.php содежит описание всех необходимых шаблонов. Очень похоже на предыдущий вариант этого файла, но здесь в шаблонах используется описанный выше синтаксис для вставки текста.
Пример 10.1.4:
// Основной темплейт для страницы
$tplPage = .
Приведенный выше код — это обычный HTML с небольшим фрагментом PHP , который выводит текущую дату, используя встроенную функцию date . При этом весь HTML будет игнорироваться PHP-компилятором и передаваться в браузер без изменений.
Интегрировать PHP в HTML действительно очень легко. Помните, что скрипт — это HTML-страница с включением определенного PHP кода . Можно создать скрипт, который будет содержать только HTML (без тегов ), и он будет нормально работать.
Более продвинутые методы:
- Menu Item
и результат:
PHP в HTML с помощью short_open_tagЕсли нужно максимально сократить код, перед тем, как в PHP вставить HTML , вы можете использовать short_tags . В результате не нужно будет вводить .
Имейте в виду, что если нужно создать сайт, совместимый с максимальным количеством платформ, при вставке PHP в HTML не стоит полагаться на short_tags .
HTML в PHP с использованием echoЕще один способ интеграции HTML в PHP-файл — команда echo: .
Это повлияет на подсветку разметки в большинстве редакторов. Поэтому необходимо выделять все двойные кавычки внутри HTML-кода с помощью обратной косой черты.
PHP в HTML — расширения файловДля стандартно настроенного веб-сервера :
AddHandler cgi-script .html .htm
Для веб-сервера с запущенным FastCGI :
AddHandler fcgid-script .html .htm
HTML в PHPТакже можно использовать HTML-код в PHP-скриптах . Все, что нужно сделать, это при открытии страницы с помощью PHP изменить порядок открывающихся тегов HTML и PHP .
Использование HTML в PHP :
Personal INFO Основной контент страницы
В браузере файл index.php выглядит точно так же, как и раньше, но структура шаблона при этом полностью изменилась. О том, что получилось, поговорим потом, а сейчас ответим на вопрос о загадочных командах вида .
Как и HTML-код, код PHP тоже имеет своё обозначение начала и конца. Так вот начинать PHP-вставку нужно командой . Между этими командами пишется основной код. В нашем случае это всего лишь одна команда - include .
Функция include() вставляет в файл код из другого файла, давая возможность хранить разные части страницы в разных документах, тем самым надёжно отделяя их друг от друга.
В результате выполненных действий мы получили динамическую страницу index.php , части которой подгружаются из разных файлов. Благодаря этому можно создавать другие страницы, точно так же подгружая в них вспомогательные элементы из файлов папки blocks .
Такой подход хорош тем, что если вы захотите на сайте в 20-30 страниц изменить, скажем, название пункта меню, то в шаблоне с только что созданной структурой понадобится внести правки только в один файл - blocks/navigation.php, и меню изменится сразу на всех страницах, в которые он включен. Если же сайт был бы статическим, то для смены названия одного пункта меню вам пришлось бы вносить изменения в каждую из 20-30 страниц. Разница очевидна.