我只是想将用户正在查看的当前页面存储在数据库中。当页面加载时,我将$_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。
更新W /部分解决方案:将SQL输入更改为只 $_SERVER['QUERY_STRING']
(不带REQUEST_URI)成功输入查询字符串。因此,它让我相信PHP或MySQL 从?
之后的输入字符串中删除所有内容。所以输入参数是正确的;结果被截断了。
有谁知道为什么会这样?
答案 0 :(得分:2)
不同的服务器将不同的$_SERVER
全局变量传递给页面。我假设您使用的是Apache而不是NGINX,您可能需要检查FASTCGI_PARAMS中是否定义了QUERY_STRING
。
解决方案是像@hakre那样做,只看到哪个$ _SERVER键有你想要的。
<?php
print '<pre>';
print_r($_SERVER);
print '</pre>';
答案 1 :(得分:1)
你能不能只使用$_SERVER['REQUEST_URI']
?它将查询字符串作为输出的一部分......
答案 2 :(得分:1)
感谢您的反馈,特别是@nachito。问题已被隔离到MySQL,而不是PHP。 PHP的输出是正确的,但MySQL在插入数据库后?
之后从URL中剥离了所有内容。
答案 3 :(得分:0)
您能否向我们展示点击流表的定义?
如果页面列只有10个字符长,那么我们就发现了问题:)
'的index.php?' (10个字符)
要查看表结构,您可以发出此MySQL命令:
SHOW CREATE TABLE clickstream;