Как сохранить PHP HTTP_USER_AGENT к полю MySQL

У меня есть простой Сценарий PHP формы обратной связи, который я хотел бы улучшить путем добавления $ _SERVER [HTTP_USER_AGENT] данные к строке в базе данных, которую я сохраняю.

Я продолжаю получать ошибки анализа, когда я пробую простую вставку, передающий '$ _SERVER [HTTP_USER_AGENT]' как типичная строка. Я должен связать его в некотором роде, так, чтобы символы, используемые в той Серверной переменной, не инициировали такие ошибки?

(Запрос на вставку хорошо работает без того поля, btw.)

Спасибо.

5
задан Yaaqov 5 July 2010 в 06:24
поделиться

3 ответа

Могу поспорить, что в строках пользовательского агента есть ', которые вызывают ошибку синтаксического анализатора.

Строка User-Agent, возвращаемая PHP, находится под контролем локального браузера, а это означает, что вам нужно обрабатывать ее так же, как и обычный пользовательский ввод. Злоумышленник или пользователь, зараженный вирусом / трояном / червем, может изменить строку пользовательского агента, чтобы вызвать атаку с использованием SQL-инъекции. По крайней мере, вам нужно избежать этого (например, с помощью mysql_real_escape_string () . Я готов поспорить, что как только вы это сделаете, ваши ошибки парсера также исчезнут. А еще лучше попробуйте перейти к использованию подготовленные операторы , если ваша система позволяет это.

7
ответ дан 14 December 2019 в 04:29
поделиться

mysql_query("
INSERT INTO
    db_table
VALUES (
    ...
    '" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']) . "'
    ...
)");

не работает? Вы можете показать нам весь свой запрос? Каковы точные сообщения об ошибках?

1
ответ дан 14 December 2019 в 04:29
поделиться

Без фактического сообщения об ошибке трудно сказать, с какой именно проблемой вы столкнулись.
Но чтобы решить все возможные проблемы,

  • Прежде всего, вы должны прочитать официальную страницу руководства, чтобы понять синтаксис строк 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);

Выполняя запросы таким образом, у вас никогда не будет никаких проблем. Или, по крайней мере, полное сообщение об ошибке.

0
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: