PHP

Обработка внешних переменных с точками в именах

Задача
Необходимо обработать переменную с точкой в имени, но после того как форма представлена, не удается найти эту переменную.

Решение
Замените точку в имени переменной на символ подчеркивания. Например, если в форме находится элемент ввода с именем foo.bar, то доступ к нему в PHP осуществляется как к переменной $_REQUEST['foo_bar'].

Обсуждение
В PHP точка выступает в качестве оператора конкатенации строк, поэтому переменная формы, названная animal.height, автоматически преобразуется в переменную с именем animal_height, что позволяет избежать создания неопределенности для анализатора. Элементу $_REQUEST['animal.height'] такая неопределенность не свойственна, но из соображений преемственности и совместимости преобразование происходит независимо от значения параметра register_globals.

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

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


Когда пользователь щелкает по изображению, то координаты x и y передаются как переменные locations.x и locations.y. Поэтому в PHP для определения координат точки, на которой пользователь выполнил щелчок, нужно проверить элементы [_REQUEST['locations_x'] и $_REQUEST['locations_y'].

С помощью ряда манипуляций можно создать переменную внутри PHP с точкой в имени:

${"a.b"} = 123; // принудительное приведение с помощью {}
$var = "c.d"; // косвенное именование переменной
$$var = 456;
print ${"a.b"} . "\n";
print $$var . "\n";
123
456


Обычно это не приветствуется из-за неудобного синтаксиса.
Теги:
формы
Добавлено: 22 Июля 2018 11:16:53 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...