Поиск по сайту:  

Email:

Пароль:

Тел.: +7 (906) 724-89-01
Email: info@media-pandora.ru

 
Новый онлайн-сервис на сайте — добавление водяного знака в изображения.

MediaPandora.RU — Статьи и публикации

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

26.06.2012

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

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

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

<input type="text" name="cargo">

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


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

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

echo "param=";
if($a==1)
{ echo "1"; }
else { echo "2"; }

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

echo "param=".($a==1?"1":"2");


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

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


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

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

$hour=16;
$minute=35;
echo today_is($hour,$minute);
...
function today_is($hour,$minute);
{
...
}

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

function today_is($hour=16,$minute=0)
{
...
}


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

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

<link href="style/style.css?<?=rand(1,5000);?>" rel="stylesheet" type="text/css">

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


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

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

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

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

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

$text='Здравствуйте, '.$client.'!';


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

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

$mytext="variant 1";
$mytext.=" encode";
$mytext.=" access";
echo $mytext;

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


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

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

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

<input type="checkbox" name="id548" value="Toyota Landcruiser">

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

$id548='Toyota Landcruiser';

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

<input type="checkbox" name="id[548]" value="Toyota Landcruiser">

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

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


Трюк 9: данные из GET при передаче данных методом POST

Собственно, данный трюк настолько банален, что мне даже несколько неловко о нём упоминать. Ниже приведён пример HTML-кода формы.

<form method="POST" action="index.php?name=elvis">...</form>

Обратите внимание, что несмотря на указанный в форме метод передачи данных POST, далее следует указание адреса с параметром NAME, поскольку использование метода POST отнюдь не отменяет передачу GET-параметров, что позволяет сценарию-обработчику анализировать данные как из массива POST, так и из массива GET. Пустячок, а приятно (а чаще всего ещё и весьма удобно).


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

Предположим, у нас есть несколько переменных ($a=1, $b=2, $c=3 и $d=4), которым нужно присвоить одно и то же значение (например, значение переменной $d). Пишем:

$a=$b=$c=$d;

...и получаем значение 4 (это значение переменной $d, которая стоит в конце строки) во всех четырёх переменных. Никаких циклов, переборов и итераций. Категорично, скромно и со вкусом.


 






© WEB-студия «Медиа-Пандора». Запуск сайта — 20 июля 2015 г.
Разработчик: М. Ю. Уткин.