显示基于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, '/') . "/%'"; 
} 

请参阅SQL Injection

更清洁的方法是定义不同的REST调用每个路径参数的。我会使用像Flight这样的PHP微型框架来处理它。例如,如果某些参数没有被指定,那么它将被路由到下一个等等。因此它能够处理不同的params以及param特定的数据库调用。通过这样做可以消除逻辑或任何类型的歧义。

看看这里的参考:

http://flightphp.com/learn#routing 

检查传递机制。

+0

类似这样:'Flight :: route('/ *',function(){ //这将匹配/ 2000/02/01/title });' – user1052448

+0

我不推荐使用通配符。重新定义你的api在路径中有一些关键字,这样可以区分资源以避免这个问题并清楚地分离路由。 – user3307291

+0

这么坚持(@year(@month(@day(@title)))? – user1052448