根据网址路径

时间:2015-10-26 18:15:57

标签: php parsing

我正在尝试创建一个基于URL路径显示结果的脚本。

例如,我可以使用example.com/A/B/C/D/example.com/A/B/C/之类的网址一直到example.com/

  • A =年
  • B =月
  • C = Day
  • 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] . '/';

显然,如果此人试图以不同的顺序输入值(字母),则不应找到结果并显示错误页面。

2 个答案:

答案 0 :(得分:1)

使用数组元素计数生成路径。

if (count($array)) {
  $sql = "SELECT * FROM table WHERE path LIKE '/" . implode($array, '/') . "/%'";
}

请参阅SQL Injection

答案 1 :(得分:0)

更清晰的方法是为每个路径参数定义不同的REST调用。我会使用像飞行这样的PHP微框架来处理它。例如,如果未指定某些参数,则将其路由到下一个,依此类推。因此,它将能够处理不同的参数以及特定于param的数据库调用。通过这样做可以消除其他逻辑或任何歧义。

在此查看参考资料:

http://flightphp.com/learn#routing

检查传球机制。