如果我讨厌你们,我真的很抱歉,但这是关于.htaccess技巧的最后一个问题
我需要wordpress风格,'非常永久链接'
但这对我来说太混乱了。
我需要,此网址http://test.com/?page=test&ID=1
为http://test.com/test/NAMEFROMDATABASE
如何?我知道如何使用ID=1
获取$_GET['ID']
,但如何将数据库中的值放入网址并阅读?
答案 0 :(得分:6)
您无法直接通过此网址获取$ _GET ['ID']的ID值:http://test.com/test/NAMEFROMDATABASE。
您可以按照以下逻辑获取ID。
按类别名称创建链接。即如果您有类别笔记本电脑,请创建http://test.com/category/CATNAME
在htaccess中写入重写代码。RewriteRule ^category/(.*)$ categories\.php?CNAME=$2&%{QUERY_STRING} [L]
$catName=$_GET['CNAME']
OR
RewriteRule ^category/(.*)-ID-([0-9]+)$ categories\.php?ID=$2&%{QUERY_STRING} [L]
$catID= $_GET['ID']
答案 1 :(得分:1)
如何?我知道如何使用$ _GET ['ID']获取ID = 1,但是如何将数据库中的值放入url中并读取它?
您可以从数据库中获取值,如下所示:
$id = mysql_real_escape_string($_GET['id']);
$sql = "SELECT folder, urlname FROM urls WHERE id = '$id' ";
// don't forget to single quote '$id' ^ ^ or you'll get errors
// and even worse mysql_real_escape_string() will not protect you.
if ($result = mysql_query($sql)) {
$row = mysql_fetch_row($result);
$pagename = $row['urlname'];
$folder = $row['folder'];
}
如果您知道id
是一个整数,您也可以使用$id = intval($_GET['id']);
我建议始终使用mysql_real_escape_string()
,因为它适用于所有值,intval
仅适用于整数
在SQL中引用数字永远不是问题,所以要养成一直引用所有内容的习惯
这样你就不会犯错误。
你可以从不做
$sql = "SELECT urlname FROM urls WHERE id = '{$_GET['id']}' ";
因为这是一个SQL注入安全漏洞。
请参阅:
How does the SQL injection from the "Bobby Tables" XKCD comic work?
http://php.net/manual/en/function.mysql-query.php
http://php.net/manual/en/function.mysql-fetch-row.php
http://php.net/manual/en/function.mysql-connect.php
http://php.net/manual/en/function.mysql-close.php
答案 2 :(得分:1)
你不能在htaccess中这样做,你需要调整你的脚本,而不是接收id = 1将收到name = xxx。比在数据库中查找名称并计算ID
好的,所以.htaccess你会有类似的东西
RewriteRule ^something/(.+)\.htm$ something/file.php?djname=$1
在您的PHP脚本中,您将拥有
$name = mysql_real_escape_string($_GET['djname']);
$sql = "SELECT * FROM djtable where name='" . $name . "' LIMIT 1";
OBS:1。使用正确的sql转义。 2.确保数据库中的dj名称不同。