我正在尝试创建一个基于URL路径显示结果的脚本。
例如,我可以使用example.com/A/B/C/D/
,example.com/A/B/C/
之类的网址一直到example.com/
。
下面的脚本可以很好地分解它。
$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] . '/';
显然,如果此人试图以不同的顺序输入值(字母),则不应找到结果并显示错误页面。
答案 0 :(得分:1)
使用数组元素计数生成路径。
if (count($array)) {
$sql = "SELECT * FROM table WHERE path LIKE '/" . implode($array, '/') . "/%'";
}
答案 1 :(得分:0)
更清晰的方法是为每个路径参数定义不同的REST调用。我会使用像飞行这样的PHP微框架来处理它。例如,如果未指定某些参数,则将其路由到下一个,依此类推。因此,它将能够处理不同的参数以及特定于param的数据库调用。通过这样做可以消除其他逻辑或任何歧义。
在此查看参考资料:
http://flightphp.com/learn#routing
检查传球机制。