Поиск по сайту:
taxor.ruБлог — PHP+HTML: маленькие хитрости 1

PHP+HTML: маленькие хитрости 1

Поделиться в социальных сетях:

Секция: Сайтостроение и WEB-разработка

Просмотров: 7591

Комментариев: 5 (добавить комментарий)

26.06.2012

Как и во всяком ремесле, в PHP существует масса всевозможных хитростей, ощутимо помогающих облегчить жизнь простого программиста. Вот некоторые из этих хитростей.

Трюк 1: передача массивов из формы.

Из HTML-формы можно передавать не только значения (переменные), но и массивы. Предположим, у нас есть форма со следующим полем:

[cod][/cod]

При отправке данных из формы PHP-скрипт получит значение из поля cargo как переменную $cargo. Но если вместо "cargo" указать "cargo[1]", то из поля будет отправлена скрипту уже не переменная, а массив $cargo, единственный элемент которого будет иметь единицу в качестве ключа и содержимое поля в качестве значения. При автоматическом формировании формы (скажем, при генерации прайс-листа со множеством наименований) — трюк поистине незаменимый, да и обработку массива скриптом куда проще организовать, чем анализ кучи переменных с названиями вроде tovar1, tovar2 и т. д.

 

Трюк 2: сокращённая форма записи условия в PHP.

Конструкцию...

[cod]echo "param=";~^~if($a==1)~^~{ echo "1"; }~^~else { echo "2"; }[/cod]

...гораздо проще (и короче) изложить в сокращённой форме:

[cod]echo "param=".($a==1?"1":"2");[/cod]

 

Трюк 3: анализ HTML-кнопок типа «submit».

HTML-кнопка «submit», как известно, отправляет данные HTML-формы серверу (в нашем случае на обработку PHP-скрипту). А как быть, если в форме нужны несколько кнопок, предусматривающих разные варианты обработки данных? Столкнувшись с этой задачей, почему-то мало кто вспоминает, что у кнопок типа «submit» есть собственный атрибут «value». Нет, конечно, всем известно, что этот атрибут выводит надпись на кнопке, иного же значения ему, как правило, не придают. Между тем в случае наличия у кнопок типа «submit» атрибута «name» текст подписей на кнопках отправляется из формы на сервер наряду с прочими данными и может быть проанализирован скриптом, что и позволит произвести столько разных обработок данных по нажатию разных кнопок типа «submit», сколько душе заблагорассудится. Преимущество трюка в том, что никаких полей типа «hidden» в этом случае не требуется.

 

Трюк 4: несуществующие параметры функций PHP.

Общеизвестно, что при обращении к функциям в PHP необходимо указывать ровно столько же переменных, сколько должна принимать функция:

[cod]$hour=16;~^~$minute=35;~^~echo today_is($hour,$minute);~^~...~^~function today_is($hour,$minute);~^~{~^~...~^~}[/cod]

Куда менее известно, что для переменных в заголовке функции можно указывать значения по умолчанию (для использования в случае отсутствия значений переменных или самих переменных при обращении извне), что позволит обращаться к функции с любым количеством переменных или вообще не указывать их:

[cod]function today_is($hour=16,$minute=0)~^~{~^~...~^~}[/cod]

 

Трюк 5: предотвращение кэширования JS-скриптов и CSS-стилей.

Сколько народу ежедневно ругается, изменив содержимое JS-скрипта или стилей CSS и обнаружив, что браузер прочно закешировал старую версию и ни в какую не желает показывать результаты работы новой. Особенно те, у кого в компании доступ в интернет осуществляется через прокси-сервер. Чего только не предпринимается в подобных случаях: в meta-раздел ставятся заголовки с истекшим сроком давности, meta-теги антикеширования и т. д. Между тем иногда достаточно поставить после упоминания соответствующего файла псевдопараметр в виде случайного числа, генерируемого коротеньким кусочком кода PHP:

[cod][/cod]

...чтобы при открытии страницы всегда подгружалась исключительно свежая версия файла.

 

Трюк 6: кавычки, апострофы и интепретация текста.

