我正在练习创建CMS。我将所有网址请求设置为index.php
。我通过$path
变量获取请求数据。
的的.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L]
因此,我获取$path
上的数据,并对页面上的sql
数据发出echo
次请求。我的sql
表包含2列data
和url
。所以,我的代码是:
$sql = "SELECT * FROM post where url='" . $path . "'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
if(is_array($row)) {
echo $row["data"];
}
但问题在我创建类别时开始,我想我必须添加一个新列ctg
所以我做了。现在当我得到像localhost/php/how-to-make-a-page
这样的请求时,我认为我必须这样做像这样:
if (strpos($path, '/') !== false) {
$array = explode("/", $path);
$url = end($array);
$sql = "SELECT * FROM post where url='" . $url . "'";
}
但我对这个想法非常关心。因为localhost/php/how-to-make-a-page
和localhost/Anything/how-to-make-a-page
给了我相同的结果。请问有人可以解释处理这种类型的请求吗?
答案 0 :(得分:0)
我的建议是,你从一个易于学习的框架开始,它是如何“codeigneiter”,当你去记录时,你会理解什么是路线,控制器,模型等等。现在关于你的代码,你不是对类别进行分组,因为你应该有这样的语法,“category / php / how-to-make-a-page”和这样的查询:“SELECT * FROM post WHERE category =“php”AND url =“how-to-make-a-page”,php示例如下:
<?php
$parts_of_url = explode('/', $path);
if($parts_of_url[0] === 'category') {
$sql = "SELECT * FROM post where category_id= :category_id AND url= :url";
}
?>
在这里查看sql语句中的参数http://php.net/manual/en/pdostatement.bindparam.php
但我会坚持认为,如果你想要了解路线的工作原理,请查询数据库,驱动程序,表单验证。那么,你应该参考我之前提到的框架。