Усовершенствованные технологии использования форм

В главе 4 были рассмотрены HTML-формы, и было показано, как их использовать для ввода данных в PHP-сценарий. В этой главе делается небольшое отступление от рассмотрения связей типа “HTML-форма/РНР” и вводится набор методов и концепций, которые можно непосредственно применять к PHP-сценариям. В настоящей главе предлагаются пути решения таких задач, как защита данных, передаваемых в HTML-формы (скрытые поля), шифрование и преобразование данных, а также несколько эффективных методов проверки данных, получаемых из форм.
Следует отметить, что эта глава не претендует на полноту освещения проблемы, поскольку существует много методов решения рассматриваемых здесь задач. В этой главе освещаются несколько наиболее полезных методов и функций, используемых в РНР, и она служит базисом для создания собственных методов разработки сценариев.
Обработка и преобразование данных
Работа с “магическими” кавычками
При обработке и отображении данных из форм возникает общая проблема, трактуемая иногда как некая тонкость РНР — “магические” кавычки. При работе с внешними по отношению к РНР данными (с вводом из форм или баз данных) РНР может автоматически добавлять символ отмены (обратный слэш) к любому символу, который может привести к возникновению проблемы. Например, если строка содержит символ кавычки (одиночной или двойной), это может привести к проблеме при отображении этой строки в браузере.
НА ЗАМЕТКУ -
Возможность использования “магических” кавычек включается или отключается с помощью директив magic_quotes_gpc, magic_quotes_runtime и magic_quotes_sybase.

При выполнении в PHP результирующий HTML-код будет содержать дополнительные двойные кавычки для атрибута VALUE:

К сожалению, при работе с данными, передаваемыми на Web-сервер (GET, POST и так далее), не существует возможности включения или отключения “магических” кавычек во время выполнения сценария. Для того чтобы сделать сценарий совместимым с любой конфигурацией РНР нужно иметь в виду оба обстоятельства. Для таких целей предусмотрены две новых функции: addslashes () и strlpslashes О. При необходимости эти функции используются для добавления или удаления слэшей из строки. Синтаксис этих функций имеет следующий вид:
addslashes($string) stripslashes(Sstring)
В обоих случаях $string представляет обрабатываемую строку, и обе функции возвращают ее модифицированный вариант. При работе с удаленными данными функция stripslashes () будет работать независимо от того, включен ли режим “магических” кавычек (потому что если “магические” кавычки отключены, не будет никаких слэшей для удаления). Однако определить, когда нужно добавлять слэши в строку, сложнее. Если режим “магических” кавычек включен, вызов функции addslashes!) добавит символы отмены в строку, в которую эти символы добавляются автоматически (то есть строка будет дважды отменена), что приведет к ошибкам в сценарии. Поэтому использовать addslashes () можно только в том случае, если есть уверенность, что РНР уже не сделал это за вас.
Для определения состояния режима “магических” кавычек во время выполнения служат функции get_magic_quotes_gpc () и get_magic_quotes_runtime ().
НА ЗАМЕТКУ -;-
В рассматриваемых примерах (поскольку в этой главе работа выполняется в основном с данными форм) будет использоваться только функция get_magic_quotes_gpc (). При работе с базами данных (или другими внешними источниками данных, отличными от форм) нужно пользоваться функцией get_magic_quotes_runtime ().
Эти две функции служат для определения активных установок соответствующих директив конфигурации РНР. Каждая из них возвращает целочисленное значение 1 (означает, что режим “магических” кавычек включен) или 0. Эти функции (см. листинг 5.1) можно использовать для создания собственной функции myaddslashes (), которая добавляет слэши в зависимости от состояния режима “магических” кавычек в конфигурации РНР.
Листинг 5.1. Пользовательская addslashes () -функция my_addslashes()
function ray_addslashes($string) (
return (get_magic_quotes_gpc() == 1) ? Sstring : addslashes($string);
}
?>
Теперь имеется эффективный метод работы с “магическими” кавычками вне зависимости от конфигурации РНР, в которой имеет дело сценарий. При использовании собственной функции my_ddslashes () вместо встроенной версии можно быть уверенным, что данные будут отформатированы в требуемом виде.

Tags: , ,

Related posts


Leave a Reply