$ _SERVER не возвращает строку запроса - PullRequest
4 голосов
/ 28 сентября 2011

Я просто пытаюсь сохранить текущую страницу, которую пользователь просматривает, в БД. Когда страница загружается, я вставляю $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING'] в свою БД, но отображается только страница (например, index.php?) без строки запроса (я убедился, что в URL-адресе есть строка запроса).

Я пытался $_SERVER['PHP_SELF'] с теми же результатами.

РЕДАКТИРОВАТЬ ДОБАВИТЬ: Вот дамп $ _SERVER:

Array
(
    . . .
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => view=scores&yr=2010&wk=1
    [REQUEST_URI] => /index.php?view=scores&yr=2010&wk=1
    . . .
)

Таким образом, строка запроса присутствует в массиве, даже как часть REQUEST_URI. Так что мой запрос ...

mysql_query("insert into clickstream
               (user_id, page)
             values
               (" . $_SESSION['user_id'] . ", '" . mysql_real_escape_string($_SERVER['REQUEST_URI']) . mysql_real_escape_string($_SERVER['QUERY_STRING']) . "');")
  or die('mysql error: ' . mysql_error());

... на самом деле следует вставлять строку запроса дважды, а не раз!

Мысли

ДОБАВЛЕННАЯ МЫСЛЬ: Возможно ли, чтобы база данных MySQL отбрасывала все, начиная от ввода ?? Поле varchar.

ОБНОВЛЕНИЕ W / ЧАСТИЧНОЕ РЕШЕНИЕ: Изменение ввода SQL на просто $_SERVER['QUERY_STRING'] (без REQUEST_URI) успешно введите строку запроса. Таким образом, это заставляет меня поверить, что либо PHP, либо MySQL убрали все из строки ввода после ?. Таким образом, входные параметры были правильными; результат только что был усечен.

Кто-нибудь знает, почему это так?

Ответы [ 4 ]

2 голосов
/ 28 сентября 2011

Различные серверы передают на страницу разные глобалы $_SERVER.Я предполагаю, что вы используете Apache, а не NGINX, где вам, возможно, придется проверить, что QUERY_STRING определено в FASTCGI_PARAMS.

Решение состоит в том, чтобы сделать, как говорит @hakre, и просто посмотреть, какой ключ $ _SERVER имеет то, что выхочу.

<code><?php
print '<pre>';
print_r($_SERVER);
print '
';
1 голос
/ 29 сентября 2011

Спасибо за отзыв, особенно @nachito.Проблема была изолирована от MySQL, а не PHP.Вывод из PHP правильный, но MySQL удаляет все из URL после ? после вставки в базу данных.

1 голос
/ 28 сентября 2011

Не могли бы вы просто использовать $_SERVER['REQUEST_URI']? Он имеет строку запроса как часть вывода ...

0 голосов
/ 28 сентября 2011

Можете ли вы показать нам определение таблицы clickstream ?

Если столбец page имел длину всего 10 символов, то мы обнаружили проблему :)

'index.php?'(10 символов)

Чтобы увидеть структуру таблицы, вы можете выполнить следующую команду MySQL:

SHOW CREATE TABLE clickstream;
...