У меня есть простой Сценарий PHP формы обратной связи, который я хотел бы улучшить путем добавления $ _SERVER [HTTP_USER_AGENT] данные к строке в базе данных, которую я сохраняю.
Я продолжаю получать ошибки анализа, когда я пробую простую вставку, передающий '$ _SERVER [HTTP_USER_AGENT]' как типичная строка. Я должен связать его в некотором роде, так, чтобы символы, используемые в той Серверной переменной, не инициировали такие ошибки?
(Запрос на вставку хорошо работает без того поля, btw.)
Спасибо.
Могу поспорить, что в строках пользовательского агента есть '
, которые вызывают ошибку синтаксического анализатора.
Строка User-Agent, возвращаемая PHP, находится под контролем локального браузера, а это означает, что вам нужно обрабатывать ее так же, как и обычный пользовательский ввод. Злоумышленник или пользователь, зараженный вирусом / трояном / червем, может изменить строку пользовательского агента, чтобы вызвать атаку с использованием SQL-инъекции. По крайней мере, вам нужно избежать этого (например, с помощью mysql_real_escape_string () . Я готов поспорить, что как только вы это сделаете, ваши ошибки парсера также исчезнут. А еще лучше попробуйте перейти к использованию подготовленные операторы , если ваша система позволяет это.
mysql_query("
INSERT INTO
db_table
VALUES (
...
'" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']) . "'
...
)");
не работает? Вы можете показать нам весь свой запрос? Каковы точные сообщения об ошибках?
Без фактического сообщения об ошибке трудно сказать, с какой именно проблемой вы столкнулись.
Но чтобы решить все возможные проблемы,
Прежде всего, вы должны прочитать официальную страницу руководства, чтобы понять синтаксис строк PHP: http://php.net/types.string
Затем, вы должны понять синтаксис Mysql. Я уже объяснял это здесь
Наконец, вы должны собрать все вместе
вот так:
$agent = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
$sql = "INSERT INTO `table` set useragent = '$agent'";
$res = mysql_query($sql) or trigger_error(mysql_query.$sql);
Выполняя запросы таким образом, у вас никогда не будет никаких проблем. Или, по крайней мере, полное сообщение об ошибке.