显示基于URL路径的结果
问题描述:
我试图创建一个脚本,显示基于URL路径的结果。显示基于URL路径的结果
例如,我可以有一个URL,如example.com/A/B/C/D/
,example.com/A/B/C/
一直到example.com/
。
- A =年
- B =月
- C =日
- d =标题
下面的脚本不打碎它的一个好工作。
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$array = explode('/', $path);
数据库中的表有一个名为'path'的列。路径包含'/ A/B/C/D /'。难道还有比使用多个if/else语句来完成这个更简单的方法:
空路径(主页,限5个结果:
SELECT * FROM table ORDER BY post_date DESC LIMIT 5;
逐年搜索:
SELECT * FROM table WHERE path LIKE '/' . $array[1] . '/%';
通过搜索年和月
SELECT * FROM table WHERE path LIKE '/' . $array[1] . '/' . $array[2] . '/%';
按年和月和日搜索
SELECT * FROM table WHERE path LIKE '/' . $array[1] . '/' . $array[2] . '/' . $array[3] . '/%;
按年份和月份和日期和标题
SELECT * FROM table WHERE path LIKE '/' . $array[1] . '/' . $array[2] . '/' . $array[3] . '/' . $array[4] . '/';
显然,如果有人试图以不同的顺序,结果不应该被发现的错误页面,输入值(字母)搜索显示。
答
使用数组元素数生成您的路径。
if (count($array)) {
$sql = "SELECT * FROM table WHERE path LIKE '/" . implode($array, '/') . "/%'";
}
答
更清洁的方法是定义不同的REST调用每个路径参数的。我会使用像Flight这样的PHP微型框架来处理它。例如,如果某些参数没有被指定,那么它将被路由到下一个等等。因此它能够处理不同的params以及param特定的数据库调用。通过这样做可以消除逻辑或任何类型的歧义。
看看这里的参考:
http://flightphp.com/learn#routing
检查传递机制。
类似这样:'Flight :: route('/ *',function(){ //这将匹配/ 2000/02/01/title });' – user1052448
我不推荐使用通配符。重新定义你的api在路径中有一些关键字,这样可以区分资源以避免这个问题并清楚地分离路由。 – user3307291
这么坚持(@year(@month(@day(@title)))? – user1052448