[英]Display results based on URL path
我正在尝试创建一个显示基于URL路径的结果的脚本。
例如,我可以像一个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);
数据库中的表具有称为“路径”的列。 该路径包含“ / 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注入
更干净的方法是为每个路径参数定义不同的REST调用。 我会使用像Flight这样的php微框架来处理它。 例如,如果未指定某些参数,则它将被路由到下一个,依此类推。 因此,它将能够处理不同的参数以及特定于参数的数据库调用。 这样可以消除逻辑或任何歧义。
请看这里供参考:
http://flightphp.com/learn#routing
检查传递机制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.