Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Permalink、.htaccess漂亮的URL_Php_Mysql_.htaccess_Mod Rewrite_Permalinks - Fatal编程技术网

Php Permalink、.htaccess漂亮的URL

Php Permalink、.htaccess漂亮的URL,php,mysql,.htaccess,mod-rewrite,permalinks,Php,Mysql,.htaccess,Mod Rewrite,Permalinks,如果我打扰了你们,我真的很抱歉,但这是关于.htaccess技巧的最后一个问题 我需要wordpress风格的“漂亮的永久链接” 但这对我来说太混乱了 我需要,这个urlhttp://test.com/?page=test&ID=1将成为http://test.com/test/NAMEFROMDATABASE 怎么做?我知道如何使用$\u get['ID']获取ID=1,但如何将数据库中的值放入url并读取 怎么做?我知道如何使用$_get['ID']获取ID=1,但如何将数据库中的值放入ur

如果我打扰了你们,我真的很抱歉,但这是关于.htaccess技巧的最后一个问题

我需要wordpress风格的“漂亮的永久链接”

但这对我来说太混乱了

我需要,这个url
http://test.com/?page=test&ID=1
将成为
http://test.com/test/NAMEFROMDATABASE

怎么做?我知道如何使用
$\u get['ID']
获取
ID=1
,但如何将数据库中的值放入url并读取

怎么做?我知道如何使用$_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($\u GET['id'])
我建议始终使用
mysql\u real\u escape\u string()
,因为它适用于所有值,而
intval
仅适用于整数。
在SQL中,引用数字从来都不是问题,所以养成总是引用所有内容的习惯。
这样你就不会犯错误

你可以永远做不到

$sql = "SELECT urlname FROM urls WHERE id = '{$_GET['id']}' ";
因为这是一个SQL注入安全漏洞

请参阅:





在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名称在数据库中是不同的。

您不能通过$\u get['ID']直接从此URL获取ID值:

您可以通过以下逻辑获取ID

  • 按类别名称创建链接。i、 e.如果你有分类笔记本电脑,那么创建链接,如

  • 在htaccess中编写重写代码。
    RewriteRule^category/(.*)$categories\.php?CNAME=$2&%{QUERY\u STRING}[L]

  • 在PHP代码中,从类别名称获取类别ID。
    $catName=$\u get['CNAME']
  • 按类别名称和类别ID创建链接。例如,如果您有类别笔记本电脑,则创建类似
  • 在htaccess中编写重写代码<代码>重写规则^category/(.*)-ID-([0-9]+)$categories\.php?ID=$2&%{QUERY\u STRING}[L]
  • 在PHP代码中,直接获取类别ID<代码>$catID=$\u GET['ID']

  • 为什么不这样做
    http://test.com/test/1/NAMEFROMDATABASE
    ,所以您的url中有ID,就像它们一样。这将帮助你做两件事:1。如果需要,将缩短URL。2.将使特定记录的查找变得简单和快速。我目前正在这样做:test.com/djs?djID=1原始url是test.com?page=djs&djID=1,但它不是频繁的搜索引擎优化,它会导致同一个djs页面的多个结果,另外我希望用户键入一个dj的名称,不是一个随机数,然后是dj名。你可以很容易地将该URL更改为
    test.com/djs/1
    。我知道,但这对我没有用,我想要test.com/djs/djname,因为它是搜索引擎优化,用户和其他人容易记住。但是从正确制作的数据库表中查找短页面名。。。用点智慧,伙计。。。然后你问。谢谢,但也许我不够清楚。我知道如何从url获取值并在数据库中查询它。我想做的是,将一个帖子ID转换成一个帖子名,例如?ID=1变成“randomname”,我只希望它是客户端,这样test/randomname将是test/ID=1谢谢,这就是我需要知道的全部。那么,您现在可以告诉我,如何将page=test&name=myname更改为test/myname。然后我将在数据库中查询它?它不是SQL!它是.htaccess,我现在将编写一些代码,但是如何重写URL,将test.com?page=x&ID=y转换为test.com/x/y@Dan关于逃跑,请听从你自己的建议。B:如果
    name
    是唯一的,您不需要
    limit 1
    C:
    select*
    是一种反模式,只选择您需要的字段。@Johan您是对的,但这里不是关于编写好的代码/sql的情况,而是关于htaccess的情况。我只是让代码更具描述性,避免键入太多,因为他自己的代码/sql会有所不同。我同意,如果不添加观察结果,我可以更好地键入:)对我来说,重写规则^djs/(.*)$index\.php?page=djs&djID=$1&%{QUERY_STRING}[L]将test.com/index.php?page=djs&djID=username转换为test.com/djs/username,$\u GET['djID']返回'username',没有问题。非常感谢,只有2美元对我不起作用,把它改成1美元效果很好。