Новые книги

У большинства руководителей отсутствует представление о бизнес-инструментах и системах, за счет которых создается дополнительная ценность для клиентов, увеличивается качество обслуживания, растут продажи, повышается исполнительская дисциплина. Основная задача этой книги – сформировать понимание этих систем и бизнес-инструментов.

В этой книге рассказывается о том, за счет каких инструментов достигается рост продаж и как не допустить фатальных ошибок при внедрении CRM-системы.

Как не растянуть сроки внедрения на годы и бюджет – на миллионы рублей? Как выбрать лучшее программное решение под задачи вашего бизнеса? Автор подробно описывает пошаговый план автоматизации и стандартизации управления отношениями с клиентами.
В своей консалтинговой практике я работаю со многими генеральными и коммерческими директорами, руководителями отделов продаж и менеджерами. Целый ряд успешных руководителей использует в своей работе ментальные карты, или интеллект-карты (mindmap), для решения повседневных бизнес-задач: прописывания скриптов продаж, инструкций для персонала, планирования продаж и производства, анализа конкурентов, создания чек-листов, регламентов проведения планерок и совещаний, SWOT-анализа, описания бизнес-процессов, организационных структур, функциональных моделей и прочее. Обо всех этих производственных механизмах рассказывается на страницах этой книги.

Здесь вы найдете практические примеры решения бизнес-задач при использовании интеллект-карт. Внедрив и разработав эти решения под свой бизнес, вы сможете подняться на более высокую ступень организации своей коммерческой деятельности, увеличить продажи, настроить работу с персоналом, оптимизировать и регламентировать бизнес-процессы.

Книга будет полезна как людям, давно и активно использующим в своей практике интеллект-карты, так и новичкам для выведения бизнеса на качественно новый уровень.

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