PHP没有按计划保存变量

时间:2014-11-26 10:14:18

标签: php variables pdo

我想保存用户在数据库中查看的页面。我编写了代码但每次将页面保存到数据库时都会保存字符串“favicon.ico”。但是,当我想要在数据库中保存变量的var_dump时,它会显示“个人/消息”。

以下是代码:

$page = isset($_GET['REQUEST_URI']) ? $_GET['REQUEST_URI'] : 'home';

var_dump($page); // Outputs: string(17) "personal/messages"

$this->query(
    "UPDATE ".TBL_USERS." SET page = :page WHERE username = :id",
    array(':page' => $page, ':id' => $username)
);

所以,当我查看数据库时,它会说:“favicon.ico”。当我将变量$ page更改为=“home”时;它将主页保存到数据库而不是favicon.ico。

以下是更多输出:

$page = isset($_GET['REQUEST_URI']) ? $_GET['REQUEST_URI'] : 'home';
var_dump($page); // Outputs: string(17) "personal/messages"
// Saves in database as "favicon.ico"

$page = $_GET['REQUEST_URI'];
var_dump($page); // Outputs: string(17) "personal/messages"
// Saves in database as "favicon.ico"

$page = "personal/messages";
var_dump($page); // Outputs: string(17) "personal/messages"
// Saves in database as "personal/messages"

有人知道这个问题吗?

3 个答案:

答案 0 :(得分:2)

用户的浏览器向favicon.ico发出请求,因此它可以显示一个可爱的图标。但是您的htaccess似乎会将该请求重写为您的脚本。你要么必须放置一个favicon.ico。或者更改你的htaccess文件

答案 1 :(得分:1)

而不是保存REQUEST_URi

从魔术常量__FILE__中获取文件名并从中删除扩展名。

function chopExtension($filename) {
  $ext = pathinfo($filename, PATHINFO_EXTENSION);
  return preg_replace('/\.' . preg_quote($ext, '/') . '$/', '', $filename);
}
$page = chopExtension(__FILE__);

答案 2 :(得分:1)

您似乎遇到了网址重写问题(在您的htaccess文件或服务器配置中)。问题是对静态文件的请求也会重定向到您的php脚本,这就是您的脚本也获取/favicon.ico请求并将其写入数据库的原因。

您必须验证您的URL重写规则,以防止将静态文件URI重定向到您的脚本URI。 Guide for Apache Guide for Nginx