Обходим ограничения «Magic Quotes»


Итак, нам необходимо исключить возможность возникновения фатальных ошибок/которые могут возникнуть при работе «Magic Quotes», при обработке введенных с помощью формы данных нам не остается ничего другого, кроме как самостоятельно обработать переданные значения. Мы должны с помощью РНР удалить все вставленные в строку символы косой черты и возвратить ее к тому виду, который существовал до начала автоматической обработки с помощью Magic Quotes.

В РНР для этих целей существует простая функция: stripslashes(). Эта функция дает ответ на вопрос, почему РНР-программисты часто активируют функцию Magic Quotes - с помощью функции stripslashes() они затем могут легко устранить все внесенные изменения.
• Сначала необходимо установить, активирована ли функция Magic Quotes - для этого мы вызываем, функцию get_magic_quotes_gpc () - (без каких-то параметров). В том случае, если Magic Quotes активирована, то эта функция возвращает 1, в противном случае возвращается 0;
• далее мы организуем опрос возвращенного значения с помощью оператора if, при этом, когда функция возвращает 1, то это означает логическое значение true, и в этом случае исполняются команды, которые относятся к телу оператора if:

if (get_magic_quotes_gpc()) $test = stripslashes($test);

После выполнения такой команды вы можете быть уверены, что для любого РНР-сервера ваш скрипт будет работать с такими значениями для переменной $test, которые в точности соответствуют тому, что были введены в форме. Кроме всего прочего это означает, что теперь (как и обычно) вы можете непосредственно передавать текстовые строки в инструкции MySQL.

Давайте более внимательно рассмотрим данную проблему с помощью небольшого примера. Предположим, что переменная $test содержит строку «Тест 'кавычек'» и должна быть записана в поле test таблицы $table, таким образом команда INSERT будет выглядеть следующим образом:

INSERT INTO table (text) VALUES ('$test')

Эта команда принимает следующий вид:

INSERT INTO table (test) VALUES ('Тест 'кавычек'')

В этом случае MySQL передает как значение для поля text лишь фрагмент строки «Тест '», так как апостроф будет интерпретироваться как символ окончания строки. Оставшийся фрагмент «кавычек'» MySQL не знает как обрабатывать - и по этой причине он не предпринимает никаких действий. Другими словами, команда INSERT будет просто проигнорирована, возможно, вы получите предупреждение о том, что нарушен синтаксис MySQL.

Необходимо замаскировать апостроф, следующая команда INSERT будет выполнена без всяких ошибок и в поле test будет сохранено «Тест 'кавычек'»:

INSERT INTO table (text) VALUES ('Тест \'кавычек\'')

Так как мы никогда не можем знать заранее, содержатся ли в строке подобные проблемные символы, которые могут вызвать ошибки при записи в базу данных, то в РНР имеется функция addslashes(). С помощью этой функции к строке добавляются все необходимые экранирующие символы, после чего данная текстовая строка может быть гарантированно сохранена в таблице базы данных. Например, перед тем как передавать переменную $test команде INSERT для сохранения в базе данных, необходимо экранировать символы с помощью следующей команды:

$test = addslashes($test);

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика