Одно из главнейших достоинств 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.
2 years 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.
Мы поверхностно коснулись темы методов вывода контента в теле шаблона. Давайте теперь подробно разберем что это и с чем его едят. Итак, объявления метода jdoc
присутствуют в каждом
шаблоне Joomla
и выводят в тело шаблона (то бишь на страницу сайта) ту или иную информацию. В целом объявление метода выглядит следующим образом
Данная строчка выводит на сайте информацию из компонентов, например статьи из com_content. Тип элементов вывода указывается в атрибуте.
1. type - типы элементов вывода.
- component - как писал выше, выводит основное содержание страницы. Может вызываться только один раз в шаблоне.
- head
- объявляется так же один раз после открывающего тэга . Служит для вывода стилей, скриптов,
и метаданных текущей страницы. - message - выводит системные сообщения. Объявляется один раз в теле документа (body).
- installation - ничего не выводит и представляет собой «инструкцию» для установки.
- module - выводит на странице единичный модуль. Количество объявлений не ограничено.
- modules - в отличии от предыдущего типа, позволяет выводить в своей позиции не единичое число модулей.
Для первых четырех указанных типов достаточно лишь указать их на странице. В случае с типом модуля задача немного усложняется. Для того, чтобы вывести на странице модуль нам нужно сперва создать для него модульную позицию с уникальным идентификатором (название позиции модуля). Это делается при помощи атрибута name=«имя позиции» и обязательным добавлением строки:
2. style - описание стиля вывода (mod chrome).
От указанного стиля зависит внешний вид и структура оболочки модуля. Выглядит как
:
- xhtml -
выводит модуль в блоке с заголовком function modChrome_xhtml($module, &$params, &$attribs)
{
if (!empty ($module->content)) : ?>
">
showtitle != 0) : ?>
title; ?>
content; ?>
} - table -
выводит модуль в верстке табличной структуры
function modChrome_table($module, &$params, &$attribs)
{ ?>
">
showtitle != 0) : ?>
title; ?>
content; ?>
} - horz -
выводит содержимое модуля в ячейке таблицы, горизонтально function modChrome_horz($module, &$params, &$attribs)
{ ?>
} - rounded
- выводит модуль в нескольких вложенных блоках для сложного стилевого оформления в виде графических границ (напр. закругленных углов) function modChrome_rounded($module, &$params, &$attribs)
{ ?>
">
showtitle != 0) : ?>
title; ?>
content; ?>
} - outline
- добавляет к блоку модуля предустановленные стили css function modChrome_outline($module, &$params, &$attribs)
{
static $css=false;
if (!$css)
{
$css=true;
jimport("joomla.environment.browser");
$doc = JFactory::getDocument();
$browser = JBrowser::getInstance();
$doc->addStyleDeclaration(".mod-preview-info { padding: 2px 4px 2px 4px; border: 1px solid black; position: absolute; background-color: white; color: red;}");
$doc->addStyleDeclaration(".mod-preview-wrapper { background-color:#eee; border: 1px dotted black; color:#700;}");
if ($browser->getBrowser()=="msie")
{
if ($browser->getMajor() <= 7) {
$doc->addStyleDeclaration(".mod-preview-info {filter: alpha(opacity=80);}");
$doc->addStyleDeclaration(".mod-preview-wrapper {filter: alpha(opacity=50);}");
}
else {
$doc->addStyleDeclaration(".mod-preview-info {-ms-filter: alpha(opacity=80);}");
$doc->addStyleDeclaration(".mod-preview-wrapper {-ms-filter: alpha(opacity=50);}");
}
}
else
{
$doc->addStyleDeclaration(".mod-preview-info {opacity: 0.8;}");
$doc->addStyleDeclaration(".mod-preview-wrapper {opacity: 0.5;}");
}
}
?>
position."[".$module->style."]"; ?>
content; ?>
} - none
- аналогично не указанному вообще style. Выводит модуль без оформления и заголовка function modChrome_none($module, &$params, &$attribs)
{
echo $module->content;
}
Все предустановленные стили располагаются в файле templates/system/html/modules.php. Но мы не ограничены использованием только предоставленных вариантов, а вполне можем создавать свои собственные.
3. Создание пользовательского mode chrome.
Итак, предоставленные по умолчанию типы представления модулей не удовлетворяют текущих требований. Нужно добавить свой собственный стиль оформления. В качестве примера выберем достаточно часто повторяющуюся ситуацию. По заданию нужно вместо
поместить заголовок модуля в тэг , который является семантически нейтральным. Так же требуется поместить контентблок модуля в отдельный . Для создания собственного стиля вывода модуля, воспользуемся стандартными средствами. В большинстве шаблонов Joomla существет папка html/ (templates/имя шаблона/html/), используется для так называемой шаблонизации. То есть, если скопировать в эту папку шаблон модуля, то вместо шаблона из директории modules/my_module/tmpl/default будет выводиться файл из templates/имя шаблона/html/my_modules/default. Аналогично шаблонизируются и компоненты. Удобно и практично. В папке html/ Вашего шаблона создадим файл modules.php. Если такой папки в шаблоне нет, то создадим ее. В файл запишем function modChrome_modbox($module, &$params, &$attribs) // Вызываем функцию
{
if (!empty ($module->content)) : /* Проверяем наличие в поиции включенного модуля */?>
">
showtitle != 0) : /* проверяем включен ли заголовок модуля */ ?>
title; /* Выводим заголовок */ ?>
content; /* Выводим содержимое модуля */ ?>
}
?>
Готово. Теперь нужно только указать его в качестве стиля вывода.
Назначаем в нашу позицию модуль и смотрим результат.
Chrome - это конечная обработка html -кода модуля перед его вставкой в главный шаблон сайта. Существуют несколько предопределенных Chrome-стилей (table, horz, xhtml, rounded, outline), но не всегда то что есть подходит для решения текущих задач.
Чтобы определить собственный стиль отображения в шаблоне, нужно создать файл "modules.php" в директории "html". То есть для шаблона с именем "my_template" файл должен располагаться тут - "templates/my_template/html/modules.php".
В этом файле вы должны определить функцию с названием "modChrome_STYLE" где STYLE это имя вашего стиля. Эта функция будет принимать три аргумента - $module, &$params и &$attribs как показано ниже:
function modChrome_STYLE ($module, &$params, &$attribs)
{
/* обработка и вывод html-кода модуля */
}
В этой функции вы можете использовать любой PHP-код, а так же вам будут доступны все параметры самого модуля, его свойства и любые данные сохраненные в базе данных Joomla. В основном бывают нужны только следующее
- $module->content - контент самого модуля, непосредственный html-код.
- $module->title - название модуля, указанное в панели управления в менеджере модулей.
- $module->showtitle - флаг, показывать название или нет (true или false).
Функция modChrome_STYLE - это обыкновенная php-функция, здесь можете использовать абсолютно любой php-код. Ниже приведен пример, если в настройках модуля включено отображение заголовка, то выведется текст заголовка перед контентом модуля.
function modChrome_STYLE ($module, &$params, &$attribs)
{
if ($module->showtitle) {
echo "
" .$module->title ."
";
}
echo $module->content;
}
Есть возможность обратиться к любым параметрам модуля. Например, обрамим модуль классом
">
Так же можно в код позиции добавлять свои атрибуты, которые используются в Chrome. Для этого в тег позиции добавьте собственные атрибуты. Имена дополнительных атрибутов можно указывать произвольные, они все будут передаваться в ассоциативный массив $attribs.
Практический пример Chrome-функции:
function modChrome_custom($module, $params, $attribs) {
if (isset($attribs["headerLevel"]))
{
$headerLevel = $attribs["headerLevel"];
} else {
$headerLevel = 3;
}
if (isset($attribs["background"]))
{
$background = $attribs["background"];
} else {
$background = "blue";
}
echo "
";
if ($module->showtitle)
{
echo "" .$module->title ." ";
}
echo "";
echo $module->content;
echo "";
echo "";
}
Практические примеры использования функции "modChrome_custom"
function modChrome_modbox($module, &$params, &$attribs) // Вызываем функцию
{
if (!empty ($module->content)) : /* Проверяем наличие в поиции включенного модуля */?>
showtitle != 0) : /* проверяем включен ли заголовок модуля */ ?>
title; /* Выводим заголовок */ ?>
content; /* Выводим содержимое модуля */ ?>
}
?> Готово. Теперь нужно только указать его в качестве стиля вывода.
Chrome - это конечная обработка html -кода модуля перед его вставкой в главный шаблон сайта. Существуют несколько предопределенных Chrome-стилей (table, horz, xhtml, rounded, outline), но не всегда то что есть подходит для решения текущих задач.
Чтобы определить собственный стиль отображения в шаблоне, нужно создать файл "modules.php" в директории "html". То есть для шаблона с именем "my_template" файл должен располагаться тут - "templates/my_template/html/modules.php".
В этом файле вы должны определить функцию с названием "modChrome_STYLE" где STYLE это имя вашего стиля. Эта функция будет принимать три аргумента - $module, &$params и &$attribs как показано ниже:
function modChrome_STYLE ($module, &$params, &$attribs) { /* обработка и вывод html-кода модуля */ }
В этой функции вы можете использовать любой PHP-код, а так же вам будут доступны все параметры самого модуля, его свойства и любые данные сохраненные в базе данных Joomla. В основном бывают нужны только следующее
- $module->content - контент самого модуля, непосредственный html-код.
- $module->title - название модуля, указанное в панели управления в менеджере модулей.
- $module->showtitle - флаг, показывать название или нет (true или false).
Функция modChrome_STYLE - это обыкновенная php-функция, здесь можете использовать абсолютно любой php-код. Ниже приведен пример, если в настройках модуля включено отображение заголовка, то выведется текст заголовка перед контентом модуля.
function modChrome_STYLE ($module, &$params, &$attribs) { if ($module->showtitle) { echo "
" .$module->title ."
"; } echo $module->content; }Есть возможность обратиться к любым параметрам модуля. Например, обрамим модуль классом
Так же можно в код позиции добавлять свои атрибуты, которые используются в Chrome. Для этого в тег позиции
Практический пример Chrome-функции:
function modChrome_custom($module, $params, $attribs) { if (isset($attribs["headerLevel"])) { $headerLevel = $attribs["headerLevel"]; } else { $headerLevel = 3; } if (isset($attribs["background"])) { $background = $attribs["background"]; } else { $background = "blue"; } echo "
Практические примеры использования функции "modChrome_custom"