【问题标题】:Obtain the long Post URL from the ID in the Database Table从数据库表中的ID获取长Post URL
【发布时间】:2017-05-22 07:40:46
【问题描述】:

我的网站有一个网址(example.com/folder/index.php?id=22)

上面的 URL 显示帖子 id 22。这是另一个重要部分:

|-------|-----------|-------------------|-------------------|
|   id  |   user    |       title       |       url         |
|-------|-----------|-------------------|-------------------|
|   22  |   Admin   |   My Title Posts  |   my_title_post   |
|       |           |                   |                   |
|-------|-----------|-------------------|-------------------|

include_once 'dbconnect.php';

$query = $con->query("SELECT * FROM posts WHERE id=".$_GET['id']);
$Row=$query->fetch_array();

echo $Row['user'];
echo $Row['title'];
echo $Row['url']; 

结果:

-管理员

-我的标题帖子

-my_title_post

我试图通过添加.htaccess来隐藏$_GET['id'];

RewriteEngine on
RewriteRule ^newfolder/(.*) folder/index.php?id=$1

我的新网址是:example.com/newfolder/22

但是,这仍然不太正确。我试图在 URL 部分显示一个长的帖子 URL,而不是 ID。 所以我的意思是,如何使 URL 变为:

example.com/newfolder/my_title_post

我已将 SQL 更改为: "SELECT * FROM posts WHERE url=".$_GET['id']但是服务器无法处理请求。

我也尝试更改数据库 url 列中的主键,但请求被拒绝。在这里我将它设置为唯一,但它仍然不起作用。

有可能做到吗? 如果有人知道,我会通过 Cpanel、htaccess、SQL 或其他方式接受建议。谢谢..

【问题讨论】:

  • 你知道如果有人去这个网址会发生什么:example.com/folder/index.php?id=1%20OR%201%3D1。了解 SQL 注入 - w3schools.com/sql/sql_injection.asp
  • @lloiacono 我不明白你的意思
  • “我已将 SQL 更改为:“SELECT * FROM posts WHERE url=".$_GET['id'] 但服务器无法处理该请求。” – 这听起来更像是您还不能正确处理数据库错误 – 因此您首先应该阅读。 询问数据库,你的语句有什么问题,所以你可以修复它。
  • @lloiacono 哦,是的。我不小心把代码剪得很窄。原代码使用real_escape_string
  • 我试图告诉你你的代码容易受到 SQL 注入的影响,你不应该直接在查询中使用用户输入。在我上面的示例中,您的查询将如下所示: SELECT * FROM posts WHERE id=1 OR 1=1;这将显示所有记录,或者更糟糕的是,攻击者可能会删除您的数据库

标签: php mysql .htaccess


【解决方案1】:

您的my_title_post 是一个字符串。但是您的查询被视为整数。引用 $_GET['id'] 将其视为字符串。

"SELECT * FROM posts WHERE url='".$_GET['id'] . "'";

另外最好使用参数绑定来防止SQL injection。至少你需要使用mysqli_real_escape_string来防止它。

【讨论】:

  • 非常感谢您的回答。这行得通。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2019-10-26
  • 2015-07-30
  • 2012-02-10
  • 1970-01-01
相关资源
最近更新 更多