2015-10-26 2 views
1

Я пытаюсь создать сценарий, который отображает результаты на основе 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); 

В таблице в базе данных имеется столбец с названием «путь». Путь содержит '/ A/B/C/D /'. Есть более простой способ, чем использование нескольких, если/иначе для достижения этой цели:

Пустой путь (домашняя страница, ограничение 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] . '/'; 

Очевидно, что если человек пытается ввести значения (буквы) в другом порядке, результаты не должны быть найдены и страницу ошибки отображается ,

ответ

1

Используйте количество элементов массива, чтобы сгенерировать ваш путь.

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

Пожалуйста, см SQL Injection

0

Чем чище подход будет определять разный REST вызовов для каждого из Params пути. Я бы использовал php micro framework, такой как Flight, чтобы справиться с этим. Например, если какой-то параметр не указан, он будет перенаправлен на следующий и так далее. Таким образом, он сможет обрабатывать различные параметры вместе с вызовом базы данных с параметром. Делая это, можно было бы исключить, если иначе логика или какая-то двусмысленность.

Посмотрите здесь для справки:

http://flightphp.com/learn#routing 

Проверить прохождение механизм.

+0

Что-то вроде этого: 'Полет :: Маршрут ('/ *', функция() {// Это будет соответствовать/2000/02/01/название });' – user1052448

+0

я бы не рекомендовал использовать подстановочные. Переопределите свой api, чтобы иметь ключевое слово в пути, чтобы ресурс мог быть дифференцирован, чтобы избежать этой проблемы и четкой сегрегации маршрутов. – user3307291

+0

так придерживайтесь (@year (@month (@day (@title)))? – user1052448

Смежные вопросы