К выбору контейнера для стринговых (текстовых) значений зачастую принято подходить несколько небрежно. А зря: многие забывают, что содержимое двойных текстовых кавычек (") интерпретатор PHP всегда анализирует на предмет наличия переменных, тогда как к содержимому контейнеров из одиночкых кавычек (апострофов) он абсолютно равнодушен, отображая их точно символ в символ без интерпретации.

Поэтому тексты с переменными удобнее заключать в неразрывные двойные кавычки:

[cod]$text="Здравствуйте, ${client}!";[/cod]

Зато неудобочитаемый код с апострофами выполняется заметно быстрее, особенно в циклах:

[cod]$text=Здравствуйте, .$client.!;[/cod]

 

Трюк 7: мгновенный вывод.

Ещё один отличный способ ускорить выполнение сценария — вместо того, чтобы немедленно и каждый раз выводить всё попавшееся под руку командой echo, накапливать тестовое содержимое в переменной, а затем вывести эту переменную один раз:

[cod]$mytext="variant 1";~^~$mytext.=" encode";~^~$mytext.=" access";~^~echo $mytext;[/cod]

Обратите внимание, что операция конкатенации записана в сокращённом виде: $mytext.=, а не $mytext=$mytext.. Экономия времени — до десятикратного сокращения времени вывода. Впечатляет?

 

Трюк 8: передача массива из полей типа checkbox.

Трюк № 1 позволяет нам передавать из HTML-формы массивы. А в данном трюке проанализируем другую ситуацию: преположим, нам надо передать массив из формы, в которой есть только поля типа checkbox (это такой маленький квадратик, в котором при нажатии появляется галочка). К примеру, у нас имеется список городов, из которого пользователь может выбирать нужные ему города, но при отправке данных мы хотим отправлять не только идентификаторы выбранных пользователем городов, но и названия последних. А скрытые поля типа hidden рядом с чекбоксами нам делать очень не хочется (чтобы не утяжелять код страницы и массу отправляемых на сервер данных). Как быть?

Выход очень прост. Как известно, по умолчанию поле типа checkbox (вот такое, можете даже нажать на него: ) обычно может иметь значение «on» (поле выбрано, то есть в нём стоит галочка) или «off» (поле не выбрано). Для поля также можно указать альтернативное значение, например, 1. Однако далеко не все задумываются о том, что для этого поля можно указать вообще любое значение, да хоть текст романа «Война и мир». И это значение будет аккуратно передано серверным скриптам на анализ и обработку:

[cod][/cod]

Пользователь выбирает нужные пункты, нажимает кнопку «Отправить», и на сервер отправляется массив из выбранных чекбоксов, в котором опция name чекбоксов является названием переменной, а опция value — её значением. Применительно к PHP это равнозначно строке:

[cod]$id548=Toyota Landcruiser;[/cod]

А теперь снова вспомним про трюк № 1. Предположим, мы не хотим анализировать кучу переменных, а хотим вместо этого проанализировать один-единственный массив. Тоже несложно:

[cod][/cod]

...и в результате появления двух квадратных скобок вокруг цифры в аргументе опции name чекбокса на сервер отправляется уже не переменная $id548, а элемент массива $id с ключом 548.

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

 

Автор сайта

 

Комментарии

Добавить новый комментарий:

Как вас зовут:

Проверка, не робот ли вы — введите цифры с картинки:  

Прим. автора сайта: премодерация всех комментариев.

19.12.2013 20:07 Комментирует Квентин:

Весьма коротко и доступно! Великолепное описание маленьких тонкостей программирования большинство из которых я обязательно буду использовать в дальнейшем!Спасибо вам огромное :)

13.04.2014 17:27 Комментирует Mix:

Вреш не работает твой метод

Ответ автора сайта: Не вру. Если руки растут откуда надо, то всё работает.

18.09.2014 20:20 Комментирует Коля:

Читать невозможно, глаза режетАДМИН, смени цветовую схему

Ответ автора сайта: Спасибо за совет, Николай, возможно, так и сделаю со временем.

04.09.2015 13:58 Комментирует влад:

смени цвет!!!! инфа полезная, но читать не возможно. ушел из за цвете.

14.09.2015 09:40 Комментирует Сергей:

Трюк 9 пригодился, спасибо


© «Таксор». Интернет-мастерская М. Ю. Уткина.