Привет всем. Только недавно начал осваивать PHP. Научился делать личные кабинеты, регистрации, куки, сессии, все вводы и выводы с БД. Написал сайтец на бутстрапе и парсер, который всю сохраняет в БД. Теперь стоит следующая задача: - формирование URL. Я не пойму, как происходит процесс формирования URL и кто или куда обращается, чтобы получить запрошенный URL, чтобы выдать его пользователю согласно запросу. Прошу объяснить нубу в общих чертах (желательно с реальными примерами). Возьмем реальный пример: Есть БД со следующей структурой - key, Title, Desc, Content Как сделать сгенерировать страничку, у которой URL будет следующий - https://mybestsite.ru/key Как организовать все это на сайте. Есть один путь в голове : 1. создать промежуточный файл (типа обработчик), который принимает key. 2. GET-oм передать параметр в обработчик. 3. Вывести данные из БД. Где - берем данные со строки, где key из get == key из БД Правильно мыслю ? Или есть более простые решения? Посоветуйте.
@atheroth Не знаю как все ответят но тебе может помочь get ссылка: PHP: $key = isset( $_GET['key '] ) ? $_GET['key '] : false; Правда описывать тяжело) главное может получится эта ссылка которую ты хочешь) Хотя вопрос поставлен не правильно я тебя может не понял, ты же сейчас спрашиваешь как сравнить ключ который пришел из базы?
@atheroth, гляньте тему https://php.ru/forum/threads/chpu.65838/ Выделили первый компонент пути и далее пытаетесь найти запись с соотв. слагом. Только не забудьте про защиту от SQL-инъекций, либо проверьте поступивший слаг на наличие недопустимых символов перед запросом.
Если я правильно Вас понял, то для начала нужно уйти от урла типа https://mybestsite.ru?key к https://mybestsite.ru/key. В этом Вам поможет файл .htaccess, который нужно положить в корень сайта. Его содержимое, как пример: Код (Text): <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)$ index.php?$1 </IfModule> Теперь урл-запрос к сайту вида мойсайт.ру?параметр_0&параметр_1&параметр_2 можно будет заменить на мойсайт.ру/параметр_0/параметр_1/параметр_2. Более детально про .htaccess - гугль в помощь. Едем дальше. Узнать значение нужного нам параметра (не значение гет-параметра, а его имя в нужном месте) можно, например, так: PHP: function par($nom = 0) { $pars = explode('/', $_SERVER['QUERY_STRING']); return isset($pars[$nom]) ? $pars[$nom] : null; } //... if (par() == 'параметр_0') { //... } if (par(1) == 'параметр_1') { //... } $key = (int)par(); Усложняем)) В Вашей таблице БД есть поле title, можно помочь поисковым механизмам парсить Ваш сайт более "уютно". Не просто в виде урла аля мойсайт.ру/987/, а, к примеру, тайтл страницы у Вас "В Одессе теплая погода", мы хотим получить доступ к странице в виде мойсайт.ру/987/V_Odesse_teplaya_pogoda/ Да простят меня гуру за (возможно) неоптимизированный код, но он у меня реально работает и уже сравнительно давно (вырвал из работающего проекта): Код (Text): function getTranslit($cyr) { $trans_rules = 'А>A,Б>B,В>V,Г>G,Д>D,Е>E,Ё>YO,Ж>ZH,З>Z,И>I,Й>J,К>K,Л>L,М>M,Н>N,О>O,П>P,Р>R,' . 'С>S,Т>T,У>U,Ф>F,Х>H,Ц>C,Ч>CH,Ш>Sh,Щ>CSH,Ъ>,Ы>Y,Ь>,Э>E,Ю>YU,Я>YA,а>a,б>b,' . 'в>v,г>g,д>d,е>e,ё>yo,ж>zh,з>z,и>i,й>j,к>k,л>l,м>m,н>n,о>o,п>p,р>r,с>s,т>t,' . 'у>u,ф>f,х>h,ц>c,ч>ch,ш>sh,щ>csh,ъ>,ы>y,ь>,э>e,ю>yu,я>ya,Є>YE,І>I,Ѓ>G,і>i,' . '№>#,є>ye,ѓ>g,№>#'; $trans_table = array(); $items = explode(',', $trans_rules); foreach($items as $item) { list($from, $into) = explode('>', $item); $trans_table[$from] = $into; } $tr = str_replace(array_keys($trans_table), array_values($trans_table), $cyr); $tr = str_replace(array('"', "'", "?", "&", "#", "\n", "<", ">"), "", $tr); $tr = str_replace(" ", "_", $tr); return $tr; } При получении запроса от клиента, Вы можете не только key (0 параметр) проверять, но и брать md5(key(1)) и сравнивать его с md5($data['title']) запрашиваемой страницы. Не совпадают - в топку) В общем, как-то так) Соберите все до кучи и да прибудет с Вами код праведный!))
Установи единую точку входа на сайт - файл index.php. Далее напиши роутер, примерно так: PHP: <?php $url = $_SERVER["REQUEST_URI"]; $urlarr = explode('/', $url); if(isset($urlarr[1]): $key = $urlarr[1]; /* делаем запрос к базе данных с ипользованием $key */ /* выводим страницу с полученными параметрами */ else: /* отображаем стартовую страницу */ endif; ?> А ещё лучше используй ООП.
1. ога. этот обработчик обычно называют "точка входа" 2. $_SERVER['REQUEST_URI'] идеально для этого подходит 3. ну это возможный вариант. а так-то, как правило, есть адреса, для которых в базе контент не хранят, зато для них есть отдельные обработчики — контроллеры. чтобы найти соответствие адрес => контроллер, придумали роутеры, то есть маршрутизаторы. маршруты, опять же как правило, описывают в отдельном файле конфигурации.