Новые книги

Сегодня контекстная реклама – это спасательный круг для малого и среднего бизнеса. Многие рекламодатели, у которых нет бюджетов на ТВ– и радиорекламу, без контекстной рекламы уже разорились бы. Множество стартапов выжило исключительно благодаря ей. Главное – подойти к созданию рекламной кампании с умом, иначе из спасательного круга она превратится в камень на шее вашего бизнеса. Эта книга не просто пошаговое руководство по созданию и ведению рекламной кампании в Яндекс. Директ, но и возможность заглянуть за кулисы Яндекс. Директ и разобраться в кухне работы директологов.

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
This book was written to provide a single reference for network administration in a Linux environment. Beginners and experienced users alike should find the information they need to cover nearly all important administration activities required to manage a Linux network configuration. The possible range of topics to cover is nearly limitless, so of course it has been impossible to include everything there is to say on all subjects. We've tried to cover the most important and common ones. We've found that beginners to Linux networking, even those with no prior exposure to Unix-like operating systems, have found this book good enough to help them successfully get their Linux network configurations up and running and get them ready to learn more.

There are many books and other sources of information from which you can learn any of the topics covered in this book (with the possible exception of some of the truly Linux-specific features, such as the new Linux firewall interface, which is not well documented elsewhere) in greater depth. We've provided a bibliography for you to use when you are ready to explore more.

PHP и HTML

Учебник РНР
Назад Вперёд

Глава 51. PHP и HTML

PHP и HTML тесно связаны: PHP генерирует HTML, а HTML содержит информацию , которая высылается  в PHP.

1. Какое кодирование/декодирование я должен выполнять при передаче значения в HTМL-форме? А через URL?
2. Я пытаюсь использовать тэг <input type="image">, но переменные $foo.x и $foo.y недоступны. Где они?
3. Как мне создать массивы в HTML-тэге <form>?
4. Как мне получит все результаты из HTML-тэга множественного выбора select?

1. Какое кодирование/декодирование я должен выполнять при передаче значения в HTМL-форме? А через URL?

Есть несколько этапов, когда кодировка имеет важное значение. Предположим, у вас имеется переменная string $data, содержащая строку, которую вы хотите передать некодированным способом. Тогда необходимые шаги:

  • HTML-интерпретация. Чтобы специфицировать произвольную строку, вы обязаны заключить её в двойные кавычки, а htmlspecialchars - всё значение.

  • URL: URL состоит из нескольких частей. Если вы хотите, чтобы ваши данные интерпретировались как один элемент, вы обязаны кодировать их с помощью urlencode().

Пример 51-1. Элемент hidden HTML-формы
<?php
    echo "<input type=hidden value=\"" . htmlspecialchars($data) . "\">\n";
?>

Примечание: неверным будет urlencode() $data, поскольку за urlencode() данных отвечает браузер. Все популярные браузеры делают это корректно. Заметьте, что это делается независимо от метода (GET или POST). Вы увидите это только при методе GET, поскольку POST-запросы обычно скрыты/hidden.

Пример 51-2. Данные, редактируемые пользователем
<?php
    echo "<textarea name=mydata>\n";
    echo htmlspecialchars($data)."\n";
    echo "</textarea>";
?>

Примечание: эти данные будут выведены в браузере так, как задумано, поскольку браузер будет интерпретировать заменённые (escaped) html-символы.

При отправке, через GET или POST, данные будут url-кодированы браузером для передачи и непосредственно url-декодированы в PHP. Поэтому в результате вам ничего не нужно urlencodе/urldecodе самостоятельно, всё необходимое выполняется автоматически.

Пример 51-3. В URL
<?php
    echo "<a href=\"" . htmlspecialchars("/nextpage.php?stage=23&data=" .
        urlencode($data)) . "\">\n";
?>

Примечание: фактически вы обходите HTML GET-запрос, поэтому нужно вручную urlencode() данные.

Примечание: вы должны htmlspecialchars() весь URL, поскольку URL появляется как значение HTML-атрибута. В этом случае браузер сначала де- htmlspecialchars() значение, а затем передаёт URL. PHP поймёт URL корректно, так как вы urlencoded() данные.

Вы увидите, что символ & в URL будет заменён на &amp;. Хотя большинство браузеров исправят ситуацию, если вы забудете сделать это, это не всегда возможно. Поэтому, даже если даже ваш URL не является динамическим, вы должны htmlspecialchars() URL.

2. Я пытаюсь использовать тэг <input type="image">, но переменные $foo.x и $foo.y недоступны. Где они?

При отправке формы можно использовать с тэгом изображение вместо стандартной кнопки submit, как здесь:

<input type="image" src="image.gif" name="foo">

Когда пользователь щёлкает по изображению, соответствующая форма будет передана на сервер с двумя дополнительными переменными: foo.x и foo.y.

Поскольку $foo.x и $foo.y являются неверными именами переменных в PHP, они автоматически конвертируются в $foo_x и $foo_y. То есть, точки заменяются на символы подчёркивания.

3. Как мне создать массивы в HTML-тэге <form>?

Чтобы получить результат вашей <form>, отправленный как массив в ваш PHP-скрипт, вы именуете элементы <input>, <select> или <textarea> таким образом:

<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]">

Обратите внимание на квадратные скобки после имён переменных, это то, что делает их массивом. Вы можете группировать элементы в разные массивы, присвоив одно имя разным элементам:

<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyOtherArray[]">
<input name="MyOtherArray[]">

Это создаст два массива - MyArray и MyOtherArray, которые будут отправлены PHP-скрипту. Можно также присвоить вашим массивам специфические ключи:

<input name="AnotherArray[]">
<input name="AnotherArray[]">
<input name="AnotherArray[email]">
<input name="AnotherArray[phone]">

Массив AnotherArray теперь будет содержать ключи 0, 1, email и phone.

Примечание: специфицирование ключей массива делается в HTML по выбору. Если вы не специфицируете ключи, массив заполняется элементами в порядке их появления на форме. Массив нашего первого примера будет содержать ключи 0, 1, 2  3.

См. также Функции массива и Переменные за пределами PHP.

4. Как мне получит все результаты из HTML-тэга множественного выбора select?

Тэг select multiple в HTML позволяет пользователю делать выбор нескольких позиций в списке. Эти позиции передаются затем обработчику акции формы. Проблема в том, что они все передаются с одним и тем же именем. Например:

<select name="var" multiple>

Каждая выбранная опция дойдёт до обработчика акции как:

var=option1
var=option2
var=option3

Каждая опция будет перезаписывать содержимое предыдущей переменной $var. Решением будет использование "массива элемента form" РНР. Нужно использовать следующее:

<select name="var[]" multiple>

Это говорит PHP, что переменную $var нужно считать массивом, и каждое присвоение значения var[] добавляет элемент в этот массив. Первый элемент будет $var[0], следующий - $var[1] и т.д. Функция count() может использоваться для определения количества выбранных опций, а функция sort() - для сортировки массива опций, если необходимо.

Обратите внимание, что, если вы используете JavaScript, наличие [] в имени элемента может создать проблемы, если вы попытаетесь обратиться к элементу по имени. Вместо имени используйте id элемента формы или заключите имя переменной в одинарные кавычки и используйте его как индекс в массиве элементов, например:

variable = documents.forms[0].elements['var[]'];

НазадОглавление Вперёд
Использование PHP ВверхPHP и COM