【发布时间】:2011-09-28 17:01:44
【问题描述】:
我只是想将用户正在查看的当前页面存储在数据库中。当页面加载时,我将$_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 DB 是否有可能从输入中删除 ? 之外的所有内容?该字段是 varchar。
使用部分解决方案更新: 将 SQL 输入更改为 只是 $_SERVER['QUERY_STRING'](没有 REQUEST_URI)成功输入了查询字符串。因此,它让我相信 PHP 或 MySQL 正在从? 之后的输入字符串中剥离所有内容。所以输入参数是正确的;结果刚刚被截断。
有人知道为什么会这样吗?
【问题讨论】:
-
您测试过
var_dump($_SERVER);提供的功能吗? -
有趣,您检查过 .htaccess 的存在吗?
-
另请注意,POST 请求通常不带有
QUERY_STRING。 (否则这是一个不太可能出现的错误,因为 CGI 规范规定它存在于带参数的 GET 请求中。) -
@mario 这是一个 GET 请求,我验证该请求正在通过,因为没有它,正确的页面将无法加载。 :)
-
您使用的是框架还是其他重定向?
标签: php query-string